在 i386 机器上为 amd64 编译 debian 包?

在 i386 机器上为 amd64 编译 debian 包?

我有一台 i386 ubuntu hardy 机器和一台 amd64 ubuntu hardy 机器。我想在 i386 上为 amd64 机器编译一个 debian 包(又名 deb)(因为我没有足够的内存在 amd64 机器上快速编译)。如果我在 i386 机器上执行dpkg-buildpackage,它会生成一个 i386 的 deb,而它无法安装在 amd64 机器上。有没有办法在 i386 机器上为 amd64 编译 deb?

答案1

因此,有一些解决方案:

  • 设置交叉编译工具链并使用常规dpkg-buildpackage方法构建包。问题是创建工具链不太简单
  • 在 64 位机器上使用 32 位 chroot 来编译内容。显然这是最推荐的方法。这篇博文有一个内核编译的示例,但对于任何其他软件来说,它都是相同的过程。

答案2

尝试进行交叉编译可能得不偿失。有多种方法可以在 32 位上模拟 64 位系统,但您需要付出性能代价。

如果你只做一点,那么我建议在亚马逊上启动一台 64 位机器几个小时。如果你经常这样做,那么也许可以买一些 64 位硬件,或者 AWS 仍然很有趣,因为你只需按使用量付费,而且你可以在需要时启动构建农场。

这可能会给你一些有用的想法: http://blog.fwbuilder.org/2009/05/building-ubuntu-deb-packages-on-amazon.html

这个针对各种架构和版本的 Debian 系统映像列表可能也很有用: https://wiki.debian.org/Cloud/AmazonEC2Image

答案3

我在 Debian 上经常做的一件事是,在我的普通系统中使用 64 位内核和 32 位用户空间,然后创建一个带有 64 位用户空间的 chroot 来构建 amd64 软件包。Ubuntu 中的内核软件包结构有点不同,所以我不知道这是否可行或是否值得推荐。

除此之外,最干净的解决方案是使用虚拟机。QEMU 是显而易见的选择,因为它可以在任何东西上模拟任何东西(而且它是免费的)。您可以使用 qemubuilder(在 Ubuntu 中打包)将构建与 pbuilder 集成。根据我的经验,这可能有点难以设置,但如果您需要重复执行此操作,这可能是值得的。对于一些软件包,只需启动 QEMU 并手动登录即可。

如果您很有冒险精神,也可以尝试交叉编译,但这可能要困难得多,并且不适用于所有软件包。查找 dpkg-cross 开始。

或者您可以在 Launchpad 上创建个人软件包存档(PPA)并让您的软件包在那里自动构建。

相关内容