Сборка DEB пакета

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

Структура пакета

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

Пример структуры каталогов в проекте

Как видно, в проект добавлены две директории build и dist:

  • build — содержит файлы и директории необходимые для создания deb или yum пакетов
  • dist — будет содержать результат сборки пакета

Файл control (DEBIAN/control)

Файл control — это ядро Debian пакета, он содержит краткую информацию о пакете программного обеспечения, такие как наименование, версия, описание, целевая архитектура, зависимости от других пакетов и т.д.

Package: project-identity
Version: 0.1.0
Architecture: all
Essential: no
Section: web
Priority: optional
Depends: python (>=3.5)
Maintainer: Vyacheslav Anzhiganov
Installed-Size: 123
Description: The Identity Server.

Отдельно нужно отметить некоторые особенности:

  • Значение Architecture может содержать одно из значений: i386, amd64, all
  • Значение Installed-Size необходимо указывать в килобайтах
  • Список зависимостей (Depends) необходимо указать через запятую.

Файл conffiles (DEBIAN/conffiles)

Список файлов пакета, являющихся конфигурационными содержащихся в Debian пакете. При обновлении файлы из этого списка не перезаписываются новыми, если это не указано отдельно. При удалении пакета пользователь или системный администратор, имеющий дело с пакетом, может не захотеть удалять свои файлы конфигурации. Запуская команду sudo apt-get remove project-identity будут удалены файлы пакета кроме тех файлов, что перечислены в файле DEBIAN/conffiles.

Пример содержания

/etc/project/identity/config.yml
/etc/systemd/system/project-identity.service

Если пользователь действительно желает удалить все содержащиеся файлы, то для этого можно использовать команду sudo apt-get purge project-identity.

Файл md5sums (DEBIAN/md5sums)

Этот файл содержит список MD5 контрольных сумм для всех файлов содержащихся в пакете которые извлекаются в систему. Данный файл можно сгенерировать следующей командой:

$ find . -type f ! -regex '..hg.' ! -regex '..git.' ! -regex '.?debian-binary.' ! -regex '.?DEBIAN..' -printf '%P ' | xargs md5sum > DEBIAN/md5sums

Пример содержания

a35165e6d7c3602272a5454bbf56c637  DEBIAN/control
d41d8cd98f00b204e9800998ecf8427e DEBIAN/postinst
9a28e0023626a83fefa157158335ab98 DEBIAN/md5sums
5721d20eef1036e51580189a824b6557 DEBIAN/prerm
95469311bb899ee1cf01dfe333205a5b DEBIAN/conffiles
d41d8cd98f00b204e9800998ecf8427e usr/bin/project-identity
70d20ec30f9095ebe24ee8e8778a443f etc/project/identity/config.yml
4777177332318640a0a7bb451bf61434 etc/systemd/system/project-identity.service

Файлы скриптов postinst и prerm (DEBIAN/postinst и DEBIAN/prerm)

Необязательные скрипты, выполняемые соответственно до и после установки или удаления пакета.

Множеству пакетов при установке и удалени необходимо выполнят определённый набор действий.

Многие пакеты должны выполнять действия до или после определенных событий в процессе установки или удаления пакета. Пакеты Debian приспосабливаются к этому через сценарии. Пример скрипта postinst, который запускается после установки:

#!/bin/sh
systemctl enable project-identity
systemctl status project-identity

Аналогичным образом работает скрипт prerm:

#!/bin/sh
rm /var/log/project/identity_err.log

Остальные файлы и директрии

Остальные файлы и директории, повторяют расположение файлов в файловой системе после установки пакета относительно корня, например, исполняемый файл usr/bin/project-identity после установки будет располагаться в файловой системе по следующему пути: /usr/bin/project-identity.

Создание пакета

Когда всё готово, собрать .deb пакет можно при помощи следующей команды:

$ dpkg -b build/pkg-debian/ dist/project-identity_0.1.0_all.deb

Результат успешного выполнения:

dpkg-deb: building package 'project-identity' in 'dist/project-identity_0.1.0_all.deb'.

См. также:

Поделиться ссылкой: