[Feelings & Sharing] 附加基础库additional-base-lib之第八版
Tofloor
poster avatar
enforcee
deepin
2023-08-17 19:41
Author

想不到吧,这个玩意现在出到八了
blush

在这个版本里几乎把代码重新写了一遍,现在又回到一个ablrun运行一切的状态了。更重要的是,这次开始,对不同的系统状态进行了单独兼容,只要不是特别旧的系统,现在能运行起来的应用比以前更多了,包括AppImage、electron等平台,现在都能运行了。

你可以在这里下载到符合你系统要求的软件包(deb或rpm):
https://gitee.com/deepin-community-store/additional-base-lib/releases/tag/abl-8-release1

星火商店用户不需要自己下载,稍等一会就有更新了。

关于这个软件有什么问题,都可以在楼下或者项目主页报告:https://gitee.com/deepin-community-store/additional-base-lib/

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-08-17 19:41
#1

like

Reply View the author
186******75
deepin
2023-08-18 02:25
#2

能写这基础的都是特别厉害的👍

Reply View the author
enforcee
deepin
2023-08-18 02:33
#3
186******75

能写这基础的都是特别厉害的👍

其实不是的啊

scream

只是包装了一下bubblewrap

Reply View the author
vivian_me
deepin testing team
2023-08-19 00:16
#4

感谢分享哦~

Reply View the author
Rubbish
deepin
2023-08-31 06:35
#5

版主大佬,我今天用你这个工具折腾了一下数位板驱动,然后发现几个可以改进的地方

首先是我看包里默认的libc版本比较高,所以我自己找了合适版本的libc-bin然后解包,但是通常deb或者rpm里都是带有目录结构的,而ablrun自带的是扁平的

然后ablrun我理解的是默认只会替换libc.so.6、ld-linux-x86_64.so.2、ldd这几个,再加上LD_LIBRARY_PATH添加了glibc的lib目录。这里就碰到问题了,libm还有其他许多glibc编译出的so应该也是需要替换的

所以一番碰壁后,我把这个脚本改了下,主要是在给定的一个root下面找libc的所有symlink,然后把symlink对应的实际文件映射到那些symlink下面,比如 --bind /usr/lib/x86_64-linux-gnu/additional-base-lib/libc_2_29/lib/x86_64-linux-gnu/ld-2.29.so /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

    prefix=/lib/x86_64-linux-gnu
    files=`ls $ABL_ROOT/$prefix`
    echo $files
    for file in $files
    do
        echo $file
        if [ -L $ABL_ROOT/$prefix/$file ]
        then
            real=`readlink -m $ABL_ROOT/$prefix/$file`
            echo $file'=>'$real
            binds+="--bind $real $prefix/$file "
            # echo binds=$binds
        fi
    done

    # echo $binds
    exec bwrap --dev-bind / / bwrap \
    --dev-bind / / \
    --bind ${ABL_ROOT}/lib/x86_64-linux-gnu/"ld-2.29.so" "$ABL_LD_SO_PATH" \
    $binds \
    --bind ${ABL_ROOT}/usr/bin/ldd /usr/bin/ldd \
    --setenv LD_LIBRARY_PATH "$ABL_LIBRARY_PATH" \
    --cap-add CAP_SYS_ADMIN \
    -- "$@"

目前的一个问题是Ubuntu、Debian等等的rpath啥的目录结构不同,要是解决了这个,应该就可以直接拿对应系统的deb包来支持多种版本了

Reply View the author
enforcee
deepin
2023-08-31 07:57
#6
Rubbish

版主大佬,我今天用你这个工具折腾了一下数位板驱动,然后发现几个可以改进的地方

首先是我看包里默认的libc版本比较高,所以我自己找了合适版本的libc-bin然后解包,但是通常deb或者rpm里都是带有目录结构的,而ablrun自带的是扁平的

然后ablrun我理解的是默认只会替换libc.so.6、ld-linux-x86_64.so.2、ldd这几个,再加上LD_LIBRARY_PATH添加了glibc的lib目录。这里就碰到问题了,libm还有其他许多glibc编译出的so应该也是需要替换的

所以一番碰壁后,我把这个脚本改了下,主要是在给定的一个root下面找libc的所有symlink,然后把symlink对应的实际文件映射到那些symlink下面,比如 --bind /usr/lib/x86_64-linux-gnu/additional-base-lib/libc_2_29/lib/x86_64-linux-gnu/ld-2.29.so /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

    prefix=/lib/x86_64-linux-gnu
    files=`ls $ABL_ROOT/$prefix`
    echo $files
    for file in $files
    do
        echo $file
        if [ -L $ABL_ROOT/$prefix/$file ]
        then
            real=`readlink -m $ABL_ROOT/$prefix/$file`
            echo $file'=>'$real
            binds+="--bind $real $prefix/$file "
            # echo binds=$binds
        fi
    done

    # echo $binds
    exec bwrap --dev-bind / / bwrap \
    --dev-bind / / \
    --bind ${ABL_ROOT}/lib/x86_64-linux-gnu/"ld-2.29.so" "$ABL_LD_SO_PATH" \
    $binds \
    --bind ${ABL_ROOT}/usr/bin/ldd /usr/bin/ldd \
    --setenv LD_LIBRARY_PATH "$ABL_LIBRARY_PATH" \
    --cap-add CAP_SYS_ADMIN \
    -- "$@"

目前的一个问题是Ubuntu、Debian等等的rpath啥的目录结构不同,要是解决了这个,应该就可以直接拿对应系统的deb包来支持多种版本了

