Гид по технологиям

Краткое введение в apt-pinning

4 min read Linux Обновлено 22 Oct 2025
Apt-pinning: управление версиями пакетов
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.list
deb 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.conf
APT::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.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus — Android‑троян и защита
Кибербезопасность

Herodotus — Android‑троян и защита

Как включить новый Пуск в Windows 11
Windows

Как включить новый Пуск в Windows 11

Панель полей сводной таблицы в Excel — быстрый разбор
Excel

Панель полей сводной таблицы в Excel — быстрый разбор

Включение нового меню Пуск в Windows 11
Windows

Включение нового меню Пуск в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram