No description
The soname check reported seventeen missing libraries. Four were false: it built its "shipped" set from DT_SONAME alone, and tcl's libtcl9.0.so records no SONAME at all. The file sits in usr/lib and ld.so resolves it by name, so the check was calling a correct package broken -- which would have sent the next reader hunting for a packaging bug that does not exist. Shipped filenames and symlinks now count as supplied. The remaining twelve needed separating, because an unclassified list is only alarming. A missing soname whose library exists at a DIFFERENT version is stage 1 working as designed: it linked the host, and stage 2 dissolves it. A missing soname with no provider at any version is a closure gap. Nine and three. The three are each understood: pylibmount's cp313 extension (inert, no python is shipped), makedb's libselinux (deliberate), and libtcl8.6 against our tcl 9.0 -- which is the honest cost of a decision made an hour before on closure size without looking at ABI. TODO.md records all twelve, with the note that stage 2 must install using the host's pacman, because pacman inside the stage-1 rootfs cannot start. --- FR --- La vérification de sonames annonçait dix-sept bibliothèques manquantes. Quatre étaient fausses : elle construisait son ensemble « livré » à partir du seul DT_SONAME, et le libtcl9.0.so de tcl n'enregistre aucun SONAME. Le fichier est dans usr/lib et ld.so le résout par son nom : la vérification déclarait donc défectueux un paquet correct — de quoi envoyer le lecteur suivant chasser un défaut d'empaquetage inexistant. Les noms de fichiers et les liens livrés comptent désormais comme fournis. Les douze restants demandaient d'être séparés, une liste non classée n'étant qu'alarmante. Un soname manquant dont la bibliothèque existe à une AUTRE version, c'est l'étage 1 fonctionnant comme prévu : il a lié l'hôte, et l'étage 2 le dissout. Un soname sans aucun fournisseur est un trou de fermeture. Neuf et trois. Les trois sont compris : l'extension cp313 de pylibmount (inerte, aucun python livré), le libselinux de makedb (délibéré), et libtcl8.6 contre notre tcl 9.0 — coût honnête d'une décision prise une heure plus tôt sur la taille de la fermeture, sans regarder l'ABI. TODO.md consigne les douze, avec la note que l'étage 2 devra installer avec le pacman de l'hôte, celui du rootfs d'étage 1 ne pouvant pas démarrer. 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.