Создание deb пакета в Linux Ubuntu

Конспект в доработке

    Подготовка системы

    Делать готовые установочные сборки пакетов опасно от пользователя root. Если мы допустим ошибку с путями, файлы могут перетереть или удалить важные для работы директории
    Поэтому если это не тестовый образ docker или не тестовая виртуальная машина, тогда следует создать отдельного пользователя


    Пакеты которые могут пригодиться:
    build-essential - установка повлечёт за собой загрузку других пакетов, требуемых для основы среды сборки
    autoconf, automake и autotools-dev — данные утилиты (смотрите info autoconf, info automake) используются во многих современных программах для создания сценариев настройки и файла Makefile. В пакете autotools-dev содержатся самые новые версии некоторых файлов auto- и документация по их применению
    debhelper и dh-make — пакет dh-make необходим для создания скелета нашего будущего пакета. Для этого он будет использовать некоторые инструменты из пакета debhelper. Использовать их необязательно, но они сильно упрощают процесс создания и поддержки пакетов
    devscripts — данный пакет содержит сценарии, полезные для сопровождающих пакет
    fakeroot — эта утилита позволяет имитировать права суперпользователя, что необходимо для некоторых этапов процесса сборки
    gnupg — инструмент, позволяющий подписывать пакеты цифровой подписью. Это особенно важно, если вы хотите распространять пакеты среди других людей
    lintian — это средство проверки пакетов Debian, которое сообщает о распространённых ошибках после сборки
    patch — данная утилита изменяет исходный файл в соответствии со списком различий между файлами, полученным при помощи программы diff
    patchutils — данный пакет содержит несколько утилит для работы с заплатами, например lsdiff, interdiff и filterdiff.
    pbuilder — этот пакет содержит программы, которые используются для создания и поддержки среды chroot
    quilt — пакет помогает управлять большими наборами заплат, отслеживая каждое сделанное изменение
    xutils-dev — пакет содержит программы, которые используются при сборке пакетов для X11, например с их помощью генерируется Makefile из набора макрофункций

    useradd builder -m
    apt update apt install dpkg-dev devscripts equivs wget

    dpkg-dev — содержит набор инструментов для работы с исходными файлами для пакетов deb.
    devscripts — набор скриптов для сборки пакетов.
    equivs — необходим для запуска утилиты mk-build-deps для установки зависимых пакетов.
    wget — утилита для загрузки файлов по http. Нужна для загрузки архивов с исходниками.


    #Создадим каталог, в котором будет происходит сборка mkdir -p debbuild cd debbuild
    Каталог debian

    Файлы в каталоге debian:
    control — основной файл с описание собираемого пакета и его зависимостей. Этот файл содержит информацию, которая используется программами dpkg, dselect, apt-get, apt-cache, aptitude и некоторыми другими инструментами для работы c пакетами


    changelog — файл с описанием истории изменения пакета. В нем cодержится название раздела в дистрибутиве, к которому относится пакет с исходным кодом.
    Архив Debian разбит на несколько областей: main (свободное ПО), non-free (не совсем свободное ПО) и contrib (свободное ПО, зависящее от несвободного ПО).

    rules — файл с правилами компиляции пакета во время его сборки
    postinst — скрипт, запускаемый после установки пакета
    postrm — скрипт, запускаемый после удаления пакета
    preinst — скрипт, запускаемый перед установкой пакета
    prerm — скрипт, запускаемый перед удалением пакета

    Полное описание файлов содержится в Debian Policy:
    https://www.debian.org/doc/debian-policy/

    Для сборки пакета под конкретные версии различных дистрибутивов Linux быстрее и удобнее всего использовать отдельные chroot-окружения.
    Chroot-окружение — это самый простой способ запустить Linux внутри Linux, например, запустить архитектуру arm64 (aarch64) под архитектурой amd64 (x86_64).
    Подробнее об этом здесь:
    https://docs.astralinux.ru/latest/mobile/apackage/#

    Источник: https://www.debian.org/doc/debian-policy/

    Дополнительные скрипты установки

    Для решения некоторых проблем была предусмотрена возможность выполнять скрипты перед установкой пакета и после. Аналогично это работает для удаления пакета - перед и после. Эти скрипты называются preinst, postinst, prerm и postrm
    Например:
    package/DEBIAN/postinst


    Простая сборка пакета
    #В папке проекта создаем обязательный каталог DEBIAN mkdir -p package/DEBIAN #Создаем файл манифеста с минимальным набором параметров: Package: helloworld Version: 1.0 Section: unknown Priority: optional Depends: openssh Architecture: amd64 Essential: no Installed-Size: 40 Maintainer: netbash.ru Description: Print hello world

    Package - имя пакета;
    Version - версия программы в пакете, будет использована при обновлении пакета;
    Section - категория пакета, определяет его назначение. Архив Debian разбит на несколько областей: main (свободное ПО), non-free (не совсем свободное ПО) и contrib (свободное ПО, зависящее от несвободного ПО).

    Priority - важность пакета, для новых пакетов, которые ни с чем не конфликтуют обычно прописывают optional, доступны значения required, important или standard;
    Priority - указывается насколько важен данный пакет
    Приоритет optional, обычно, назначается новым пакетам, которые не конфликтуют с другими, имеющими приоритет required, important или standard.


    Depends - зависимости пакета, без которых основной пакет не может быть установлен;
    Пакет не будет установлен, пока не установлены пакеты, от которых он зависит. Используйте этот тип зависимости, если ваша программа гарантировано не будет работать (или вызовет какие-нибудь серьезные проблемы) при отсутствии какого-то пакета.
    Pre-Depends - в этом поле указываются более важные зависимости, чем в Depends. Пакет не будет установлен, если какие-либо пакеты из числа таких зависимостей не установлены, либо не правильно настроены

    Recommends - необязательные пакеты, обычно устанавливаются по умолчанию в apt. Используйте это поле для пакетов, которые не обязательны, но обычно используются с вашей программой

    Conflicts - пакет не будет установлен, пока в системе присутствуют перечисленные здесь пакеты;

    Breaks - Если пакет будет установлен, то работоспособность всех перечисленных пакетов будет нарушена. Чаще всего, в поле Breaks указываются пакеты с уточнением версии типа «старее чем».

    Architecture - архитектура системы, в которой можно установить этот пакет, доступные значения: i386, amd64, all, последнее означает, что архитектура не имеет значения;
    Architecture: any
    Генерируемый двоичный пакет зависит от архитектуры, обычно определяемой компилируемым языком.
    Architecture: all
    Генерируемый двоичный пакет не зависит от архитектуры, обычно в нём содержится текст, изображения или сценарии интерпретируемого языка.

    Installed-Size - общий размер программы после установки;
    Maintainer - кто собрал этот пакет и кто отвечает за его поддержку;
    Description - краткое описание пакета.
    Vcs-* для указания местонахождения системы контроля версий
    Vcs-Git: https://anonscm.debian.org/git/collab-maint/gentoo.git

    Для каждого пакета в списке можно указать версии, которых касается данная зависимость. Версии указываются в круглых скобках после имени пакета и должны состоять из символа сравнения, за которым следует номер версии. Допустимыми символами сравнения являются: <<, <=, =, >= и >> для «строго раньше», «раньше или равно», «в точности равно», «равно или позже» и «строго позже», соответственно. Например:

    Depends: foo (>= 1.2), libbar1 (= 1.3.4) Conflicts: baz Recommends: libbaz4 (>> 4.0.7) Suggests: quux Replaces: quux (<< 5), quux-foo (<= 7.6)

    Сборка
    #Создаем структуру папок #Собираем пакет dpkg-deb --build ./package
    Проверка

    После создания пакета мы можем проверить, есть ли в нём файлы, с помощью команды dpkg:

    dpkg -c test.deb

    Чтобы в дальнейшем соответствовать стандартам упаковки Debian, мы можем провести линтинг пакета package. Для этого мы используем инструмент под названием lintian.
    После выполнения команды мы можем увидеть одну или несколько ошибок, отмеченных как E, и предупреждений, отмеченных как W.

    lintian test.deb

    Источник: https://www.baeldung.com/linux/create-debian-package

    Создание файлов сборки (основные)

    Для выполнения сборки нужно создать, минимум, 4 файла.
    1. Control-файл.

    #vim debian/control

    В этом каталоге мы найдём исходный код пакета, с которым хотим работать.

    Source: nginx Section: misc Priority: optional Maintainer: Dmitriy Moks Build-Depends: libpcre3-dev, zlib1g-dev Standards-Version: 1.20.1 Homepage: https://nginx.org Package: nginx Architecture: amd64 Provides: nginx Description: NGINX packages (short description). The description can be written in several lines. Each line have to be 73 chars maximum. (long description)

    2. Файл changelog.
    В данном файле описывается история изменений пакета. Также сборщик берет из этого файла номер версии и релиза.

    vim debian/changelog nginx (1.20.1) stable; urgency=medium * Initial release -- Dmitriy Mosk Tue, 03 Aug 2021 17:34:42 +0300

    3. Файл rules.
    Описываем правила компиляции пакета во время его сборки. Создаем файл:

    vim debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1 url='http://nginx.org/download/nginx-1.20.1.tar.gz' build_dir='nginx' override_dh_auto_clean: if [ ! -f $(build_dir) ]; then rm -rf $(build_dir); fi mkdir $(build_dir) dh_auto_clean override_dh_auto_configure: wget $(url) -O $(build_dir).tar.gz tar -xzf $(build_dir).tar.gz -C $(build_dir)/ --strip-components=1 rm -f $(build_dir).tar.gz cd $(build_dir) && ./configure override_dh_usrlocal: %: dh $@ --sourcedirectory=$(build_dir)/

    * важно обратить внимание на факт, что содержимое файла может сильно отличаться в зависимости от того, что мы собираем и какой версии собираемое программное обеспечение. В данном примере мы создали файл для независимой работы — сборщик сам скачает исходник и распакует его в рабочий каталог (в данном примере, nginx).


    4. Файл compat.
    Указываем на уровень совместимости с debhelper. Другими словами, какой версии debhelper соответствует процесс сборки. На это влияет, какие хелперы будут запускаться и как будет проходить сборка.

    vim debian/compat 12

    нам необходимо использовать номер в соответствии с версией debhelper, для который мы писали правила сборки. Если мы укажем, скажем, 13, а тестировали сборку и правила на версии 9, то можем получить ряд ошибок


    md5sums

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

    md5sum $(find * -type f -not -path 'DEBIAN/*') > DEBIAN/md5sums mkdir mydeb cd mydeb #Каталог для архивирования и папка debian в нем mkdir -p testprog-1.2.1/debian cd testpog-1.2.1 vim debian/control #Следующее содержимое Source: testprog Section: misc Priority: optional Maintainer: Anatoliy Chichinov <89261969132@mail.ru> Build-Depends: libpcre3-dev, zlib1g-dev Standards-Version: 1.2.1 Homepage: https://netbash.ru Package: testprog Architecture: amd64 Provides: testprog Description: testprog packages. The description can be written in several lines. Each line have to be 73 chars maximum. vim program.c #include int main(){ printf("Hello from losst.ru\n"); } #changelog номер сборки и дата последнего изменения vim debian/changelog #Содержимое testprog (1.2.1) stable; urgency=medium * Initial release -- Anatoliy Chichinov <89261969132@mail.ru> Tue, 07 Aug 2022 20:34:42 +0300 vim /debian/compat #Содержимое 9 #Уровень совместимости с debhelper
    Источники
    Последнее изменение: 24.08.2026 07:32


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