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
Я хочу установить приоритет для пакета "libtidy-dev" репозитория "ppa:ondrey/php" на 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
это будет работать, но для всех пакетов из этого репо. Мне не нужно уменьшать приоритет для всех пакетов, я хочу сделать это только для "libtidy-dev". Поэтому я попробовал другой способ. Я написал в преф файл это:
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
применил: 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
Путаница связана с тем фактом, что закрепление всех пакетов с шаблоном универсального глобуса изменяет приоритет, указанный рядом с архивом, который легче определить, чем рядом с версией пакета:
$ 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