Deb-пакеты: формат и зависимости

Формат пакетов (deb) дистрибутива Debian, как и основанные на нём средства пакетного менеджмента -- в числе выдающихся достижений его разработчиков, унаследованное всеми Debian-клонами и дериватами. Во многом именно они и предопределили успех производных от него дистрибутивов, в том числе и тех, которые, как Ubuntu, популярностью превзошли родителя.

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

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

Понятие зависимостей в Debian и его производных отличается от принятого в большинстве других дистрибутивов (и вообще ОС Unix-семейства). Как уже неоднократно отмечалось ранее, обычно различаются только

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

В Debian зависимости имеют несколько градаций: обязательные (depends), настоятельно рекомендуемые (recommends), рекомендуемые умеренно настойчиво (suggests), конфликтующие (conflicts). Первая градация -- это обычные “жесткие” зависимости. С последними тоже понятно -- это, так сказать, анти-зависимости. Ну а настоятельно рекомендуемые и рекомендуемые просто -- это две разновидности “мягких” зависимостей. То есть первая категория как бы более нужная, нежели вторая. Впрочем, таково субъективное мнение майнтайнера данного пакета -- вполне возможно, что у пользователя будут иные потребности. И это мы учтем при выборе средства управления пакетами.

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

Кроме зависимостей, в системах пакетного менеджмента Debian важно также понятие приоритета пакета. отражающее степень необходимости его для функционирования системы, например: обязательный (required), без которого функционирование системы невозможно, основной (base) и важный (important), также оказывающиеся практически необходимыми, стандартный ( -- то есть имеющийся практически в любой полнофункциональной Linux-системе, дополнительный (optional) -- тут уж степень важности каждый должен решать для себя.

Как это принято в мире Open Source, все бинарные пакеты Debian (а также, конечно, Ubuntu и других клонов) сопровождаются исходными текстами, доступными из репозиториев дистрибутива. И здесь Debian проявляет свою специфику: каждый пакет в исходниках обычно включает три файла -- packagename.orig.tar.gz, packagename.dsc и packagename.diff.gz.

Первый -- самый обычный тарбалл исходных текстов авторского пакета, что подчеркивается словом orig в его имени: имя и система нумерации версий также совпадают с таковыми авторского пакета. Файл packagename.dsc содержит в себе всю метаинформацию, необходимую для правильного построения из него бинарного deb-пакета (как -- будет рассказано в следующих разделах). А packagename.diff.gz -- это те изменения исходного кода, которые вносятся для адаптации пакета непосредственно к данному дистрибутиву. Если таких изменений не потребовалось (или если пакет писался именно для Debian), он может и отсутствовать.


Теги: , ,