[Feelings & Sharing] 附加基础库additional-base-lib之第六版+移植指南
Tofloor
poster avatar
enforcee
deepin
2023-06-30 05:43
Author

这是我自己做的一个小工具,使用轻量级容器工具bubblewrap解决常见的glibc不兼容的问题。

这一版本修改了结构,现在用 ablrun可以自动检测运行通常的可执行文件或appimage。另外用了一个更高级的黑魔法替代原来的,现在appimage运行不需要创建临时文件了。

下载地址、使用方法和注意事项请见原帖。已经安装之前版本的可以直接按照同样的方法覆盖安装。

https://bbs.deepin.org/zh/post/256555

如果有任何使用疑问,改进建议,缺陷报告,和其他需要的库等可以给我留言。如果大家能分享一些使用案例,有助于我完善这个微小但管用的工程。我现在对这个项目还是比较满意的,希望各位坛友能把这个工具的使用分享给更多人。

现在有一些坛友报告说这个东西能帮上很多忙,我做这个项目本身也是为了防止大家再因为glibc弄坏系统,不过可能v23正式版以后,glibc版本够新,这个项目就用不太上了。然而他在其他系统上没准有用,如果大家希望我把additional-base-lib移植到其他发行版上,可以给我留言。或者,大家可以自己去做,我简单写了一点注解,也许能帮到大家。

blush


关于这个项目的内容,以及修改和移植的简单指引,给大家节约一点时间,也没什么专利,大家今后可以自己设计类似的东西,我相信一般有技术的爱好者都能处理得了:

这个项目包含内容有两部分,各种库文件和几个运行脚本。在我的软件包中,只包含了glibc(包括动态库链接器ld.so和多个动态库,都是从一个包中解压出来的)和libstdc++(只有一个动态库,是gcc工程的一部分,因为比较常用才附带了)。这些动态库可以从各个发行版的软件源中下载、解压就可以了。大家可以按自己的需要打包进去更多动态库,而且通常不用再修改脚本了。各种文件存放的位置是/usr/lib/x86_64-linux-gnu/additional-base-lib,但是大家应该根据各个发行版的设计来选择适当的目录。比如说因为debian支持多个指令集和内核,所以有x86_64-linux-gnu这个目录用来存放适合某个指令集和内核的动态库,但是某些发行版没有这些考量,那么就只需要在/usr/lib/additional-base-lib即可。

另一个注意事项是,如果解压出来的动态库是用链接文件的,为了简单,建议大家把链接文件删掉,然后把实际的动态库重命名成链接的名字。(比如说有的系统libc.so.6是指向一个带版本号的动态库文件,那么就把这个libc.so.6这个链接删掉,然后把那个文件重命名成libc.so.6。)

这个版本中一共有三个运行脚本,存放位置是/usr/bin/:

ablrun的功能是判断文件类型是不是appimage,然后分别交给另外两个脚本处理(这个脚本比较简单,大家都能看懂)。

ablrun-normal是实际执行的脚本,核心就是bwrap的命令。其实大家从命令上可以看出,实际上只需要替换两个文件:最重要的库libc.so.6和动态库链接器ld.so就能解决最核心的glibc问题,而其他动态库都只需要修改动态库查找位置(LD_LIBRARY_PATH)就能正确加载了。(所以我之前说,再打包进去更多动态库也无需修改脚本。)而此外我打包了一个ldd脚本,这个是常用的分析动态库加载情况的命令,只是因为新版的ld.so和旧版的脚本不兼容才做的,实际上如果不打包他也不会影响其他程序的运行。

因为bwrap是不能对链接文件直接做bind操作,所以我在之前添加了查找链接目标的命令,然后用bind操作对链接目标使用。此外就是在这个脚本中使用了一些写死的文件位置,如果大家要移植的话,要根据实际情况修改。

ablrun-appimage是专用执行appimage的脚本。由于一些机制原因,bwrap不能运行带有挂载操作或者沙箱功能的程序(除非使用root权限,那就丧失了bwrap不需要特权运行的优势)。不过我用了一些黑魔法让appimage可以运行。简单介绍就是:用协程运行appimage内置选项--appimage-mount仅挂载模式(他会输出挂载的位置,然后一直保持运行状态,退出的时候才会卸载),然后用read命令把挂载位置读出来,然后再用ablrun-normal运行这个目录里面的AppRun,脚本退出时终止前面的协程。

