Как создать пакет 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/обычно удаляется)