Сборка с использованием debhelper
Next: Сборка с использованием программ Up: Создание пакета исходных кодов Previous: Формат пакета исходных кодов   Contents
Сборка с использованием debhelper
В debian существует достаточное количество инструментов, помогающих автоматизировать процесс дебианизации. Рассмотрим debhelper(1), как наиболее часто встречающийся и рекомендованный в developers-reference. Пакет debhelper представляет собой набор скриптов dh_*, облегчающие процесс конфигурирования и компиляции программы, инсталяции ее и сборки в результирующий deb. Для работы с debhelper рекомендую воспользоваться программой dh_make из пакета dh-make.- приводим название каталога исходников к виду, необходимому для dh_make(8): <название пакета>-<версия>;
- в корне каталога исходников зовем dh_make(8). Например,
dh_make -c gpl -e mycool@e-mail.com
- идем в debian/ и правим необходимые файлы, удаляем ненужные
- changelog
- - Готовый файл с единственной записью ``Initial release''
- conffiles.ex
- - файл состоит из комментария о его использовании. К слову, в conffiles коментарии # не поддерживаются, поэтому их нужно удалить4.
- control
- - Этот шаблон необходимо обязательно заполнить в
соответствии с указанными выше правилами оформления файла
control. Кроме того, debhelper поддерживает набор
макросов. Например, в Depends: можно записать
- ${shlibs:Depends}
- вместо списка библиотек;
- ${misc:Depends}
- макрос раскрывается многими программами debhelper. Например, если Вы используете dh_installdebconf, то Вам необходим debconf, для dh_installxfonts понадобятся xutils. Эти зависимости и будут автоматически сгенерированы;
- ${perl:Depends}
- генерируется dh_perl и содержит список используемых модулей perl.
- copyright
- - в этом файле кроме лиценции указывается информация об upstream, то есть производителе программы (где взяли, кто написал).
- cron.d.ex
- - файл в формате crontab(5). Будет установлен скриптом dh_installcron в $(prefix)/etc/cron.d/<package>
- dirs
- - содержит относительные пути каталогов, необходимых пакету. Обрабатывается dh_installdirs (он создает указаные каталоги)
- docs
- - список файлов, которые dh_installdocs установит в usr/share/doc/<package>. Подерживает маски. Корнем является корень дерева исходников (не debian/).
- emacsen-install.ex
- - Следующие три необходимы, если вы debian'изируете пакет для [X]emacs. Устанавливаются dh_installemacsen. Скрипт инталяции.
- emacsen-remove.ex
- - скрипт деинталяции.
- emacsen-startup.ex
- - пример lisp-файла инициализации. Установится в site-lisp.d
- ex.package.doc-base
- - TODO: почитать :)
- init.d.ex
- - пример скрипта для init.d, если программа в нем нуждается. dh_installinit установит его в etc/init.d/<package>.
- manpage.1.ex
- - шаблон man. Обрабатывается dh_installman
- manpage.sgml.ex
- - шаблон sgml для генерации man.
- menu.ex
- - шаблон для системы меню debian. dh_installmenu
установит его в usr/lib/menu/<package>. Файл (формат описан в
menufile(5L)) состоит из строк вида
?package(package-name):var1=value var2=varlue2
Возможные переменные:- needs
- - тип дисплея, на котором запускается программа. Например, needs=x11;
- section
- - секция меню. Например, section=Apps/Programming. Структура меню описана в menu-policy;
- icon
- - иконка;
- title
- - текст пункта меню. Например, title=''Coolprog'';
- command
- - команда, выполняемая при выборе пункта меню.
?package(foo):needs=x11 section=Apps/Programming title="Foo" command=''foo -coolkey''
- postinst.ex, postrm.ex, preinst.ex, prerm.ex
- - шаблоны ментейнеровских скриптов.
- README.Debian
- - описание особенностей сборки и использования пакета, специфичных для Debian.
- watch.ex
- - шаблон для автоматического апдейта пакета.
- rules
- - шаблон файла построения пакета. Рассмотрим его
подробнее.
TODO: Рассмотреть rules в комментариях. Рассказать в них о dh_* скриптах.
#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This is the debhelper compatibility version to use. export DH_COMPAT=3 # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
В следующие строки дают возможность указав в переменной окружения DEB_BUILD_OPTIONS debug и/или nostrip собрать пакет с отладочной информацией.ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CFLAGS += -g endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM += -s endif
Правило для конфигурации. Не является обязательным, требуется из обязателного build. Исли пакет использует GNU autoconf (как тот, что я взял для примера), то вставит и вызов configure. В данном случае указано, что для построения файла config.status необходим файл configure и осуществить указанные действия.Скрипт dh_testdir пытается проверить в нужном ли каталоге мы находимся (проверяет существование файлов debian/control и других)
config.status: configure dh_testdir # Add here commands to configure the package. ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
От себя добавлю, что в большинстве случаев эта строчка не является целиком корректной. Необходимо в большинстве случаев добавлять -sysconfdir=/etc (аналогичная ситуация с /var)Проверяем правило build-stamp, которое в свою очередь проверяет config-status. Этим добиваемся того, чтобы не производить перекомпиляцию пакета, если не было его переконфигурации.
build: build-stamp build-stamp: config.status dh_testdir # Add here commands to compile the package.
Собственно, сама сборка. Если необходимы дополнительные команды либо параметры make, их можно добавить сюда.$(MAKE) #/usr/bin/docbook-to-man debian/package.sgml > mc.1 touch build-stamp
Правило очистки от предыдущей сборки dh_testroot проверяет, от рута ли мы собираем (используем fakeroot), dh_clean чистит дерево сборки от всевозможных core, backup'ов ...clean: dh_testdir dh_testroot rm -f build-stamp # Add here commands to clean up after the build process. -$(MAKE) distclean -test -r /usr/share/misc/config.sub && \ cp -f /usr/share/misc/config.sub config.sub -test -r /usr/share/misc/config.guess && \ cp -f /usr/share/misc/config.guess config.guess dh_clean
Правило инсталяции скомпилированной програмы во временный каталог.install: build dh_testdir dh_testroot dh_clean -k dh_installdirs
Инсталяция. На практике проще использовать
$(MAKE) DESTDIR=$(CURDIR)/debian/package
так как большинство autoconf программ это поддерживает.
# Add here commands to install the package into debian/package. $(MAKE) install prefix=$(CURDIR)/debian/package/usr
Построение пакета(ов). binary-indep - независимого от архитектуры, binary-arch - зависимого.
# Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot
Раскоментируйте, если используете debconf. Проставит config и templates (в DEBIAN), и добавит код в скрипты.# dh_installdebconf
Проставим доки, указанные в debian/docs в usr/share/doc/package
dh_installdocs
Проставим файлы, указанные параметрами в usr/share/doc/examples
dh_installexamples
Проставим файлы меню в usr/lib/menu/package (если мы реализуем меню, скажем, мы - wm, то проставим debian/menu-method в etc/menu-methods/package. Добавим код, вызывающий update-menus(1) (скрипт debian'овской системы меню) в инсталяционные скрипты.
dh_installmenu
Проставим debian/logrotate в etc/logrotate.d
# dh_installlogrotate
Емаксовые пакеты
# dh_installemacsen
debian/pam в etc/pam.d/package
# dh_installpam
Если мы устанавливаем обработчик mime, проставит debian/mime в usr/lib/mime/packages/package и добавит вызовы update-mime. См. mime-policy и mailcap(5)
# dh_installmime
debian/init -> etc/init.d/package + update-rc.d в скрипты.
# dh_installinit
debian/cron -> etc/cron.d
dh_installcron
man и info
dh_installman
dh_installinfo
сделаем симлинки на undocumented для тех man-страниц, которых нет. Полезен ключ -A.
# dh_undocumented
dh_installchangelogs ChangeLog
dh_link
dh_strip
Сожмем файлы (man, info ...) и поправим симлинки на них.
dh_compress
Установим пермишены в соответствии с полиси
dh_fixperms
Сгенерируем список устанавливаемых библиотек shlib
# dh_makeshlibs
Установим скрипты, shlibs и conffiles, сгенерированные предыдущими скриптами в DEBIAN.
dh_installdeb
Посчитаем зависимости от перловых библиотек.
# dh_perl
Посчитаем зависимости от библиотек для замены ${shlibs:Depend}
dh_shlibdeps
Сгенерируем файл control подставив макросы.
dh_gencontrol
Сгенерируем суммы.
dh_md5sums
Запакуем это дело в deb.
dh_builddeb
binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install
Для сборки можно воспользоваться скриптом debuild из devscripts, либо dpkg-buildpackage из dpkg-dev (debuild пользуется ею). Запустив debuild в корне исходников получим на уровне выше готовый deb.
Next: Сборка с использованием программ Up: Создание пакета исходных кодов Previous: Формат пакета исходных кодов   Contents
Zhenja Kaluta 2002-12-12