File size: 2,155 Bytes
2134652
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/bash
set -e

# --- Configuration ---
SOURCE_IMG="/vm/source.qcow2"
EPISODE_DISK="/run/episode.qcow2"
VARS_TEMPLATE="/usr/share/OVMF/OVMF_VARS_4M.fd"
OVMF_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd"
DATA_DIR="/run/storage"
mkdir -p "$DATA_DIR"
VARS_FILE="$DATA_DIR/OVMF_VARS.fd"

export QEMU_AUDIO_DRV=none

echo "--- Windows 11 Standard Boot ---"

# 1. Create Ephemeral Overlay
echo "Creating ephemeral overlay..."
qemu-img create -f qcow2 -b "$SOURCE_IMG" -F qcow2 "$EPISODE_DISK"

# 2. Prepare UEFI Variables
if [ ! -f "$VARS_FILE" ]; then
    echo "Initializing UEFI variables..."
    cp "$VARS_TEMPLATE" "$VARS_FILE"
fi

# 2. Start TPM Emulator
mkdir -p /run/tpm
swtpm socket --tpmstate dir=/run/tpm --ctrl type=unixio,path=/run/tpm/swtpm-sock --tpm2 -d
sleep 1

# 3. Start Web Viewer
echo "Starting web viewer..."
websockify -D --web=/usr/share/novnc/ 8006 localhost:5900

echo "Booting Windows 11..."

# 5. Launch QEMU
exec qemu-system-x86_64 \
  -enable-kvm \
  -m 8G \
  -smp 4,cores=4,threads=1,sockets=1 \
  -machine q35,accel=kvm \
  -boot menu=on,splash-time=0 \
  -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,+invtsc \
  -device intel-hda -device hda-output,audiodev=nomix \
  -audiodev id=nomix,driver=none \
  -drive if=pflash,format=raw,readonly=on,file="$OVMF_CODE" \
  -drive if=pflash,format=raw,file="$VARS_FILE" \
  -chardev socket,id=chrtpm,path=/run/tpm/swtpm-sock \
  -tpmdev emulator,id=tpm0,chardev=chrtpm \
  -device tpm-tis,tpmdev=tpm0 \
  -device virtio-balloon-pci,free-page-reporting=on,deflate-on-oom=on \
  -vga std \
  -object iothread,id=iothread0 \
  -device virtio-scsi-pci,id=scsi0,iothread=iothread0,num_queues=4 \
  -drive file="$EPISODE_DISK",format=qcow2,if=none,id=disk0,cache=writeback,aio=threads,discard=unmap,l2-cache-size=4M \
  -device scsi-hd,drive=disk0,bootindex=1,rotation_rate=1 \
  -netdev user,id=net0,hostfwd=tcp::3389-:3389,hostfwd=tcp::2222-:22,hostfwd=tcp::9090-:9090 \
  -device virtio-net-pci,netdev=net0,id=net0,romfile="" \
  -vnc 0.0.0.0:0 \
  -usb \
  -device usb-kbd \
  -device usb-tablet \
  -monitor tcp:0.0.0.0:4444,server,nowait \
  -qmp tcp:0.0.0.0:4445,server,nowait