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