Linux: General Packaging

 20th August 2020 at 2:19pm

在 Linux 平台上分享软件时,你可能需要一些类似 Windows 上安装程序、WinRAR / WinZip 自解压安装包等机制。这个安装包需要实现:

  • 用户可以运行
  • 运行时可以解压出其他文件,并运行安装、初始化脚本

Makeself

megastep/makeself 是一个 bash 脚本,用来生成上述功能的脚本。功能强大,而且有 nvidai、Virtualbox 在使用。

AppImage

AppImage 的思路不太一样,是直接把程序打包成一个单独的可执行文件。具体机制没有仔细了解过。

自制脚本

大多数时候你不需要自制脚本,直接用 Makeself 搞定。如果你想自己写脚本,参考下 Miniconda 的安装包。主要要考虑几点:

  • 做基础的内容校验,比如脚本运行时:
    • 判断自身的文件长度是否正确,防用户只下载了一半,或者内容被窜改
    • 判断脚本中所附带的可执行文件是否被窜改,可以通过 MD5
    • 对运行环境做判断,比如你的脚本如果依赖 tar,那你要判断下 tar 在用户的环境里面有没有