Ранее мы уже говорили о том, что такое бинарный пакет. Сегодня разберемся с тем, как его создать, рассмотрим архитектурные правила сборки и узнаем про практическую ценность некоторых файлов, которые используются при дебианизации.
Сразу хочу указать на то, что данный пост не является абсолютным HOWTO по созданию пакетов. Тут мы разберем основы и потом, в следующий публикациях будем уходить вглубь по отдельным аспектам, тем самым, шаг за шагом, формируя целостную картину.
Что такое дебианизация?
Дебианизация - это процесс упаковки ПО в .deb бинарный пакет для распространения внутри "Debian based" операционных системах, таких как Ubuntu, Mint, сам Debian и т.д. Хорошо проработанный пакет позволит без особых проблем развернуть необходимое ПО на целевой системе, без необходимости в ручной компиляции и сборке.
Что нужно для создания .deb пакета?
На примере моего любимого композитора picom разберем основные правила дебианизации, посмотрим на уже рабочую структуру и поймем, что к чему.
Сборка любого .deb пакета начинается с создания debian директории в корне проекта. Данный каталог будет содержать в себе все необходимые для дебианизации файлы, в которых будет прописан ряд правил по упаковке софта:
$ cd picom-10.2/debian
$ ls -l
-rw-rw-r-- changelog
-rw-rw-r-- control
drwxrwxr-x patches
-rwxrwxr-x rules
...
Для конфигурации пакета может использоваться множество различных файлов, основными необходимыми являются control, rules и changelog:
1. control - содержит различного рода информацию, необходимую инструментам пакетирования: dpkg, apt-get, apt-cache и т.д. В данный файл принято прописывать список зависимостей, которые пакетный менеджер будет проверять и, по возможности, подтягивать из репозиториев.
Control может включать в себя уйму полей. Как пример, Package: <name>, необходим для определения имени пакета и создания, на этапе сборки, каталога установки:
$ pwd
picom-10.2/debian/picom/
$ ls
etc usr
$ cd usr/bin && ls
compton picom
При инсталляции, файлы, которые лежать внутри picom, по идентичной иерархии перенесутся в системные директории.
2. rules - исполняемый Makefile, который в полной мере управляет процессом сборки и отрабатывает через утилиту make. Тут можно указать набор правил и инструкций, которые будут выполняться на разных этапах:
1) на этапе конфигурации создаем директорию build, в которю помещяем результат работы команды meson:
override_dh_auto_configure:
mkdir -p debian/build
cd debian/build
meson --prefix=/usr ../..
2) на этапе сборки вызываем, сгенерированные утилитой meson, ninja файлы и выполняем компиляцию проекта. Результат компиляции будет лежать в рамках каталога build:
override_dh_auto_build:
cd debian/build && ninja -v
3) на этапе установки заходим в директорию build, записываем в переменную DESTDIR путь, по которому ninja install выполнит перенос готовых бинарников и конфигов:
override_dh_auto_install:
cd debian/build
DESTDIR=${CURDIR}/debian/picom ninja install
3. changelog - файл версионирования, который содержит историю изменений, внесенных в ПО. Его роль не ограничивается только отслеживанием правок. По указанной в нем информации, которая находится после названия приложения (<версия>-<ревизия>), формируется итоговое имя пакета:
picom (9.1-1) unstable; urgency=medium
* New upstream version 9.1
-- Nikos Tsipinakis <nikos@tsipinakis.com>
В результате сборки мы получим пакет с именем picom_9.1-1_amd64.deb, где picom сформировался по значению поля Package из файла control, версия 9.1-1 подставилась из changelog и архитектура amd64 определилась автоматически.
И вот уже с этим минимальным набором файлов можно создать бинарный пакет. После того, как конфигурация готова, выходим из директории debian на уровень выше и запускаем сборочный процесс:
$ cd ..
$ sudo dpkg-buildpackage -b -us -uc