[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:
parent
788c17dbb5
commit
58da6cdacd
1 changed files with 36 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue