[devel] noarch и %ifarch, или о primary += aarch64

Michael Shigorin mike на altlinux.org
Вт Май 22 09:29:09 MSK 2018


	Здравствуйте.
Вчера пришлось вспоминать экспериментально на примере
startup-rescue один неочевидный момент, который голосом
(как минимум) уже озвучивался, но не помню, был ли хоть
где-то зафиксирован письменно (ключевая фраза была вроде
"у нас по факту не noarch, а any-x86" в исполнении ldv@).

Он касается использования BuildArch: noarch совместно с %ifarch
в спеке и собирается кусаться при вводе aarch64 как третьей
синхронной архитектуры.

Вкратце:

  между x86 и не-x86 можно менять зависимости, но не состав пакета

и:

  стоит ли принуждать к noarch, если в спеке есть %ifarch?
  

Происходит так потому, что сравнение происходит по составу
собравшегося для текущих синхронных архитектур i586 и x86_64 --
т.е. если состав пакета, заявленного как noarch, между ними
отличается, сборка останавливается по той простой причине, что
в итоговый noarch repo идёт только один из них и если пакеты
различаются по существу, этот выбор будет заведомо ошибочным
для одной из итоговых суммарных конфигураций ($arch+noarch).

Заинтересованные могут посмотреть girar.git, скажем, у glebfm@:

gb/gb-task-check-noarch-i по строчке

  error (#$i): the whole $srcN source package should be made noarch


Конкретно мне надо было исключить из startup-rescue зависимости,
которые водятся только на x86, насколько знаю -- dmidecode
и ddcprobe.


Первая попытка: http://webery.altlinux.org/task/206752
(в районе беты стартеркитов задание должно протухнуть)

-BuildArch: noarch

(поскольку смутно припоминал такую грабельку)

-Requires: dmidecode ddcprobe altquire
+%ifarch %ix86 x86_64
+Requires: dmidecode ddcprobe
+%endif
+Requires: altquire
+Requires: agetty

Результат:

warning (#100): startup-rescue-0.29-alt1.i586.rpm should be .noarch.rpm
error (#100): the whole startup-rescue source package should be made noarch


Вторая попытка: http://webery.altlinux.org/task/206754
(отличается на оставленный BuildArch: noarch)

-Requires: dmidecode ddcprobe altquire
+%ifarch %ix86 x86_64
+Requires: dmidecode ddcprobe
+%endif
+Requires: altquire
+Requires: agetty

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

http://git.altlinux.org/tasks/archive/done/_201/206755/logs/events.1.1.log
http://git.altlinux.org/tasks/index/sisyphus/done/206755/gears/100/git?p=git;a=commitdiff;h=cb4fae5628e5ca28e7a24df0cf3eea4149c2bca2

Также во всех этих заданиях фигурировал следующий фрагмент,
который и должен будет взорваться, когда aarch64 станет тоже
первичной/синхронной архитектурой:

+%ifarch %ix86 x86_64
 install -pm755 fixmbr find-fstab %buildroot/sbin/
+%endif


В общем, предлагаю при наличии в спеке ^(%ifarch|%ifnarch)
смягчать эту ошибку до предупреждения (видимо, включив в него
отсылку к наблюдаемому %ifarch, чтоб не забывать о нём порой).


-------------------------------------------------------------

Сбой сборки задания #206754 выглядит так:

The following packages have unmet dependencies:
  startup-rescue: Depends: /sbin/find-fstab

Что и где сломалось с учётом того, что /sbin/find-fstab лежит
в этом же пакете -- пока не понял.

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info


Подробная информация о списке рассылки Devel