Гид по технологиям

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

7 min read Linux Packaging Обновлено 02 Dec 2025
Как создать DEB‑пакет для Debian/Ubuntu
Как создать DEB‑пакет для Debian/Ubuntu

программист, создающий 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

После dh_make в родительском каталоге появится файл .orig (архив оригинальных исходников). Если он не создан, используйте --createorig.

ls
# пример вывода
# rsyslog-6.3.6  rsyslog_6.3.6.orig.tar.xz  rsyslog-6.3.6.tar.gz

Внутри исходной папки появится каталог debian/. В нём находятся все мета‑файлы пакета.

Содержимое папки Debian после dh_make

Шаг 5 Файлы в каталоге debian

Ниже — ключевые файлы и их роль. Краткие определения в одну строку помогут ориентироваться.

  • control — метаданные пакета и зависимости.
  • copyright — информация о лицензии и авторских правах.
  • changelog — история изменений пакета.
  • rules — Makefile-подобный скрипт сборки пакета.
  • conffiles, dirs, docs и примеры скриптов обслуживания — вспомогательные файлы.

control

Файл control содержит поля Source, Binary, Section, Priority, Maintainer, Build-Depends, Depends, Description и другие.

Содержимое файла control

Пример мини-образца (отредактируйте под ваш проект):

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.

Пример содержимого файла copyright

changelog

Записывайте каждое изменение, релиз или исправление. Формат поддерживает dpkg-версионирование и управление через dch (devscripts).

Команда для добавления записи:

dch -i

rules

Это скрипт сборки, похожий на Makefile. Пример минимального содержимого:

#!/usr/bin/make -f
%:
    dh $@

Не забудьте сделать файл исполняемым:

chmod +x debian/rules

Пример содержимого файла 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

Экран успешной установки пакета через dpkg

Проверка качества пакета

  • Запустите 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)

  1. Повторите сборку в чистой среде (pbuilder, sbuild, Docker). Это выявит скрытые зависимости.
  2. Запустите dpkg-buildpackage с флагом -b для двоичной сборки и -S для исходной.
  3. Если ошибка связана с shlibs, выполните dh_shlibdeps вручную и посмотрите вывод.
  4. Для проблем при установке проверьте postinst/prerm в debian/ и корректность скриптов.

Методология упаковки — шаг за шагом

  1. Подготовьте исходники и версию: соответствие имени директории и версии.
  2. Инициализируйте debian/ через dh_make и удалите ненужные примеры.
  3. Заполните debian/control, debian/copyright и debian/changelog.
  4. Настройте debian/rules и файлы установки (debian/install, debian/docs).
  5. Соберите локально и прогоните lintian.
  6. Подпишите пакеты GPG и тестируйте в чистом окружении.
  7. Подготовьте исходные и бина́рные пакеты для загрузки.

Чеклист по ролям

  • Для 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.deb

Decision 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 --> D

Edge-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: Всегда тестируйте пакеты в чистой среде и не подписывайте публично приватные ключи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство