Перейти к основному содержимому
Пакетный менеджер apt

Пакетный менеджер 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:

  1. Конфигурация для почтового сервера задаётся в файлах /etc/exim4/conf.d/.
  2. Файлы объединяются в /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 очень похожий синтаксис.