【问题标题】:Instaling cross-compiled debian packages to fake "footfs" with dpkg使用 dpkg 安装交叉编译 debian 包以伪造“rootfs”
【发布时间】:2015-09-01 06:19:37
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 我现在意识到这可能更适合 superuser 论坛...

标签: deb dpkg rootfs


【解决方案1】:

一旦你有了一个基本的 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 安装“规则”。它需要一些捷径/偏差才能使其工作合理地成为可能。

【讨论】:

  • 感谢您提供的信息,但这并不是我想要的。也许我的问题不清楚,很难优雅地解释整个设置。随着我深入挖掘,我的问题发生了几次。当我问这个问题时,我刚开始解决问题,但现在我已经进入了一周。我不是唯一一个在这个项目上工作的人,对更改的内容和方式有一些限制。
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2018-12-05
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多