<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>38919</bug_id>
          
          <creation_ts>2020-09-10 17:25:20 +0300</creation_ts>
          <short_desc>Сборочница не должна пропускать в noarch пакеты с excludearch или exclusivearch</short_desc>
          <delta_ts>2026-02-05 11:03:03 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugzilla.altlinux.org/show_bug.cgi?id=42121</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aleksei Nikiforov">darktemplaralt</reporter>
          <assigned_to name="Vladimir D. Seleznev">vseleznv</assigned_to>
          <cc>antohami</cc>
    
    <cc>arseny</cc>
    
    <cc>asheplyakov</cc>
    
    <cc>asy</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>iv</cc>
    
    <cc>klark</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>placeholder</cc>
    
    <cc>ruslandh</cc>
    
    <cc>shaba</cc>
    
    <cc>vseleznv</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>192369</commentid>
    <comment_count>0</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2020-09-10 17:25:20 +0300</bug_when>
    <thetext>Если у пакета есть ExcludeArch или ExclusiveArch, то он не должен быть noarch. Как минимум, если он не собирается на всех основных архитектурах сборочницы.

В таком случае следует сборку задания завершать с ошибкой с соответствующим сообщением. Иначе пакет появляется даже на тех архитектурах, сборку на которых явно выключили.

См. также: https://bugzilla.altlinux.org/show_bug.cgi?id=38916#c3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192371</commentid>
    <comment_count>1</comment_count>
    <who name="Vladimir D. Seleznev">vseleznv</who>
    <bug_when>2020-09-10 18:08:55 +0300</bug_when>
    <thetext>Я думаю, эту проверку надо сделать в rpm-build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192372</commentid>
    <comment_count>2</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2020-09-10 18:31:04 +0300</bug_when>
    <thetext>(Ответ для Vladimir D. Seleznev на комментарий #1)
&gt; Я думаю, эту проверку надо сделать в rpm-build.

Где-то она уже реализована:

http://git.altlinux.org/tasks/archive/done/_251/257824/logs/events.1.2.log

warning (#100): i586: non-verifiable noarch packages due to ExclusiveArch
warning (#100): armh: non-verifiable noarch packages due to ExclusiveArch

Возможно будет достаточно превратить эти предупреждения в ошибки.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192385</commentid>
    <comment_count>3</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2020-09-11 08:10:54 +0300</bug_when>
    <thetext>Идею поддерживаю, но вообще очень интересен список потенциально пострадавших пакетов. Простой grep по спекам показывает, что таких может быть немало -- хотя как совсем правильно грепать неясно.

Кстати, среди пострадавших точно будут qboot и seabios. Кто готов вернуть их сборку кроссом? Мне бы для mipsel пригодилось =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192387</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2020-09-11 08:56:02 +0300</bug_when>
    <thetext>(In reply to Ivan A. Melnikov from comment #3)
&gt; очень интересен список потенциально пострадавших
&gt; пакетов. Простой grep по спекам показывает, что таких может быть немало --
&gt; хотя как совсем правильно грепать неясно.
&gt; 
&gt; Кстати, среди пострадавших точно будут qboot и seabios. Кто готов вернуть их
&gt; сборку кроссом? Мне бы для mipsel пригодилось =)

+100500

Это PreReq к началу обусждения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192396</commentid>
    <comment_count>5</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2020-09-11 10:31:56 +0300</bug_when>
    <thetext>Грубая оценка:

$ git clone https://github.com/vt-alt/specs
$ cd specs
$ $ git grep -l noarch | xargs egrep -l -i &apos;exclusivearch|excludearch&apos; | cut -d / -f 2
389-ds-base
Inventor
R-base
adobe-flash-player
alsaplayer
aqsis
atlas
bcc
camotics
cegui
ceph
cgal
crtools
doxygen
dpdk
edk2-aarch64
edk2-rpi
edk2-tools
edk2
electron
etersoft-build-utils
exodusii
firefox
firmware-intel-ucode
fpc
freeipa-healthcheck
frogatto
fwupd
fzf
gcc4.3
gcc4.4
gcc4.5
gcc4.6
gcc4.7
gcc4.8
gcc4.9
gdb
gens-gs
glusterfs7
gnustep-Lynkeos
gnustep-gorm
gnustep-sqlclient
golang-golang-x-crypto
golang-golang-x-net
golang-golang-x-sys
golang-tools
golang-torproject-pluggable-transports-goptlib
golang
gprolog
hedgewars
igt-gpu-tools
indilib
installer-feature-bootloader-grub
iptables
ipxe
java-1.7.0-openjdk
java3d
jicofo
jitsi-videobridge
jogl
kbd
kcov
keepass
kernel-headers-common
kernel-image-ovz-el7
kernel-image-rpi-def
kernel-image-rpi-un
kernel-image-rt
kernel-image-std-debug
kernel-image-std-def
kernel-image-std-pae
kernel-image-un-def
kernel-source-bcmwl
kernel-source-lkrg
kernel-src-vboxguest
kernel-src-vboxhost
knot-resolver
kodi
libcrystalhd
libmirisdr
liboil
libsmbios
lilo
linuxcnc
livecd-qemu-arch
lsb-init
lsb
lsp-plugins
lxd
maven-eclipse-plugin
maxima
mcelog
mkve
mnemosyne
mysql-workbench-community
netgen
ngsolve
nvidia_glx_src
openbios
opencpn
opendx
openjfx
openni
openqa
openshot
opensnitch
opentoonz
openvswitch
pcsx2
perl-Mozilla-LDAP
perl-libnet
pesign-test-certs
podman
ppsspp
prometheus
publican-jboss
pve-docs
python3-module-PyQtWebEngine
python3-module-jetson-gpio
qboot
qt5-webengine
qtiplot
racket
reflections
riot-desktop
rpm-build-vm
seabios
seamonkey
skiboot
skype-userinstall
springrts
sweethome3d
syslinux
tcc
teeworlds
tremulous-data
virtualbox
vmware-view-preinstall
vmware-view-userinstall
vzctl
warsow-data
webtorrent-desktop
wine-gecko
wine-vanilla
wine
winetricks
xen
xenomai
xtables-addons
ztnbatch

Думаю, в большей части из них сейчас проблема со всякой документацией или noarch питоновскими модулями будет. Тут упоминались уже qboot и seabios. С какими ещё пакетами из этого списка могут быть проблемы?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192404</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2020-09-11 11:51:22 +0300</bug_when>
    <thetext>(Ответ для Vladimir D. Seleznev на комментарий #1)
&gt; Я думаю, эту проверку надо сделать в rpm-build.
+1

Пару раз уже намучился, пока заметил &quot;BuildArch: noarch&quot; в _основном_ пакете.

Думаю, &quot;мягкий вариант&quot; может выглядеть как-то так:
1) сделать проверку/warning в rpm-build;
2) заслать в devel@ список из comment 5, по важным пакетам вроде doxygen
   после ручного отсева (например, %ifarch на флаги компилятора и noarch
   с -data или -doc) развесить баги или сразу готовить NMU;
3) поработать над важными пакетами и дать остальным заметить предупреждения;
4) в следующем году переключить warning в error либо в rpm-build,
   либо на сборочнице.