在ld.so的动态库加载顺序里面LD_LIBRARY_PATH只低于写死在程序里面的DT_RPATH,而且这个特性已经被弃用了,现在应该是用DT_RUNPATH和DT_NEEDED共同决定,而且这一项的优先级是低于LD_LIBRARY_PATH环境变量的(可以阅读man ld.so)。所以在大多数情况时这样做已经足够了。其实确实有些程序,会在脚本里面覆盖掉LD_LIBRARY_PATH导致失效,我也考虑过要不要把所有库都挂载替换掉,但是总觉得不太干净。其实挂载libc.so才是比较无奈的,因为如果不这样做ld.so就不能运行(他俩是必须配套的)。ldd其实对于运行程序来说是无关紧要的,只是这个脚本在获取信息的时候很管用,而且我确实发现不同版本的有兼容问题。

第二个是glibc是向后兼容的,现在还没发现有必须要旧版本libc才能运行而新版本运行不了的程序,所以通常情况是只用最新版本就可以了。因此我没有做多版本共存的设计。debian的版本也不是很新,但是我认为用他的东西比较稳妥。如果需要更新版本的,也可以用我的自动打包脚本。

第三个是我自己研究过了不少发行版,其实同一套包管理系统的目录结构是没有差异的。比如说dpkg系,debian和ubuntu的目录结构是没有区别的,只是系统中可能有一些文件的包名不一样。debian的文件结构规范是一种,而rpm系是另一种(大体就是Linux基金会的LSB规范),其他arch、slackware等发行版又有微妙的区别,但是我自认为我制作的包能适应多数流行的dpkg和rpm发行版的要求。
yeah

很感谢你的关注,我也不很专业,主要就是提供一个想法,大家可以随意应用。关于这个程序有任何问题都可以拿来讨论。我暂时还不知道是不是很需要改,如果对你的困惑能描述地更清晰一些,或者把你需要运行的程序让我看看,我也许会改变主意。

Reply View the author
Rubbish
deepin
2023-09-10 06:24
#7
enforcee

在ld.so的动态库加载顺序里面LD_LIBRARY_PATH只低于写死在程序里面的DT_RPATH,而且这个特性已经被弃用了,现在应该是用DT_RUNPATH和DT_NEEDED共同决定,而且这一项的优先级是低于LD_LIBRARY_PATH环境变量的(可以阅读man ld.so)。所以在大多数情况时这样做已经足够了。其实确实有些程序,会在脚本里面覆盖掉LD_LIBRARY_PATH导致失效,我也考虑过要不要把所有库都挂载替换掉,但是总觉得不太干净。其实挂载libc.so才是比较无奈的,因为如果不这样做ld.so就不能运行(他俩是必须配套的)。ldd其实对于运行程序来说是无关紧要的,只是这个脚本在获取信息的时候很管用,而且我确实发现不同版本的有兼容问题。

第二个是glibc是向后兼容的,现在还没发现有必须要旧版本libc才能运行而新版本运行不了的程序,所以通常情况是只用最新版本就可以了。因此我没有做多版本共存的设计。debian的版本也不是很新,但是我认为用他的东西比较稳妥。如果需要更新版本的,也可以用我的自动打包脚本。

第三个是我自己研究过了不少发行版,其实同一套包管理系统的目录结构是没有差异的。比如说dpkg系,debian和ubuntu的目录结构是没有区别的,只是系统中可能有一些文件的包名不一样。debian的文件结构规范是一种,而rpm系是另一种(大体就是Linux基金会的LSB规范),其他arch、slackware等发行版又有微妙的区别,但是我自认为我制作的包能适应多数流行的dpkg和rpm发行版的要求。
yeah

很感谢你的关注,我也不很专业,主要就是提供一个想法,大家可以随意应用。关于这个程序有任何问题都可以拿来讨论。我暂时还不知道是不是很需要改,如果对你的困惑能描述地更清晰一些,或者把你需要运行的程序让我看看,我也许会改变主意。

论坛貌似没给我显示消息通知所以一直没看到XD

我看了你说的之后对动态装载的认识更加正确全面了,很同意你的想法kissing_heart

但是我这个程序确实跑着就很奇怪,ldd相应的elf显示是正确的(引用了LD_LIBRARY_PATH下的so),但直接运行就会去引用default path下面的so。

刚才我又看了下,确实是你说的那种情况,这个程序是个跨平台的外设驱动,运行脚本里会把LD_LIBRARY_PATH设置成自己的libs目录,所以libc就只会从default path找了

scream

Reply View the author
月夜残云
deepin
2024-07-12 15:25
#8

additional-base-lib_2.38-13-9_amd64.deb

root@YUN-PC:/# ablrun SecureCRT
SecureCRT: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

大佬DeepinV23RC2不能运行SecureCRT,求更新库。。。

我觉得网上的办法不靠谱,居然让我安装openssl1.1

https://bbs.deepin.org/post/274982

Reply View the author
enforcee
deepin
2024-07-12 15:47
#9
月夜残云

additional-base-lib_2.38-13-9_amd64.deb

root@YUN-PC:/# ablrun SecureCRT
SecureCRT: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

大佬DeepinV23RC2不能运行SecureCRT,求更新库。。。

我觉得网上的办法不靠谱,居然让我安装openssl1.1

https://bbs.deepin.org/post/274982

这个我觉得不涉及ablrun的

blush

如果系统软件源里有openssl-1.1或者libssl-1.1安装上就行了,没什么风险。如果系统软件源没有的话,不要安装来路不明的软件包,也别乱添加别的软件源。看看星火商店有没有这个软件,改用星火商店的版本就好了。

Reply View the author