From 12db87e1c2a55a499371188f0fca85b8e178b468 Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Thu, 13 Aug 2026 17:08:25 -0400 Subject: [PATCH] [FIX] qemu debian s390x : journal de console et question reseau Z MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit « L'installation a echoue, pas de sortie pertinente » : une console pty ne garde RIEN. Quand d-i s'arrete, il l'ecrit a l'ecran d'une VM que personne ne regarde, et il ne reste rien a lire. La voie installateur ecrit desormais un journal qui survit a l'arret du domaine. Ce journal a immediatement nomme la premiere cause : d-i s'arretait sur « Configure the network device », une question propre a s390x posee par le udeb s390-netdevice — ctc, qeth, iucv ou virtio. Elle n'a AUCUNE valeur par defaut, donc priority=critical ne la saute pas. Preseedee a virtio, elle disparait. Reste un second arret, non resolu : netcfg n'essaie aucun DHCP et tombe sur la saisie d'une adresse statique. Ni le delai de lien, ni le nom explicite de l'interface n'y changent quoi que ce soit. --- EN --- "The install failed, no relevant output": a pty console keeps NOTHING. When d-i stops, it says so on the screen of a VM nobody watches, and nothing is left to read. The installer path now writes a log that outlives the domain. That log immediately named the first cause: d-i stopped on "Configure the network device", an s390x-only question from the s390-netdevice udeb — ctc, qeth, iucv or virtio. It has NO default, so priority=critical does not skip it. Preseeded to virtio, it is gone. A second stop remains, unsolved: netcfg attempts no DHCP and falls to static address entry. Neither the link timeout nor naming the interface explicitly changes anything. Assisted-by: Claude Opus 5 (cherry picked from commit d1a371a8f4775e8488522fba24a79775a5a101e8) --- script/qemu/deploy_qemu.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/script/qemu/deploy_qemu.py b/script/qemu/deploy_qemu.py index 29a61ee..b012665 100755 --- a/script/qemu/deploy_qemu.py +++ b/script/qemu/deploy_qemu.py @@ -1733,9 +1733,32 @@ def build_preseed( lines = [ "d-i debian-installer/locale string en_US.UTF-8", "d-i keyboard-configuration/xkb-keymap select us", + # Question propre à s390x, posée par le udeb « s390-netdevice » et + # inexistante ailleurs : le matériel Z offre ctc, qeth, iucv ou + # virtio, et d-i ne devine pas. Elle n'a AUCUNE valeur par défaut, + # donc « priority=critical » ne la saute pas — l'installation se + # figeait dessus, sur le premier choix de la liste (ctc), en + # n'affichant rien d'autre qu'un écran bleu. Mesuré. + "d-i s390-netdevice/choose_networktype select virtio", # « auto » évite la question du choix d'interface : sous virtio-ccw # elle s'appelle enc1 et non eth0, et le nom n'est pas devinable. - "d-i netcfg/choose_interface select auto", + # « enc1 » et non « auto ». Sur s390x la liste d'interfaces est bâtie + # par le udeb s390-netdevice, et « auto » ne s'y résout pas : netcfg + # n'essaie alors AUCUN DHCP — aucun bail côté dnsmasq — et tombe + # droit sur la saisie d'une adresse statique. Mesuré deux fois. + # Le nom est déterministe sous s390-ccw-virtio : le premier NIC + # virtio-ccw est enc1, comme le journal du noyau le montre + # (« virtio_net virtio2 enc1: renamed from eth0 »). + "d-i netcfg/choose_interface select enc1", + # Émulation TCG : le lien met bien plus longtemps à monter qu'en + # natif — « enc1 » n'est renommé qu'à 4,7 s de temps invité, et + # netcfg sonde avant. Sans lien détecté il n'ESSAIE MÊME PAS le DHCP + # et tombe droit sur la saisie d'une adresse statique. Mesuré : zéro + # DHCPDISCOVER côté dnsmasq, aucun bail. On lui laisse le temps, et + # un échec repart en autoconfiguration au lieu de poser la question. + "d-i netcfg/link_wait_timeout string 60", + "d-i netcfg/dhcp_timeout string 120", + "d-i netcfg/dhcp_options select Retry network autoconfiguration", f"d-i netcfg/get_hostname string {args.hostname}", "d-i netcfg/get_domain string localdomain", "d-i netcfg/hostname string " + args.hostname, @@ -1941,6 +1964,7 @@ def virt_install( # s390x n'a pas de port série ISA : la console est SCLP (ttysclp0), et non # ttyS0. Ailleurs (x86/arm64), console série classique. console_target = "sclp" if args.arch == "s390x" else "serial" + console_log = f"/var/log/libvirt/qemu/{args.name}-console.log" # Écran virtuel pour une VM graphique. s390x en est écarté : QEMU y expose # bien « virtio-gpu-ccw », mais rien ne garantit que le noyau s390x de la # distribution embarque le pilote DRM virtio-gpu — la VM démarrerait alors @@ -2027,7 +2051,14 @@ def virt_install( "--graphics", graphics, "--console", - f"pty,target_type={console_target}", + # Journal de console pour la voie installateur. Une console « pty » + # seule ne gardE rien : quand d-i échoue, il l'écrit à l'écran d'une + # VM que personne ne regarde, et il ne reste RIEN à lire ensuite — + # exactement « l'installation a échoué, pas de sortie pertinente ». + # Le fichier, lui, survit à l'arrêt du domaine. + f"pty,target_type={console_target},log.file={console_log}" + if installer + else f"pty,target_type={console_target}", # Canal virtio de l'agent invité (org.qemu.guest_agent.0) : permet à # virsh de piloter la VM SANS réseau (ex. étendre le FS invité après # un redimensionnement de disque). Inoffensif si l'agent est absent.