我有两个存储库,其中包含一个包“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-dev
did apply:400
列在版本号旁边。
例如,采用默认配置的 Ubuntu 16.04 Xenial 系统并使用 进行演示,因为此软件包的不同版本在和档案appstream
中可用(具有不同的默认优先级):xenial
xenial-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