archlinux-s390x/patches/pkgbuild
Mathieu Benoit 82a231e5f9 [ADD] test-chroot: read the binaries, not the declarations
The resolver reported satisfied. The rootfs installed 102 packages. bash,
coreutils, tar, sed and find all ran inside the chroot, on s390x, against
glibc 2.44. Every check passed.

Then a fourth check, reading ELF headers instead of metadata, found seventeen
libraries that some shipped binary asks for and no shipped package provides.
Most are the ordinary stage-1 artefact -- the host's soname where Arch's
differs, libgpgme.so.11 against our .45 -- and stage 2 dissolves those by
rebuilding inside the chroot.

One was not. kbd's loadkeys needed libxkbcommon.so.0 while kbd declared
glibc, gzip and pam. An UNDER-DECLARED dependency: invisible to pacman's
resolver and to this port's own closure computation, because both read
declarations. And the cause was mine -- libxkbcommon-dev went into
install_host_deps for systemd, and kbd, built later, probed for it and linked
it. Arch declares it nowhere, so its chroot fails the same probe;
--disable-xkb converges rather than diverges.

Also here: the test now uses its own package cache. The shared one held a
coreutils from before its selinux fix, at the same pkgver-pkgrel, and pacman
called it corrupted.

--- FR ---

Le résolveur se déclarait satisfait. Le rootfs installait 102 paquets. bash,
coreutils, tar, sed et find tournaient tous dans le chroot, sur s390x, contre
la glibc 2.44. Toutes les vérifications passaient.

Puis une quatrième, lisant les en-têtes ELF au lieu des métadonnées, a trouvé
dix-sept bibliothèques qu'un binaire livré réclame et qu'aucun paquet livré ne
fournit. La plupart sont l'artefact ordinaire de l'étage 1 — le soname de
l'hôte là où celui d'Arch diffère, libgpgme.so.11 contre notre .45 — et
l'étage 2 les dissout en reconstruisant dans le chroot.

Une ne l'était pas. Le loadkeys de kbd réclamait libxkbcommon.so.0 quand kbd
déclarait glibc, gzip et pam. Une dépendance SOUS-DÉCLARÉE : invisible au
résolveur de pacman comme au calcul de fermeture de ce portage, puisque tous
deux lisent des déclarations. Et la cause était mienne — libxkbcommon-dev est
entré dans install_host_deps pour systemd, et kbd, bâti plus tard, l'a sondé
et lié. Arch ne le déclare nulle part, son chroot échoue donc à la même
sonde ; --disable-xkb converge au lieu de diverger.

Aussi ici : le test utilise désormais son propre cache de paquets. Le cache
partagé gardait un coreutils d'avant son correctif selinux, au même
pkgver-pkgrel, et pacman le déclarait corrompu.

Assisted-by: Claude Opus 5
2026-08-19 06:24:11 -04:00
..
audit.sh [FIX] four hooks the closure's second round needed 2026-08-19 06:24:11 -04:00
binutils.sh [ADD] port patches: gcc front ends, binutils gold, libtool multilib 2026-08-15 21:01:18 -04:00
brotli.sh [REM] sub-packages: four that cost more closure than they carry 2026-08-19 05:28:32 -04:00
coreutils.sh [FIX] selinux: the chroot named a host artefact, not a dependency 2026-08-17 01:33:41 -04:00
curl.sh [ADD] TODO.md: track every divergence from upstream Arch 2026-08-16 05:47:47 -04:00
dbus.sh [FIX] the build host answered questions the target should 2026-08-19 05:28:32 -04:00
e2fsprogs.sh [FIX] four hooks the closure's second round needed 2026-08-19 06:24:11 -04:00
expat.sh [FIX] host defaults: apt was deciding what got built 2026-08-17 02:37:46 -04:00
findutils.sh [FIX] selinux: the chroot named a host artefact, not a dependency 2026-08-17 01:33:41 -04:00
gcc.sh [FIX] declared, never linked: guile, libisl.so, leancrypto 2026-08-19 05:28:32 -04:00
gettext.sh [FIX] the build host answered questions the target should 2026-08-19 05:28:32 -04:00
glibc.sh [ADD] devtools stand-ins, and lib32 removal for glibc and gcc 2026-08-15 21:15:01 -04:00
gnutls.sh [FIX] declared, never linked: guile, libisl.so, leancrypto 2026-08-19 05:28:32 -04:00
grep.sh [FIX] grep: the m4 check lives in bootstrap.conf, not bootstrap 2026-08-17 00:00:48 -04:00
kbd.sh [ADD] test-chroot: read the binaries, not the declarations 2026-08-19 06:24:11 -04:00
krb5.sh [FIX] the build host answered questions the target should 2026-08-19 05:28:32 -04:00
libassuan.sh [FIX] canonical CHOST, and a reachable libassuan source 2026-08-16 00:45:50 -04:00
libcap-ng.sh [FIX] four hooks the closure's second round needed 2026-08-19 06:24:11 -04:00
libgcrypt.sh [ADD] libgcrypt: stage 1 consumes its own libgpg-error 2026-08-19 05:28:32 -04:00
libsasl.sh [FIX] four hooks the closure's second round needed 2026-08-19 06:24:11 -04:00
libseccomp.sh [REM] sub-packages: four that cost more closure than they carry 2026-08-19 05:28:32 -04:00
libtool.sh [ADD] port patches: gcc front ends, binutils gold, libtool multilib 2026-08-15 21:01:18 -04:00
lz4.sh [FIX] libdir: the Debian host hid the libraries from Arch 2026-08-17 01:33:41 -04:00
make.sh [FIX] declared, never linked: guile, libisl.so, leancrypto 2026-08-19 05:28:32 -04:00
openssl.sh [FIX] openssl: s390x is big-endian, drop the little-endian EC path 2026-08-16 22:53:33 -04:00
pacman.sh [FIX] libdir: the Debian host hid the libraries from Arch 2026-08-17 01:33:41 -04:00
pam.sh [ADD] host deps: the tools six packages needed and nobody declared 2026-08-17 01:33:41 -04:00
pinentry.sh [FIX] the build host answered questions the target should 2026-08-19 05:28:32 -04:00
sed.sh [FIX] selinux: the chroot named a host artefact, not a dependency 2026-08-17 01:33:41 -04:00
sqlite.sh [FIX] the build host answered questions the target should 2026-08-19 05:28:32 -04:00
systemd.sh [REM] sub-packages: four that cost more closure than they carry 2026-08-19 05:28:32 -04:00
tar.sh [FIX] selinux: the chroot named a host artefact, not a dependency 2026-08-17 01:33:41 -04:00
zstd.sh [FIX] libdir: the Debian host hid the libraries from Arch 2026-08-17 01:33:41 -04:00