如何交叉构建 Debian 软件包

tsh*_*ang 10 debian cross-compilation deb

我想在 amd64 机器上构建一个 armhf 包。我的 armhf 机器比 amd64 机器慢很多。

tsh*_*ang 8

我们首先必须设置多架构环境(更多信息):

sudo dpkg --add-architecture armhf
sudo apt update
Run Code Online (Sandbox Code Playgroud)

下载源码包(以less为例):

apt-get source less
Run Code Online (Sandbox Code Playgroud)

导航到目录,最后构建包:

cd less-458
dpkg-buildpackage -us -uc -b --host-arch armhf
Run Code Online (Sandbox Code Playgroud)

上面命令中的特殊标志是--host-arch. 其他标志的意思是:

  • 我们不签署源包
  • 我们没有签署 .changes 文件
  • 我们正在做一个仅限二进制的构建

这 3 个仅与构建公共存储库的人员相关,例如 Debian 开发人员/维护人员。

  • 你可能想看看`sbuild`,我发现它更适合交叉构建。它还避免了必须向您的开发系统添加外部架构... (2认同)
  • 请注意,可以使用 `debuild` 代替 `dpkg-buildpackage`,以便为构建提供经过消毒的环境。但在这种情况下,必须使用 `-a<arch>`(`-a` 和它的值之间没有空格)而不是 `--host-arch <arch>`。我刚刚报告了以下错误:[#898706 - devscripts: debuild dpkg-buildpackage 选项支持有问题或没有正确记录](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug =898706)。 (2认同)

tsh*_*ang 5

如果你更关心方便而不是速度,你可以使用下面的方法,它使用qemu来模拟一个 ARM 系统。

安装获得我们需要的工具的包pbuilder-dist

sudo apt install ubuntu-dev-tools
Run Code Online (Sandbox Code Playgroud)

以下命令创建一个 chroot 来构建,并创建它的 tarball(在本例中为 armhf 架构的 Debian 8 系统):

pbuilder-dist jessie armhf create
Run Code Online (Sandbox Code Playgroud)

获取一些包的来源:

apt-get source bb
Run Code Online (Sandbox Code Playgroud)

构建包:

pbuilder-dist jessie armhf bb_1.3rc1-8.3.dsc
Run Code Online (Sandbox Code Playgroud)

这在我的机器上花费了大约 370 秒,在我构建的 ARM 系统上花费了大约 250 秒。