[software development] 【不知有什么用的】AppImage缩减工具
Tofloor
poster avatar
enforcee
deepin
2023-07-30 00:58
Author

这是一个bash脚本(不兼容posix sh),能搜查出AppImage自带的和系统提供的动态库中相重复的,清除然后重新创建AppImage,可能比起原本的AppImage体积会缩小一些(根据系统环境的不同,缩小的程度也会有差异,也可能完全没有变化,这也是没有办法的事情)。

当然有人可能会说,AppImage设计的目标就是为了能在差异的系统上运行,这么做不是又重新依靠系统库,丧失了AppImage的优势吗?当然这种看法是完全正确的,我自己也是这么认为。但是不能忽视的是,AppImage和理想中的完美应用分发还存在着差距。其一便是AppImage没有强势的规则约束,打包的质量不一,实际使用时仍然会遇到传统包的各种依赖问题(缺失库、内部库和系统库版本不兼容、glibc问题都存在,这么看相当于完全没有解决任何问题)。其二是不能自动更新,每次下载新版本需要的流量太大。(而隔壁flatpak由于固定的runtime和增量更新规避了这两个问题,但是消耗磁盘空间简直可怕。)但是AppImage仍然有相当的优势,就是发布方便、不结合包管理器、无需弄乱系统。我不是来解决AppImage的问题的(我也没那个水准),不过我也构思了一些发挥AppImage现有优势,增加使用体验的小道具:

其一是动态库诊断工具,检测AppImage的依赖问题再用相应的办法解决。手动解决问题的方法我在之前的文章中已经毫无保留地传授给各位坛友了,而也许可以做一个更方便的工具自动建议用户解决问题的方法。

其二是AppImage缩减工具,清除不需要的动态库。减小体积占用。

其三是依赖固定工具,自动探索AppImage所需的系统动态库及其包名,然后自动生成一个写好依赖的空deb软件包安装到系统,防止依赖包被移除。

其四是AppImage合并工具,把多个AppImage合并成一个,我想这样由于squashfs的特性,没准体积会更小一些。另外可以把AppImage的挂载和运行分开,减少挂载和进程的数量。更重要的是基于以上的各种工具,可以建设一套以AppImage为媒介、与操作系统更融合但是又不会影响系统重要功能的包管理模式。他采用通用的AppImage作为「安装包」,但是又自动对每个独特的操作系统做优化,另一方面对于特别依赖AppImage的用户还能缩减磁盘占用、减少性能消耗、并且规避一些问题。

不过这些东西我是不会做的。
blush

毕竟从想法到现实的过程是漫长的,而构思才只是最简单的一步。如果有人喜欢尝试的话,也许这是一个很有趣的实践。我写的这个脚本,其中包含的一些方法可能会给你一些启发。而也有可能在我没能想到的地方,这个脚本会发挥一些作用。总之,我把作品传上来,怎样利用就全靠大家的想法了。(另外我决定使用GNU GPLv3,请遵守相关要求。)

使用方法:请解压出来脚本文件,再下载一个AppImage官方工具appimagetool-x86_64.AppImage(可以在这里下载:https://github.com/AppImage/AppImageKit/releases/continuous),请给两个文件都赋予可执行权限,并放到同一个目录中。
然后对你想缩减的AppImage文件(也可以是AppDir,就是AppImage提取出来的目录),作为脚本的第一个参数即可。如果没有问题的话,会在当前工作目录下生成一个新的AppImage文件。

注意事项:

  1. 缩减后的AppImage不再适合分发。
  2. 不适合滚动发行版。因为系统库改变可能会影响AppImage的运行。
  3. 如果AppImage本身就是运行不起来的,也不要用这个工具。
  4. 如果AppImage需要我的additional-base-lib执行,你可以用sudo ablrun 添加到脚本前面来让脚本正常运行。生成的AppImage可能也需要ablrun才能运行。
  5. 脚本可能存在缺陷,请为自己的系统和数据安全负责。
  6. 需要的依赖有bash、coreutils、findutils、grep、libc-bin。通常的系统都已经自带了。
  7. 生成的AppImage也有可能运行不了,这我也没办法。

下载:
appimage-reduce.sh.zip

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-07-30 01:13
#1

感谢前辈分享

Reply View the author
神末shenmo
deepin
Spark-App
2023-07-30 02:44
#2

这个东西...是不是也可以用来做书虫容器的精简?

https://gitee.com/deepin-community-store/bookworm-compatibility-mode/

目前书虫容器单包体积比较大还是不太好解决的,如果可以这样的话...

Reply View the author
doodo
deepin
2023-07-30 06:04
#3
It has been deleted!
W2J
deepin
2023-07-30 08:47
#4

其三是依赖固定工具,自动探索AppImage所需的系统动态库及其包名,然后自动生成一个写好依赖的空deb软件包安装到系统,防止依赖包被移除。

如果实现了这个,完美MATE依赖包,应用商店就能启用DIY安装appimage模式了吧

Reply View the author