- []
Собираем пакет для 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>

