即使使用多架构,APT 版本也会在不同架构之间发生冲突:相同吗?

即使使用多架构,APT 版本也会在不同架构之间发生冲突:相同吗?

使用 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”臂氢夫软件包与非 rpi1 冲突ARM64包。但这意味着它正在比较包版本跨越两种不同的架构!

无论如何,apt-get 的错误消息可能会产生误导,因此为了使我的系统进入类似于 bamarni 的 Debian Pi64(多架构工作)的状态,我可以尝试从以下链接下载一些非 rpi1 armhf 软件包https://packages.debian.org/stretch/armhf/libgcc1/download一旦我替换了 libgcc1:armhf、gcc-6-base:armhf、libc6:armhf、libatomic1:armhf 等,基本冲突就会消失,我可以通过 apt 安装 libgcc1:arm64 gcc-6-base:arm64 libc6:arm64。然而,这不是一个很好的解决方案,因为在此过程中我可能失去了 ARMv6 兼容性和其他特定于 Raspbian 的修改。

上述情况仍然可能意味着 Raspbian 软件包中还隐藏着其他可疑的东西。我的下一个测试是使用 Raspbian *.deb 文件,除了使用脚本重新打包它们以删除+rpi1每个控制文件中的版本文本部分。一旦我这样做并重新安装这些软件包,与arm64软件包的冲突就会消失。这再次表明 APT 正在比较两种不同体系结构的软件包版本。

当我运行apt-cache show其中任何一个时,它们都会Multi-Arch: same用正确的对应Architecture:行表示。据我了解,在Multi-Arch: foreign或 的情况下,它只会关心不同架构的版本Multi-Arch: allowed

这里发生了什么?看起来 APT 正在比较不同架构之间的软件包版本,但实际上它不应该这样做,这会导致虚假冲突。我想知道多架构在 bamarni 的 Pi64 或 Ubuntu MATE(或大多数 i386+x86_64 系统)上运行良好是否部分是因为这些系统在 32 位和 64 位上具有大致一致的软件包版本。

答案1

这是多架构规范强制要求:

多架构包需要保持同步;即,隐式Breaks: ${self}:other (!= ${binary:Version}).

原因是包总是在共享目录(/usr/share/doc)中传送一些与架构无关的文件,因此包管理系统必须确保它们在跨架构之间是相同的。它通过跨架构强制执行相同的版本来实现这一点,即使使用 binNMU 也是如此。

在单个发行版中这并不是什么大问题,但在跨发行版中却是个问题。

具体来说,让我们考虑一下您的情况gcc-6-base(因为那是文档所在的位置)。 Debian Stretch 版本将其变更日志安装在/usr/share/doc/gcc-6-base/changelog.Debian.gz.为其他体系结构安装相同的软件包,使用相同的版本,安装相同的文件,因此虽然技术上存在冲突,但它会被忽略。然而,Raspbian 版本添加了以下条目:

gcc-6 (6.3.0-18+rpi1+deb9u1) stretch-staging; urgency=medium

  [changes brought forward from 6.1.1-1+rpi1 by Peter Michael Green <[email protected]> at Wed, 11 May 2016 20:
  * Disable testsuite.

 -- Raspbian forward porter <[email protected]>  Thu, 01 Mar 2018 00:03:02 +0000

现在/usr/share/doc/gcc-6-base/changelog.Debian.gz不再相同了。如果我们要并行安装 Debian Stretch 和 Raspbian Stretch 版本的软件包,应该保留哪个版本的文件?没有办法决定,所以包装系统完全禁止这种情况。

相关内容