Debian

即使使用 Multi-Arch,APT 版本也會在不同架構之間發生衝突:相同嗎?

  • November 15, 2018

使用 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: foreignor的情況下跨不同架構的版本Multi-Arch: allowed

這裡發生了什麼?似乎 APT 在不應該比較不同架構的包版本時,這會導致虛假衝突。我想知道 multiarch 在 bamarni 的 Pi64 或 Ubuntu MATE(或大多數 i386+x86_64 系統)上是否正常工作這一事實部分是幸運的,因為這些系統在 32 位和 64 位上具有通常一致的軟體包版本。

這是多架構規範的強制要求

多架構包需要保持同步;即,隱含的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 <plugwash@raspbian.org> at Wed, 11 May 2016 20:
 * Disable testsuite.

-- Raspbian forward porter <root@raspbian.org>  Thu, 01 Mar 2018 00:03:02 +0000

現在/usr/share/doc/gcc-6-base/changelog.Debian.gz不再相同。如果我們要並排安裝軟體包的 Debian Stretch 和 Raspbian Stretch 版本,應該保留哪個版本的文件?沒有辦法決定,所以包裝系統完全禁止這種情況。

引用自:https://unix.stackexchange.com/questions/481824