Создание DEB-пакета для Debian-подобного дистрибутива

Краткое определение. DEB — это формат установки пакетов в Debian и производных (Ubuntu, Kali и т. д.). Файл .deb содержит бинарники, конфигурацию, скрипты инсталляции и метаданные.
Почему это важно
- Позволяет распространять и устанавливать программы централизованно.
- Обеспечивает управление зависимостями через apt/dpkg.
- Облегчает автоматизацию развёртывания и обновлений.
Содержимое статьи
- Подготовка окружения
- Выбор пакета и лицензии
- Создание дерева исходников и debian/
- Описание ключевых файлов debian/
- Сборка, подпись и тестирование
- Чеклисты, методология и отладка
Что понадобится
Кратко: терминал, исходники программы (tar.gz), базовые пакеты сборки, аккаунт для подписи GPG.
Шаг 1 Установка необходимых пакетов
Установите утилиты, которые помогут вам собрать DEB:
sudo apt update
sudo apt install build-essential binutils lintian debhelper dh-make devscriptsПояснение: build-essential — компиляторы и утилиты; dh-make и debhelper автоматизируют создание структуры пакета; lintian проверяет готовый .deb на типичные ошибки.
Шаг 2 Выбор программы и лицензии
Перед сборкой:
- Проверьте, не содержится ли пакет уже в репозиториях:
apt-cache search package-name- Убедитесь, что лицензия совместима с правилами Debian. Часто используется GPL.
- Оцените риски безопасности и зависимости.
- По возможности свяжитесь с автором и уведомите разработчиков Debian, если планируете загрузить пакет в официальные репозитории.
Важно: пакеты с закрытым проприетарным кодом можно упаковывать, но для включения в main требуются совместимые лицензии.
Шаг 3 Подготовка рабочего каталога и исходников
Создайте отдельный каталог в домашней директории и распакуйте исходники:
cd /home
mkdir package
cd package
tar -zxvf rsyslog-6.3.6.tar.gz
cd rsyslog-6.3.6Прочитайте файлы INSTALL и README. Часто стандартная последовательность сборки:
./configure
make
sudo make installНо для сборки пакета мы не будем делать make install в систему — собираем в пакет.
Шаг 4 Указание данных разработчика и инициализация debian/
Экспортируйте данные упаковщика (они попадут в файл control как Maintainer):
export DEBEMAIL="you@example.com"
export DEBFULLNAME="Имя Фамилия"Запустите dh_make для создания шаблона debian/:
dh_makeВыберите тип пакета (single binary, library и т.д.) и нажмите Enter.
После dh_make в родительском каталоге появится файл .orig (архив оригинальных исходников). Если он не создан, используйте --createorig.
ls
# пример вывода
# rsyslog-6.3.6 rsyslog_6.3.6.orig.tar.xz rsyslog-6.3.6.tar.gzВнутри исходной папки появится каталог debian/. В нём находятся все мета‑файлы пакета.
Шаг 5 Файлы в каталоге debian
Ниже — ключевые файлы и их роль. Краткие определения в одну строку помогут ориентироваться.
- control — метаданные пакета и зависимости.
- copyright — информация о лицензии и авторских правах.
- changelog — история изменений пакета.
- rules — Makefile-подобный скрипт сборки пакета.
- conffiles, dirs, docs и примеры скриптов обслуживания — вспомогательные файлы.
control
Файл control содержит поля Source, Binary, Section, Priority, Maintainer, Build-Depends, Depends, Description и другие.
Пример мини-образца (отредактируйте под ваш проект):
Source: rsyslog
Section: utils
Priority: optional
Maintainer: Имя Фамилия
Build-Depends: debhelper (>= 9), libssl-dev
Standards-Version: 3.9.8
Homepage: https://www.rsyslog.com/
Package: rsyslog
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libc6 (>= 2.7)
Description: системный демон для логирования
Короткое описание пакета.
Длинное описание — несколько строк, поясняющих назначение. Пояснение: ${shlibs:Depends} и ${misc:Depends} генерируются автоматически dpkg-shlibdeps и dh_installdeb.
copyright
Файл содержит лицензионную информацию и указание на источник исходников. Следуйте шаблону DEP-4.
changelog
Записывайте каждое изменение, релиз или исправление. Формат поддерживает dpkg-версионирование и управление через dch (devscripts).
Команда для добавления записи:
dch -irules
Это скрипт сборки, похожий на Makefile. Пример минимального содержимого:
#!/usr/bin/make -f
%:
dh $@Не забудьте сделать файл исполняемым:
chmod +x debian/rulesДругие файлы
- README.Debian — локальные инструкции
- conffiles.ex — список конфигурационных файлов
- cron.d.ex — правила для cron
- dirs — список директорий для создания
- docs — список документов для установки
- init.d.ex — скрипт автозапуска
Удалите или переименуйте файлы с суффиксом .ex, заменив примерные шаблоны реальными файлами.
Шаг 6 Сборка пакета
Соберите пакет командой:
dpkg-buildpackage -us -ucПояснение опций: -us -uc отключают подпись исходного архива и changelog для локальных сборок. Для релизной сборки подпишите.
Если dpkg ищет вашу GPG-подпись, создайте ключ и экспортируйте почту:
export DEBEMAIL="you@example.com"
# создайте GPG ключ: gpg --full-generate-key
gpg --list-keysЕсли сборка падает, попробуйте пропустить части, которые обычно вызывают проблемы:
dpkg-buildpackage -nc -iПосле успешной сборки .deb появится в родительском каталоге. Установите и проверьте пакет:
sudo dpkg -i ../rsyslog_6.3.6_amd64.debПроверка качества пакета
- Запустите lintian для автоматической проверки:
lintian ../rsyslog_6.3.6_amd64.deb- Проверьте зависимости: dpkg -I или apt show ./package.deb
- Тестируйте инсталляцию/удаление: dpkg -r, dpkg –purge
Критерии приёмки
- Пакет инсталлируется и удаляется без ошибок.
- Все зависимости корректно указаны в Depends.
- Конфигурационные файлы перечислены в conffiles и сохраняются при апгрейде.
- lintian не выдаёт критических ошибок.
Типичные ошибки и как их решать
- Ошибка отсутствия заголовков при сборке: установите dev-пакеты зависимостей.
- Проблемы с версированием: используйте правильный формат версии (управляйте tilde и epoch).
- Отсутствие .orig.tar.gz: используйте –createorig при dh_make.
- Проблемы с путями установки: проверьте debian/install и dh_installdocs.
Малый Руководство по отладке (Runbook)
- Повторите сборку в чистой среде (pbuilder, sbuild, Docker). Это выявит скрытые зависимости.
- Запустите dpkg-buildpackage с флагом -b для двоичной сборки и -S для исходной.
- Если ошибка связана с shlibs, выполните dh_shlibdeps вручную и посмотрите вывод.
- Для проблем при установке проверьте postinst/prerm в debian/ и корректность скриптов.
Методология упаковки — шаг за шагом
- Подготовьте исходники и версию: соответствие имени директории и версии.
- Инициализируйте debian/ через dh_make и удалите ненужные примеры.
- Заполните debian/control, debian/copyright и debian/changelog.
- Настройте debian/rules и файлы установки (debian/install, debian/docs).
- Соберите локально и прогоните lintian.
- Подпишите пакеты GPG и тестируйте в чистом окружении.
- Подготовьте исходные и бина́рные пакеты для загрузки.
Чеклист по ролям
Для Maintainer (упаковщик):
- Указан корректный Maintainer в control
- Changelog содержит заметку с версией
- Лицензия описана в copyright
- Скрипты postinst/prerm корректны и безопасны
Для CI/DevOps:
- Сборка воспроизводима в контейнере
- Пакет проходит lintian без критических проблем
- Автоматические тесты сервиса проходят после установки
Для Тестировщика:
- Установка и удаление не оставляют мусора
- Конфиги сохраняются при обновлении
- Проверены все стартовые сценарии
Ментальные модели и советы
- «Минимальные зависимости»: указывайте только необходимые пакеты. Чем меньше Depends, тем устойчивее система.
- «Песочница сборки»: всегда проверяйте сборку в чистом окружении.
- «Итерация мелкими шагами»: вносите по одной правке в debian/ и сразу тестируйте.
Альтернативные подходы
- Использовать debhelper/dh вместо ручного написания rules для упрощённой сборки.
- Применять сировую сборку в Docker для воспроизводимости.
- Для простых скриптов — создавать пакеты через checkinstall, но это не рекомендуется для релизных пакетов.
Когда стоит не использовать DEB
- Если вы раздаёте одноразовый бинарник для ограниченной аудитории, проще tar.gz.
- Для контейнеров (Docker) часто достаточно ОС-образа и не требуется .deb.
Примеры команд и сниппеты (cheat sheet)
- Сгенерировать changelog:
dch -i "Добавлен пакет rsyslog с настройками по умолчанию"- Создать чистую среду сборки с pbuilder:
sudo apt install pbuilder
sudo pbuilder create
sudo pbuilder build ../rsyslog_6.3.6.dsc- Быстрая проверка пакета:
lintian ../rsyslog_6.3.6_amd64.deb
dpkg -I ../rsyslog_6.3.6_amd64.debDecision flowchart
flowchart TD
A[Есть исходники?] -->|Да| B{Проверить лицензию}
A -->|Нет| Z[Собрать/скачать исходники]
B -->|Совместима| C[dh_make -> заполнить debian/]
B -->|Не совместима| Y[Пересмотреть лицензию или отказаться]
C --> D[Настроить control, rules, copyright]
D --> E[Собрать dpkg-buildpackage]
E --> F{Сборка успешна?}
F -->|Да| G[Тест, lintian, подпись]
F -->|Нет| H[Отладка ошибок сборки]
H --> DEdge-case галерея и миграция
- Переход с autotools на cmake: настройте debian/rules для вызова cmake и ninja/make.
- Пакет содержит крупные бинарные данные: рассмотрите размещение в отдельном пакете -data.
- Библиотеки с ABI-изменением: обновляйте SONAME и давайте новый пакет с совместной версией.
Безопасность и подпись
- Подписывайте исходные и бина́рные пакеты ключом GPG Maintainer.
- Храните приватный ключ в защищённом хранилище и используйте CI для подписи артефактов.
Локальные особенности и советы для русскоязычных пользователей
- Проверьте наличие dev-пакетов в локальных зеркалах; иногда названия пакетов могут отличаться в разных дистрибутивах.
- Для пакетов, ориентированных на Ubuntu, протестируйте в нескольких версиях (LTS и текущая).
Краткое резюме
Подготовка DEB‑пакета состоит из организации исходников, заполнения каталога debian/ и сборки через dpkg-buildpackage. Автоматизация (dh, debhelper), проверка (lintian) и подпись (GPG) повышают качество. Тестируйте сборку в чистой среде и следуйте критериям приёмки.
Важно: создание правильного пакета требует времени и итераций. Начинайте с простых пакетов и постепенно усложняйте процесс.
Ресурсы и полезные команды
- dh_make, debhelper, dpkg-buildpackage, lintian, dch, pbuilder
- Документация Debian Policy и DEP-4 для copyright
Короткая инструкция для объявления в соцсетях (анонс 100–200 слов)
Создал руководство по созданию DEB‑пакетов для Debian и производных. В статье подробно описан процесс: установка инструментов, подготовка исходников, создание каталога debian/, заполнение control и rules, сборка, подпись и тестирование. Включены чеклисты для ролей, runbook для отладки и шаблоны команд. Подходит как для начинающих, так и для тех, кто хочет автоматизировать процесс сборки и интегрировать его в CI.
Важное
Important: Всегда тестируйте пакеты в чистой среде и не подписывайте публично приватные ключи.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone