今天我终于猜到了为什么当我尝试安装一组带有依赖项下载的 debian 软件包时的机制,例如apt-get install --download-only --assume-yes libssl-dev
即使 dpkg 状态文件为空(很多 deb 文件),但在安装时我一次(今天再次)无法安装:apt-get install path/*.deb
打印The following additional packages will be installed: libssl1.1:i386
。 (我已经尝试获得描述结果的帮助,但问题是针对我所知道的错误原因):apt 如何跟踪 BUILD(源)依赖关系?和https://stackoverflow.com/questions/70491862/how-to-list-download-the-recursive-build-dependency-of-a-debian-package
我的猜测是 i386 架构的软件包libssl1.1
安装在这里(我在状态文件中检查过 - 它是: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
答案1
我不明白如果只改变一种架构,它会如何破坏系统。
为多个体系结构安装的软件包允许共享文件,但这些文件必须严格相同。为了避免此要求出现问题,此类软件包必须保持同步,因此如果为多个体系结构安装了软件包,则不可能仅针对一种体系结构升级该软件包。
为了避免从最初下载的软件包中安装不需要的软件包,你可以在提供要安装的软件包列表时更加具体。例如
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