- Shell 100%
| .gitignore | ||
| autounattend.xml | ||
| bookmark.txt | ||
| build-win11-testvm.sh | ||
| README.md | ||
| start-testvm.sh | ||
Win11-VM-auto-build-and-start
Baut unter Linux/KVM eine schlanke Windows-11-IoT-Enterprise-LTSC-VM als Wegwerf-Testumgebung. Unbeaufsichtigte Installation, kein Microsoft-Konto, keine Telemetrie, kein Internetzugang für die VM, SSH-Zugang ab Werk.
Enthalten
| Datei | Zweck |
|---|---|
build-win11-testvm.sh |
baut das Basis-Image, einmal pro Konfigurationsänderung |
start-testvm.sh |
startet eine Wegwerf-Kopie und verbindet per SSH |
autounattend.xml |
die Konfiguration für die unbeaufsichtigte Windows-Installation |
bookmark.txt |
Link, der die autounattend.xml im Generator wieder öffnet |
Voraussetzungen
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst \
virt-manager ovmf swtpm swtpm-tools xorriso wget
sudo usermod -aG libvirt,kvm $USER
Danach ab- und wieder anmelden.
Vorbereitung
Zwei Dateien von Hand in den Repo-Ordner legen:
- Windows 11 IoT Enterprise LTSC Evaluation vom Microsoft Evaluation Center. Englisch, x64. 90 Tage gültig, kein Product Key nötig.
- LibreOffice von libreoffice.org, Windows x86_64, als
.msi.
Optional ein Unterordner payload/. Dessen Inhalt landet in der VM unter
C:\payload.
virtio-win.iso und OpenSSH-Win64.msi lädt das Build-Skript selbst.
Benutzung
./build-win11-testvm.sh # 15 bis 25 Minuten, einmalig
./start-testvm.sh # Sekunden, beliebig oft
./start-testvm.sh test-02 # eigener Name
build-win11-testvm.sh räumt Reste früherer Läufe weg, baut die
unattend.iso, legt das isolierte Netz an, installiert Windows und friert das
Ergebnis als schreibgeschütztes Basis-Image ein.
start-testvm.sh legt ein qcow2-Overlay auf das Basis-Image, startet die VM,
wartet auf die IP und öffnet die SSH-Sitzung. Wegwerfen:
virsh --connect qemu:///system destroy test-01
virsh --connect qemu:///system undefine test-01 --nvram
rm ~/vms/test-01.qcow2
Zugangsdaten
Benutzer test, Passwort test, lokales Administratorkonto. Für eine
Wegwerf-VM im isolierten Netz ausreichend, sonst in der autounattend.xml
ändern.
Netzwerk
Die VM hängt in einem libvirt-Netz win11-isoliert (192.168.180.0/24) ohne
<forward>. Host und VM erreichen einander, die VM kommt nicht ins Internet.
Damit zieht Windows keine Updates, was den Bau erheblich beschleunigt und
Testläufe reproduzierbar hält.
Konfiguration ändern
Die autounattend.xml stammt vom
Unattend-Generator von
Christoph Schneegans. Zum Ändern den Link aus bookmark.txt öffnen oder die
XML dort über "Import .xml file" hochladen, anpassen, herunterladen, ersetzen.
Danach build-win11-testvm.sh erneut laufen lassen.
Die Skripte selbst haben ihre Einstellungen als Variablen im Kopf: RAM, CPUs, Plattengröße, Netzname, Download-URLs.
Bekannte Fallstricke
Platte auf SATA, nicht virtio. Windows Setup sieht eine virtio-Platte in der PE-Phase nicht ohne manuelles Treiberladen. Nach der Installation lässt sich der Bus umstellen, die Treiber sind dann im System.
--import statt --cdrom. --cdrom löst in virt-install eine zweistufige
Installation aus. Mit --noautoconsole bleibt die VM dann nach dem ersten
Reboot stehen.
Firewallregel mit -Profile Any. Die OpenSSH-MSI legt eine Regel an, die
nur für private Netze gilt. Windows stuft neue Netze aber als öffentlich ein,
und jedes Overlay bekommt eine neue MAC-Adresse, also ein neues Netz. Ohne die
eigene Regel ist SSH in jeder Kopie blockiert.
Das Basis-Image darf nie gebootet werden. Overlays speichern nur die
Unterschiede. Ändert sich das Basis-Image, sind alle Overlays korrupt. Deshalb
steht es nach dem Bau auf chmod 444.
Versionen sind gepinnt. virtio-win und OpenSSH hängen an festen URLs. Bricht ein Download mit 404 ab, die URL im Skriptkopf anheben. Lautes Scheitern ist gewollt: ein stiller Versionswechsel mitten in einer Testreihe wäre schlimmer.