为什么这个 apt 固定棒不能用?

tro*_*ine 7 debian apt

我更喜欢从squeeze-backports安装在nginx中,而不是在主线稳定中安装。我已经启用了 backports 存储库。我有这个首选项文件:

# /etc/apt/preferences.d/nginx
Package: nginx nginx-common
Pin: release a=squeeze-backports
Pin-Priority: 999
Run Code Online (Sandbox Code Playgroud)

设置目标专门按预期工作:

# 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/?]
Run Code Online (Sandbox Code Playgroud)

但无目标不会:

# 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/?]
Run Code Online (Sandbox Code Playgroud)

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

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

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

优先级 100 :: 到已经安装的版本(如果有)以及来自压缩包的版本,这些版本在它们的发布文件中被标记为“NotAutomatic: yes”和“ButAutomaticUpgrades: yes”,就像 debian backports 压缩包一样.

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

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

如果未指定目标版本,则 APT 简单地将优先级 100 分配给所有已安装的软件包版本,将优先级 500 分配给所有已卸载的软件包版本,但来自存档的版本除外,这些版本在其发布文件中标记为“NotAutomatic: yes”——这些版本得到如果额外标记为“ButAutomaticUpgrades:yes”,则优先级为 1 或优先级为 100。

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

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

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

等等。你可以在这里阅读全文。据我了解,优先级 999 是当前的最高优先级,应该优先考虑来自挤压反向移植的 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
Run Code Online (Sandbox Code Playgroud)

我想要的包裹的优先级为 100。是什么赋予了?

Jam*_*ley 4

你有可能被这个虫子咬了吗?

在混合 sid/testing 系统上,相同的文本无论放置在 /etc/apt/preferences 还是 /etc/apt/preferences.d/pinning 中,其行为都不同。

apt-get 尊重放置在任一位置的文件,并且 apt-cache 策略也显示预期的行为。能力本身就是这样表现的。

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

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