我暂时是使用bash来编写的这些脚本,如果想用其他shell运行,也许需要修改一些内容,我还没有试过。除了上面所提到的内容,想要移植的话,脚本大部分是不用修改的。

最后是打包的问题,版本号我自己是采用了「glibc版本-脚本修改次数」的方法命名的,如果大家移植了这个程序的话,大家可以自己想办法和我做的原版区分开来,减少混淆。大家应该在打包的时候把维护者的名字改成自己的。依赖项中,bwrap是核心的容器应用,bash和coreutils是脚本的解释器和命令工具,shared-mime-info和xdg-utils是判断appimage文件类型用的。移植到其他平台的话,需要对照着修改。最后的最后,虽然我自己没有采用任何许可证限制,但是我还是希望大家不要忘了原作者。我不像其他坛友那么专业,只有这么一个寥寥几行shell代码的小项目,很感谢大家的喜欢。

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-06-30 05:52
#1

like

Reply View the author
fax928
deepin
2023-06-30 06:33
#2

kissing_heart666

话说星火商店上传要求.desktop文件里加上ablrun和添加additional-base-lib这个需要依赖。

Reply View the author
enforcee
deepin
2023-06-30 07:00
#3
fax928

kissing_heart666

话说星火商店上传要求.desktop文件里加上ablrun和添加additional-base-lib这个需要依赖。

呃,是这样要求吗

scream

其实我不建议什么东西都用ablrun,因为这个除了兼容glibc外没有任何别的功能,况且并不是所有应用都能运行起来

Reply View the author
神末shenmo
deepin
Spark-App
2023-06-30 07:10
#4
enforcee

呃,是这样要求吗

scream

其实我不建议什么东西都用ablrun,因为这个除了兼容glibc外没有任何别的功能,况且并不是所有应用都能运行起来

是这样,他的软件是在deepin 23上编译的,不加只能在23用

Reply View the author
神末shenmo
deepin
Spark-App
2023-06-30 07:11
#5

ablrun非常有用,很期待你的后续作品

要加入星火开发大家庭吗?

Reply View the author
enforcee
deepin
2023-06-30 07:20
#6
神末shenmo

ablrun非常有用,很期待你的后续作品

要加入星火开发大家庭吗?

好啊

blush

Reply View the author
gfdgd_xi
deepin
Ecological co-builder
2023-06-30 07:28
#7


like
可以考虑出个 arm 版,毕竟uos专业版的glibc,都懂joy

Reply View the author
enforcee
deepin
2023-06-30 07:42
#8
gfdgd_xi


like
可以考虑出个 arm 版,毕竟uos专业版的glibc,都懂joy

如果有人能援助我个设备的话没准可以

blush

不过现阶段的话只得麻烦其他热心坛友啦

Reply View the author
神末shenmo
deepin
Spark-App
2023-06-30 08:26
#9
gfdgd_xi


like
可以考虑出个 arm 版,毕竟uos专业版的glibc,都懂joy

你应该可以直接照着文件列表去找233333

Reply View the author
神末shenmo
deepin
Spark-App
2023-06-30 08:27
#10
enforcee

好啊

blush

加一下星火交流群,踹我,我拉你

Reply View the author
gfdgd_xi
deepin
Ecological co-builder
2023-06-30 14:25
#11
enforcee

如果有人能援助我个设备的话没准可以

blush

不过现阶段的话只得麻烦其他热心坛友啦

可以试一下用qemu

Reply View the author
gfdgd_xi
deepin
Ecological co-builder
2023-06-30 14:25
#12
神末shenmo

你应该可以直接照着文件列表去找233333

确实

Reply View the author
enforcee
deepin
2023-06-30 19:14
#13
神末shenmo

加一下星火交流群,踹我,我拉你

不会加啊

scream

Reply View the author
神末shenmo
deepin
Spark-App
2023-06-30 19:52
#14
enforcee

不会加啊

scream

https://blog.shenmo.tech/post/%E6%95%85%E9%9A%9C%E5%85%AC%E5%91%8A/

Reply View the author
babyfengfjx
Super Moderator
CQA
2023-07-01 00:58
#15

很牛皮~

Reply View the author