Apt-Preferences 不接受软件包名称

Apt-Preferences 不接受软件包名称

我有两个存储库,其中包含一个包“libtidy-dev”:

$ apt-cache policy libtidy-dev

libtidy-dev:
  Installed: 20091223cvs-1.2ubuntu1.1
  Candidate:   1:5.2.0-1+deb.sury.org~trusty+1
  Фиксатор пакета: 1:5.2.0-1+deb.sury.org~trusty+1
  Version table:
     1:5.2.0-1+deb.sury.org~trusty+1 400
        500 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main amd64 Packages
 *** 20091223cvs-1.2ubuntu1.1 400
        500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     20091223cvs-1.2ubuntu1 400
        500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

我想将“ppa:ondrey/php”存储库中的包“libtidy-dev”的优先级设置为 400。因此,我创建了 /etc/apt/preferences.d/libtidy-dev.pref,内容如下:

Package: libtidy-dev
Pin: release o=LP-PPA-ondrej-php
Pin-Priority: 400

但它不起作用。如果我替换第一行

Package: *
Pin: release o=LP-PPA-ondrej-php
Pin-Priority: 400

它会起作用,但适用于此 repo 中的所有软件包。我不需要降低所有软件包的优先级,我只想对“libtidy-dev”执行此操作。所以我尝试了另一种方法。我在 pref 文件中写入以下内容:

Package: libtidy-dev
Pin: origin archive.ubuntu.com
Pin-Priority: 990

Package: libtidy-dev
Pin: origin security.ubuntu.com
Pin-Priority: 990

此配置的作用相同。如果第一行有包名,则不起作用,但如果我指定星号而不是包名,则它起作用,但适用于这些存储库的所有包。我做错了什么?如何为一个存储库的一个包设置优先级?

答案1

根据 的输出apt-cache policy libtidy-dev,用于固定优先级的配置libtidy-devdid apply:400列在版本号旁边。

例如,采用默认配置的 Ubuntu 16.04 Xenial 系统并使用 进行演示,因为此软件包的不同版本在和档案appstream中可用(具有不同的默认优先级):xenialxenial-backports

$ apt-cache policy appstream
appstream:
  Installed: (none)
  Candidate: 0.9.4-1ubuntu3
  Version table:
     0.10.6-1~ubuntu16.04.2 100
        100 http://de.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
     0.9.4-1ubuntu3 500
        500 http://de.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     0.9.4-1 500
        500 http://de.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

添加以下文件:

$ cat /etc/apt/preferences.d/appstream
Package: appstream
Pin: release a=xenial-backports
Pin-Priority: 500

输出结果变为:

$ apt-cache policy appstream
appstream:
  Installed: (none)
  Candidate: 0.10.6-1~ubuntu16.04.2
  Version table:
     0.10.6-1~ubuntu16.04.2 500
        100 http://de.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
     0.9.4-1ubuntu3 500
        500 http://de.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     0.9.4-1 500
        500 http://de.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

您也可以apt-cache policy在不指定包名称的情况下运行,这将在输出末尾列出所有固定的包:

$ apt-cache policy
[...]
Pinned packages:
     appstream -> 0.10.6-1~ubuntu16.04.2 with priority 500

造成混淆的原因是,使用一个包罗万象的 glob 模式固定所有包会改变存档旁边列出的优先级,这比包版本旁边的优先级更容易发现:

$ cat /etc/apt/preferences.d/appstream
Package: *
Pin: release a=xenial-backports
Pin-Priority: 500
$ apt-cache policy appstream
appstream:
  Installed: (none)
  Candidate: 0.10.6-1~ubuntu16.04.2
  Version table:
     0.10.6-1~ubuntu16.04.2 500
        500 http://de.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
     0.9.4-1ubuntu3 500
        500 http://de.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     0.9.4-1 500
        500 http://de.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

相关内容