Mir*_*ral 5 debian apt cross-compilation multiarch
我在 amd64 机器上有一个 qemu-armhf chroot 环境(主要用于编译 Raspberry Pi 代码)。因此,它可以运行 armhf 和 amd64 二进制文件,但后者速度更快。
为了获得更好的速度,我在 chroot 中安装了某些软件包(例如 make)的 amd64 版本。这工作得很好,直到我需要 apt-get 一些其他的 armhf 包,并且它恰好将 make 列为依赖项,于是我得到了这个:
The following packages have unmet dependencies:
build-essential : Depends: make but it is not going to be installed
dpkg-dev : Depends: make but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Run Code Online (Sandbox Code Playgroud)
如果我尝试建议的命令,那么它会说它想要安装make:armhf
和卸载make:amd64
。我不希望它这样做。我如何告诉 APTmake:armhf
已经安装(因为我希望用它make:amd64
来满足依赖关系)而不实际安装它?
我尝试使用,apt-mark manual make
但它说它没有安装。
我知道这可能不是正确的方法,但我一直在查看该/var/lib/dpkg/status
文件,试图弄清楚它认为包定义是如何工作的,并尝试欺骗它同意 make:amd64 满足 make:也有armhf。
我特别注意到“libbz2-1.0”是一个被列为已安装两次的软件包;曾经作为:
Architecture: armhf
Multi-Arch: same
Pre-Depends: multiarch-support
Run Code Online (Sandbox Code Playgroud)
并一度为:
Architecture: amd64
Multi-Arch: foreign
Pre-Depends: multiarch-support
Run Code Online (Sandbox Code Playgroud)
因此,我尝试类似地复制“make”的条目,设置上面的所有这些值。但现在APT只是说“make”和“make:amd64”是冲突的。为什么make的时候有冲突,而libbz2-1.0的时候却没有冲突?(我希望这不是特殊情况下的库;这看起来应该是一个错误。)
根据这个答案,我尝试构建一个虚拟包并equivs
安装它(在删除上面的手动摆弄之后),但是安装它会产生以下错误:
# dpkg -i /var/cache/apt/archives/make_3.81-8.2_amd64.deb (real amd64 make)
# dpkg -i make_3.81-8.2_armhf.deb (fake armhf depends on the above)
Preparing to replace make 3.81-8.2 (using make_3.81-8.2_armhf.deb) ...
Unpacking replacement make ...
dpkg: dependency problems prevent configuration of make:
make depends on make:amd64 (= 3.81-8.2).
Run Code Online (Sandbox Code Playgroud)
因此,问题再次看起来像是认为 make:armhf 是make:amd64 的替代品,而且我不知道如何告诉它我希望这两个包共存。(例如,两个 libbz2 包共存的想法似乎没有问题。)
我还没有玩过太多多体系结构系统,所以很可能有比我在这里提出的更好的方法。我还没有测试我的提议,我不确定它是否不违背多架构的某些特性。
equivs-control make.control
Package: make
、Architecture: armhf
、Depends: make:amd64
和Multi-Arch: foreign
。您可能还想设置Version
为匹配 amd64 make 版本。equivs-build make.control
如果这不能满足 dpkg,另一种可行但不太方便的方法是不在 chroot 内安装 amd64 make,而是使主机根在 chroot 内可用(使用绑定挂载,请参阅提供 /bin 和例如,chroot 监狱内的 /lib),或者至少是make
二进制文件及其依赖项(其中make
只是 libc)。将安装二进制文件的目录添加到 PATH 中。如上所述创建一个虚拟包,但只需声明make
已安装,不要放置任何Depends
或Multi-Arch
标头。
归档时间: |
|
查看次数: |
1775 次 |
最近记录: |