Для начала оформил installer-feature-bootloader-grub с таким %changelog:

- It&apos;s not noarch if ExclusiveArch: is specified (see also #38919)

PS: не совсем понятно, что с BuildArch: подпакетов.  Возможно, такие случаи стоит оставлять как warning, поскольку делать какой-нибудь собираемый из того же архива -data noarch&apos;ем, лишь бы угодить сборочнице, будет контрпродуктивно.

PPS: более взвешенное решение, чем основанное на анализе спека, стоило бы принимать на основании сверки не только состава, но и зависимостей (R:/BR:)
в плане их наличия на целевых платформах (но это только в сборочнице).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192433</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2020-09-12 01:20:04 +0300</bug_when>
    <thetext>Кто-то грозился переделать cross-gcc по-правильному. Как он появится, можно и эту багу решать. Я на ExclusiveArch для edk2 и т.п. не от хорошей жизни перешел.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192445</commentid>
    <comment_count>8</comment_count>
    <who name="Vladimir D. Seleznev">vseleznv</who>
    <bug_when>2020-09-13 01:50:40 +0300</bug_when>
    <thetext>

(In reply to Ivan A. Melnikov from comment #3)
&gt; Идею поддерживаю, но вообще очень интересен список потенциально пострадавших
&gt; пакетов. Простой grep по спекам показывает, что таких может быть немало --
&gt; хотя как совсем правильно грепать неясно.
&gt; 
&gt; Кстати, среди пострадавших точно будут qboot и seabios. Кто готов вернуть их
&gt; сборку кроссом? Мне бы для mipsel пригодилось =)

Какой интересный случай. Да, такие пакеты надо бы кросс-компилятором собирать, надо бы починить кросс-компилятор, но кто бы занялся?


(In reply to Michael Shigorin from comment #6)
&gt; (Ответ для Vladimir D. Seleznev на комментарий #1)
&gt; &gt; Я думаю, эту проверку надо сделать в rpm-build.
&gt; +1
&gt; 
&gt; Пару раз уже намучился, пока заметил &quot;BuildArch: noarch&quot; в _основном_ пакете.
&gt; 
&gt; Думаю, &quot;мягкий вариант&quot; может выглядеть как-то так:
&gt; 1) сделать проверку/warning в rpm-build;

Начать с ворнинга — хорошая мысль.

&gt; 2) заслать в devel@ список из comment 5, по важным пакетам вроде doxygen
&gt;    после ручного отсева (например, %ifarch на флаги компилятора и noarch
&gt;    с -data или -doc) развесить баги или сразу готовить NMU;
&gt; 3) поработать над важными пакетами и дать остальным заметить предупреждения;
&gt; 4) в следующем году переключить warning в error либо в rpm-build,
&gt;    либо на сборочнице.
&gt; 
&gt; Для начала оформил installer-feature-bootloader-grub с таким %changelog:
&gt; 
&gt; - It&apos;s not noarch if ExclusiveArch: is specified (see also #38919)
&gt; 
&gt; PS: не совсем понятно, что с BuildArch: подпакетов.  Возможно, такие случаи
&gt; стоит оставлять как warning, поскольку делать какой-нибудь собираемый из
&gt; того же архива -data noarch&apos;ем, лишь бы угодить сборочнице, будет
&gt; контрпродуктивно.

Наверное, для подпакетов стоит оставить возможность BuildArch: noarch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192453</commentid>
    <comment_count>9</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2020-09-14 05:11:59 +0300</bug_when>
    <thetext>Лет шесть назад было аналогичное обсуждение у Федоры:
https://pagure.io/packaging-committee/issue/355

которое вылилось в некую встречу, по результату которой формализовали вот что:
https://docs.fedoraproject.org/en-US/packaging-guidelines/#_noarch_with_unported_dependencies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195998</commentid>
    <comment_count>10</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2021-02-03 19:56:47 +0300</bug_when>
    <thetext>(In reply to Aleksei Nikiforov from comment #0)

&gt; Если у пакета есть ExcludeArch или ExclusiveArch, то он не должен быть
&gt; noarch. Как минимум, если он не собирается на всех основных архитектурах
&gt; сборочницы.

Не то, чтобы я был против, но есть недесктопная (как мне сказали когда-то) архитектура ppc64le, и есть некоторые приложения с большим noarch, котрые вряд ли нужны не на десктопе. Как с этими приложениями нужно будет поступать? Без noarch место не жалко? В упомянутом bug 38916 проблема в наличии зависимости на такой пакет, как я понимаю? Вот этот случай, может, надо обрабатывать.

В качестве примера OpenCPN (в списке тут есть), который на ppc64le не собирался (-msse2 добавлялся), и вряд ли это чинили в апстриме с тех пор, разве что случайно. Хотя сам ремонт может и не очень сложен.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210102</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2022-04-26 15:17:25 +0300</bug_when>
    <thetext>&gt; Если у пакета есть ExcludeArch или ExclusiveArch, то он не должен быть noarch.

Это почему же? Вот есть, например, iPXE. Поскольку в Linux бинарники iPXE никогда не выполняются, то для хоста это просто файлы с данными (как, например, firmware). В результате можно легко превратить (armv8) одноплатник в сервер сетевой загрузки для x86 компьютеров. Или наоборот - использовать x86 компьютер для сетевой загрузки armv8 (одноплатников и не только).

У нас iPXE (а точнее ipxe-bootimgs) собирается для x86/bios, x86_64-efi, arm64-efi. Чтобы не усложнять, собирается на x86, а для arm64 сборки используется кросс-компилятор. А иначе пришлось бы пришлось бы поддерживать {aarch64,x86}-targeted кросс-компиляторы для всех архитектур (бессмысленная трата времени + источник багов).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235161</commentid>
    <comment_count>12</comment_count>
    <who name="ruslandh">ruslandh</who>
    <bug_when>2023-10-18 23:08:09 +0300</bug_when>
    <thetext>А можно научить сборочницу, чтобы она ориентировалась на архитектуру основного пакета?
Т.е. если основной пакет %name, для примера имеет
ExclusiveArch: %ix86 x86_64 %arm
а вспомогательные пакеты типа %name-date и т.п. и в них прописано 
BuildArch: noarch
то весь пакет собирать в архитектурах  %ix86 x86_64 %arm и оставить все 
проверки для noarch пакетов, но сранивать только результаты сборки в этих архитектурах. 

А то теряется большая часть смысла в noarch архитектуре.
И к тому-же если имеем 10 поддерживаемых архитектурах, 
- вероятность что пакет собрался во всех десяти поддерживаемых репозиториях архитектурах  мала (ну или меньше, чем их бы было три или четыре).
- надо сразу переписывать по резульатам сборки спеки, заменяяя все noaarch подпакеты, на указанные в основном пакете архитектуры
- теряем проверки noarch архитектуры</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>