[FIX] script qemu: boot VMs via UEFI (Debian 13 boot loop)
Debian 13 (trixie) genericcloud dropped the BIOS/GRUB-pc bootloader, so SeaBIOS looped forever on "Booting Debian GNU/Linux" and the install never completed. Boot via UEFI (OVMF) by default: trixie boots, and Ubuntu/Debian 12/Fedora keep working (verified Debian 13 and Ubuntu 24.04 end to end). Add a --bios opt-out for hosts without OVMF, and pull the UEFI firmware (ovmf / edk2-ovmf) with the libvirt/QEMU stack. VM deletion already removes the nvram (undefine --nvram). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
79c69fb6d5
commit
2b7e20493a
1 changed files with 23 additions and 4 deletions
|
|
@ -360,11 +360,18 @@ TOOL_PACKAGES: dict[str, dict[str, str]] = {
|
||||||
# Paquets fournissant le démon libvirt + l'émulateur QEMU système. Ils sont
|
# Paquets fournissant le démon libvirt + l'émulateur QEMU système. Ils sont
|
||||||
# INDISPENSABLES pour exécuter la VM : virsh/virt-install (clients) seuls ne
|
# INDISPENSABLES pour exécuter la VM : virsh/virt-install (clients) seuls ne
|
||||||
# créent pas le socket /var/run/libvirt/libvirt-sock.
|
# créent pas le socket /var/run/libvirt/libvirt-sock.
|
||||||
|
# On inclut le firmware UEFI (OVMF/edk2) : le boot par défaut est UEFI
|
||||||
|
# (indispensable pour Debian 13+ ; les images récentes n'ont plus de BIOS).
|
||||||
DAEMON_PACKAGES: dict[str, list[str]] = {
|
DAEMON_PACKAGES: dict[str, list[str]] = {
|
||||||
"apt": ["libvirt-daemon-system", "qemu-system-x86"],
|
"apt": ["libvirt-daemon-system", "qemu-system-x86", "ovmf"],
|
||||||
"dnf": ["libvirt-daemon-kvm", "qemu-kvm"],
|
"dnf": ["libvirt-daemon-kvm", "qemu-kvm", "edk2-ovmf"],
|
||||||
"pacman": ["libvirt", "qemu-desktop", "dnsmasq"],
|
"pacman": ["libvirt", "qemu-desktop", "dnsmasq", "edk2-ovmf"],
|
||||||
"zypper": ["libvirt-daemon", "libvirt-daemon-qemu", "qemu-kvm"],
|
"zypper": [
|
||||||
|
"libvirt-daemon",
|
||||||
|
"libvirt-daemon-qemu",
|
||||||
|
"qemu-kvm",
|
||||||
|
"qemu-ovmf-x86_64",
|
||||||
|
],
|
||||||
"brew": [],
|
"brew": [],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -977,6 +984,12 @@ def virt_install(
|
||||||
"--console",
|
"--console",
|
||||||
"pty,target_type=serial",
|
"pty,target_type=serial",
|
||||||
]
|
]
|
||||||
|
# Boot UEFI par défaut : Debian 13 (trixie) et les images cloud récentes
|
||||||
|
# n'embarquent plus le chargeur BIOS/GRUB-pc et partent en boucle
|
||||||
|
# « Booting... » en SeaBIOS. UEFI (OVMF) fonctionne pour Ubuntu/Debian/
|
||||||
|
# Fedora. --bios force l'ancien BIOS si OVMF est indisponible.
|
||||||
|
if not args.bios:
|
||||||
|
cmd += ["--boot", "uefi"]
|
||||||
if not args.attach_console:
|
if not args.attach_console:
|
||||||
cmd.append("--noautoconsole")
|
cmd.append("--noautoconsole")
|
||||||
runner.run(cmd, privileged=True)
|
runner.run(cmd, privileged=True)
|
||||||
|
|
@ -1127,6 +1140,12 @@ def build_parser() -> argparse.ArgumentParser:
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="Attache la console série (sinon --noautoconsole).",
|
help="Attache la console série (sinon --noautoconsole).",
|
||||||
)
|
)
|
||||||
|
g_vm.add_argument(
|
||||||
|
"--bios",
|
||||||
|
action="store_true",
|
||||||
|
help="Force l'amorçage BIOS hérité au lieu d'UEFI (par défaut UEFI ; "
|
||||||
|
"n'utiliser que si le firmware OVMF est absent).",
|
||||||
|
)
|
||||||
|
|
||||||
g_cloud = p.add_argument_group("cloud-init")
|
g_cloud = p.add_argument_group("cloud-init")
|
||||||
g_cloud.add_argument(
|
g_cloud.add_argument(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue