我正在尝试掌握 APT 固定在 Debian 下的工作原理,但我很难掌握它如何解决优先级。
我有一个source.list
文件,其中包含以下确切顺序的条目:
deb <repository> stretch main
deb <repository> testing main
deb <repository> unstable main
以下存储库包含每个分支的这些包:
- 拉伸包含包装
dependency version 1.0
; - 测试包含包
dependency version 2.0
; - 不稳定包含软件包
program
和dependency 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 首选项不会影响实例的选择,只会影响版本的选择。
优先级仅确定安装包的哪个版本(由版本号指定)。一旦确定,将使用第一个可用的包存储库来下载它。