Как создать DEB-пакет для Debian-подобной системы

DEB-пакет — это архив, который содержит скомпилированные файлы программы, исходники (по необходимости), конфигурации, медиа и скрипты установки. В мире Debian/Ubuntu/Kali DEB выполняет роль аналогичную EXE на Windows и обеспечивает управление зависимостями и инсталляцией через dpkg/apt.
Ниже — пошаговое руководство по созданию собственного DEB-пакета с практическими советами, чеклистами, шаблонами файлов и разделом по отладке.
Что нужно знать заранее
- Коротко: DEB-пакет упаковывает файлы в удобную для dpkg структуру и содержит метаданные (файл control) с зависимостями и информацией об авторе.
- Термин в одну строку: control — метаданные пакета; rules — сценарии сборки, похожие на Makefile.
Подготовка окружения и инструменты
Установите необходимые пакеты (локализация команд сохранена):
sudo apt update
sudo apt install build-essential binutils lintian debhelper dh-make devscripts gnupgПояснения:
- build-essential, binutils — инструменты компиляции и линковки;
- lintian — проверка качества пакетов;
- debhelper, dh-make — помощники по созданию структуры Debian;
- devscripts — набор скриптов для разработчиков пакетов;
- gnupg — создание ключей для подписи пакетов.
Важно: используйте ту же версию инструментов, что в целевой дистрибуции, чтобы избежать проблем с совместимостью.
Пошаговое создание пакета
Шаг 1. Выбор программы
Перед началом проверьте, не существует ли уже пакет в репозиториях:
apt-cache search package-nameПроверьте лицензию, безопасность и свяжитесь с автором при необходимости. Если планируете публиковать пакет в Debian/Ubuntu, следуйте политикам лицензий и практикам безопасности.
Шаг 2. Подготовьте исходники
Создайте рабочую директорию в домашней папке, распакуйте исходники и ознакомьтесь с INSTALL/README:
cd ~
mkdir package-work
cd package-work
tar -zxvf rsyslog-6.3.6.tar.gz
cd rsyslog-6.3.6Часто шаги сборки стандартны: ./configure, make, make install. Запустите ./configure –help, чтобы увидеть опции.
Шаг 3. Добавьте информацию о разработчике
Экспортируйте контакт и имя, которые попадут в поле Maintainer:
export DEBEMAIL="your@mail.com"
export DEBFULLNAME="Имя Фамилия"Затем запустите dh_make для инициализации шаблонов Debian:
dh_makeПри запросе выберите тип пакета (single, lib, multiple и др.) и подтвердите. Если требуется, используйте –createorig для создания исходного архива с расширением .orig:
dh_make --createorigПосле этого в родительской директории появится архив *.orig.tar.xz, а в текущей — директория debian с набором шаблонных файлов.

Шаг 4. Структура каталога debian и важные файлы

Ключевые файлы и их назначение:
- control — метаданные пакета (Source, Section, Priority, Maintainer, Build-Depends, Depends, Description);
- copyright — информация о лицензии и правах;
- changelog — журнал изменений; debian/changelog влияет на номер версии в пакете;
- rules — правила сборки (Makefile-подобный файл); по умолчанию используется dh и набор целей;
- README.Debian, conffiles, cron.d, dirs, docs, init.d.example — примеры и вспомогательные файлы.

Пример сокращённой секции control (наглядно, изменяйте под свой пакет):
Source: rsyslog
Section: utils
Priority: optional
Maintainer: Имя Фамилия
Build-Depends: debhelper (>= 9), libssl-dev, pkg-config
Standards-Version: 3.9.8
Homepage: https://www.rsyslog.com
Package: rsyslog
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libc6 (>= 2.17)
Description: высокопроизводительный демон системного логирования
Быстрое и гибкое решение для централизованного сбора логов. Шаг 5. Настройте скрипты и файлы конфигурации
- Правьте debian/rules, если требуется нестандартная последовательность сборки.
- Помните о debian/conffiles: список файлов, которые считаются конфигурационными и не должны перезаписываться при апдейте без вмешательства пользователя.
- Удаляйте суффикс .ex у примеров, если используете их; файлы с .ex оставлять как образцы.

