为什么这种恰当的固定不起作用?

为什么这种恰当的固定不起作用?

我希望在 nginx 中安装 squeeze-backports,而不是在 mainline stable 中安装。我已启用 backports 存储库。我有这个首选项文件:

# /etc/apt/preferences.d/nginx
Package: nginx nginx-common
Pin: release a=squeeze-backports
Pin-Priority: 999

设置目标的具体工作如预期的那样:

# aptitude install -t squeeze-backports nginx
The following NEW packages will be installed:
  libgd2-noxpm{a} libgeoip1{a} libjpeg62{a} libpcre3{a} libxml2{a} libxslt1.1{a} nginx nginx-common{a} nginx-full{a} 
The following packages are RECOMMENDED but will NOT be installed:
  geoip-database xml-core 
0 packages upgraded, 9 newly installed, 0 to remove and 39 not upgraded.
Need to get 828 kB/2,235 kB of archives. After unpacking 4,985 kB will be used.
Do you want to continue? [Y/n/?]

但没有目标:

# aptitude install nginx
The following NEW packages will be installed:
  libgeoip1{a} libpcre3{a} nginx 
The following packages are RECOMMENDED but will NOT be installed:
  geoip-database 
0 packages upgraded, 3 newly installed, 0 to remove and 25 not upgraded.
Need to get 339 kB/694 kB of archives. After unpacking 1,667 kB will be used.
Do you want to continue? [Y/n/?]

apt_preferences (5)详细说明决定安装哪个软件包版本的算法:

如果已指定目标版本,则 APT 使用以下算法来设置软件包版本的优先级。分配:

优先级 1 :: 来自档案库的版本在其发布文件中被标记为“NotAutomatic: yes”但不像 debian 实验档案库那样被标记为“ButAutomaticUpgrades: yes”。

优先级 100 :: 已安装的版本(如果有)以及来自档案的版本,这些版本在其发布文件中标记为“NotAutomatic:yes”和“ButAutomaticUpgrades:yes”,例如自 squeeze-backports 以来的 debian backports 档案。

优先级 500:: 未安装且不属于目标版本的版本。

优先级 990:: 针对未安装且属于目标版本的版本。

如果未指定目标版本,则 APT 简单地为所有已安装的软件包版本分配优先级 100,为所有未安装的软件包版本分配优先级 500,但来自其发布文件中标记为“NotAutomatic:是”的档案的版本除外 - 这些版本获得优先级 1 或优先级 100(如果还标记为“ButAutomaticUpgrades:是”)。

然后,APT 应用按优先顺序列出的以下规则来确定安装哪个版本的软件包。

  • 除非可用版本的优先级超过 1000,否则切勿降级。(“降级”是指安装较新版本的软件包来替代较新的版本。请注意,APT 的默认优先级均不超过 1000;此类高优先级只能在首选项文件中设置。另请注意,降级软件包可能会有风险。)

  • 安装最高优先级的版本。

等等。你可以阅读全文这里据我了解,优先级 999 是当前最高优先级,来自 squeeze-backports 的 nginx应该受到青睐。显然不是。也许魔鬼就在细节中——我不确定 nginx 包是否标记为 NotAutomatic 或 ButAutomaticUpgrades 或如何确定——但手册页后面的示例表明我做了正确的事情。然而

# apt-cache policy nginx
nginx:
  Installed: (none)
  Candidate: 1.1.8-2~bpo60+1
  Package pin: 1.1.8-2~bpo60+1
  Version table:
     1.1.8-2~bpo60+1 999
        100 http://backports.debian.org/debian-backports/ squeeze-backports/main i386 Packages
     0.7.67-3+squeeze1 999
        500 http://debian.osuosl.org/debian/ squeeze/main i386 Packages

我想要的包裹的优先级为 100。发生了什么?

答案1

你可能被这个错误

在混合 sid/testing 系统上,无论放在 /etc/apt/preferences 中还是 /etc/apt/preferences.d/pinning 中,相同的文本表现都会有所不同。

apt-get 尊重放置在任一位置的文件,并且 apt-cache 策略也显示预期的行为。aptitude 单独表现如此。

我在 0.4.11.11-1+b2 版本上看到了同样的行为,并尝试升级到 0.6.1.3-3 以查看它是否在 sid 中​​得到修复,但错误行为仍然存在。

根据最新更新,这是fixed in aptitude 0.6.3-3.2

相关内容