我有一个二进制文件,我想将其分发给我们的用户,并且它的大多数依赖项在构建期间都是静态链接的,但很少有像leveldb
这样的依赖项需要安装。这些依赖项是使用apt get install
命令安装的。
分发这个的最佳方式是什么?我的想法只是一个简单的 zip 文件存档,其中包含二进制文件,而不是使用 deb 或 docker,因为我觉得这是一种矫枉过正,但我如何“自动化”依赖项的安装?也许像这样的 bash 文件run.sh
包含apt get install
运行二进制文件之前的行,但是如何在安装依赖项之前检查依赖项是否不可用?
答案1
“最佳”方法是针对您的目标操作系统使用正确的打包系统。软件包的全部要点就是准确地执行您所描述的操作。制作 deb 或 rpm 或任何您希望用户安装的东西。
如果您坚持不这样做,那么另一种常见的方法是提供一个 tar.gz 文件(不是 zip!),其中包含二进制文件和一个名为 的脚本configure
。这些通常伴随着编译源代码的 Makefile,但在您的情况下,您可以简单地让配置脚本检查依赖项是否存在,并在需要时安装它们。既然你提到了apt get
,我假设你只针对 Debian 和 Debian 派生系统,在这种情况下,检查会很容易,因为你只需要dpkg
,所以你可以这样做:
dpkg -l | awk '$1=="ii" && $2=="leveldb"' >/dev/null || apt install leveldb
然而,所有这些感觉都是错误的:在基于 Debian 的系统上,用户期望一个 deb 文件,这就是程序的分发方式。