No description
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 |
||
|---|---|---|
| .github/workflows | ||
| arch-kernel | ||
| boot | ||
| patches | ||
| scripts | ||
| .env.example | ||
| .gitignore | ||
| CODEOWNERS | ||
| Containerfile | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| RELAIS.md | ||
| TODO.md | ||
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.