| |
dh_make -c gpl -e [email protected]
?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.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |