Назад | Перейти на главную страницу

Создание пакета 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 $@

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

В документации сказано, что арка пакета определяется строкой «Архитектура:» в файле «Управление».

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

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

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

человек dh говорит:

Команды в последовательности 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)?

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

Различия

Цель 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) страница руководства.)