No description
Find a file
Mathieu Benoit 61abc5aef9 [FIX] systemd: every man page operation at once, not one per pass
mv: cannot stat '<pkgdir>/usr/share/man/man3': No such file or directory

Fifteenth instance, and the first where the whole class was handled before the
failures arrived. -Dman=disabled means NO man pages exist, and package() touches
them six times -- three moves into split packages, three removals of pages Arch
does not ship.

Treated by kind rather than by name: the moves are neutralised, because with no
pages there is nothing to move; the removals get -f, because their intent still
holds on a machine that HAS the DocBook stack, and one of them also removes a
binary that must still go. Five moves, three removals, counted and reported by
the hook.

This is the procedure written into jsoncpp's hook one commit earlier, applied
forwards: after disabling documentation, grep package() for the output paths.
Chasing man3 alone would have cost five more passes.

The first guard for it matched any `rm` without a dash and condemned correct
code -- systemd removes plenty that is not documentation. Same mistake as the
blanket `grep tcl8.6` in sqlite's hook, and caught the same way.

--- FR ---

  mv: cannot stat '<pkgdir>/usr/share/man/man3': No such file or directory

Quinzième occurrence, et la première où toute la classe est traitée avant que les
échecs n'arrivent. -Dman=disabled signifie qu'AUCUNE page n'existe, et package()
y touche six fois — trois déplacements vers des sous-paquets, trois suppressions
de pages qu'Arch ne livre pas.

Traitées par nature et non par nom : les déplacements sont neutralisés, puisqu'il
n'y a rien à déplacer ; les suppressions reçoivent -f, car leur intention tient
toujours sur une machine dotée de la pile DocBook, et l'une retire aussi un
binaire qui doit bien partir. Cinq déplacements, trois suppressions, comptés et
rapportés par le hook.

C'est la procédure inscrite dans le hook de jsoncpp un commit plus tôt, appliquée
à l'endroit : après avoir désactivé une documentation, chercher dans package() les
chemins de sortie. Poursuivre man3 seul aurait coûté cinq passes de plus.

Le premier garde écrit pour cela attrapait tout `rm` sans tiret et condamnait du
code juste — systemd supprime beaucoup qui n'est pas de la documentation. Même
erreur que le `grep tcl8.6` global du hook sqlite, attrapée de la même façon.

Assisted-by: Claude Opus 5
2026-08-24 00:21:48 -04:00
.github/workflows making the house a home 2026-01-27 23:26:31 +01:00
arch-kernel making the house a home 2026-01-27 23:26:31 +01:00
boot making the house a home 2026-01-27 23:26:31 +01:00
patches [FIX] systemd: every man page operation at once, not one per pass 2026-08-24 00:21:48 -04:00
scripts [UPD] hoist gyp with the Python set, ahead of nss 2026-08-24 00:17:11 -04:00
.env.example [ADD] upstream.lock, and keep the machine out of the repository 2026-08-22 22:52:04 -04:00
.gitignore making the house a home 2026-01-27 23:26:31 +01:00
CODEOWNERS making the house a home 2026-01-27 23:26:31 +01:00
Containerfile making the house a home 2026-01-27 23:26:31 +01:00
LICENSE use arch kernel patches 2025-06-02 21:53:33 +02:00
Makefile making the house a home 2026-01-27 23:26:31 +01:00
README.md making the house a home 2026-01-27 23:26:31 +01:00
RELAIS.md [ADD] upstream.lock, and keep the machine out of the repository 2026-08-22 22:52:04 -04:00
TODO.md [FIX] help2man was uninstallable, which stopped the whole pass 2026-08-21 00:33:07 -04:00

Arch Linux s390x

A port of Arch Linux to IBM s390x mainframe architecture with systemd support.

Boots a full Arch Linux system on IBM mainframes (or QEMU s390x emulation) using a hybrid build: cross-compilation for the kernel, native s390x compilation on z/VM for userspace.

Quick Start

make container        # build dev container (first time)
cp .env.example .env  # configure z/VM access
make all              # build kernel + initramfs + systemd
make test-systemd     # boot it

What Works

  • Arch Linux kernel 6.18.6-arch1 with Arch patches, cross-compiled
  • Initramfs via modified mkinitcpio
  • Static busybox built natively on z/VM, 2.3MB
  • Root filesystem with ext4, switch_root to real rootfs
  • Systemd as PID 1

Pacman, bash, and GNU coreutils are not yet ported.

Build System

The build uses two tiers:

Cross-compilation (x86_64 host): Kernel is built in a Fedora 43 container with s390x-linux-gnu-gcc. Initramfs is generated with a patched mkinitcpio that handles cross-architecture binary injection.

Native compilation (s390x z/VM): Busybox and systemd must be built on real s390x hardware. The z/VM system runs RHEL 9.6 with GCC 11.5.0. Scripts handle SSH deployment and retrieval automatically via .env configuration.