Dec 28, 2011 02:56
Итак, суть проблемы с 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 (без них не соберётся).
dpkg,
администрирование,
debian,
deb,
howto,
linux