Как сделать так, чтобы упаковка Debian генерировала два пакета с исходным исходным архивом?

14

Я упаковываю что-то для своего PPA. Исходный источник - это .tar.gzархив, основанный на Makefile.

Поскольку этот пакет содержит значительное количество данных, не зависящих от архитектуры, было бы целесообразно, чтобы сценарии сборки генерировали два пакета:

  • пакет
  • пакет -данных

Как я могу настроить это? Я отредактировал свой controlфайл Debian, чтобы сгенерировать два пакета, но я не знаю, как получить нужные файлы в нужный пакет.

Так как файлы данных в настоящее время все устанавливаются через Makefile, я немного заблудился здесь.

Натан Осман
источник

Ответы:

14

Это место, где мне всегда не хватало документации. Я почти узнал, как это работает, глядя на то, как это делается в других пакетах. Как и в большинстве случаев в упаковке Debian, есть несколько способов сделать это. Я считаю, что самый простой способ - это использовать debian/package.installфайлы. Вот пример пакета, над которым я работал, воображение (ветка bzr) .

Во-первых, нам нужно создать пакет в debian/control. Сейчас есть три строфы. Один для исходного пакета и один для каждого двоичного пакета. Обратите внимание, что пакет foo-data должен быть Architecture: all. Также обратите внимание, что воображение зависит от imagination-common (= ${source:Version}).

Далее мы создаем debian/imagination.installфайл. Он содержит конкретные файлы или пути, которые мы хотим получить в пакете воображения. Для этого пакета нам нужны все файлы, зависящие от архитектуры. Файл рабочего стола включен так, как он должен сказать в двоичном файле, который он вызывает в своей Exec:строке.

usr/bin/
usr/lib/
/usr/share/applications/imagination.desktop

Нам нужно создать debian/imagination-common.installфайл. Он будет содержать все независимые от архитектуры файлы, изображения, переводы, документы и тому подобное.

/usr/share/doc/
/usr/share/icons/
/usr/share/imagination/
/usr/share/locale/

man dh_install описывает, что на самом деле здесь происходит:

возможно, у вас есть большой пакет, который собирает несколько бинарных пакетов. Вы можете использовать исходный Makefile для установки всего этого в debian / tmp, а затем использовать dh_install для копирования каталогов и файлов оттуда в соответствующие каталоги сборки пакетов.

Под «правильными каталогами сборки пакетов» подразумевается, что к концу процесса сборки все, что будет в результате, foo.debбудет найдено в src/debian/foo. Файлы, которые в конечном итоге foo-data.debбудут найдены в src/debian/foo-data. По debian/rulesсути, это просто Makefile, вы можете представить себе другие способы получить тот же результат.

andrewsomething
источник
Спасибо огромное! Очень четкое объяснение и работает отлично.
Натан Осман