Шаг 6. Сборка пакета
Соберите пакет:
dpkg-buildpackage -us -uc- -us -uc — опции, которые пропускают подпись исходников и файла .changes; при релизной сборке подпишите.
Если сборка падает, попробуйте:
dpkg-buildpackage -nc -i- -nc игнорирует чистку перед сборкой (useful при отладке);
- -i игнорирует определённые файлы.
После успешной сборки в родительском каталоге появятся .deb, .dsc, .changes и исходные архивы. Установите пакет для теста:
sudo dpkg -i ../rsyslog_6.3.6_amd64.deb
Если apt жалуется на неудовлетворённые зависимости, исправьте Depends в debian/control и пересоберите.
Подпись пакета и GPG
dpkg-buildpackage может использовать GPG-ключ для подписи изменений и .changes файла. Создайте ключ, если у вас его нет:
gpg --gen-keyПроверьте список ключей:
gpg --list-keysУбедитесь, что DEBEMAIL совпадает с email ключа. Для подписи не забудьте убрать флаги -us -uc или подписать вручную:
dpkg-buildpackage -k'YOUR_KEY_ID'Проверка качества и отладка
- lintian ../название_пакета_version_arch.deb — автоматически проверит на типичные ошибки пакетов;
- dpkg -i и последующий apt-get -f install — покажут, какие зависимости отсутствуют;
- проверяйте, какие файлы попали в пакет: dpkg -c пакет.deb или ar x пакет.deb && tar tvf data.tar.*
Типичные ошибки и как их избегать
- Неправильные Depends: используйте ${shlibs:Depends} и ${misc:Depends} в control; генерируйте зависимости при помощи dh_shlibdeps.
- Файлы конфигурации перезаписываются: добавьте их в debian/conffiles.
- Скрипты postinst/preinst/ prerm/postrm содержат bash-ошибки: тестируйте их отдельно и делайте их максимально идемпотентными.
Чеклист перед публикацией
- Проверены зависимости и указаны минимальные версии;
- Лицензия корректно оформлена в debian/copyright;
- Changelog прописан и соответствует правилам (формат dch может помочь);
- Пройден lintian без критических ошибок;
- Пакет подписан GPG-ключом;
- Тесты установки и удаления пройдены (dpkg -i, dpkg -r).
Ролевые чеклисты
Разработчик:
- Упаковать релизную версию исходников;
- Обеспечить корректный номер версии и совместимость API;
- Подготовить README и инструкции по миграции конфигураций.
Пакер/дистрибьютор:
- Проверить соблюдение политики Debian/Ubuntu;
- Выполнить lintian и ручную проверку postinst/preinst скриптов;
- Подписать пакеты и подготовить .changes для репозитория.
Методология упаковки (мини-метод)
- Подготовьте чистую исходную директорию и отметьте версию.
- Сгенерируйте debian/ с dh_make.
- Отредактируйте debian/control, rules, changelog.
- Соберите пакет локально, исправьте ошибки lintian.
- Подпишите и тестируйте на чистой VM/контейнере.
Шаблон содержимого debian/control
Используйте этот шаблон как стартовую точку и адаптируйте:
Source: myapp
Section: utils
Priority: optional
Maintainer: Имя Фамилия
Build-Depends: debhelper (>= 11), dh-autoreconf, autotools-dev
Standards-Version: 4.5.0
Package: myapp
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, python3
Description: Короткое описание
Длинное описание с переносами и деталями. Критерии приёмки
- Пакет устанавливается и удаляется без ошибок (dpkg -i / dpkg -r).
- Все файлы попадают в ожидаемые каталоги (/usr/bin, /usr/lib и т.д.).
- Обновления не перезаписывают пользовательские конфигурации без предупреждения.
- lintian не выдаёт ошибок уровня error.
Тест-кейсы для проверки пакета
- Установка на минимальную систему: dpkg -i; проверить ошибки зависимостей.
- Обновление версии: установить старую версию, затем новую; проверить миграцию конфигов.
- Удаление и очистка: dpkg -r и dpkg -P; убедиться, что конфигурации сохраняются или удаляются согласно политике.
- Проверка скриптов: симулировать отсутствие сетевого доступа, папок и прав.
Отладочный плейбук и runbook
Если сборка падает в dpkg-buildpackage:
- Запустите dpkg-buildpackage -nc -i и проанализируйте вывод.
- Проверьте debian/rules на нестандартные вызовы.
- Выполните сборку в chroot (sbuild или pbuilder) для воспроизводимости.
- Запустите lintian и исправьте выявленные ошибки.
Советы по безопасности и приватности
- Убедитесь, что в пакете нет случайно включённых секретов (паролей, ключей) — проверьте с gitignore/grep.
- Проверьте лицензии всех включённых библиотек — соблюдение авторских прав важно для публикации.
- Если пакет собирает или пересылает пользовательские данные, документируйте поведение и соблюдайте требования локального законодательства о защите данных.
Совместимость и миграция версий
- Используйте Standards-Version и указывайте Build-Depends с минимальными версиями инструментов.
- Тестируйте на целевых релизах (например, Debian Stable, Ubuntu LTS) с помощью chroot или контейнеров.
Примеры команд для отладки и анализа .deb
- Просмотр содержимого .deb: ar t pkg.deb
- Извлечение: ar x pkg.deb; tar -xf data.tar.gz
- Просмотр списков файлов: dpkg -c pkg.deb
- Проверка зависимостей: dpkg-shlibdeps ./usr/bin/yourbinary (при сборке)
Decision flowchart
flowchart TD
A[Начало: есть исходники?] -->|нет| B[Получить/скачать исходники]
A -->|да| C{Исходники упакованы?}
C -->|нет| D[Создать tarball и пометить версию]
C -->|да| E[Запустить dh_make]
D --> E
E --> F[Редактировать debian/control и rules]
F --> G[dpkg-buildpackage]
G --> H{Сборка успешна?}
H -->|да| I[lintian -> исправить предупреждения]
H -->|нет| J[Отладка сборки]
J --> G
I --> K[Подписание и тесты]
K --> L[Готово к публикации]Когда упаковка не подходит или стоит изменить подход
- Если цель — быстро распространить бинарник внутри локальной сети, возможно, проще использовать tarball и системный менеджер конфигураций (Ansible, Salt) вместо DEB.
- Для сложных языковых сред (Python, Node.js) рассмотрите использование виртуальных окружений, контейнеров или специализированных пакетов (wheel, npm), а DEB — как обёртку для системной установки.
Локальные особенности и альтернативы в России
- Для внутреннего распространения в организации удобно настроить локальный apt-репозиторий (reprepro, aptly).
- Для пользователей внутри компании предоставьте инструкцию по добавлению репозитория и установке GPG-ключа доверенного репозитория.
Краткое резюме
Подготовка DEB-пакета — повторяемый инженерный процесс: инициализация шаблонов, правка метаданных, сборка, тесты и подпись. Сначала делайте тестовые сборки и проверяйте lintian; затем автоматизируйте сборку в CI и публикуйте в репозитории.
Полезные команды-справочник
- Инициализация: dh_make –createorig
- Сборка: dpkg-buildpackage -us -uc
- Установка пакета: sudo dpkg -i package.deb
- Проверка: lintian package.deb
- Просмотр содержимого: dpkg -c package.deb
Частые ошибки и быстрые исправления
- Ошибка: unmet dependencies — дополните Depends и пересоберите.
- Ошибка: configuration files replaced — добавьте путь в debian/conffiles.
- Ошибка: postinst failing — проверьте права и синтаксис скрипта.
Глоссарий (1 строка на термин)
- DEB: формат пакета для Debian-подобных систем.
- dpkg: низкоуровневый менеджер пакетов Debian.
- apt: высокоуровневый менеджер пакетов (работает с репозиториями).
- dh_make: генератор шаблонов debian/.
- lintian: инструмент проверки качества Debian-пакетов.
Короткое объявление: если вы хотите начать распространять приложение для Debian/Ubuntu, упаковка в DEB — стандартный и надёжный путь. Следуйте чеклистам в этом руководстве и тестируйте пакеты в чистых окружениях.