Пакетный менеджер apt
Утилиты управления пакетами
Пакет — это набор программ и компонентов для работы ПО, а также сценарии для разворачивания и автоматизации установки.
apt (advanced packaging tool) — это набор программ для установки, обновления и удаления пакетов. Пакетный менеджер apt рассматривает систему комплексно, предлагая комбинацию доступных пакетов с учетом всех зависимостей и требований.
dpkg (сокращение от debian package) — это низкоуровневая утилита, которая лежит в основе системы управления .deb-пакетами. Пакетный менеджер apt является высокоуровневой программой, которая использует dpkg в качестве бэкенда.
Пакеты и репозитории
Слово source означает как исходный код, так и источник чего-либо. Это влечет разницу в созвучных терминах:
- source package означает пакет, пакет, содержащий исходный код программы, который можно скомпилировать в исполняемый файл;
- package source означает источник (репозиторий), из которого загружается пакет.
Репозиторий — это хранилище пакетов, доступное через интернет или локальную сеть. Репозиторием может быть веб-сайт, FTP-сервер, локальная директория или другой источник.
Для работы apt требуется список репозиториев. Он содержится в файле /etc/apt/sources.list
.
apt импортирует список пакетов, опубликованных в каждом из этих репозиториев:
Packages.xz
— бинарные пакеты,Sources.xz
— пакеты с исходниками.
Альтернативные расширения Packages и Sources
Возможны альтернативные форматы пакетов — например, Packages.gz
, отличающиеся расширением. Расширение .gz
означает, что файл сжат с помощью утилиты gzip.
Существуют альтернативные алгоритмы сжатия и утилиты, использующие эти алгоритмы.
К таким альтернативам относятся в порядке появления:
- bzip2 (файлы
.bz2
) — обеспечивает лучшее сжатие, чем gzip, но работает медленнее; - lzma (файлы
.lzma
) — использует более продвинутые методы сжатия и обеспечивает высокую степень компрессии, но требует больше ресурсов и времени; - xz (файлы
.xz
) — обеспечивает лучшее соотношение сжатия и скорости бла годаря современному алгоритму LZMA2.
Инкрементальные обновления
Пакетный менеджер apt может загружать не все содержимое файла, а только diff-файл с отличиями новой версии от предыдущей. Вычисление новой версии происходит через применение загруженныех diff-файлов к старым версиям. В официальном репозитории SelectOS такие файлы генерируются при каждом обновлении и хранятся в течение недели.
Зачем инкрементальные обновления
Файлы Packages
и Sources
могут много весить даже после сжатия. При регулярном обновлении полная загрузка этих файлов может занимать заметное время. Чтобы ускорить процесс, apt использует механизм инкрементальных обновлений. Обычно diff-файл занимает десятки килобайт, поэтому объём трафика при еженедельном выполнении apt update
кратно уменьшается.
Отключение инкрементальных обновлений рационально, если:
- прошлое обновление было давно и инкрементальные обновления будут объемными;
- скорость сети очень высокая, а процессор на сервере очень медленный. В этом случае время, сэкономленное на скачивании, будет потеряно за счёт времени, которое сервер потратит на вычисление новых версий файлов.
Конфигурирование apt
Некоторые аспекты работы apt регулируются директивами в файлах каталога /etc/apt/apt.conf.d/
. Конфигурация apt хранится в разных файлах: каждый файл — отдельная настройка.
Директории с суффиксом .d
Директории .d
позволяют управлять конфигурацией программ через отдельные файлы, не изменяя основной конфигурационный файл.
Такая структура даёт дополнительную гибкость:
- администраторы могут изменять настройки программы, добавив заранее подготовленный файл в директорию и не изменяя содержимое существующих файлов;
- мейнтейнеры пакетов могут использовать этот приём, чтобы изменить конфигурацию других пакетов.
Политика SelectOS явно запрещает автоматическое изменение конфигурационных файлов одних пакетов при установке других. Это может делать только пользователь.
Альтернативы .d директориям
Возможны дополнительные способы конфигурирования:
- ручное создание и редактирование основного конфигурационного файла — например,
/etc/пакет/пакет.conf
; - размещение инструкции в
/usr/share/doc/пакет/README
; - создание «отклонений» с помощью
dpkg-divert
и размещение нужной конфигурации в них.
В первом варианте файл /etc/apt/apt.conf
не создаётся по умолчанию, но если создать его вручную, apt будет его учитывать.
Последний вариант иногда используется пакетами, чтобы управлять конфигурацией других пакетов, которые они используют.
В зависимости от приложения, директория .d
может использоваться напрямую (изменения применяются мгновенно) или посредством скрипта, который объеди няет все файлы из неё в один конфигурационный файл. Важно выполнять этот скрипт после любого изменения в директории, чтобы все модификации были учтены.
Если изменить сгенерированный файл вручную, все изменения будут потеряны при следующем выполнении скрипта.
Выбор конкретного метода — чтение из директории .d
напрямую или чтение сгенерированного файла — обычно продиктован ограничениями реализации.
Пример подхода с генерацией файла можно увидеть у почтового сервера Exim 4:
- Конфигурация для почтового сервера задаётся в файлах
/etc/exim4/conf.d/
. - Файлы объединяются в
/var/lib/exim4/config.autogenerated
командойupdate-exim4.conf
.
Кэширование apt
Пакетный менеджер apt кэширует файлы Packages
из репозиториев, перечисленных в sources.list
. Это позволяет ускорить работу с пакетами.
- Директория
/var/lib/apt/lists/
содержит копии файловPackages
. Поиск данных осуществляется по этой директории. - Директория
/var/cache/apt/archives/
содержит кэш загруженных пакетов, чтобы не загружать их заново при переустановке после удаления.
Перед началом работы с apt рекомендуем выполнить команду apt update, чтобы обновить список доступных пакетов.
Интерфейсы apt
Существует несколько интерфейсов для работы с apt:
- apt-get — утилита командной строки для управления пакетами;
- apt — более удобный интерфейс, объединяющий возможности apt-get и apt-cache с улучшенным выводом информации;
- aptitude, wajig, и другие утилиты — представляют дополнительные интерфейсы и автоматизируют работу с пакетами.
Применение
Интерфейсы apt-get и apt очень похожи, но apt продолжает развиваться с учетом пользовательского опыта. Разработчики apt оставляют за собой право изменять его в дальнейшем. Это нужно учитывать в скриптах автоматизации.
Интер фейс apt-get хорошо задокументирован и стабилен. Он останется неизменным в рамках текущей архитектуры.
В примерах работы с пакетным менеджером apt будет в рассмотрен одноименный интерфейс apt, но у оболочки apt-get очень похожий синтаксис.