APT Pinning 依赖解析

Inf*_*ien 0 debian apt dependencies

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

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

deb <repository> stretch main
deb <repository> testing main
deb <repository> unstable main
Run Code Online (Sandbox Code Playgroud)

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

  • 拉伸包含包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
Run Code Online (Sandbox Code Playgroud)

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

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

APT::Default-Release "stable";
Run Code Online (Sandbox Code Playgroud)

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

stable: 990
testing: 500
unstable: -1
Run Code Online (Sandbox Code Playgroud)

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

apt-get install -t unstable program
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题是,APT 将从哪个分支拉包dependency version 2.0?由于两个testingunstable有包装的同一版本,其中之一将得到回升?

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

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

Ste*_*itt 6

这是在解释apt_preferences手册页

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

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

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