Files
GuofangandClaude Sonnet 5.5 a920ba0ca5 Windows launcher only creates a differential disk; seed via Unattend.xml
run-windows11.py no longer installs Windows or touches ISO/img files: it
creates a QCOW2 overlay on the base image (made by vm-images/build-windows-base.sh)
and, when the disk is created, mounts seed.iso. Windows reads the Unattend.xml
in its root during the specialize and OOBE passes (host name, account, auto
logon, Remote Desktop) and Configure-Windows.ps1 then installs OpenSSH with the
host's key, turns off Windows Update and copies the installer scripts.

The VM hardware uses devices with inbox Windows drivers (IDE/NVMe, e1000e,
ramfb on arm64), since the base image has no VirtIO drivers. Autounattend.xml
moves to vm-images; the vm-images pointer is updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 11:19:48 +08:00

84 lines
2.1 KiB
INI

# QEMU configuration for the Windows 11 virtual machine. The accelerators and machine type
# are in <os>-<arch>.ini (os is linux or darwin), which QEMU reads after
# this file.
#
# run-windows11.py fills in the file path placeholders below, writes the result
# to <state dir>/qemu.ini and passes it to QEMU with -readconfig. Options that
# have no -readconfig equivalent (-cpu, -display) and the network are still added
# by the launcher.
[name]
guest = "windows11"
[memory]
size = "8G"
[smp-opts]
cpus = "8"
# UEFI firmware: read-only code and the per-VM variable store.
[drive "pflash0"]
if = "pflash"
format = "raw"
readonly = "on"
file = "${uefi_code}"
[drive "pflash1"]
if = "pflash"
format = "raw"
file = "${uefi_vars}"
# System disk image; the device that exposes it (and the NIC, which is
# attached to the user-mode network "net0" that the launcher defines with
# -netdev from qemu/windows11/forwards.conf because a config file section cannot hold
# more than one hostfwd) is in the architecture file.
[drive "system_disk"]
if = "none"
format = "qcow2"
file = "${disk_image}"
# Host/guest clipboard integration through the SPICE vdagent channel.
[device "virtio_serial"]
driver = "virtio-serial-pci"
[chardev "vdagent"]
backend = "qemu-vdagent"
name = "vdagent"
clipboard = "on"
mouse = "off"
[device "vdagent-port"]
driver = "virtserialport"
chardev = "vdagent"
name = "com.redhat.spice.0"
# Register the USB tablet after vdagent so QEMU selects it as the active pointer.
[device "usb_controller"]
driver = "qemu-xhci"
[device "tablet0"]
driver = "usb-tablet"
bus = "usb_controller.0"
# QEMU Guest Agent and the QEMU monitor, both on sockets in the state directory.
[chardev "qga"]
backend = "socket"
path = "${guest_agent_socket}"
server = "on"
wait = "off"
[device "qga-port"]
driver = "virtserialport"
chardev = "qga"
name = "org.qemu.guest_agent.0"
[chardev "monitor"]
backend = "socket"
path = "${monitor_socket}"
server = "on"
wait = "off"
[mon "monitor0"]
chardev = "monitor"
mode = "readline"