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

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

7 min read DevOps Обновлено 07 Apr 2026
Как создать DEB-пакет для Debian/Ubuntu
Как создать DEB-пакет для Debian/Ubuntu

programmer creating a debian package

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 с набором шаблонных файлов.

rsylog-dh-make-usage

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

rsylog-debian-folder-ls-content

Ключевые файлы и их назначение:

  • 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-file-cat-command

Пример сокращённой секции 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 оставлять как образцы.

cat-copyright-content-for-debian-package

Шаг 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

dpkg-install-control-success-screen

Если 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 для репозитория.

Методология упаковки (мини-метод)

  1. Подготовьте чистую исходную директорию и отметьте версию.
  2. Сгенерируйте debian/ с dh_make.
  3. Отредактируйте debian/control, rules, changelog.
  4. Соберите пакет локально, исправьте ошибки lintian.
  5. Подпишите и тестируйте на чистой 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.

Тест-кейсы для проверки пакета

  1. Установка на минимальную систему: dpkg -i; проверить ошибки зависимостей.
  2. Обновление версии: установить старую версию, затем новую; проверить миграцию конфигов.
  3. Удаление и очистка: dpkg -r и dpkg -P; убедиться, что конфигурации сохраняются или удаляются согласно политике.
  4. Проверка скриптов: симулировать отсутствие сетевого доступа, папок и прав.

Отладочный плейбук и runbook

Если сборка падает в dpkg-buildpackage:

  1. Запустите dpkg-buildpackage -nc -i и проанализируйте вывод.
  2. Проверьте debian/rules на нестандартные вызовы.
  3. Выполните сборку в chroot (sbuild или pbuilder) для воспроизводимости.
  4. Запустите 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 — стандартный и надёжный путь. Следуйте чеклистам в этом руководстве и тестируйте пакеты в чистых окружениях.

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

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

Массивы в Bash: синтаксис и примеры
Программирование

Массивы в Bash: синтаксис и примеры

Сбросить страницу «Для вас» в TikTok
Социальные сети

Сбросить страницу «Для вас» в TikTok

Создать GIF из YouTube — GIFs.com
Руководство

Создать GIF из YouTube — GIFs.com

Как сделать карусель Instagram в InDesign
Дизайн

Как сделать карусель Instagram в InDesign

Как объединить PDF на Mac
Mac

Как объединить PDF на Mac

Как примерить тату в Photoshop
Дизайн

Как примерить тату в Photoshop