2.7.3. 调整候选版本

没有 “/etc/apt/preferences“ 文件,APT 系统使用版本字符串来选择最新的可用版本作为 候选版本。这是通常的状态,也是 APT 系统最推荐的使用方法。所有官方支持的档案库集合,并不要求 “/etc/apt/preferences“ 文件,因此,一些不应当被作为自动更新源的软件包,被标记为 NotAutomatic,并被适当处理。

[提示]提示

版本字符串的比较规则可以被验证,例子如下,”dpkg —compare-versions ver1.1 gt ver1.1~1; echo $?“ (参见 dpkg(1))。

如果经常从混合源档案库中安装软件包 (参见第 2.7.2 节 “混合源档案库中的软件包”), 你可以通过创建 “/etc/apt/preferences“ 文件并且在其中写入关于调整候选版本的软件包选取规则的合适条目 (如apt_preferences(5) 中所示)来自动化这些复杂的操作。这被称为 apt-pinning

[警告]警告

新手用 apt-pinning 命令会造成比较大的问题。你必须避免使用这个命令除非确实需要它。

[小心]小心

当使用 apt-pinning 命令时,因为 Debian 不会确保软件之间的兼容性,所以你必须自己确认其兼容性。apt-pinning 是完全可选的操作,我并不建议去使用它。

[小心]小心

档案库层级的 Release 文件 (参见 第 2.5.3 节 “档案库层的“Release”文件”) 使用 apt_preferences(5) 的规则.对于 Debian 通用档案库Debian 安全档案库,apt-pinning 只在 “suite” 名下工作。(这点和 Ubuntu 档案库不同.)例如,你在 “/etc/apt/preferences“ 文件里面,可以使用”Pin: release a=unstable“ ,但不能使用 “Pin: release a=sid“.

[小心]小心

当使用非 Debian 的档案库作为 apt-pinning 的一部分时,你应该检查它们的用途和可信度。例如,Ubuntu 和 Debian 是不能混在一起的。

[注意]注意

即使不创建 “/etc/apt/preferences“ 文件,在不用 apt-pinning 命令的情况下,你也可以进行相当复杂的系统工作 (参见第 2.6.4 节 “使用 dpkg 命令进行救援”第 2.7.2 节 “混合源档案库中的软件包”)。

如下是关于 apt-pinning 技术的简化说明。

可用的软件包源在 “/etc/apt/sources.list“ 文件里面定义,APT 系统从可用的软件包源里面选择 Pin-Priority 值最大的,作为升级 软件包的候选版本.如果一个软件包的 Pin-Priority 大于 1000,这个版本限制为只能 升级,关闭了软件包降级功能 (参见 第 2.7.10 节 “紧急降级”).

每个软件包的 Pin-Priority 值是在 “/etc/apt/preferences“ 文件中的 “Pin-Priority” 条目中定义或者是使用它的默认值。

表 2.18. 用于 apt-pinning 技术的值得注意的 Pin-Priority 值列表。

Pin-Priorityapt-pinning 对软件包的影响
1001安装该软件包,即使是一个降级软件包的指令
990用作目标发行版档案库的默认值
500用作常规档案库的默认值
100用于 NotAutomaticButAutomaticUpgrades 档案库的默认值
100用于已安装软件包
1用于 NotAutomatic 档案库的默认值
-1即使被推荐,也绝不安装这个软件包

目标发行版档案库可以通过以下几种方法来设置。

  • /etc/apt/apt.conf“ 配置文件中写入 “APT::Default-Release "stable";

  • 命令行选项,例如: “apt-get install -t testing some-package

NotAutomaticButAutomaticUpgrades 的档案是由档案库服务器上档案层级的 Release 文件来设置,(参见 第 2.5.3 节 “档案库层的“Release”文件”),同时包含”NotAutomatic: yes“ 和 “ButAutomaticUpgrades: yes“.而 NotAutomatic 档案也是由档案库服务器上的档案层级的 Release 文件来设置,但只包含 “NotAutomatic: yes“.

来自众多档案源的<软件包>的 apt-pinning 情况可以通过 “apt-cache policy <package>“ 命令显示。

  • Package pin:“ 开头的行,列出了软件包版本的 pin ,如果 <package> 相关的 pin 已经定义, 例如, “Package pin: 0.190“.

  • 没有 “Package pin:“ 的行存在,如果没有 <package> 相关的定义。

  • 与 <package> 相关的 Pin-Priority 值列在所有版本字符串的右边,比如,”0.181 700“.

  • 0“ 是列在所有版本字符串的右边,如果没有 <package> 相关的定义。例如, “0.181 0“.

  • 档案库 (在 “/etc/apt/preferences“ 文件作为”Package: *“定义) 的 Pin-Priority 值,列在所有档案库路径的左边,例如,”100 http://deb.debian.org/debian/ buster-backports/main Packages“.