我的设置是这样的:我有两组为 amd64 (pc)和 armelx (ARM)编译的库。它们都用于在构建机器上交叉编译某些软件。
通过更新apt-repository并在构建计算机上使用apt-get install
,可以毫不费力地更新第一个(amd64)。但是ARM的软件包,我不想用apt安装,因为它不支持安装到不同的目录。如果我安装到默认目录,则版本无法共存。正确?
到目前为止,每次有新版本的软件包时,都会手动更新构建计算机,只需将dpkg -x
提取到专用的"假的" footfs 目录。这是编译器在交叉编译其他SW时也会看到的位置。问题是,在系统的任何地方都没有关于这些提取的软件包或其版本的信息,对吧?它应该位于状态文件中。
我的想法是将这些软件包安装在这个带有dpkg -i <package.deb> --root=<rootfs>
的footfs目录上。这会有用吗?我有一种感觉它不会,因为deb软件包没有post / pre-remove / install脚本,所以它可能以某种方式用于处女安装,但不适用于升级?此外, rootfs 目录结构必须具有哪些内容以及必须包含哪些才能使其首次运行?有没有工具来帮助解决这个问题?
感谢。
答案 0 :(得分:2)
一旦你有一个基础armel Debian系统,你实际上可以输入它并使用像QEMU之类的东西在其中运行armel代码。 qemu-arm-static
工具(在qemu-user-static
包中)可以利用Linux中的binfmt_misc功能来实现ARM可执行文件直接在QEMU ARM系统仿真器下运行。因此,当您在amd64硬件上运行时,您可以在armel“rootfs”内运行dpkg
,apt-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
首先设置base 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安装“规则”。为了使其工作合理可行,需要一些快捷方式/偏差。