用什么工具来构建Ubuntu/Debian软件包?

我最近一直在查看不同的教程和指南,了解如何构建软件包。而且似乎有很多方法可以选择。所以我对应该使用什么感到有些困惑。也就是说,我试图看到整个画面。有哪些工具存在?它们之间的关系是什么?哪些是其他工具的封装?哪些更适合做什么?比如,apt-get source主要面向用户而不是开发者,更好的替代方案可能是dget。还有哪些替代方案呢?例如pbuilder、pdebuild、pbuilder-dist、cowbuilder、sbuild、debuild、dpkg-buildpackage、fakeroot等等。还有很多我甚至不知道的工具。最常见的工作流程是什么?
2个回答

我所找到的信息是这样的。首先,有这个简短的描述,这是我在这里最常问的问题。
构建系统的核心是dpkg-buildpackages,它使用fakeroot,而fakeroot又运行debian/rules(一个makefile)来构建软件包。如果你只是要为你正在运行的版本构建一个内部使用的软件包,那可能就足够了。
然而,如果你想为debian/ubuntu做贡献,你至少需要使用debuild,它会运行lintian并签署文件。
如果你想针对不同的debian/ubuntu版本进行构建,你需要使用pbuilder,它可以在一个干净的环境中构建软件包,不会受到已安装软件包的影响,以查看实际的依赖关系。你可以考虑使用pbuilder-dist来进一步简化操作。

有一种叫做“pdebuild”的东西,据说是“pbuilder构建的方式”。我没有看到它运行“lintian”,但这可能与“pbuilder”不一致。

然后还有一个叫做“cowbuilder”的东西,如果你想加快软件包的构建速度(在“pbuilder”上的封装?)。还有一些从“git”存储库构建的工具,我还没有深入研究。

更新。在#debian-mentors频道上告诉我,“sbuild的行为与buildd相同,没有太多意外”,“pbuilder对实验性支持完全错误”,“另一方面,sbuild仍然缺少一些去除构建过程网络依赖的功能”,并且pbuilder没有维护。去除网络依赖是必要的,因为构建软件包不应该依赖于网络的存在,它们不应该下载任何内容。

schroot from experimental 据说能够隔离(解除共享)网络。


1对于链接到包装工具层次结构的+1,最近几天我对这个话题产生了一些兴趣。相比于我在pbuilder上看到的,cowbuilder似乎是最容易使用的工具。我已经在这个回答中总结了这些步骤:https://askubuntu.com/questions/548815/cannot-build-on-launchpad/716481#716481 。顺便说一下,你不需要直接处理任何chroot工具。sbuild / pbuilder会负责这方面的工作。 - user.dz

你并没有太多提及你的源环境。
如果它是开源的,并且只有一个项目(在`debian/`目录下的一个控制文件),那么https://launchpad.net是一个非常好的解决方案。基本上,你只需要把文件弄对,然后他们会处理剩下的事情。
对于我来说,弄对文件还有点神奇,即使现在也是如此,但有很多关于如何创建软件包的文档可供参考。你可以先从一个简单的能工作的示例开始,然后随着进展逐步添加其他选项和功能。这样你就不必一次学习所有细节了。