dh_make -c gpl -e mycool@e-mail.com
?package(package-name):var1=value var2=varlue2Возможные переменные:
?package(foo):needs=x11 section=Apps/Programming title="Foo" command=''foo -coolkey''
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.