мета-данные страницы
Это старая версия документа!
deb пакет
Deb-пакет это обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой. При помощи программы ar упаковано в один файл:
- Архив control.tar.gz, содержащий скрипты, написанные майнтенером пакета, использующиеся при установке/удалении пакета, а так же другие служебные файлы;
- Архив data.tar.gz, содержащий двоичные файлы (в случаи с бинарным пакетом) программы, ради которой создан пакет;
- Файл debian-binary.
Собирается пакет программой dpkg из специально подготовленной структуры каталогов:
mypkg/ DEBIAN/ path/to/dir/file1 path/to/dirX/fileX
то есть:
- Файлы и каталоги, предназначенные для установки в систему. Их расположение в архиве соответствует положению их в файловой системе если считать от корня. Например файл usr/share/doc/package/copyright в deb-архиве после установки будет находиться в /usr/share/doc/package/copyright (все они будут упакованы в архив data.tar.gz);
- Каталог DEBIAN/, содержащий служебную информацию о пакете (о ней пойдет речь ниже). Содержимое этого каталога при сборке будет упаковано в архив control.tar.gz;
DEBIAN/
Обязательное содержимое
Файл control - этот файл содержит всю описательную информацию на пакет, как то:
- Короткое описание пакета (одна строка);
- Полное описание пакета (один или несколько абзацев);
- Имя и координаты майнтенера, создавшего пакет;
- Номер версии программы (пакета);
- Имя раздела которому принадлежит пакет;
- Перечень пакетов от которых зависит пакет (несколько видов зависимостей: строгие, нестрогие, конфликты итп);
- Уровень важности пакета;
- Имя и версию src-пакета из которого собран данный deb-пакет (если есть таковой);
- Архитектуру для которой данный пакет собран;
- Некоторые другие параметры.
Опциональное содержимое
md5sums
md5sums - Содержит md5 хеши для всех файлов кроме файлов находящихся в каталоге DEBIAN/. Данный файл необязателен для deb-пакета, однако программы верификации пакетов считают пакеты, несодержащие этот файл ошибочными. Может использоваться некоторыми программами администрирования системы для верификации изменений в файловой системе.
Скрипты для установки/удаления пакета
Пакет может содержать несколько скриптов (или программ), которые будут вызываться при установке/удалении пакета. Эти скрипты позволяют майнтенеру выполнять некоторые действия при установке/удалении. Например этими скриптами могут создаваться/удаляться каталоги в которых программа будет хранить свои временные данные, может производиться добавление/удаление программы в меню вашего оконного менеджера, первичное конфигурирование программы и так далее.
Виды скриптов:
preinst- скрипт, вызывающийся перед распаковкой пакета в файловую систему. Обычно при помощи этого скрипта пользователю задаются вопросы, позволяющие позже сконфигурировать программу. Так же возможно производится сбор информации, которая потребуется позже для конфигурирования программы. Если скрипт завершится с кодом ошибки, то пакет не будет установлен в систему;postinst- скрипт, вызывающийся после распаковки пакета. При помощи этого скрипта производится конфигурирование уже установленной программы. Конфигурирование происходит с использованием информации полученной на предыдущем этапе от пользователя. Задавать вопросы пользователю из скрипта postinst не принято.;prerm- скрипт, вызывающийся перед удалением пакета. Может задать пользователю некоторые вопросы, связанные с удалением. Например вопрос что делать с лог-файлами итп. Если скрипт завершится с кодом ошибки, пакет останется установленным в систему;postrm- скрипт, вызывающийся после удаления пакета;config- скрипт, вызывающийся на стадии конфигурирования и переконфигурирования пакета. Это дополнительный скрипт, который используется системой Debconf. Вызывается перед скриптом postinst, используется для того чтобы задать пользователю вопросы в системе диалогов debconf.
В разных ситуациях эти скрипты вызываются с разными опциями. В общем виде пакет может:
- Устанавливаться в систему (первичная установка);
- Устанавливаться новая версия пакета (upgrade);
- Устанавливаться старая версия пакета (downgrade);
- Удаляться из системы.
Соответственно порядок вызова скриптов и опции их вызова может быть разный. Скрипты могут вызываться со следующими параметрами (полный перечень можно найти в Debian-policy):
templates
Если используется возможность конфигурации/реконфигурации пакета в системе Debconf (скрипт config), то этот файл содержит шаблоны диалогов с пользователем.
conffiles
Содержит перечень файлов пакета, которые являются конфигурационными. По одному файлу на одну строку. Эти файлы при апгрейдах пакета заменяться не будут (или же будут задаваться вопросы с предложением о замене). Подробнее о содержимом см. man debconf-devel.
Утилиты для работы/генерации содержимого DEBIAN/
dpkg-gencontrol
Осуществляет генерацию файла control на базе шаблона этого файла, составляемого майнтенером, а так же дополнительных параметров, передаваемых из командной строки. В частности, устанавливает номер версии пакета, архитектуру итп. Номер версии обычно берется из файла changelog, однако иногда бывает необходимо из одного src-пакета собрать несколько deb-пакетов с разными номерами версий. Опция -v поможет Вам в этом.
dpkg-shlibdeps
Вычисляет зависимости для исполняемых файлов и библиотек. Майнтенер обычно указывает Build-зависимости (зависимости сборки), а Depend-зависимости (зависимости необходимые для работы) вычисляются с помощью этой (или подобных) утилит. Такой подход дает возможность не привлекать майнтенера при смене имен библиотек от которых зависит пакет.
dpkg-parsechangelog
Позволяет извлекать из changelog-файла некоторые параметры, вроде номера версии, координат и имени майнтенера итп. Результаты работы этой утилиты могут использоваться как входные параметры для утилит вроде dpkg-gencontrol.
dpkg-architecture
Позволяет извлекать информацию (манипулировать ей) об архитектуре системы для которой собирается пакет или на которой собирается пакет. Выходные данные так же могут использоваться для использования в других утилитах. Например при генерации файла control утилитой dpkg-gencontrol.
Проверка соответствия пакета современным требованиям Debian
После того как пакет создан, можно получить информацию о его содержимом с помощью вышеупомянутой утилиты dpkg:
dpkg -I package.deb- выведет общую информацию о пакете, включая содержимое control-файла;dpkg -c package.deb- выведет полный перечень файлов пакета.
После этих двух проверок (все файлы на месте, информация в финальном control корректна), можно запустить одну из двух проверки пакета на соответствие текущему полиси.
Такие проверки осуществляются при помощи программы lintian. Проверяются такие параметры, как правильность расположения двоичных файлов, наличие man-страниц, проверяется на наличие ошибок описание пакета в control-файле, просматривается файл copyright и так далее. Идеальный вариант - добиться от создаваемого пакета такого состояния, что lintian не выводит предупреждений/сообщений об ошибках:
lintian -is package.deb- покажет подробную информацию о проблемах в пакете.