[FIX] qemu debian s390x : desactiver network-console, reclamer partman-auto

Deux blocages, deux mecanismes propres a IBM Z.

network-console n'est pas une question a laquelle repondre : il demarre
sshd et ATTEND une connexion, indefiniment. Preseeder son mot de passe
ne fait avancer que d'un ecran. d-i prevoit le levier — un composant
dont « .isinstallable » sort en erreur quitte le menu. On ajoute donc a
l'initrd une version qui refuse toujours ; le fichier ecrit APRES
l'original prend sa place, le noyau depliant le cpio sequentiellement.

partman-auto n'est pas tire d'office sur s390x, ou la voie attendue est
le partitionnement DASD manuel. Mesure : « /lib/partman/
automatically_partition/ No such file or directory », d'ou « No root
file system is defined ». anna/choose_modules le reclame.

Mesure apres correctif : recette atomic appliquee, aucun ecran bloquant,
l'installateur deballe le systeme de base.

--- EN ---

Two stops, two IBM Z mechanisms.

network-console is not a question to answer: it starts sshd and WAITS
for a connection, forever. Preseeding its password only advances one
screen. d-i provides the lever — a component whose ".isinstallable"
exits non-zero leaves the menu. So the initrd gets a version that always
refuses; the file written AFTER the original wins, since the kernel
unpacks the cpio sequentially.

partman-auto is not pulled by default on s390x, where manual DASD
partitioning is the expected path. Measured: "/lib/partman/
automatically_partition/ No such file or directory", hence "No root file
system is defined". anna/choose_modules asks for it.

Measured after the fix: atomic recipe applied, no blocking screen, the
installer unpacks the base system.

Assisted-by: Claude Opus 5
(cherry picked from commit 1fb06ad84b65f43e9ffd1604b4e3d3a7aef9aaf2)
This commit is contained in:
Mathieu Benoit 2026-08-13 23:50:45 -04:00
parent 788c17dbb5
commit 58da6cdacd

View file

@ -1845,6 +1845,23 @@ def build_preseed(
"d-i clock-setup/ntp boolean true",
# Le disque est nommé : sur s390x virtio-ccw il n'y en a qu'un, mais
# d-i pose quand même la question quand rien ne le désigne.
# Ce que partman voit reellement, ecrit sur la console : « No root
# file system is defined » ne distingue pas « disque absent » de
# « recette non appliquee », et les deux se corrigent differemment.
# Toute commande preseedee DOIT rendre 0 : d-i bloque sur « Failed to
# run preseeded command » sinon, et le diagnostic devient le blocage.
# Vecu — un « ls /dev/dasd* » sans correspondance suffisait.
"d-i partman/early_command string cat /proc/partitions > /dev/console"
" ; ls /lib/partman/automatically_partition/ > /dev/console 2>&1"
" ; true",
# partman-auto RECLAME explicitement : il n'est pas tire d'office sur
# s390x, ou la voie attendue est le partitionnement DASD manuel.
# Mesure dans l'installateur : « /lib/partman/automatically_partition/
# No such file or directory », et la liste des udebs recuperes montre
# partman-base, -utils, -partitioning, -target… mais jamais -auto.
# Sans lui, aucune recette ne s'applique et partman s'arrete sur
# « No root file system is defined ».
"d-i anna/choose_modules string partman-auto",
"d-i partman-auto/disk string /dev/vda",
"d-i partman-auto/method string regular",
"d-i partman-auto/choose_recipe select atomic",
@ -1933,12 +1950,30 @@ def build_installer_initrd(
with tempfile.TemporaryDirectory() as tmp:
work = Path(tmp)
(work / "preseed.cfg").write_text(preseed, encoding="utf-8")
# network-console DÉSACTIVÉ, par le levier que d-i prévoit pour cela.
#
# Sur IBM Z, d-i propose de poursuivre par SSH — la console y est
# historiquement limitée. Ce n'est pas une question à laquelle
# répondre : le composant démarre sshd puis ATTEND une connexion de
# l'utilisateur « installer », indéfiniment. Preseeder son mot de
# passe le fait avancer d'un écran, pas davantage — mesuré.
#
# Un composant dont « .isinstallable » sort en erreur est retiré du
# menu. L'original le fait déjà quand sshd tourne ; on le remplace par
# un refus inconditionnel. Le fichier ajouté APRÈS l'original prend sa
# place : le noyau déplie le cpio séquentiellement et le dernier
# écrit gagne.
gate = work / "var/lib/dpkg/info"
gate.mkdir(parents=True, exist_ok=True)
target = gate / "network-console.isinstallable"
target.write_text("#!/bin/sh\nexit 1\n", encoding="utf-8")
target.chmod(0o755)
plain = work / "initrd"
with gzip.open(initrd_src, "rb") as src, open(plain, "wb") as dst:
shutil.copyfileobj(src, dst)
subprocess.run(
["cpio", "-H", "newc", "-o", "-A", "-F", str(plain)],
input="preseed.cfg\n",
input="preseed.cfg\nvar/lib/dpkg/info/network-console.isinstallable\n",
text=True,
cwd=work,
check=True,