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.