Собираем пакет для Debian

Ну вот и надоело мне собирать одни и те же исходники на нескольких системах. Решил таки освоить сборку .deb-пакетов. Оказалось не так сложно, стоит только внимательно почитать руководство и выполнить все шаги: http://www.debian.org/doc/manuals/maint-guide/ch-start.ru.html .

Изложу вкратце своими словами.

Подготовка

Чтобы было удобно создадим отдельную папку, например packages, затем поместим в нее дерево исходников пакета, который будем собирать.

Итак получаем ~/packages/packet-3.2

Каталог с исходниками обязательно должен иметь имя типа: <packetName>-<version>.

Подготовим пакет к сборке:

cd ~/package/
tar -c packet-3.2|gzip -9 >packet-3.2.tar.gz
cd packet-3.2/
dh_make -e your@email.com -f ../packet-3.2.tar.gz

Или немного по другому если вы скачали пакет в архиве:

mv ~/Downloads/packet-3.2.tar.gz ~/package/
cd ~/package/
tar xvzf packet-3.2.tar.gz
cd  packet-3.2
dh_make -e your@email.com -f ../packet-3.2.tar.gz

В процессе работы dh_make задает пару вопросов, но смысл их понятен, потому я не буду на них останавливаться - ведь это же краткое руководство.

dh_make создаст архив исходников packet.tar.gz и дополнительную директорию ~/packages/packet-3.2/debian .

С файлами последней мы и будем работать.

Итак cd debian

$ ls 
changelog
compat
control
copyright
cron.d.ex
dirs
docs
emacsen-install.ex
emacsen-remove.ex
emacsen-startup.ex
init.d.ex
init.d.lsb.ex
manpage.1.ex
manpage.sgml.ex
manpage.xml.ex
menu.ex
postinst.ex
postrm.ex
preinst.ex
prerm.ex
README.Debian
rules
packet-default.ex
packet.doc-base.EX
watch.ex

dh_make создал достаточно много файлов, чтобы запутаться, но не будем пугаться - не все они нам нужны.

Первый файл control:

Source: Имя пакета
Section: contrib/net - раздел 
Priority: optional
Maintainer: Max Antonov <name@mail.domain>
Build-Depends: debhelper (>= 7) зависимости для построения пакета
Standards-Version: 3.7.3  - версия Debian Policy - тут я не стал вдаваться в подробности
Homepage: http://your.domain.name/name/of/project - url откуда можно скачать пакет

Package: Имя пакета
Architecture: any - архитектура для которой собран (i386,ppc,sparc и т.д.)
Depends: ${shlibs:Depends}, ${misc:Depends} - от каких пакетов зависит
Description: apache log analyzer
 Apache log files analyzer, generates single-file-report in html format

Description - краткое описание пакета. На следующей строке должно быть полное описание. Внимание, первый символ должен быть пробелом.

Файл changelog:

packet (3.2-1) unstable; urgency=low

  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>

 -- Your Name <your@mail.name>  Wed, 03 Sep 2008 11:02:51 +0400

Тут вроде все понятно, кроме urgency=low - это указана срочность пакета, но на что это влияет я так и не понял. Оставим как есть.

Файл compat содержит в себе лишь один символ: 5. Что это значит я тоже не понял и решил оставить как есть.

Файл copyright - должно быть все понятно, покажу уже измененный файл:

This package was debianized by Max Antonov <max@maxantonov.name> on
Wed, 03 Sep 2008 11:02:51 +0400.

It was downloaded from http://yourdomain.name/project/name

Upstream Author(s):

        Max Antonov <max@maxantonov.name>

Copyright:

    Copyright (C) 2008 Max Antonov

License:

    GPL

The Debian packaging is (C) 2008, Max Antonov <max@maxantonov.name> and
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.

В этом файле необходимо соблюдать отступы.

Файл dirs - насколько я понял содержит имена директорий, котрые должны существовать для установки пакета. Заметьте, что начальный слэш опущен!

usr/bin
usr/sbin

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

Некоторые файлы пригодятся не для всех пакетов, потому стоит, наверное, их удалить:

rm docs init.d.ex init.d.lsb.ex cron.d.ex manpage.* menu.ex README.Debian watch.ex packet-default.ex packet.doc-base.EX

Объяснять, что значат эти файлы не буду, т.к. все должно быть понятно из их названий. Внутри файлы достаточно хорошо прокомментированы.

Идем дальше:

ls 
changelog
compat
control
copyright
dirs
emacsen-install.ex
emacsen-remove.ex
emacsen-startup.ex
postinst.ex
postrm.ex
preinst.ex
prerm.ex
rules

Что значат файлы emacsen* - я не разбирался, оставил их как есть.

Назначение файлов postinst.ex postrm.ex preinst.ex prerm.ex должно быть понятно из их названий - это исполняемые скрипты, к тому же внутри они достаточно хорошо прокомментированы, и уже содержат пустой каркас.

Переходим к главному файлу - rules

Файл rules - суть тот же Makefile, но для других целей. Он используется при сборке пакета. Возможно вам придется внести в него некоторые изменения, но будьте осторожны - не меняйте имена правил.

При сборке собственного пакета visitors мне пришлось внести в файл rules такие изменения:

             #$(MAKE) DESTDIR=$(CURDIR)/debian/visitors install
             install -m 0755 visitors $(dstdir)/usr/bin

Я закомментировал строку, созданную dh_make и добавил свою, иначе бинарный файл устанавливался в корень файловой системы, что конечно абсолютно не правильно.

Собираем пакет

Ну вот! Все готово для сборки. Собираем:

cd ~/package/packet-3.2/
dpkg-buildpackage -rfakeroot

Проверка и установка

Пакет собран, в каталоге ~/package/ появился .deb-файл пакета

Исследуем паке, чтобы убедиться, что все с ним в порядке.

Для просмотра информации о пакете:

 dpkg-deb -I ../packet_3.2-1_i386.deb

Для просмотра устанавливаемых файлов:

dpkg --contents ../packet_3.2-1_i386.deb

Если все нормально - можно ставить пакет:

sudo dpkg -i ../packet_3.2-1_i386.deb

Ну вот и все. Теперь у меня есть шпаргалка по сборке пакетов для Debian. Больше мне не придется собирать исходники на каждом из пяти серверов - будем собирать пакеты. dpkg-buildpackage -rfakeroot </code>

Последние изменения: %2010/%03/%22 %01:%Mar