Создание пакета Debian: цели binary-arch и binary-indep

Я пытаюсь создать свой первый деб, поэтому пока не знаю много об этом. Это мой файл "правил" на данный момент:

#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

%:
        dh $@

Сейчас я читаю документацию и пытаюсь понять, как писать более сложные файлы "правил". Я застрял на цели "бинарная арка" и "бинарная-независимая". Короче говоря, я не понимаю, что они на самом деле стоят.

В документации говорится, что арка пакета определяется строкой "Architecture:" в файле "Control".

  • Если значение равно "all", то пакет зависит от архитектуры.

  • Если значение равно any, пакет представляет собой архитектуру
    независимый.

Я полностью понимаю эту часть. Но затем я начинаю читать файлы man для инструментов debhelper.

man dpkg-buildpackage говорит:

  1. Он вызывает сборку debian/rules, за которой следует fakeroot debian/rules binary-target (если только сборка только из исходного кода не была запрошена с -S). Обратите внимание, что двоичная цель является либо двоичной (регистр по умолчанию, либо, если указано -b), либо двоичной аркой (если указана -B), либо двоичной-неопределенной (если указана -A).

человек дх говорит:

Команды в последовательности binary-indep передаются параметром "-i", чтобы гарантировать, что они работают только с двоичными независимыми пакетами, а команды в последовательностях двоичного кода - "-a", чтобы гарантировать, что они работают только с пакетами, зависящими от архитектуры.,

затем я пытаюсь просмотреть набор команд по умолчанию для целей "binary", "binary-arch" и "binary-indep", набрав

$ dh binary --no-act

$ dh binary-arch --no-act

$ dh binary-indep --no-act 

и получить полностью равные наборы команд. единственное отличие - флаги '-i' и '-a' после каждой команды.

Итак, первый вопрос - в чем разница, например, между 'dh_auto_build', 'dh_auto_build -a' и 'dh_auto_build -i' (или какой-либо другой командой dh_command)?

И еще один вопрос: если мой "контрольный" файл состоит только из пакетов с архитектурой "all", нужно ли мне использовать цель binary-indep, или я могу обойтись без нее и использовать только цель build-arch в моем файле "rules"?

1 ответ

Различия

Цель binary-indep строит все Architecture: all бинарные пакеты в вашем исходном пакете. Цель binary-arch собирает все остальные пакеты, либо Architecture: any или пакеты с явным списком архитектуры или некоторыми подстановочными знаками архитектуры, такими как Architecture: linux-any,

Зачем?

Различие между этими двумя путями внутри процесса сборки имеет значение, если у вас есть пакет с исходным кодом, который содержит оба типа бинарных пакетов, архитектурно-зависимый и -независимый: начальная сборка пакета строит оба типа бинарных пакетов, но каждая последующая сборка на разных архитектурах требуется только сборка зависящих от архитектуры двоичных пакетов, так как вы уже собрали все независимые от архитектуры пакеты в первой сборке.

пример

Представьте, что у вас есть пакет с исходным кодом foo который строит бинарные пакеты foo-programs а также foo-data, Хотя программы в foo-programs должны быть скомпилированы (например, из-за того, что они написаны на C), и, следовательно, бинарный пакет имеет Architecture: any, файлы данных в foo-data (изображения, переводы, справочные тексты, документация, текстуры, игровые карты и т. д.) одинаковы для всех архитектур, поэтому Architecture: all, Допустим, версия foo для апстрима - это 1.0, и это первая версия пакета Debian для этого апстрима.

Сначала вы собираете все пакеты на amd64 архитектура для 64-битных ПК, вы получите foo-programs_1.0-1_amd64.deb а также foo-data_1.0-1_all.deb, Но вы также хотите иметь возможность запускать его на 32-битных ПК, следовательно, вам также нужно foo-programs_1.0-1_i386.deb, Но вам не нужна секунда foo-data_1.0-1_all.debтак что ваш процесс сборки требует только *-arch цели, например, позвонив dpkg-buildpackage -B,

Необходимость явных целей

С минимальным dh стиль debian/rules может не потребоваться явно указывать цели, так как многие системы сборки исходной версии не делают этого различия, но если они это делают (например, имея отдельную make цель для создания документации, вы можете реализовать это, например, так:

#!/usr/bin/make -f
%:
        dh $@

override_dh_auto_build-indep:
        $(MAKE) -C docs

(Пример взят из dh(7) справочная страница.)

Другие вопросы по тегам