amarao (amarao_san) wrote,
amarao
amarao_san

ещё не howto, просто заметки по культурной дебианизации

Итак, суть проблемы с deb'ами: у нас есть обычные deb'ы (бинарные пакеты для установки в систему), а есть src-пакеты, из которых собираются эти самые deb'ы.

В принципе, создание deb'а очень простое: нам надо написать control файл, сделать conffile с указанием файлов, которые мы считаем конфигами (init.d скрипты - конфиги, кстати), написать postinst prerm скрипты (если надо), положить указанные шутки в каталог DEBIAN, а сами файлы - в иерархию рядом. То есть, перед сборкой бинарного пакета мы будем наблюдать вот такое:

DEBAIN
usr
etc

(внутри usr/etc - подкаталоги). Как оно там оказывается - никого не интересует. Собирается оно командой dpkg -b . из каталога с приложением, или с указанием пути из другого места.

Это "простой и наивный" метод сборки.

Существует продвинутая версия, которая позволяет вам создать конструкцию, из которой можно собрать пакеты под разную архитектуру, которая будет иметь культурный changelog, и вообще, соответствовать тому, что вы получаете по apt-get source имя-пакета. Это точно то, из чего образуются deb'ы, которые ставятся с помощью aptitude из репозиториев.

И эта область много сложнее. По-крайней мере я до конца эту хрень не расковырял, так что даю "волшебный" рецепт.

Собираются бинарные пакеты из такой хрени с помощью dpkg-buildpackage. Ему нужна очень строгая структура данных в debian (не путаем с DEBIAN), он способен автоматически нумеровать пакеты согласно версии и т.д.

каталог debian делается для ПО один раз в жизни (в момент создания пакета). Дальше он только редактируется и исправляется. Сделать его можно ручками (не имею ни малейшего представления обо всём, что туды нужно сделать), либо с помощью утилиты dh_make (пакет dh-make).

Есть два режима: если мы говорим о готовом тарболе, в который мы (возможно) внесём какие-то изменения для правильной работы, то мы используем готовый файл tar.gz (bz2). Для этого нам надо в каталоге с распакованным tgz указать dh_make -f путь_к_тарболу.

Если же мы самого начала пишем исходник под debian (то есть у нас не будет "дебиан-специфик патчей на ваниль") и у нас нет тарбола (типовой пример - репозиторий в гите), то используется вот такая команда: dh_make --native.

Перед запуском dh_make нужно настроить переменные среды окружения:

DEBEMAIL="some.one@example.com"
DEBFULLNAME="Some One"
export DEBEMAIL DEBFULLNAME

После запуска и ответа на вопросы (чаще всего речь идёт о single binary), мы получаем каталог debian. Дальше мы можем отредактировать debian/control для правильного описания, секции и т.д., после чего (внимание!) debian можно (нужно) внести в гит. (git add debian). Если это сделать после попытки сборки, будет очень много мусора.

После этого можно пытаться собирать с помощью dpkg-buildpackage. Если всё хорошо - получим в корне собранный бинарный пакет.

Если нет - надо разбираться что не так. В моём случае виноватым был неправильный вызов install из Makefile'а. Вот как выглядит правильный:
        install  ptmax -D $(DESTDIR)/usr/bin/ptmax

Обратите внимание - путь в dst полный, включая имя файла, плюс опция -D (без них не соберётся).
Tags: deb, debian, dpkg, howto, linux, администрирование
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 7 comments