Краткое введение в apt-pinning
Version 1.0
Author: Falko Timme
1 Предварительная заметка
В примерах я использую Debian Lenny (stable). Поясню apt-pinning на примере пакета phpmyadmin, который в момент написания доступен в трёх версиях: stable, testing и unstable (см. http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all).
- lenny (stable): версия 4:2.11.8.1-5
- squeeze (testing): версия 4:3.1.2-2
- sid (unstable): версия 4:3.1.3-1
Важно: реализованные здесь шаги работают с apt на Debian-подобных дистрибутивах, но всегда делайте резервные копии и тестируйте на непроизводственных системах.
2 Мой /etc/apt/sources.list
Я добавил репозитории testing и unstable в /etc/apt/sources.list, чтобы он выглядел так:
vi /etc/apt/sources.listdeb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
## Lenny / Stable
deb http://ftp2.de.debian.org/debian/ lenny main
deb-src http://ftp2.de.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
## Squeeze / Testing
deb http://ftp2.de.debian.org/debian/ squeeze main
deb-src http://ftp2.de.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
## Sid / Unstable
deb http://ftp2.de.debian.org/debian/ sid main
deb-src http://ftp2.de.debian.org/debian/ sid mainОткройте /etc/apt/apt.conf и добавьте в него следующее:
vi /etc/apt/apt.confAPT::Cache-Limit "100000000";Если этого не сделать, при запуске apt-get update можно получить ошибку:
E: Dynamic MMap ran out of roomПосле правки выполните:
apt-get updateЗачем нужен apt-pinning
По умолчанию apt обычно выбирает самую свежую доступную версию пакета. Если в sources.list присутствуют testing или unstable, apt может попытаться установить их версии, что иногда ломает стабильную систему. Apt-pinning даёт возможность задать приоритеты (P) для различных релизов или конкретных пакетов, чтобы управлять тем, откуда брать версии.
Проверка текущих приоритетов
Вы можете посмотреть текущие приоритеты так:
apt-cache policyПример вывода:
server1:~# apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 http://volatile.debian.org lenny/volatile/main Packages
release o=volatile.debian.org,a=stable,l=debian-volatile,c=main
origin volatile.debian.org
500 http://ftp2.de.debian.org sid/main Packages
release o=Debian,a=unstable,l=Debian,c=main
origin ftp2.de.debian.org
500 http://security.debian.org squeeze/updates/main Packages
release v=None,o=Debian,a=testing,l=Debian-Security,c=main
origin security.debian.org
500 http://ftp2.de.debian.org squeeze/main Packages
release o=Debian,a=testing,l=Debian,c=main
origin ftp2.de.debian.org
500 http://security.debian.org lenny/updates/main Packages
release v=5.0,o=Debian,a=stable,l=Debian-Security,c=main
origin security.debian.org
500 http://ftp2.de.debian.org lenny/main Packages
release v=5.0,o=Debian,a=stable,l=Debian,c=main
origin ftp2.de.debian.org
Pinned packages:
server1:~#В этом примере все релизы имеют приоритет 500. Это значит, что apt выберет самую свежую версию (обычно из unstable).
Пример для phpmyadmin
Проверим кандидатную версию пакета:
apt-cache policy phpmyadminВывод покажет, какая версия будет установлена (Candidate):
server1:~# apt-cache policy phpmyadmin
phpmyadmin:
Installed: (none)
Candidate: 4:3.1.3-1
Version table:
4:3.1.3-1 0
500 http://ftp2.de.debian.org sid/main Packages
4:3.1.2-2 0
500 http://ftp2.de.debian.org squeeze/main Packages
4:2.11.8.1-5 0
500 http://ftp2.de.debian.org lenny/main Packages
server1:~#В данном состоянии Candidate указывает на версию из unstable.
Как определяются приоритеты
Информация из man 5 apt_preferences:
- P > 1000 — заставляет установить версию, даже если это откат (downgrade).
- 990 < P <= 1000 — устанавливается версия, даже если она не из целевого релиза, если только установленная версия не новее.
- 500 < P <= 990 — версия устанавливается, если нет версии из целевого релиза или установленная версия не новее.
- 100 < P <= 500 — версия устанавливается, если нет версии из другого распределения или установленная версия не новее.
- 0 < P <= 100 — версия устанавливается только если пакет не установлен.
- P < 0 — запрещает установку этой версии.
Как задать приоритеты (apt_preferences)
Файл /etc/apt/preferences или файлы в /etc/apt/preferences.d/ позволяют задать правила. Примеры правил могут задавать приоритет по релизу, по пакету или по источнику. Типовая запись:
Package: *
Pin: release a=stable
Pin-Priority: 700Или для конкретного пакета из testing:
Package: phpmyadmin
Pin: release a=testing
Pin-Priority: 900После правки можно снова выполнить
apt-get updateи проверить apt-cache policy для нужного пакета.
Практические советы и предупреждения
Important: не давайте высоким приоритетам большой группы пакетов из unstable без тщательного тестирования. Это может привести к конфликтам зависимостей и «сломать» систему.
Notes:
- Используйте preferences.d и отдельные файлы для простоты управления.
- Пробуйте сначала на тестовом сервере.
- При сложных зависимостях используйте chroot или контейнеры для проверки.
Когда apt-pinning не подходит
- Если вы хотите постоянно получать обновления безопасности из всей системы, лучше использовать backports или официальную testing-ветку целиком.
- Если у вас большое количество специфичных пакетов из разных веток, управление приоритетами усложнится и риск ошибок повысится.
Альтернативные подходы
- backports — безопаснее получать отдельные пакеты с новой функциональностью.
- использование контейнеров/VM для запуска новейшего ПО, не изменяя хост-систему.
- сборка пакетов из исходников с контрольными зависимостями.
Ментальные модели
- Представьте систему как набор слоёв: базовая система (stable) снизу, отдельные пакеты поверх — pinning контролирует, какие слои разрешены.
- Высокий приоритет = “я доверяю этому слою больше всего”.
Короткий факт-бокс
- Default priority для репозиториев часто 500.
- Pin-Priority > 1000 позволяет откатить пакет.
- Pin-Priority < 0 полностью блокирует пакет от установки.
Рольный чек-лист (администратор)
- Проверить sources.list и убрать лишние репозитории.
- Установить разумные Pin-Priority для веток.
- Тестировать изменения на стенде.
- Делать резервные копии конфигураций и данных.
Завершение
Apt-pinning — мощный инструмент для гибкого управления версиями пакетов. Он пригодится, когда нужно сочетать стабильность и доступ к новым версиям отдельных пакетов. Однако он требует аккуратного подхода и тестирования.
Краткое резюме:
- Настройте sources.list и apt.conf.
- Определите приоритеты в /etc/apt/preferences или /etc/apt/preferences.d/.
- Проверяйте с помощью apt-cache policy.
- Тестируйте изменения и избегайте массовых высокоприоритетных установок из unstable.
Похожие материалы
Herodotus — Android‑троян и защита
Как включить новый Пуск в Windows 11
Панель полей сводной таблицы в Excel — быстрый разбор
Включение нового меню Пуск в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить