使用 Raspbian 和 64 位内核,我从以下来源获取软件包:
deb [arch=armhf] http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free
尝试安装最小的依赖项来运行类似 gzip:arm64 的东西会报告冲突,例如:
libgcc1 : Breaks: libgcc1:arm64 (!= 1:6.3.0-18+rpi1+deb9u1) but 1:6.3.0-18+deb9u1 is to be installed
gcc-6-base:arm64 : Breaks: gcc-6-base (!= 6.3.0-18+deb9u1) but 6.3.0-18+rpi1+deb9u1 is to be installed
看起来“+rpi1” armhf包与非 rpi1 arm64包冲突。但这意味着它正在比较两种不同架构的包版本!
apt-get 的错误消息可能会产生误导,所以为了让我的系统进入类似于 bamarni 的 Debian Pi64(multiarch 工作的地方)的状态,我可以尝试从https://packages 等链接下载一些非 rpi1 armhf 包。 debian.org/stretch/armhf/libgcc1/download一旦我替换了 libgcc1:armhf、gcc-6-base:armhf、libc6:armhf、libatomic1:armhf 等,基本冲突就会消失,我可以安装 libgcc1:arm64 gcc-6 -base:arm64 libc6:arm64 通过 apt。但是,这不是一个很好的解决方案,因为在此过程中我可能失去了 ARMv6 兼容性和其他 Raspbian 特定的修改。
上述情况仍然可能意味着 Raspbian 包中还隐藏着一些可疑的东西。我的下一个测试是使用 Raspbian *.deb 文件,除了使用脚本我重新打包它们以删除+rpi1
每个控制文件中的版本文本部分。一旦我这样做并重新安装这些包,与 arm64 包的冲突就会消失。这再次表明 APT 正在比较两种不同架构的软件包版本。
当我apt-cache show
在其中任何一个上运行时,他们都会Multi-Arch: same
用正确的对应Architecture:
行说。据我了解,它只关心在Multi-Arch: foreign
or的情况下跨不同架构的版本Multi-Arch: allowed
。
这里发生了什么?似乎 APT 在不应该比较不同架构的包版本时,这会导致虚假冲突。我想知道 multiarch 在 bamarni 的 Pi64 或 Ubuntu MATE(或大多数 i386+x86_64 系统)上是否正常工作这一事实部分是幸运的,因为这些系统在 32 位和 64 位上具有通常一致的软件包版本。