Я пытаюсь создать свой первый дебют, поэтому пока мало о нем знаю. Это мой файл правил на данный момент:
#!/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 $@
В данный момент я читаю документацию и пытаюсь понять, как писать более сложные файлы «правил». Я застрял на целях "двоичная-архива" и "двоичная-независимая". Короче, я не понимаю, что они на самом деле означают.
В документации сказано, что арка пакета определяется строкой «Архитектура:» в файле «Управление».
Если значение равно «все», то пакет зависит от архитектуры.
Если значение равно 'any', то пакет является архитектурой.
независимый.
Я полностью понимаю эту часть. Но затем я начинаю читать файлы man для инструментов debhelper.
man dpkg-buildpackage говорит:
- Он вызывает сборку 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)
страница руководства.)