feat: Detect Windows boot manager (#7)

This commit is contained in:
Kroese 2024-02-06 04:13:51 +01:00 committed by GitHub
parent d5f4b4784b
commit b0eddb29c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 23 deletions

View file

@ -3,17 +3,17 @@ set -Eeuo pipefail
: "${MANUAL:=""}"
: "${DETECTED:=""}"
: "${VERSION:="win11arm"}"
: "${VERSION:="win11arm64"}"
if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then
VERSION="${VERSION:1:-1}"
fi
[[ "${VERSION,,}" == "11" ]] && VERSION="win11arm"
[[ "${VERSION,,}" == "win11" ]] && VERSION="win11arm"
[[ "${VERSION,,}" == "11" ]] && VERSION="win11arm64"
[[ "${VERSION,,}" == "win11" ]] && VERSION="win11arm64"
[[ "${VERSION,,}" == "10" ]] && VERSION="win10arm"
[[ "${VERSION,,}" == "win10" ]] && VERSION="win10arm"
[[ "${VERSION,,}" == "10" ]] && VERSION="win10arm64"
[[ "${VERSION,,}" == "win10" ]] && VERSION="win10arm64"
CUSTOM="custom.iso"
@ -65,8 +65,8 @@ getVersion() {
local name="$1"
local detected=""
[[ "${name,,}" == *"windows 11"* ]] && detected="win11arm"
[[ "${name,,}" == *"windows 10"* ]] && detected="win10arm"
[[ "${name,,}" == *"windows 11"* ]] && detected="win11arm64"
[[ "${name,,}" == *"windows 10"* ]] && detected="win10arm64"
echo "$detected"
return 0
@ -235,10 +235,10 @@ getESD() {
local winCatalog size
case "${VERSION,,}" in
win11arm)
win11arm64)
winCatalog="https://go.microsoft.com/fwlink?linkid=2156292"
;;
win10arm)
win10arm64)
winCatalog="https://go.microsoft.com/fwlink/?LinkId=841361"
;;
*)
@ -407,10 +407,10 @@ extractESD() {
local edition imageIndex imageEdition
case "${VERSION,,}" in
win11arm)
win11arm64)
edition="11 pro"
;;
win10arm)
win10arm64)
edition="10 pro"
;;
*)

View file

@ -11,7 +11,6 @@ QEMU_PTY="/run/shm/qemu.pty"
QEMU_LOG="/run/shm/qemu.log"
QEMU_OUT="/run/shm/qemu.out"
QEMU_END="/run/shm/qemu.end"
BOOT_LINE="starting Boot0002"
rm -f /run/shm/qemu.*
touch "$QEMU_LOG"
@ -23,6 +22,19 @@ _trap() {
done
}
ready() {
[ -f "$STORAGE/windows.boot" ] && return 0
[ ! -f "$QEMU_PTY" ] && return 1
local line="Windows Boot Manager"
if grep -Fq "$line" "$QEMU_PTY"; then
return 0
fi
return 1
}
finish() {
local pid
@ -41,14 +53,13 @@ finish() {
done
fi
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then
if grep -Fq "$BOOT_LINE" "$QEMU_PTY"; then
if [ -f "$STORAGE/$BASE" ]; then
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$STORAGE/$BASE" ]; then
# Remove CD-ROM ISO after install
if ready; then
rm -f "$STORAGE/$BASE"
touch "$STORAGE/windows.boot"
fi
fi
fi
pid="/var/run/tpm.pid"
[ -f "$pid" ] && pKill "$(<"$pid")"
@ -126,12 +137,10 @@ _graceful_shutdown() {
finish "$code" && return "$code"
fi
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then
if ! grep -Fq "$BOOT_LINE" "$QEMU_PTY"; then
if ! ready; then
info "Cannot send ACPI signal during Windows setup, aborting..."
finish "$code" && return "$code"
fi
fi
# Send ACPI shutdown signal
echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null