Files
jpmschweitzerandClaude Opus 4.8 9c288a618b add windows-verify kit: provision + bootstrap + instrumented ConPTY soak
Verification tooling for the Windows freeze assessment (T-424).
provision-vm.sh stands up a Windows KVM guest (dry-run unless --go);
bootstrap-windows.ps1 installs Flutter + VS C++ Build Tools and checks out
the branch; soak-conpty.ps1 runs the pty suite in a fresh dart.exe per
iteration and measures the orphaned conhost/cmd count that survives each
exit (the leak signature), with a per-iteration timeout so a wedged test
can't stall the run. Verifies the ConPTY leak (#1-#4); the GPU/TDR
hypothesis (#5) needs passthrough/bare metal (README appendix).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 20:54:46 +02:00

89 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Provision a Windows VM on a Fedora/KVM host (this is "danoontje") for the
# ConPTY soak verification. REVIEW BEFORE RUNNING — by default this is a
# DRY RUN that only prints what it would do. Pass --go to actually execute.
#
# Scope: this VM verifies the ConPTY *resource leak* (culprits #1-#4). It does
# NOT verify the GPU/TDR hypothesis (#5): a stock VM renders through a software
# (WARP) adapter, so `make run` cannot exhibit a real display-driver TDR here.
# Chasing #5 needs GPU passthrough (vfio) or bare metal — see README appendix.
#
# Prereqs you must supply:
# WIN_ISO path to a Windows 10/11 or Server 2022 install ISO
# VIRTIO_ISO path to the virtio-win ISO (storage/net drivers)
# https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/
set -euo pipefail
GO=0
[[ "${1:-}" == "--go" ]] && GO=1
VM_NAME="${VM_NAME:-clide-win-verify}"
RAM_MB="${RAM_MB:-8192}"
VCPUS="${VCPUS:-4}"
DISK_GB="${DISK_GB:-80}"
DISK_PATH="${DISK_PATH:-/var/lib/libvirt/images/${VM_NAME}.qcow2}"
WIN_ISO="${WIN_ISO:-}"
VIRTIO_ISO="${VIRTIO_ISO:-}"
OS_VARIANT="${OS_VARIANT:-win11}" # `osinfo-query os` for the full list; win11 needs TPM+UEFI
run() { echo "+ $*"; [[ "$GO" == 1 ]] && "$@"; }
echo "== clide Windows verify VM provisioner =="
echo " mode: $([[ $GO == 1 ]] && echo EXECUTE || echo 'DRY RUN (pass --go to execute)')"
echo " vm: $VM_NAME ${VCPUS} vCPU / ${RAM_MB}MB / ${DISK_GB}GB"
echo " disk: $DISK_PATH"
echo " variant: $OS_VARIANT"
echo
# 1. Host tooling (Fedora). Idempotent; safe to re-run.
if ! command -v virt-install >/dev/null 2>&1; then
echo "-- installing virtualization stack (needs sudo) --"
run sudo dnf install -y @virtualization
run sudo systemctl enable --now libvirtd
else
echo "-- virt-install present --"
fi
# 2. Validate the ISOs the caller must provide.
if [[ -z "$WIN_ISO" || ! -f "$WIN_ISO" ]]; then
echo "!! set WIN_ISO=/path/to/Windows.iso (got: '${WIN_ISO:-unset}')" >&2
[[ "$GO" == 1 ]] && exit 2
fi
if [[ -z "$VIRTIO_ISO" || ! -f "$VIRTIO_ISO" ]]; then
echo "!! set VIRTIO_ISO=/path/to/virtio-win.iso (got: '${VIRTIO_ISO:-unset}')" >&2
[[ "$GO" == 1 ]] && exit 2
fi
# 3. Backing disk.
run sudo qemu-img create -f qcow2 "$DISK_PATH" "${DISK_GB}G"
# 4. Define + start the VM. UEFI + TPM 2.0 satisfy Win11; drop --tpm and use
# --boot uefi=off for older guests. virtio disk/net need the VIRTIO_ISO
# drivers loaded during Windows setup ("Load driver" -> the virtio CD).
run sudo virt-install \
--name "$VM_NAME" \
--memory "$RAM_MB" \
--vcpus "$VCPUS" \
--cpu host-passthrough \
--os-variant "$OS_VARIANT" \
--boot uefi \
--tpm backend.type=emulator,backend.version=2.0,model=tpm-crb \
--disk "path=$DISK_PATH,bus=virtio,format=qcow2" \
--disk "path=$WIN_ISO,device=cdrom,boot.order=1" \
--disk "path=$VIRTIO_ISO,device=cdrom" \
--network network=default,model=virtio \
--graphics spice \
--video qxl \
--noautoconsole
cat <<EOF
Next:
1. virt-viewer $VM_NAME # finish the interactive Windows install
# (Load driver -> virtio CD for the disk; install virtio NIC after)
2. Inside Windows, fetch this repo's tools and run, from an ELEVATED PowerShell:
pwsh -File tools\\windows-verify\\bootstrap-windows.ps1
3. New shell, then:
pwsh -File tools\\windows-verify\\soak-conpty.ps1 -Iterations 40
EOF