feat: add QEMU software emulation fallback for VM testing

VM creation failed with "Emulator does not support virt type 'kvm'"
in environments without /dev/kvm (nested VMs, CI, containers). This
makes ISO boot testing work everywhere by detecting KVM at runtime.

Changes:
- vm/template.xml: replace hardcoded type='kvm' and cpu
  mode='host-passthrough' with @DOMAIN_TYPE@ and @CPU_MODE@ placeholders
- run.sh vm_create(): detect /dev/kvm at runtime, use KVM +
  host-passthrough when available, fall back to QEMU + qemu64
  software emulation when not
- tests: 6 new tests covering placeholder existence, KVM detection,
  and substitution logic

This enables the ISO to be booted and serial output captured for
verification even without hardware virtualization support.

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
This commit is contained in:
2026-07-30 13:03:15 -05:00
parent 5b562b7e55
commit 82ad3a1b6d
3 changed files with 44 additions and 2 deletions
+14
View File
@@ -199,12 +199,26 @@ vm_create() {
log_warn "This is OK for live ISO testing but not for installation"
fi
# Detect KVM acceleration; fall back to QEMU software emulation
local domain_type="qemu"
local cpu_mode="qemu64"
if [[ -e /dev/kvm ]]; then
domain_type="kvm"
cpu_mode="host-passthrough"
log_info "KVM acceleration enabled"
else
log_warn "KVM not available (/dev/kvm missing) - using QEMU software emulation"
log_warn "VM will be slower but functional for boot testing"
fi
# Create VM XML from template
local vm_xml="/tmp/${VM_NAME}.xml"
sed -e "s|@VM_NAME@|${VM_NAME}|g" \
-e "s|@VM_UUID@|${vm_uuid}|g" \
-e "s|@VM_RAM@|${VM_RAM}|g" \
-e "s|@VM_CPUS@|${VM_CPUS}|g" \
-e "s|@DOMAIN_TYPE@|${domain_type}|g" \
-e "s|@CPU_MODE@|${cpu_mode}|g" \
-e "s|@SECURE_BOOT@|${secure_boot}|g" \
-e "s|@UEFI_CODE@|${uefi_code}|g" \
-e "s|@UEFI_VARS_TEMPLATE@|${uefi_vars}|g" \