APT 固定依赖关系解析

APT 固定依赖关系解析

我正在尝试掌握 APT 固定在 Debian 下的工作原理,但我很难掌握它如何解决优先级。

我有一个source.list文件,其中包含以下确切顺序的条目:

deb <repository> stretch main
deb <repository> testing main
deb <repository> unstable main

以下存储库包含每个分支的这些包:

  • 拉伸包含包装dependency version 1.0
  • 测试包含包dependency version 2.0
  • 不稳定包含软件包programdependency version 2.0

该包program取决于dependency version 2.0.

我需要安装该软件包program,但我想从 中安装尽可能少的软件包unstable,因此我创建以下preferences文件来固定此分支:

Package: *
Pin: release a=unstable
Pin-Priority: -1

unstable如果我正确理解它是如何工作的,它应该仅在我明确告诉 APT 时安装软件包。

我还创建了一个apt.conf文件以确保stable分支是默认分支:

APT::Default-Release "stable";

运行命令后apt-get update,分支应具有以下优先级:

stable: 990
testing: 500
unstable: -1

现在我想安装该软件包program,为此,我运行以下命令:

apt-get install -t unstable program

所以现在我的问题是,APT将从哪个分支拉取包dependency version 2.0?由于 和testing都有unstable相同版本的软件包,那么会选择哪一个呢?

如果我理解正确的话,带有该-t unstable选项的 APT 将为属于 的软件包设置 990 优先级unstable,但根据我的经验,它从 中提取它testing

那么为什么 APT 会从testing 优先级为 500 的包中提取包,而unstable其设置为 990 呢?另外,安装尽可能少的软件包的最佳方法是什么unstable

答案1

这在中进行了解释联机apt_preferences帮助页:

当sources.list(5) 文件包含对多个发行版(例如,稳定版和测试版)的引用时,一个软件包的多个版本可能可供安装。 APT 为每个可用版本分配优先级。受依赖性约束,apt-get选择具有最高优先级的版本进行安装。 APT 首选项会覆盖 APT 默认分配给软件包版本的优先级,从而使用户能够控制选择哪个版本进行安装。

当sources.list(5) 文件包含对多个源的引用时,同一版本的包的多个实例可能可用。在这种情况下,apt-get将下载在sources.list(5) 文件中最早列出的实例。 APT 首选项不会影响实例的选择,只会影响版本的选择。

优先级仅确定安装包的哪个版本(由版本号指定)。一旦确定,将使用第一个可用的包存储库来下载它。

相关内容