在其他发行版上构建 .deb Debian 软件包

Building a .deb Debian package on other distributions

我需要创建一个 Debian 软件包。使用 dpkg 很容易,效果很好。但是由于我无法控制的原因,我必须切换到 RHEL5 环境进行构建,所以 dpkg 不可用。

我最好的攻击策略是什么?这些是我的想法:

TLDR 以下最佳答案:在 Docker 容器中构建。谢谢,贾科莫。

这取决于你在做什么。

如果您正在构建一个“二进制”包(特定于体系结构的二进制),您需要一个类似于目标环境的环境(例如库等)。但是,如果您正在构建一个独立于体系结构的包,这可能会更容易(例如,仅由 Python 代码或其他解释器制作的 Python 库)。

无论如何,如果你不能测试它(并且做正确的自动测试),输出需要被认为是垃圾。请勿分发。

作为 Debian 开发人员,我们在干净的环境中构建包,无论是虚拟 machine/docker 还是 chroot 环境(但所有基础包也是如此)。这确实有助于找到正确的依赖项,而且还可以进行 install/deinstall 测试(使用 piuparts)等。这在 10 年前就已经完成了,所以现在要容易得多。只需安装一个最小的 docker 映像来构建 Debian 软件包,然后使用它。然后安装另一个(更标准的)并在“真正的”Debian 环境中测试您的包。 Debian 打包文档应该有这方面的信息(参见 https://wiki.debian.org/PackagingWithDocker ,只是你应该更改第一部分:在 RH 上安装 docker,但这应该是微不足道的:docker 在 RH 上是相同的或 Debian(或 Windows 或 Mac,但这里可能没有 bash shell,因此如何调用 docker 也可能会改变)。

如果您从未构建过 .deb,您必须至少拥有一个环境。打包操作可能很繁琐(许多源代码不允许在自定义目录上安装二进制文件)。

注意:在过去,您可能会混合使用第二个和第三个解决方案。您可以手动构建软件包(它们只是 ar 文件,RH 而不是使用 cpio 存档格式),而且 Debian 的主要工具是脚本(主要是 Perl)。您应该只找到一些其他工具(例如 fakeroot,您可能已经发现它是二进制的,或者您应该构建它)。在任何情况下,从源代码构建此类工具都不是那么复杂(它们不是巨大的“现代”包,它们只是非常小的工具,几乎没有依赖项)。