apt-get install
時如何跳過其他架構的升級包?
今天我終於猜到了為什麼當我嘗試安裝一組下載了依賴項的 debian 軟體包時的機制,例如
apt-get install --download-only --assume-yes libssl-dev
即使 dpkg 狀態文件為空(很多 deb 文件),仍然在安裝時我曾經(今天再次)無法安裝:apt-get install path/*.deb
printedThe 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
對於兩者amd64
和i386
)。因此,在安裝時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