diff --git a/scripts/win-ci/run-vm.sh b/scripts/win-ci/run-vm.sh index 4fc6cf6..9ffff58 100755 --- a/scripts/win-ci/run-vm.sh +++ b/scripts/win-ci/run-vm.sh @@ -18,6 +18,24 @@ fi rm -f "$D/qmp.sock" +# 설치가 끝나면 Windows ISO(4.8GB)는 필요 없어서 지운다. 그래도 유닛이 뜨도록 +# 없는 ISO 는 그냥 건너뛴다. 없는 파일을 -drive 로 주면 qemu 가 기동에 실패해 +# 재부팅 후 러너 호스트가 조용히 사라진다. +CDROMS=() +add_cd() { # 파일 버스 [bootindex] + [ -f "$1" ] || { echo "cdrom 건너뜀 (없음): $1" >&2; return; } + local id="cd$(basename "$1" | tr -cd 'a-z0-9')" + CDROMS+=( -drive "file=$1,if=none,id=$id,media=cdrom,readonly=on" ) + if [ -n "${3:-}" ]; then + CDROMS+=( -device "ide-cd,drive=$id,bus=$2,bootindex=$3" ) + else + CDROMS+=( -device "ide-cd,drive=$id,bus=$2" ) + fi +} +add_cd "$D/iso/win11-ltsc.iso" ide.1 1 +add_cd "$D/iso/virtio-win.iso" ide.2 +add_cd "$D/unattend.iso" ide.3 + exec qemu-system-x86_64 \ -name win-ci,process=win-ci \ -machine q35,smm=on,vmport=off \ @@ -43,12 +61,7 @@ exec qemu-system-x86_64 \ -device usb-kbd -device usb-tablet \ -drive "file=$D/win-ci.qcow2,if=none,id=sysdisk,format=qcow2,cache=writeback,discard=unmap,aio=threads" \ -device ide-hd,drive=sysdisk,bus=ide.0,bootindex=2 \ - -drive "file=$D/iso/win11-ltsc.iso,if=none,id=cdwin,media=cdrom,readonly=on" \ - -device ide-cd,drive=cdwin,bus=ide.1,bootindex=1 \ - -drive "file=$D/iso/virtio-win.iso,if=none,id=cdvirtio,media=cdrom,readonly=on" \ - -device ide-cd,drive=cdvirtio,bus=ide.2 \ - -drive "file=$D/unattend.iso,if=none,id=cdunattend,media=cdrom,readonly=on" \ - -device ide-cd,drive=cdunattend,bus=ide.3 \ + "${CDROMS[@]}" \ -serial "file:$D/serial.log" \ -qmp "unix:$D/qmp.sock,server=on,wait=off" \ -vnc 127.0.0.1:19 \