从源代码构建 .deb 软件包,而无需安装它。

假设我有一个安装程序或源代码压缩包,用于安装某个我想要的程序(没有Debian软件包可用)。首先,我想要将其制作成一个.deb软件包,以便将来能够干净地卸载已安装的程序(参见从源代码构建的应用程序如何卸载如果我从源代码构建了一个软件包,如何完全卸载或删除?)。此外,使用软件包进行安装可以防止它覆盖其他软件包的文件,而如果您运行安装程序或sudo make install命令,则无法保证这一点。

Checkinstall

从阅读那里和其他地方的答案,我了解到通常的解决方案是使用checkinstall来构建软件包。不幸的是,似乎checkinstall无法阻止make install覆盖其他软件包的系统文件。例如,根据Reverting problems caused by checkinstall with gcc build

我使用sudo checkinstall -D make install从安装中创建了一个Debian软件包。

[...] 我使用Synaptic Package Manager将其删除。事实证明,[删除]由make install创建的checkinstall软件包试图删除安装过程接触到的每个文件,包括/lib64/libgcc_s.so等共享gcc库。

然后,我尝试告诉checkinstall在不安装的情况下构建软件包,希望绕过这个问题。我创建了一个虚拟的Makefile:
install:
    echo "Bogus" > /bin/qwertyuiop

并运行sudo checkinstall --install=no命令。尽管未安装该软件包,但文件/bin/qwertyuiop还是被创建了。
根据我的情况,我不信任安装程序/ make install不会覆盖系统文件,因此不能使用checkinstall
如何在不安装或触碰系统文件的情况下构建软件包呢?
是否有可能在fakechrooted debootstrap环境中运行Checkinstall来实现这一目标?最好是以普通用户而不是root身份进行构建,这样如果出错,就不会覆盖系统文件。
2个回答

你可能想尝试使用debuild将源代码转换为二进制(deb)文件。你需要像打包一样准备debian文件夹。一旦准备就绪,从源代码目录内运行命令debuild -b,它会为你创建一个deb文件。
你还可以参考Debian打包入门
如果所有这些都是疯狂的事情,你只能将就着使用checkinstall去搞乱系统文件。

我在一篇名为《使用Checkinstall从源代码构建软件包》的Linux Journal文章中找到了一个答案

如果你只想创建.deb文件而不进行安装,请使用命令行选项

sudo checkinstall --install=no