Skip to content

Commit

Permalink
feat: Detect SeaBIOS status (dockur#153)
Browse files Browse the repository at this point in the history
  • Loading branch information
kroese committed Feb 6, 2024
1 parent 249c5b7 commit 42a5295
Showing 1 changed file with 34 additions and 16 deletions.
50 changes: 34 additions & 16 deletions src/power.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,29 @@ _trap() {
done
}

ready() {

[ -f "$STORAGE/windows.boot" ] && return 0
[ ! -f "$QEMU_PTY" ] && return 1

if [ -f "$STORAGE/windows.old" ]; then
local last
local bios="Booting from Hard Disk"
last=$(grep "^B.*" "$QEMU_PTY" | tail -1)
if [[ "${last,,}" == "${bios,,}"* ]]; then
return 0
fi
return 1
fi

local line="Windows Boot Manager"
if grep -Fq "$line" "$QEMU_PTY"; then
return 0
fi

return 1
}

finish() {

local pid
Expand All @@ -40,6 +63,14 @@ finish() {
done
fi

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

pid="/var/run/tpm.pid"
[ -f "$pid" ] && pKill "$(<"$pid")"

Expand Down Expand Up @@ -116,17 +147,9 @@ _graceful_shutdown() {
finish "$code" && return "$code"
fi

local remove_iso=""

if [ ! -f "$STORAGE/windows.old" ]; then
if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$QEMU_PTY" ]; then
if grep -Fq "Windows Boot Manager" "$QEMU_PTY"; then
[ -f "$STORAGE/$BASE" ] && remove_iso="y"
else
info "Cannot send ACPI signal during Windows setup, aborting..."
finish "$code" && return "$code"
fi
fi
if ! ready; then
info "Cannot send ACPI signal during Windows setup, aborting..."
finish "$code" && return "$code"
fi

# Send ACPI shutdown signal
Expand All @@ -151,11 +174,6 @@ _graceful_shutdown() {

if [ "$cnt" -ge "$QEMU_TIMEOUT" ]; then
error "Shutdown timeout reached, aborting..."
else
if [ -n "$remove_iso" ]; then
rm -f "$STORAGE/$BASE"
touch "$STORAGE/windows.boot"
fi
fi

finish "$code" && return "$code"
Expand Down

0 comments on commit 42a5295

Please sign in to comment.