Перейти к основному содержимому
Управление приоритетами

Управление приоритетами

Как создать запись о приоритетах

  1. Создайте новый файл в директории /etc/apt/preferences.d/.
  2. Назовите его по аналогии с примерами ниже.
  3. Создайте запись в созданном файле с учетом анализа приоритетов пакетным менеджером.
Анализ приоритетов

Руководство: man apt_preferences

Пакетный мнеджер apt устанавливает версию пакета с наиболее высоким приоритетом. В случае одинакового приоритета двух пакетов, apt установит более новую версию.

Приоритеты по умолчанию

ПриоритетОписание пакета
100установленный пакет
500неустановленный пакет
990пакет, который является частью запрошенного релиза

* — в случае разовой установки пакета из дополнительного источника, например:

apt install nginx/testing     # установить nginx из тестового репозитория

Условия установки пакета в зависимости от приоритета

ПриоритетУсловие установки пакета
< 0никогда
1 .. 99если не установлена другая версия этого пакета
100 .. 499если нет обновленной версии пакета среди установленных или доступных в репозитории пакетов
500 .. 989если нет обновленной версии пакета среди установленных или доступных для дистрибутива пакетов
990 .. 999если не установлена обновленная версия этого пакета
> 1000всегда, даже при понижении версии

Порядок обработки записей

  1. Наиболее конкретные записи, указывающие на пакет.
  2. Более общие записи: например, все пакеты определённого дистрибутива. Если существует несколько общих записей, то используется первая найденная.

Примеры вычисления версии пакета для установки

примечание

Пример#1

  • установлен пакет версии 1 из дистрибутива stable
  • версии 2 и 3 этого же пакета доступны в testing и unstable соответственно

Приоритеты:

  • установленная версия 1 имеет приоритет 100;
  • версия в stable (та же самая версия 1) имеет приоритет 990, потому что является частью целевого релиза;
  • пакеты в testing и unstable имеют приоритет 500 — это приоритет по умолчанию для неустановленных версий.

Итог

Выбрана версия 1 с приоритетом 990. Остается установленная версия пакета.

примечание

Пример#2

  • установлен пакет версии 2 из testing
  • версия 1 доступна в stable
  • версия 3 доступна в unstable

Приоритеты

  • версия 1 имеет приоритет 990
  • версии 2 и 3 имеют приоритеты 500

Итог

Выбрана версия 3. Версия 1 отбрасывается, так как её номер ниже номера установленной версии. Из версий 2 и 3 с одинаковым приоритетом apt выбирает более новую версию из unstable.

Примеры записей

Как установить приоритет пакета

Каждый пакет идентифицируется по информации, предоставленной в файле InRelease.

nginx.pref
Package: nginx                  # имя пакета
Pin: release a=selectos # источник пакетов
Pin-Priority: 1001 # приоритет - всегда

Как добавить комментарии

Для файла /etc/apt/preferences нет официального синтаксиса комментариев, но текстовые примечания можно оформлять как одно или несколько полей Explanation в начале каждой записи:

nginx.pref
Explanation: The package nginx provided        #  комментарий в свободной форме
Explanation: in testing can be used safely # комментарий в свободной форме
Package: nginx
Pin: release a=testing
Pin-Priority: 500

Как закрепить версию пакета

Допустим, некоторые локальные программы на сервере зависят от Perl версии 5.28, и важно, чтобы апгрейды не установили другую версию. Пример записи:

perl.pref
Package: perl
Pin: version 5.28* # закрепить версию независимо от источника
Pin-Priority: 1001 # приоритет - всегда

Как установить приоритет репозитория

selectos.pref
Package: *                  
Pin: release a=selectos # определить выбранный тип дистрибутива как источник пакетов
Pin-Priority: 900 # обновлять из источника, если не установлена более новая версия пакета
neverever.pref
Package: *
Pin: release o=neverever # определить репозитории с origin=neverever как источник пакетов
Pin-Priority: -10 # никогда не устанавливать пакеты из этого источника

Как посмотреть информацию о приоритетах

apt-cache policyпосмотреть приоритеты и свойства каждого дистрибутива
apt-cache policy <пакет>посмотреть приоритет каждой доступной версии пакета

Примеры вывода команды

Приоритеты и свойства каждого дистрибутива
$ apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 https://stable.see.selectel.ru selectos/contrib amd64 Packages
release v=1.0,o=Debian,a=stable,n=selectos,c=contrib,b=amd64
origin stable.see.selectel.ru
500 https://stable.see.selectel.ru selectos/main amd64 Packages
release v=1.0,o=Debian,a=stable,n=selectos,c=main,b=amd64
origin stable.see.selectel.ru
Pinned packages:

Приоритеты каждой доступной версии пакета boo
$ apt-cache policy boo
boo:
Installed: 2021.06.15-1
Candidate: 2021.06.15-1
Version table:
2021.07.21-1~bpo11+1 100
100 https://stable.see.selectel.ru https://testing.see.selectel.ru amd64 Packages
2021.06.15-1 990
990 https://stable.see.selectel.ru https://testing.see.selectel.ru amd64 Packages
100 /var/lib/dpkg/status