No description
Debian patches sysconfig to prefer the "posix_local" scheme, so every wheel-installing PKGBUILD ships /usr/local -- a tree Arch reserves and whose every path the filesystem package owns. pacman refuses the transaction: error: failed to commit transaction (conflicting files) /usr/local/share/man exists in both 'filesystem' and 'meson' Four packages hit it. Two were dropped for other reasons. Rather than write a third and fourth relocation hook, build_package now exports DEB_PYTHON_INSTALL_LAYOUT=deb_system, which moves the default from /usr/local/lib/python3.13/dist-packages to /usr/lib/python3/dist-packages and scripts from /usr/local/bin to /usr/bin. One line, every python package, including ones not built yet. It does not finish the job: deb_system still says dist-packages and Arch reads site-packages. That move stays per-package, because only modules actually imported on the target need it. meson does, and its hook does it -- targeting the version of the python PACKAGE in repo/s390x, not the interpreter running the build. Installed under the host's 3.13, /usr/bin/meson runs in the chroot and then says ModuleNotFoundError, because the chroot's python is our 3.14 and never looks in 3.13. --- FR --- Debian modifie sysconfig pour préférer le schéma « posix_local » : tout PKGBUILD installant une roue livre donc /usr/local, arbre qu'Arch réserve et dont le paquet filesystem possède chaque chemin. pacman refuse la transaction : error: failed to commit transaction (conflicting files) /usr/local/share/man exists in both 'filesystem' et 'meson' Quatre paquets l'ont rencontré. Deux ont été écartés pour d'autres raisons. Plutôt que d'écrire un troisième et un quatrième crochet de relocalisation, build_package exporte désormais DEB_PYTHON_INSTALL_LAYOUT=deb_system, qui déplace le défaut de /usr/local/lib/python3.13/dist-packages vers /usr/lib/python3/dist-packages, et les scripts de /usr/local/bin vers /usr/bin. Une ligne, tous les paquets python, y compris ceux pas encore bâtis. Cela ne termine pas le travail : deb_system dit encore dist-packages quand Arch lit site-packages. Ce déplacement reste par paquet, car seuls les modules réellement importés sur la cible en ont besoin. meson en fait partie, et son crochet le fait — en visant la version du PAQUET python de repo/s390x, non l'interpréteur qui exécute la compilation. Installé sous le 3.13 de l'hôte, /usr/bin/meson démarre dans le chroot puis annonce ModuleNotFoundError, le python du chroot étant notre 3.14, qui ne regarde jamais dans 3.13. 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.