Commit graph

2 commits

Author SHA1 Message Date
51384a64af [ADD] stage 2 is complete: 164 of 164, and it resolves, is clean, and runs
Every package in the list has been rebuilt inside the chroot by the compiler,
linker and libc it produced. The verification, run against repo2 rather than
asserted:

  RESOLVE   resolver satisfied (101 packages), --nodeps OFF
  ARTEFACT  no multiarch, no lib64, no dist-packages, no usr/local
  SONAME    every requested soname has a provider in the repository
  RUN       102 packages installed; bash 5.3.15, uname s390x, glibc 2.44,
            ls, tar, find, sed and pacman all execute

SONAME is the one that matters most. Stage 1 shipped nine sonames at the host's
version and three with no provider at all, and the whole premise of a second
stage was that rebuilding inside the result dissolves them. It did: zero of
either.

python was the last holdout and the most instructive: POSIX_SEMAPHORES_NOT_ENABLED
is now 0. It had been 1 for days because `mount --bind /dev` does not carry
submounts, so the chroot saw an empty 0755 /dev/shm, CPython's configure got
EACCES from sem_open, and _multiprocessing was compiled without SemLock -- a
package that installed cleanly, imported cleanly, and was wrong.

--- FR ---

Chaque paquet de la liste a été rebâti dans le chroot par le compilateur, le lieur
et la libc qu'il a produits. La vérification, passée sur repo2 plutôt
qu'affirmée :

  RESOLVE   résolveur satisfait (101 paquets), --nodeps éteint
  ARTEFACT  ni multiarch, ni lib64, ni dist-packages, ni usr/local
  SONAME    chaque soname demandé a un fournisseur dans le dépôt
  RUN       102 paquets installés ; bash 5.3.15, uname s390x, glibc 2.44,
            ls, tar, find, sed et pacman s'exécutent tous

SONAME est le contrôle qui compte. L'étage 1 livrait neuf sonames à la version de
l'hôte et trois sans aucun fournisseur, et toute la raison d'être d'un second
étage était que rebâtir dans le résultat les dissout. C'est fait : zéro des deux.

python fut le dernier et le plus instructif : POSIX_SEMAPHORES_NOT_ENABLED vaut
désormais 0. Il valait 1 depuis des jours parce que `mount --bind /dev` ne porte
pas les sous-montages : le chroot voyait un /dev/shm vide en 0755, le configure de
CPython recevait EACCES de sem_open, et _multiprocessing était compilé sans
SemLock — un paquet qui s'installait proprement, s'importait proprement, et était
faux.

Assisted-by: Claude Opus 5
2026-08-24 01:35:16 -04:00
4101d18f72 [ADD] upstream.lock, and keep the machine out of the repository
Until now the honest description of this port was: it worked once, on one
machine. Every PKGBUILD comes from a `git clone --depth 1` of
gitlab.archlinux.org, and the 63 hooks assert exact strings -- deliberately, and
several have caught their own mistakes that way. But it means the port is written
against a moving target: someone starting over today gets what Arch has today,
not what these hooks were written against.

What closes that is not the 18 GB of build output -- regenerable packages, a
chroot wiped on every run, state files derived from the repository by design. It
is one commit per checkout: 155 lines. build_package now pins a fresh clone to
the locked commit, and says so when a package is NOT in the lock, because that is
how a lock quietly stops covering what it claims to.

RELAIS.md joins the repository, written without the build machine's alias,
address or account -- a successor needs the shape of the access, not its
coordinates. check-private.sh keeps it that way, and .env.example loses its
literal account name. Three of its patterns had to go on their first runs: they
flagged a systemd unit template, upstream maintainer headers, the localhost lines
of a generated /etc/hosts, and its own explanatory comment. A check that fails on
correct files is one somebody stops running.

--- FR ---

Jusqu'ici la description honnête de ce portage était : il a fonctionné une fois,
sur une machine. Chaque PKGBUILD vient d'un `git clone --depth 1` de
gitlab.archlinux.org, et les 63 hooks affirment des chaînes exactes — à dessein,
et plusieurs y ont attrapé leurs propres erreurs. Mais le portage est donc écrit
contre une cible mouvante : qui recommence aujourd'hui obtient l'Arch du jour.

Ce qui comble ce trou n'est pas les 18 Go de production — paquets régénérables,
chroot effacé à chaque passage, registres dérivés du dépôt par conception. C'est
un commit par arbre : 155 lignes. build_package épingle un nouveau clone sur le
commit verrouillé, et le DIT quand un paquet n'y figure pas, car c'est ainsi qu'un
verrou cesse discrètement de couvrir ce qu'il prétend.

RELAIS.md entre dans le dépôt, écrit sans l'alias, l'adresse ni le compte de la
machine — un successeur a besoin de la forme de l'accès, pas de ses coordonnées.
check-private.sh l'y maintient, et .env.example perd son nom de compte littéral.
Trois de ses motifs ont dû partir dès les premiers passages : ils signalaient un
gabarit d'unité systemd, des en-têtes de mainteneurs amont, les lignes localhost
d'un /etc/hosts généré, et son propre commentaire explicatif. Un contrôle qui
échoue sur des fichiers justes est un contrôle qu'on cesse de lancer.

Assisted-by: Claude Opus 5
2026-08-22 22:52:04 -04:00