Auto-detect the Windows 11 installation ISO

Instead of a hard-coded file name, find the ISO in install-iso/ by
matching *Win*11*x64*.iso (case-insensitive), picking the highest
version-sorted name when several match. The QCOW2 path is derived from
the detected ISO name, falling back to an existing *Win*11*x64*.qcow2
in base-qcow2/ when the ISO is absent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ks2ixr4KHXBtLuCet7Ch5Z
This commit is contained in:
GuofangandClaude Opus 5.5 committed 2026-09-30 09:37:04 +08:00
1 parent 4e86a23634
commit 942c97686b
2 files changed
+48 -6

No files matched your search

+40 -4
View File
@@ -42,8 +42,42 @@ else
fi
virtio_image="${tools_iso_dir}/virtio-win.iso"
windows_qcow2_image="${base_qcow2_dir}/Win11_25H2_English_x64_v2.qcow2"
windows_iso_image="${install_iso_dir}/Win11_25H2_English_x64_v2.iso"
# Find a Windows 11 x64 file in a directory by matching "Win", "11", "x64" and
# the extension in that order (case-insensitive). When several match, the
# highest version-sorted name wins.
find_windows_image() {
local dir="$1"
local extension="$2"
local match
match="$(
shopt -s nullglob nocaseglob
files=("${dir}"/*Win*11*x64*."${extension}")
((${#files[@]} == 0)) || printf '%s\n' "${files[@]}" | sort -V | tail -n 1
)"
[[ -n "$match" ]] && printf '%s\n' "$match"
}
windows_iso_path() {
if ! find_windows_image "$install_iso_dir" iso; then
printf 'Error: no Windows 11 x64 ISO (*Win*11*x64*.iso) found in %s\n' "$install_iso_dir" >&2
return 1
fi
}
# The QCOW2 is named after the installation ISO. If the ISO has been removed,
# fall back to an existing matching QCOW2.
windows_qcow2_path() {
local iso
if iso="$(find_windows_image "$install_iso_dir" iso)"; then
iso="$(basename -- "$iso")"
printf '%s/%s.qcow2\n' "$base_qcow2_dir" "${iso%.*}"
elif ! find_windows_image "$base_qcow2_dir" qcow2; then
printf 'Error: no Windows 11 x64 ISO (*Win*11*x64*.iso) found in %s\n' "$install_iso_dir" >&2
return 1
fi
}
debian_url="${DEBIAN_IMAGE_URL:-$debian_url_default}"
alma_url="${ALMA_IMAGE_URL:-$alma_url_default}"
@@ -67,6 +101,8 @@ is auto-detected from the host; override it with VM_IMAGE_ARCH.
then downloads them again from the beginning.
--print-path prints only the absolute image path without downloading it.
For windows11 it prints the QCOW2 path by default; add --iso for the ISO path.
The Windows ISO is found automatically in install-iso/ by matching
*Win*11*x64*.iso; the QCOW2 path is named after that ISO.
EOF
}
@@ -81,9 +117,9 @@ print_image_path() {
virtio-win) printf '%s\n' "$virtio_image" ;;
windows11)
if [[ "$media" == iso ]]; then
printf '%s\n' "$windows_iso_image"
windows_iso_path
else
printf '%s\n' "$windows_qcow2_image"
windows_qcow2_path
fi
;;
*)