Debian. Шпаргалка сисадмина. Управление пакетами

https://www.debian.org
www.debian.org

В статье я постараюсь описать теорию относительно внутреннего устройства пакетов, нюансов их использования и ограничений, а также основные программы для управления пакетами в порядке уменьшения их сложности. Начнем с обзора строения пакетов.

Теоретическая часть

Большинство информации в теоретической части взято из справочных страниц, официальной документации на русском и английском языках.

Общая информация

Все пакеты для Debian можно разделить на два типа 1:

Двоичные пакеты (binary) – содержат исполняемые файлы, файлы настроек, справочные страницы, информацию об авторских правах. Пакеты поставляются в файлах с расширением .deb (специфичен именно для Debian-систем).

Пакеты исходного кода (source) – содержат описание пакета, файл с tar-архивом немодифицированного исходного кода (расширение .orig.tar.gz) и обычно файла, содержащего особые Debian-специфичные изменения к оригинальному исходному коду (расширение .diff.gz)

Имена файлов пакетов включают в себя последовательно общее имя пакета, номер ревизии, архитектуру.

Помимо обычных пакетов существуют также виртуальные 2. Они обладают идентичной функциональностью, но имеют разные названия. Оба пакета предоставляют одно и то же дополнительное имя пакета, которое и является виртуальным. При этом для разрешения зависимостей может использоваться как первый, так и второй реальные пакеты, если вдруг какой-либо из них понадобится для другой программы.

Файл control

Вся сопроводительная информация о пакете находится в файле control. Некоторые атрибуты 3 в этом файле рассмотрены ниже, назначение остальных легко можно понять исходя из их названия. Рассмотрим для примера вывод файла control для пакета mysql-server-5.5:

debian package management

Приоритет (priority) 4 – может принимать значения требуемый (required), важный (important), стандартный (standard), дополнительный (optional) и экстра (extra). Все типы указаны в порядке уменьшения их важности для операционной системы. Если без требуемых пакетов операционная система не сможет функционировать нормально, то экстра и дополнительные пакеты в принципе не нужны для работы системы, они добавляют дополнительный функционал.

В нижней части текста можно встретить атрибуты, которые содержат списки определенных пакетов. Некоторые из этих пакетов могут быть установлены по желанию, а какие-то должны присутствовать обязательно. В этом случае говорят, что пакет 5: зависит (depends), пред-зависит (pre-depends), рекомендует (reccomends), предлагает (suggests), ломает (breaks), конфликтует (conflict), предоставляет (provides), заменяет (replace), наращивает (enhances). Конечно же все эти поля содержат имена других пакетов, без которых работа основного невозможна (как в случае с пакетами в атрибуте depends), которые добавляют дополнительный функционал (reccomends, suggests), или которые могут даже заменять уже существующие в системе пакеты (replace) и так далее.

Почти в самом низу находятся данные файла conffile 6. Он необходим для определения конфигурационных файлов, которые нельзя заменять при обновлении пакета, чтобы сохранить настройки.

 Сценарии установки

Помимо данных самого приложения и информации о нем, в пакетах также поставляются сценарии, которые определяют необходимые действия до/после установки/удаления пакета. Все сценарии установленного пакета хранятся в каталоге низкоуровневой утилиты управления пакетами – dpkg – /var/lib/dpkg/info с соответствующим расширением (проверим это на примере все того же mysql-server-5.5):

debian package management 02

Вот за что отвечает каждый сценарий 7:

.preinst – выполняется перед распаковкой пакетов, обычно останавливает связанные с ними службы;

.postinst – выполняется соответственно после распаковки пакета и в большинстве случае служит для настройки только что распакованного пакета – либо самостоятельной, либо с помощью пользователя путем запроса каких-либо данных и/или вывода предупреждений. Конечно же остановленные на этапе выполнения сценария .preinst службы должны быть запущены;

.prerm – как можно догадаться из названия, этот сценарий запускается перед удалением пакета и обычно останавливает все зависящие от него службы;

.postrm – выполняется в самую последнюю очередь после удаления пакета, запускает обратно необходимые службы, подчищает все оставшиеся от пакета данные.

Вообще процессы установки/удаления/обновления пакетов содержат достаточно много действий, это не просто распаковка различных файлов в соответствующие им каталоги системы. Все эти нюансы также подробно расписаны в официальных руководствах 8.

Утилиты управления пакетами

Существует достаточно много утилит управления пакетами, например: apt, aptitude, dpkg, dselect, synaptic и другие. Все они обладают практически идентичным функционалом для “повседневного” использования, но различаются некоторыми другими функциями, интерфейсом и т.д.

