在其他发行版上构建 .deb Debian 软件包
Building a .deb Debian package on other distributions
我需要创建一个 Debian 软件包。使用 dpkg 很容易,效果很好。但是由于我无法控制的原因,我必须切换到 RHEL5 环境进行构建,所以 dpkg 不可用。
我最好的攻击策略是什么?这些是我的想法:
- 想法:获取 dpkg 二进制文件并包含在源代码中。 问题:我真的不知道那意味着什么。
- 想法:寻找合适的工具在其他发行版上创建 .deb。 问题:搜索失败。
- 想法:构建它并手动压缩它。 (重塑 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
,您可能已经发现它是二进制的,或者您应该构建它)。在任何情况下,从源代码构建此类工具都不是那么复杂(它们不是巨大的“现代”包,它们只是非常小的工具,几乎没有依赖项)。
我需要创建一个 Debian 软件包。使用 dpkg 很容易,效果很好。但是由于我无法控制的原因,我必须切换到 RHEL5 环境进行构建,所以 dpkg 不可用。
我最好的攻击策略是什么?这些是我的想法:
- 想法:获取 dpkg 二进制文件并包含在源代码中。 问题:我真的不知道那意味着什么。
- 想法:寻找合适的工具在其他发行版上创建 .deb。 问题:搜索失败。
- 想法:构建它并手动压缩它。 (重塑 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
,您可能已经发现它是二进制的,或者您应该构建它)。在任何情况下,从源代码构建此类工具都不是那么复杂(它们不是巨大的“现代”包,它们只是非常小的工具,几乎没有依赖项)。