Apt

apt-get install時如何跳過其他架構的升級包?

  • January 4, 2022

今天我終於猜到了為什麼當我嘗試安裝一組下載了依賴項的 debian 軟體包時的機制,例如apt-get install --download-only --assume-yes libssl-dev即使 dpkg 狀態文件為空(很多 deb 文件),仍然在安裝時我曾經(今天再次)無法安裝:apt-get install path/*.debprinted The following additional packages will be installed: libssl1.1:i386。(我已經嘗試尋求幫助來描述結果,但問題的目的是因為我知道理解不正確的原因):apt 如何跟踪 BUILD(源)依賴項?https://stackoverflow.com/questions/70491862/how-to-list-download-the-recursive-build-dependencies-of-a-debian-package

我的猜測是libssl1.1這里安裝了 i386 架構的軟體包(我簽入了狀態文件 - 它是:Status: install ok installed對於兩者amd64i386)。因此,在安裝時libssl1.1 apt-get嘗試libssl1.1為該軟體包的所有已安裝架構升級它。但是,當在一個沒有其他架構的包的系統上下載時,除了在命令行上請求的包之外,apt-get只會下載一個架構。

是否有任何選項可以僅為一種架構安裝軟體包和依賴項?如果只有一個架構發生變化,我看不出它會如何破壞系統。(或者下載所有可用架構的依賴項)?

man apt-get:
      --arch-only
          Only process architecture-dependent build-dependencies. Configuration Item:
          APT::Get::Arch-Only.

然而:

sudo apt-get install --download-only --assume-yes --arch-only libssl-dev
E: Command line option --arch-only is not understood in combination with the other options

如果只有一個架構發生變化,我看不出它會如何破壞系統。

允許為多個架構安裝的軟體包共享文件,但這些文件必須嚴格相同。為避免此要求出現問題,此類包必須保持同步,因此如果為多個體系結構安裝了一個包,則不可能只為一個體系結構升級一個包。

為避免從初始下載的軟體包集中安裝不需要的軟體包,您可以在提供要安裝的軟體包列表時更加具體。例如

apt install path/*_{amd64,all}.deb

只會安裝amd64與體系結構無關的軟體包。

要為所有啟用的架構下載包,請遍歷它們:

for arch in $(dpkg --print-architecture) $(dpkg --print-foreign-architectures); do
 sudo apt install --download-only --assume-yes libssl-dev:"$arch"
done

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