В данном случае меня интересуют утилиты командной строки для администрирования прежде всего серверов, не обладающих графическим интерфейсом, а потому я собираюсь рассмотреть три наиболее часто используемые утилиты – dpkg, apt, aptitude.

Надо понимать, что высокоуровневые утилиты, такие как aptitude, основаны на apt, которая в свою очередь использует низкоуровневую dpkg 9.

Основные различия

Основные различия заключаются в следующем 10:

dpkg:

  • является основным низкоуровневым инструментом для работы с пакетами, умеет работать с файлами .deb, в отличие от apt и aptitude, работает только с существующими пакетами, загружать ничего не умеет, пользуйтесь этим инструментом очень аккуратно;
  • не умеет работать с зависимостями и если устанавливаемому пакету нужны какие-либо другие, dpkg выкинет ошибку и вам придется подгружать зависимости вручную;
  • ведет очень подробные логи в файле /var/log/dpkg.log;

apt:

  • рекомендуют использовать для обновлении системы при переходе между версиями дистрибутивов, а также просто при установке или обновлении пакетов благодаря более надежному механизму разрешения зависимостей пакетов;
  • apt-get и apt-cache работают только в режиме командной строке;
  • apt-cache предоставляет возможность поиска с использованием регулярных выражений только в именах и описаниях пакетов;
  • умеет работать с предпочтениями 11 только через файл /etc/apt/preferences, в отличие от aptitude;
  • менее требовательна к аппаратным ресурсам.

aptitude:

  • крайне не рекомендуют использовать для обновления системы при переходе от одной версии дистрибутива к другой; встречаются ситуации с массовым удалением пакетов при обновлении в нестабильных сборках;
  • является наиболее универсальным функциональным инструментом на основе apt;
  • умеет работать как в режиме командной строки, так и в интерактивном режиме;
  • наиболее полезная при выполнении повседневных задач управления пакетами – усиленные возможности поиска (поддерживаются регулярные выражения при поиске в метаданных пакета), подробный анализ существующих пакетов, управление устаревшими пакетами, удобный доступ ко всем версиям пакета;
  • уступает по производительности другим утилитам.

Базовые функции

Поскольку все описанные выше утилиты выполняют собственно одну и ту же задачу, вполне логично, что у них есть ряд одинаковых основных функций 12. Многие из них будут рассмотрены ниже. Поскольку dpkg работает несколько по-иному, её обзор будет отдельно.

aptitude apt-get/apt-cache описание
aptitude update apt-get update обновление метаданных локального архива пакетов
aptitude install foo apt-get install foo установить актуальную на данный момент версию пакета foo со всеми необходимыми зависимостями
aptitude safe-upgrade apt-get upgrade установить актуальные на данный момент версии имеющихся в системе пакетов без удаления существующих
aptitude full-upgrade apt-get dist-upgrade установить актуальные на данный момент версии имеющихся в системе пакетов с удалением существующих, если это необходимо
aptitude remove foo apt-get remove foo удаление пакета foo без удаления его конфигурационных файлов
apt-get autoremove удаление зависимостей от отсутствующих в системе пакетов
aptitude purge foo apt-get purge foo удаление пакета foo вместе с его конфигурационными файлами
aptitude clean apt-get clean очистка локального хранилища полученных файлов пакетов
aptitude autoclean apt-get autoclean как и предыдущая команда, но удаляет также пакеты, которые больше не могут быть получены
aptitude show foo apt-cache show foo отобразить детальную информацию о пакете foo
aptitude search <regex> apt-cache search <regex> поиск в имени и описании пакета в соответствии с заданным регулярным выражением
aptitude why <regex> объяснение почему определенный пакет должен быть установлен в системе
aptitude why-not <regex> объяснение почему определенный пакет не должен быть установлен в системе

Расширенные функции

Наиболее часто встречающиеся расширенные функции подробно описаны в официальных руководствах, я позволю себе позаимствовать также и эту информацию, осуществив её перевод и снабдив необходимыми на мой взгляд комментариями.

