3

我的设置是这样的:我有两组为amd64 (pc) 和armelx (ARM) 编译的库。它们都用于在构建机器上交叉编译某些软件。

第一个(amd64)可以通过更新 apt-repository 并apt-get install在构建机器上使用来轻松更新。但是 ARM 的软件包,我不想用 apt 安装,因为它不支持安装到不同的目录。如果我安装到默认目录,版本不能共存。正确的?

到目前为止,每次有新版本的软件包时,构建机器都会手动更新,只需将 with 解压缩dpkg -x到专用的“假” footfs目录即可。这是编译器在交叉编译其他软件时也会查看的地方。问题是,系统上的任何地方都没有关于这些提取包或其版本的信息,对吧?它应该在状态文件中。

我的想法是在这个 footfs 目录上安装这些包,并使用dpkg -i <package.deb> --root=<rootfs>. 这行得通吗?我感觉它不会,因为 deb 包没有 post/pre-remove/install 脚本,所以它可能以某种方式适用于处女安装,但不适用于升级?此外,rootfs目录结构必须是什么样的,它必须包含什么才能使其第一次工作?有没有工具可以帮助解决这个问题?

谢谢。

4

1 回答 1

3

一旦你有了一个基本的 armel Debian 系统,你就可以实际输入它并使用 QEMU 之类的东西在其中运行 armel 代码。该qemu-arm-static工具(在qemu-user-static软件包中)可以利用 Linux 中的binfmt_misc功能使其能够直接在 QEMU ARM 系统模拟器下运行 ARM 可执行文件。因此,您可以在 amd64 硬件上运行时在 armel“rootfs”内运行 、 等dpkgapt-get

例子:

my_arm_system=/mnt/arm_system
sudo cp /usr/bin/qemu-arm-static "$my_arm_system/usr/bin/"
sudo chroot "$my_arm_system" apt-get update
sudo chroot "$my_arm_system" apt-get install $somepkg
sudo chroot "$my_arm_system" /bin/bash

至于首先设置基本的 armel 系统: Debootstrap 是设置 Debian 基本系统的典型方法,无论是在 chroot 还是其他方式中。您可以使用它来安装不同架构的基础系统,但需要一些额外的步骤:

distro=jessie   # or whatever
echo "Debootstrap phase 1"
sudo mkdir "$my_arm_system"
sudo debootstrap --arch=armel --verbose --foreign "$distro" "$my_arm_system"
sudo cp /usr/bin/qemu-arm-static "$my_arm_system"/usr/bin/
echo "Debootstrap phase 2"
sudo chroot "$my_arm_system" /debootstrap/debootstrap --second-stage

Multistrap是另一个可能有用的工具。它旨在用于在不同架构的主机上设置一种架构的 Debian 环境,或者用于使用更复杂的 APT 源组合。它并不完美,因为它没有完全遵循所有 deb 安装“规则”。它需要一些捷径/偏差才能使其工作合理地成为可能。

于 2015-09-01T15:16:15.877 回答