如何在“apt-get install”时跳过升级其他架构的软件包?

如何在“apt-get install”时跳过升级其他架构的软件包?

今天我终于猜到了为什么当我尝试安装一组带有依赖项下载的 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对于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

答案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

相关内容