[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",
|
"d-i clock-setup/ntp boolean true",
|
||||||
# Le disque est nommé : sur s390x virtio-ccw il n'y en a qu'un, mais
|
# 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.
|
# 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/disk string /dev/vda",
|
||||||
"d-i partman-auto/method string regular",
|
"d-i partman-auto/method string regular",
|
||||||
"d-i partman-auto/choose_recipe select atomic",
|
"d-i partman-auto/choose_recipe select atomic",
|
||||||
|
|
@ -1933,12 +1950,30 @@ def build_installer_initrd(
|
||||||
with tempfile.TemporaryDirectory() as tmp:
|
with tempfile.TemporaryDirectory() as tmp:
|
||||||
work = Path(tmp)
|
work = Path(tmp)
|
||||||
(work / "preseed.cfg").write_text(preseed, encoding="utf-8")
|
(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"
|
plain = work / "initrd"
|
||||||
with gzip.open(initrd_src, "rb") as src, open(plain, "wb") as dst:
|
with gzip.open(initrd_src, "rb") as src, open(plain, "wb") as dst:
|
||||||
shutil.copyfileobj(src, dst)
|
shutil.copyfileobj(src, dst)
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
["cpio", "-H", "newc", "-o", "-A", "-F", str(plain)],
|
["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,
|
text=True,
|
||||||
cwd=work,
|
cwd=work,
|
||||||
check=True,
|
check=True,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue