Как создать пакет Debian как часть сборки autotools?
Все примеры упаковок Debian, которые я могу найти, предполагают, что пользователь переупаковывается из восходящей сборки, поэтому он распаковывает исходный архив, настраивает, перестраивает и повторно упаковывает. Я пытаюсь создать пакет для своей собственной библиотеки, которая создается с помощью autotools. Я пробовал несколько разных подходов, и моя последняя попытка выглядит так:
DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g`
dist-hook:
cd $(distdir) ; \
export DEBFULLNAME="Some One" ; \
export DEBEMAIL="[email protected]" ; \
echo -e "\n" | dh_make --copyright blank --library --native \
--packagename $(DH_PACKAGE_NAME)
mv $(distdir)/debian $(distdir)/DEBIAN
dpkg-deb --build $(distdir)
для которого dpkg-deb
жалуется на управляющий файл dh_makes
. У меня есть подозрение, что решение намного проще?
Ответы
Ответ 1
К сожалению, я не мог сделать ни один из превосходных ответов, которые здесь действительно работают в моей среде. Пакет dpkg-buildpackage был слишком непостоянным для создания пакета из источника. Я, наконец, остановился на подходе dpkg-deb -build, который показан здесь
Ответ 2
Вот пример того, как я создал пакет Debian как часть сборки autotools.
В configure.ac
, я проверяю, что dpkg-buildpackage
установлен в системе, однако я не прерываю, если он не найден.
Мне нужно, чтобы пользователь запускал ./configure --enable-deb
при создании пакета Debian по различным причинам, но в большинстве случаев это не было необходимо. Если указан --enable-deb
, но dpkg-buildpackage
не найден, я прерываю.
https://github.com/ptomato/gnome-inform7/blob/master/configure.ac
Затем в верхнем уровне Makefile.am
код выглядит следующим образом.
https://github.com/ptomato/gnome-inform7/blob/master/Makefile.am
Обратите внимание, что сначала я вызываю make dist
, а затем разархивирую tar-архив и копирую в него каталог debian
. Это лучшая практика в соответствии с руководством по упаковке Debian; они говорят, что каталог debian
должен находиться только в исходном элементе управления, а не в архиве распространения.
Ответ 3
весь процесс упаковки оптимизирован для упаковки процесса сборки в процесс упаковки.
попытка обернуть процесс упаковки в процесс сборки, поэтому, вероятно, не очень проста, но я не вижу необходимости не делать это стандартным способом.
так:
- создайте свою систему на основе autotools, как будто вам вообще не нужны пакеты debian.
- создайте простой файл debian/rules, который вызовет вашу сборку и сделает deb-package
- Если вы (или какой-либо другой пользователь вашего пакета) хотите (-а) создать deb, запустите
dpkg-buildpackage
- Если вы (или какой-либо другой пользователь вашего пакета) не хотите создавать deb, просто запустите
./configure && make && make install
это лучшая практика, поскольку она держит 2 отдельных этапа (здания и упаковки) друг от друга.
он также позволяет более легко интегрироваться в любой дистрибутив на основе Debian (если вы, например, решаете, что было бы здорово иметь ваш пакет в "реальном" Debian), так как инструкции по упаковке Debian достаточно строги относительно того, чтобы поддерживать эти два процесса отдельно (источники вверх по течению которые отправляют свой собственный debian/нахмурились, а верхний debian/обычно удаляется)