交叉编译Alpine Linux软件包

时间:2019-02-06 16:25:08

标签: cross-compiling alpine

我正在尝试在x86_64主机的armhf主机上重建Alpine软件包。据我所知,正确的方法是克隆https://github.com/alpinelinux/aports并运行scripts/bootstrap.sh armhf以创建一个chroot环境,然后该环境可用于交叉编译软件包。到目前为止,我已经:

  • ${HOME}/packages/main添加到了/etc/apk/repositories
  • 使用abuild-keygen -a
  • 创建了一个密钥
  • 使该密钥受cp ${HOME}/.abuild/*.pub /etc/apk/keys信任

但是引导脚本仍然失败,并显示以下信息:

c4a5a8fbf023:~/aports$ scripts/bootstrap.sh armhf
>>> bootstrap-armhf: Building cross-compiler
>>> binutils-armhf: Package is up to date
>>> gcc-armhf: abuild 3.2.0-r0
>>> gcc-armhf: Checking sanity of /home/builder/aports/main/gcc/APKBUILD...
>>> WARNING: gcc-armhf: g++ should not be in makedepends
>>> gcc-armhf: Analyzing dependencies...
ERROR: unsatisfiable constraints:
  .makedepends-gcc-armhf-0:
    masked in: cache
    satisfies: world[.makedepends-gcc-armhf]
  musl (missing):
    required by:
  musl-dev (missing):
    required by:
>>> ERROR: gcc-armhf: all failed
>>> gcc-armhf: Uninstalling dependencies...

muslmusl-dev是为armhf构建的软件包,位于${HOME}/packages/main/armhf中。

有人可以指出我正确的魔法来使它起作用吗?我错过了一些有关此的文档吗?

4 个答案:

答案 0 :(得分:0)

我有同样的错误,但是我通过执行以下步骤解决了它: 1. abuild-keygen -a,然后我将我的密钥保存为名称 mykey ,并将我的密钥(私有和公共)都保存在当前目录中。 2.然后只需将 mykey.pub 移至/ etc / apk / keys 3.然后通过CBUILDROOT=/path/to/buildroot ./scripts/bootstrap.sh armhf和其他方法构建交叉编译工具链,不要直接或手动创建CBUILDROOT,只需让引导脚本创建它即可。 让我知道您是否再次失败。

答案 1 :(得分:0)

当我遇到这个问题时,是因为我急于在设置程序包签名密钥之前运行了引导脚本。这意味着引导sysroot没有填充软件包签名密钥because the bootstrapper only copies it over on its initial run,这导致了上面显示的错误消息。手动将密钥复制到~/sysroot-armhf/etc/apk/keys中可以解决此问题。

答案 2 :(得分:0)

如果您有一个工作 abuild 环境,正确答案是@Golu 答案的最后一步:

CBUILDROOT=~/sysroot-armhf ~/aports/scripts/bootstrap.sh armhf

我仍然无法通过阅读源代码弄清楚为什么会这样。 CBUILDROOT 实际上是由脚本设置的。它确实包含一个尾随 /,我想这可能会导致问题。一旦过程开始,手动设置 CBUILDROOT 就不再需要了。无论如何,这对我有用,这就是为什么我要留下一个新答案。

答案 3 :(得分:-1)

abuild-keygen -a -i and install sudo