Команда Описание
COLUMNS=120 dpkg -l <package_name_pattern>
dpkg -L <имя_пакета> полный список установленных файлов для определенного пакета
dpkg -L <имя_пакета> | egrep ‘/usr/share/man/man.*/.+’ список справочных страниц определенного пакета
dpkg -S <шаблон_имен_файлов> список файлов установленных пакетов, которые имеют совпадения с шаблоном
apt-file search <шаблон_имен_файлов> список пакетов из локального архива, в именах которых имеется совпадение с шаблоном
apt-file list <шаблон_имен_файлов> список содержимого пакетов из архива, в названии которых имеется совпадение с шаблоном
dpkg-reconfigure 13 <имя_пакета> перенастроить определенный пакет
dpkg-reconfigure -p=low <имя_пакета> перенастроить определенный пакет с заданием минимального приоритета показываемых вопросов
configure-debian 14 централизованная перенастройка пакетов, использующих debconf
dpkg –audit анализ системы на предмет частично установленных пакетов
dpkg –configure -a перенастроить распакованный пакет. Вместе с опцией -а все распакованные, но не настроенные пакеты будут настроены
apt-cache policy <имя_двоичного_пакета> проверяет статус пакетов
apt-cache madison <имя_пакета> показывает доступную версию и информацию об архивах пакета
apt-cache showsrc <имя_двоичного_пакета> показывает исходную информацию о пакете
apt-get build-dep <имя_пакета> установка пакетов, необходимых для компиляции пакетов исходных кодов 15
aptitude build-dep <имя_пакета> install required packages to build package
apt-get source <имя_пакета> скачивание пакета исходного кода 16
dget <URL for dsc file> загрузка пакета исходных кодов (может использоваться в сценарии установки ПО из нестабильной ветки дистрибутива 17)
dpkg-source -x <имя_пакета>_<версия>-<версия_debian>.dsc dpkg-source входит в пакет dpkg-dev 18. команда означает сборку 19 пакета из трех файлов (“*.orig.tar.gz”, “*.debian.tar.gz”/”*.diff.gz”)
debuild binary 20 сборка пакета
make-kpkg kernel_image сборка ядра
make-kpkg –initrd kernel_image сборка ядра с ключом initrd
dpkg -i <имя_пакета>_<версия>-<версия_debian>_<arch>.deb установка пакета
debi <имя_пакета>_<версия>-<версия_debian>_<arch>.dsc установка .dsc-пакета в систему
dpkg –get-selections ‘*’ >selection.txt сохранить список пакетов и их статусов в файл
dpkg –set-selections <selection.txt задать список состояний выбора пакетов
echo <имя_пакета> hold | dpkg –set-selections  установить состояние определенного пакета в hold

На этом я закончу обзор управления пакетами, несмотря на то, что огромная часть информации так и не была затронута. Тематика менеджеров пакетов на удивление исчерпывающе описана в достаточно большом количестве официальных источников. Ниже представлены лишь некоторые из них, которые я использовал при написании статьи:

APT HOWTO (Obsolete Documentation)

HOWTO: репозиторий Debian

Часто задаваемые вопросы о Debian GNU/Linux (главы 6, 7)

Debian Reference (глава 2)

Debian Policy Manual

Руководство пользователя aptitude

Краткий справочник по Debian

Также могут быть полезны ресурсы смежных дистрибутивов:

Репозитории Ubuntu

В любом случае я не ставил задачу описать все нюансы работы с пакетами. Статья предназначена прежде всего для аккумулирования опыта из общедоступных источников, коллекционирования ссылок на наиболее полезные ресурсы и небольшого обзора самых фундаментальных положений и функций.

Notes:

  1. Часто задаваемые вопросы о Debian GNU/Linux – 7.1 Что такое пакет Debian?
  2. Часто задаваемые вопросы о Debian GNU/Linux – 7.8 Что такое виртуальный пакет?
  3. Debian Policy Manual – 5.6 List of fields
  4. Debian Policy Manual – 2.5 Priorities
  5. Debian Policy Manual – Chapter 7 Declaring relationships between packages
  6. Часто задаваемые вопросы о Debian GNU/Linux – 7.5 Зачем нужен файл conffile?
  7. Часто задаваемые вопросы о Debian GNU/Linux – 7.6 Зачем нужны сценарии preinst, postinst, prerm и postrm?
  8. Debian Reference – 2.1.7. The event flow of the package management
  9. Часто задаваемые вопросы о Debian GNU/Linux – 8.1 Какие программы для управления пакетами имеются в Debian?
  10. Debian Reference – 2.2.1. apt-get / apt-cache vs. aptitude
  11. AptPreferences
  12. Debian Reference – 2.2.2. Basic package management operations with the commandline
  13. dpkg-reconfigure
  14. Package: configure-debian
  15. APT HOWTO (Obsolete Documentation) – 6.2 Пакеты, необходимые для компиляции пакетов исходных текстов
  16. APT HOWTO (Obsolete Documentation) – 6.1 Скачивание пакетов исходных текстов
  17. SimpleBackportCreation
  18. Package: dpkg-dev
  19. Руководство начинающего разработчика Debian – Глава 6. Сборка пакета
  20. debuild
Яндекс.Метрика