Управление приоритетами
Как создать запись о приоритетах
- Создайте новый файл в директории
/etc/apt/preferences.d/
. - Назовите его по аналогии с примерами ниже.
- Создайте запись в созданном файле с учетом анализа п риоритетов пакетным менеджером.
Анализ приоритетов
Руководство: man apt_preferences
Пакетный мнеджер apt устанавливает версию пакета с наиболее высоким приоритетом. В случае одинакового приоритета двух пакетов, apt установит более новую версию.
Приоритеты по умолчанию
Приоритет | Описание пакета |
---|---|
100 | установленный пакет |
500 | неустановленный пакет |
990 | пакет, который является частью запрошенного релиза |
*
— в случае разовой установки пакета из дополнительного источника, например:
apt install nginx/testing # установить nginx из тестового репозитория
Условия установки пакета в зависимости от приоритета
Приоритет | Условие установки пакета |
---|---|
< 0 | никогда |
1 .. 99 | если не установлена другая версия этого пакета |
100 .. 499 | если нет обновленной версии пакета среди установленных или доступных в репозитории пакетов |
500 .. 989 | если нет обновленной версии пакета среди установленных или доступных для дистрибутива пакетов |
990 .. 999 | если не установлена обновленная версия этого пакета |
> 1000 | всегда, даже при понижении версии |
Порядок обработки записей
- Наиболее конкретные записи, указывающие на пакет.
- Более общие записи: например, все пакеты определённого дистрибутива. Если существует несколько общих записей, то используется первая найденная.
Примеры вычисления версии пакета для установки
Пример#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
.
Package: nginx # имя пакета
Pin: release a=selectos # источник пакетов
Pin-Priority: 1001 # приоритет - всегда
Как добавить комментарии
Для файла /etc/apt/preferences
нет официального синтаксиса комментариев, но текстовые примечания можно оформлять как одно или несколько полей Explanation
в начале каждой записи:
Explanation: The package nginx provided # комментарий в свободной форме
Explanation: in testing can be used safely # комментарий в свободной форме
Package: nginx
Pin: release a=testing
Pin-Priority: 500
Как закрепить версию пакета
Допустим, некоторые локальные программы на сервере зависят от Perl версии 5.28, и важно, чтобы апгрейды не установили другую версию. Пример записи:
Package: perl
Pin: version 5.28* # закрепить версию независимо от источника
Pin-Priority: 1001 # приоритет - всегда
Как установить приоритет репозитория
Package: *
Pin: release a=selectos # определить выбранный тип дистрибутива как источник пакетов
Pin-Priority: 900 # обновлять из источника, если не установлена более новая версия пакета
Package: *
Pin: release o=neverever # определить репозитории с origin=neverever как источник пакетов
Pin-Priority: -10 # никогда не устанавливать пакеты из этого источника
Как посмотреть информацию о приоритетах
Примеры вывода команды
$ 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:
$ 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