mirror of
https://github.com/theupriser/steamify-cachyos-dev.git
synced 2026-10-05 12:45:56 +02:00
feat: vmtest.sh: the boot loader test for every loader the ISO advertises
One VM per loader, Steam Machine (--fremont): Steamify's state as its menu sees it, OS name untouched, loader identity, the DKMS modules for every kernel, Steamify's loader-specific code (hdmi_remove_boot_param), a kernel update, and a reboot into each of the two kernels. Headless by default with a log Konsole (--window shows the VMs). Fails when an advertised loader has no test. Limine 41, systemd-boot 40, GRUB 40 checks pass.
This commit is contained in:
1 parent
8ea75424b0
commit
ed12ecb57d
8 files changed
+271
No files matched your search
@@ -7,6 +7,8 @@
|
||||
!/run.sh
|
||||
!/get-iso.sh
|
||||
!/TESTPLAN.md
|
||||
!/TODO.md
|
||||
!/.github/
|
||||
!/scripts/
|
||||
!/share/
|
||||
!/.claude/
|
||||
@@ -15,6 +17,7 @@ share/*
|
||||
!share/guest-ssh-setup.sh
|
||||
!share/vminstall-live.sh
|
||||
!share/vminstall-post.sh
|
||||
!share/bootloader-test/
|
||||
|
||||
# Belt and braces, anywhere in the tree
|
||||
*.iso
|
||||
|
||||
Executable
+119
@@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
# Does a boot loader work with Steamify's kernel side (the Steam Machine's DKMS
|
||||
# modules)? On a VM that reports Fremont hardware: applies Steamify's options,
|
||||
# checks the modules for every kernel, Steamify's boot-loader code (removal of
|
||||
# the old drm.edid_firmware parameter), a kernel update, and a reboot into
|
||||
# each of the two kernels. Guest checks: share/bootloader-test/*.sh.
|
||||
# All loaders in one go: scripts/vmtest.sh.
|
||||
# scripts/vmbootloadertest.sh <limine|systemd-boot|grub> [--install] [--window]
|
||||
# --install first install the VM (scripts/vminstall.sh, from the Steamify ISO)
|
||||
# --window show the VM's window (default: headless, with a Konsole on the log when there is a desktop)
|
||||
# Env: VM_DIR (default ~/vms/bl-<loader>), VM_ISO (default: the newest ISO in
|
||||
# ../steammachine-cachyos-live-iso/out/desktop), REPO (steamify-cachyos, 9p `repo`).
|
||||
# Exit status: the number of failed checks. Only one VM runs at a time (port 2222).
|
||||
set -uo pipefail
|
||||
here="$(cd "$(dirname "$0")" && pwd)"
|
||||
repo="$(cd "$here/.." && pwd)"
|
||||
loader="${1:?usage: $0 <limine|systemd-boot|grub> [--install]}"
|
||||
install=false; window=false
|
||||
for a in "${@:2}"; do
|
||||
case "$a" in --install) install=true ;; --window) window=true ;; *) echo "Unknown argument: $a" >&2; exit 2 ;; esac
|
||||
done
|
||||
# No human is needed: headless (no VM window) unless --window. On a desktop a Konsole follows the log.
|
||||
$window || export VM_HEADLESS=1
|
||||
case "$loader" in limine|systemd-boot|grub) ;; *) echo "Unknown boot loader: $loader" >&2; exit 2 ;; esac
|
||||
export VM_DIR="${VM_DIR:-$HOME/vms/bl-$loader}"
|
||||
. "$here/common.sh"
|
||||
guest="$repo/share/bootloader-test"
|
||||
log="$VM_DIR.test.log"
|
||||
|
||||
step() { printf '\n##### %s %s\n' "$(date +%T)" "$*"; }
|
||||
gssh() { vm_ssh -o ConnectTimeout=6 -o LogLevel=ERROR "$@"; }
|
||||
gscript() { gssh env "LOADER=$loader" bash -s < "$guest/$1"; } # the guest's login shell is fish
|
||||
waitssh() { local _; for _ in $(seq 60); do gssh 'uptime -p' 2>/dev/null | grep -q '^up' && return 0; sleep 5; done; echo "FAIL no SSH"; return 1; }
|
||||
running() { pgrep -f '^qemu-system' >/dev/null; }
|
||||
stop_vm() {
|
||||
running || return 0
|
||||
# Whichever VM runs: its key and host key are not this VM's.
|
||||
ssh -p "$VM_PORT" -i "$VM_SSH_KEY" -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR \
|
||||
"$VM_USER@$VM_HOST" 'sudo systemctl poweroff' >/dev/null 2>&1
|
||||
local _; for _ in $(seq 30); do running || return 0; sleep 2; done
|
||||
pkill -f '^qemu-system'; sleep 2
|
||||
}
|
||||
start_vm() { stop_vm; cp "$repo/run.sh" "$VM_DIR/run.sh"; (cd "$VM_DIR" && REPO="${REPO:-$repo/../steamify-cachyos}" setsid nohup ./run.sh --fremont > vm.log 2>&1 &); }
|
||||
reboot_vm() { gssh 'sudo systemctl reboot' >/dev/null 2>&1; sleep 25; waitssh; }
|
||||
# Headless on a desktop: a Konsole following the log (vmtest.sh opens one for all loaders; CI has no desktop).
|
||||
if [[ -n "${VM_HEADLESS:-}" && -z "${CI:-}${VMTEST_NO_VIEW:-}" && -n "${WAYLAND_DISPLAY:-}${DISPLAY:-}" ]] && command -v konsole >/dev/null; then
|
||||
systemd-run --user -q --collect --unit="vmtest-view-$loader-$$" konsole --hold -e tail -n +1 -F "$log" >/dev/null 2>&1 || true
|
||||
fi
|
||||
# The guest checks print PASS/FAIL lines; the summary at the end counts them in the log.
|
||||
check() { cat; }
|
||||
|
||||
{
|
||||
if $install; then
|
||||
step "install $loader VM in $VM_DIR"
|
||||
stop_vm
|
||||
iso="${VM_ISO:-$(ls -t "$repo"/../steammachine-cachyos-live-iso/out/desktop/*.iso 2>/dev/null | head -n 1)}"
|
||||
[[ -f "$iso" ]] || { echo "No ISO: set VM_ISO"; exit 2; }
|
||||
if [[ -f "$VM_DIR/disk.qcow2" ]]; then
|
||||
[[ -t 0 ]] || { echo "$VM_DIR has a disk; run this from a terminal to replace it"; exit 2; }
|
||||
read -r -p "Replace $VM_DIR/disk.qcow2? Type YES: " a
|
||||
[[ "$a" == YES ]] || exit 1
|
||||
rm -f "$VM_DIR/disk.qcow2"
|
||||
fi
|
||||
VM_BOOTLOADER="$loader" "$here/vminstall.sh" --iso "$iso" < /dev/null || exit 1
|
||||
fi
|
||||
|
||||
step "start $loader as a Steam Machine"
|
||||
start_vm; waitssh || exit 1
|
||||
gssh 'sudo cat /sys/class/dmi/id/product_name' 2>/dev/null
|
||||
|
||||
step "Steamify's Steam Machine options"
|
||||
gssh 'sudo mountpoint -q /mnt || sudo mount -t 9p -o trans=virtio,version=9p2000.L repo /mnt; cd /mnt && nohup bash steamify.sh --defaults --options gaming,theme,glyphs,single,launcher,notify,vram,cec,machine,poweroff --boot gamescope > /tmp/steamify.log 2>&1 < /dev/null &'
|
||||
sleep 20
|
||||
# [s]: the pattern must not match this ssh command itself.
|
||||
for _ in $(seq 90); do gssh 'pgrep -f "[s]teamify.sh --defaults" >/dev/null && echo R || echo D' 2>/dev/null | grep -q D && break; sleep 10; done
|
||||
gssh 'sed "s/\x1b\[[0-9;]*m//g" /tmp/steamify.log | grep -E "^\[(WARN|ERROR)\]" | cut -c1-140'
|
||||
gssh 'tail -n 1 /tmp/steamify.log | sed "s/\x1b\[[0-9;]*m//g"' | grep -q '^\[OK\] Done' && echo "PASS Steamify finished" || { echo "FAIL Steamify did not finish"; }
|
||||
|
||||
step "Steamify's state, OS name, boot loader"; gscript steamify-state.sh | check
|
||||
step "Steamify's modules"; gscript modules.sh | check
|
||||
step "boot loader code (legacy kernel parameter removal)"; gscript legacy-param.sh | check
|
||||
step "kernel update"; gscript kernel-update.sh | check
|
||||
|
||||
step "reboot into the default kernel"
|
||||
if [[ "$loader" == limine ]]; then
|
||||
# remember_last_entry: yes boots whatever ran last, not default_entry: pin the default for this test, restore it at the end.
|
||||
cur="$(gssh "sudo sed -n 's/^default_entry: *//p' /boot/limine.conf")"
|
||||
rem="$(gssh "sudo sed -n 's/^remember_last_entry: *//p' /boot/limine.conf")"
|
||||
gssh "sudo sed -i -e 's/^default_entry: .*/default_entry: $cur/' -e 's/^remember_last_entry: .*/remember_last_entry: no/' /boot/limine.conf"
|
||||
fi
|
||||
reboot_vm && gscript boot-check.sh | check
|
||||
a="$(gssh uname -r)"
|
||||
|
||||
step "reboot into the other kernel"
|
||||
case "$loader" in
|
||||
systemd-boot) # the default entry is linux-cachyos.conf (vminstall-post.sh)
|
||||
gssh 'sudo bootctl set-oneshot linux-cachyos-lts.conf'; gssh 'sudo systemctl reboot' >/dev/null 2>&1; sleep 25; waitssh ;;
|
||||
grub) # GRUB_DEFAULT = the other kernel in the "Advanced options" submenu (0 = lts, 1 = linux-cachyos), no key presses
|
||||
sub=$([[ "$a" == *lts* ]] && echo 1 || echo 0)
|
||||
gg="$(gssh "sudo sed -n 's/^GRUB_DEFAULT=//p' /etc/default/grub")"
|
||||
gssh "sudo sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT=\"1>$sub\"/' /etc/default/grub && sudo grub-mkconfig -o /boot/grub/grub.cfg >/dev/null 2>&1"
|
||||
reboot_vm ;;
|
||||
limine) # the next entry in limine.conf; remember_last_entry would override default_entry
|
||||
gssh "sudo sed -i -e 's/^default_entry: .*/default_entry: $((cur + 1))/' /boot/limine.conf"
|
||||
reboot_vm ;;
|
||||
esac
|
||||
gscript boot-check.sh | check
|
||||
b="$(gssh uname -r)"
|
||||
[[ -n "$a" && -n "$b" && "$a" != "$b" ]] && echo "PASS booted both kernels ($a, $b)" || echo "FAIL both boots ran the same kernel ($a, $b)"
|
||||
[[ "$loader" == grub ]] && gssh "sudo sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT=$gg/' /etc/default/grub && sudo grub-mkconfig -o /boot/grub/grub.cfg >/dev/null 2>&1"
|
||||
[[ "$loader" == limine ]] && gssh "sudo sed -i -e 's/^default_entry: .*/default_entry: $cur/' -e 's/^remember_last_entry: .*/remember_last_entry: ${rem:-yes}/' /boot/limine.conf"
|
||||
|
||||
step "DONE"
|
||||
stop_vm
|
||||
} 2>&1 | tee "$log" | sed 's/\x1b\[[0-9;]*m//g'
|
||||
fails="$(grep -c '^FAIL' "$log")"
|
||||
echo; echo "== $loader: $(grep -c '^PASS' "$log") passed, $fails failed (log: $log)"
|
||||
grep '^FAIL' "$log"
|
||||
exit "$fails"
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# The whole boot loader test in one command: every boot loader the Steamify ISO
|
||||
# advertises, each on its own VM (~/vms/bl-<loader>), one after the other.
|
||||
# scripts/vmtest.sh [--install] [--window] [loader...] default: all advertised loaders
|
||||
# --install install each VM first from the newest Steamify ISO (asks before replacing a disk)
|
||||
# --window show the VMs' windows (default: headless; on a desktop one Konsole follows all the logs)
|
||||
# Checks per loader (scripts/vmbootloadertest.sh + share/bootloader-test/):
|
||||
# Steamify's state as its menu sees it, OS name untouched, loader identity,
|
||||
# DKMS modules for every kernel, Steamify's loader-specific code, a kernel
|
||||
# update, a reboot into each kernel. Add a check there, and it runs here.
|
||||
# Prints one line per loader and the failed checks; exit status = failures.
|
||||
set -uo pipefail
|
||||
here="$(cd "$(dirname "$0")" && pwd)"
|
||||
repo="$(cd "$here/.." && pwd)"
|
||||
iso_repo="$repo/../steammachine-cachyos-live-iso"
|
||||
install=""; window=""; loaders=()
|
||||
for a in "$@"; do
|
||||
case "$a" in --install) install=--install ;; --window) window=--window ;; *) loaders+=("$a") ;; esac
|
||||
done
|
||||
# What the ISO advertises: the boot loaders calamares-online.sh keeps.
|
||||
advertised="$(sed -n 's/.*"bootloader:\([^"]*\)".*/\1/p' "$iso_repo/archiso/airootfs/usr/local/bin/calamares-online.sh" 2>/dev/null | head -n 1)"
|
||||
[[ -n "$advertised" ]] || { echo "Can't read the advertised boot loaders from $iso_repo (calamares-online.sh)" >&2; exit 2; }
|
||||
[[ ${#loaders[@]} -gt 0 ]] || read -r -a loaders <<< "$advertised"
|
||||
tested="limine systemd-boot grub" # the loaders vmbootloadertest.sh has a way to boot the other kernel for
|
||||
missing=0
|
||||
for l in $advertised; do
|
||||
[[ " $tested " == *" $l "* ]] || { echo "FAIL the ISO advertises $l, but there is no test for it (scripts/vmbootloadertest.sh)"; missing=$((missing + 1)); }
|
||||
done
|
||||
total=$missing
|
||||
# No human is needed: headless. One Konsole for all the logs (the loader scripts open none).
|
||||
export VMTEST_NO_VIEW=1
|
||||
if [[ -z "$window" && -z "${CI:-}" && -n "${WAYLAND_DISPLAY:-}${DISPLAY:-}" ]] && command -v konsole >/dev/null; then
|
||||
logs=(); for l in "${loaders[@]}"; do logs+=("$HOME/vms/bl-$l.test.log"); done
|
||||
systemd-run --user -q --collect --unit="vmtest-view-$$" konsole --hold -e tail -n +1 -F "${logs[@]}" >/dev/null 2>&1 || true
|
||||
fi
|
||||
for l in "${loaders[@]}"; do
|
||||
"$here/vmbootloadertest.sh" "$l" $install $window > "/tmp/vmtest-$l.out" 2>&1; rc=$?
|
||||
sed -n '/^== /,$p' "/tmp/vmtest-$l.out"
|
||||
total=$((total + rc))
|
||||
done
|
||||
echo; echo "== total: $total failed check(s) for: ${loaders[*]} (advertised: $advertised)"
|
||||
exit "$total"
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
# Guest side: after a reboot, the running kernel has Steamify's modules.
|
||||
pass() { echo "PASS $*"; }; fail() { echo "FAIL $*"; }
|
||||
k=$(uname -r)
|
||||
echo "kernel: $k"; echo "cmdline: $(cut -c1-140 /proc/cmdline)"
|
||||
compgen -G "/usr/lib/modules/$k/updates/dkms/steamify-fremont-poweroff.ko*" >/dev/null && pass "power-off fix built for the running kernel" || fail "no power-off fix for $k"
|
||||
sudo dmesg | grep -q "steamify_fremont_poweroff" && pass "power-off fix loaded at boot" || fail "power-off fix not loaded"
|
||||
lsmod | grep -q '^leds_valve' && pass "leds_valve loaded" || fail "leds_valve not loaded"
|
||||
[[ -z "$(systemctl --failed --no-legend)" ]] && pass "no failed units" || { fail "failed units:"; systemctl --failed --no-legend; }
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
# Guest side: reinstall both kernels + headers (what an update does: the
|
||||
# DKMS hook rebuilds the modules, mkinitcpio and the boot loader's hook run).
|
||||
pass() { echo "PASS $*"; }; fail() { echo "FAIL $*"; }
|
||||
start=$(date +%s)
|
||||
sudo pacman -S --noconfirm linux-cachyos linux-cachyos-lts linux-cachyos-headers linux-cachyos-lts-headers > /tmp/kernel-update.log 2>&1
|
||||
rc=$?
|
||||
sed 's/\x1b\[[0-9;]*m//g' /tmp/kernel-update.log | grep -E "^==> dkms|Building image|Generating grub|sdboot|limine|error" | cut -c1-140
|
||||
[[ $rc -eq 0 ]] && pass "pacman kernel reinstall exit 0" || fail "pacman exit $rc"
|
||||
for k in $(ls /usr/lib/modules); do
|
||||
for m in cros-ec-cec leds-valve steamify-fremont-poweroff; do
|
||||
compgen -G "/usr/lib/modules/$k/updates/dkms/$m.ko*" >/dev/null || fail "$m not rebuilt for $k"
|
||||
done
|
||||
done
|
||||
[[ $(dkms status | grep -c ': installed') -eq $((3 * $(ls /usr/lib/modules | wc -w))) ]] && pass "DKMS rebuilt 3 modules for each kernel" || fail "DKMS status after the update"
|
||||
# The images: /boot/initramfs-*.img (GRUB, systemd-boot); Limine keeps them per kernel
|
||||
# under /boot/<machine-id>/<kernel>/initramfs (limine-mkinitcpio) and rewrites limine.conf.
|
||||
if [[ "$LOADER" == limine ]]; then
|
||||
# limine-entry-tool copies an image only when its content changed (same version = untouched):
|
||||
# the hook ran when both images were built and limine.conf was regenerated.
|
||||
n=$(sed 's/\x1b\[[0-9;]*m//g' /tmp/kernel-update.log | grep -c 'Creating zstd-compressed initcpio image')
|
||||
[[ $n -ge 2 ]] && pass "Limine's hook built the initramfs for both kernels" || fail "Limine's hook built $n initramfs image(s)"
|
||||
[[ $(sudo stat -c %Y /boot/limine.conf) -ge $start ]] && pass "limine.conf regenerated" || fail "limine.conf not regenerated"
|
||||
else
|
||||
for img in /boot/initramfs-linux-cachyos.img /boot/initramfs-linux-cachyos-lts.img; do
|
||||
[[ $(sudo stat -c %Y "$img") -ge $start ]] && pass "$(basename "$img") rebuilt" || fail "$(basename "$img") not rebuilt"
|
||||
done
|
||||
fi
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
# Guest side: Steamify's boot-loader-specific code, hdmi_remove_boot_param
|
||||
# (older versions put drm.edid_firmware= on the kernel command line): seed
|
||||
# the parameter where this loader keeps it, run the removal, and check that
|
||||
# it's gone and the boot entries are rebuilt.
|
||||
pass() { echo "PASS $*"; }; fail() { echo "FAIL $*"; }
|
||||
sudo mountpoint -q /mnt || sudo mount -t 9p -o trans=virtio,version=9p2000.L repo /mnt
|
||||
cd /mnt || exit 1
|
||||
. lib/common.sh; . lib/state.sh; . lib/hdmi-refresh.sh
|
||||
f="$(hdmi_boot_file)"
|
||||
echo "boot file: ${f:-none}"
|
||||
[[ -n "$f" ]] && pass "hdmi_boot_file finds the loader's file" || { fail "hdmi_boot_file finds nothing"; exit 0; }
|
||||
p='drm.edid_firmware=DP-1:edid/steamify-test.bin'
|
||||
case "$f" in
|
||||
/etc/default/grub) sudo sed -i -E "s|^(GRUB_CMDLINE_LINUX_DEFAULT=\")|\1$p |" "$f" ;;
|
||||
/etc/sdboot-manage.conf) if grep -q '^LINUX_OPTIONS=' "$f"; then sudo sed -i -E "s|^(LINUX_OPTIONS=\")|\1$p |" "$f"; else echo "LINUX_OPTIONS=\"$p\"" | sudo tee -a "$f" >/dev/null; fi ;;
|
||||
/etc/default/limine) if grep -q '^KERNEL_CMDLINE\[default\]' "$f"; then sudo sed -i -E "s|^(KERNEL_CMDLINE\[default\]\+?=\")|\1$p |" "$f"; else echo "KERNEL_CMDLINE[default]+=\"$p\"" | sudo tee -a "$f" >/dev/null; fi ;;
|
||||
esac
|
||||
[[ -n "$(hdmi_cmdline_param)" ]] && pass "the seeded parameter is detected" || fail "seeded parameter not detected in $f"
|
||||
hdmi_remove_boot_param > /tmp/legacy-param.log 2>&1; rc=$?
|
||||
tail -3 /tmp/legacy-param.log | sed 's/\x1b\[[0-9;]*m//g' | cut -c1-120
|
||||
[[ $rc -eq 0 ]] && pass "hdmi_remove_boot_param exit 0" || fail "hdmi_remove_boot_param exit $rc"
|
||||
[[ -z "$(hdmi_cmdline_param)" ]] && pass "parameter removed from $f" || fail "parameter still in $f"
|
||||
case "$f" in
|
||||
/etc/default/grub) sudo grep -q edid /boot/grub/grub.cfg && fail "edid still in grub.cfg" || pass "no edid in grub.cfg"; [[ $(sudo grep -c '^\s*linux\s' /boot/grub/grub.cfg) -ge 1 ]] && pass "grub.cfg has linux entries" || fail "grub.cfg has no linux entries" ;;
|
||||
/etc/sdboot-manage.conf) sudo sh -c 'grep -l edid /boot/loader/entries/* 2>/dev/null' | grep -q . && fail "edid still in the entries" || pass "no edid in the entries"; [[ $(sudo ls /boot/loader/entries | wc -l) -ge 1 ]] && pass "boot entries exist" || fail "no boot entries" ;;
|
||||
/etc/default/limine) sudo grep -q edid /boot/limine.conf && fail "edid still in limine.conf" || pass "no edid in limine.conf"; sudo grep -q 'linux-cachyos' /boot/limine.conf && pass "limine.conf lists the kernels" || fail "limine.conf lists no kernel" ;;
|
||||
esac
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
# Guest side: Steamify's DKMS modules exist for every installed kernel.
|
||||
# Prints PASS/FAIL lines (scripts/vmbootloadertest.sh counts the FAILs).
|
||||
pass() { echo "PASS $*"; }; fail() { echo "FAIL $*"; }
|
||||
kernels=$(ls /usr/lib/modules)
|
||||
n=$(wc -w <<< "$kernels")
|
||||
echo "kernels: $(tr '\n' ' ' <<< "$kernels")"
|
||||
dkms status
|
||||
[[ $(dkms status | grep -c ': installed') -eq $((3 * n)) ]] && pass "3 DKMS modules x $n kernels installed" || fail "dkms status is not 3 modules x $n kernels"
|
||||
for k in $kernels; do
|
||||
for m in cros-ec-cec leds-valve steamify-fremont-poweroff; do
|
||||
compgen -G "/usr/lib/modules/$k/updates/dkms/$m.ko*" >/dev/null && pass "$m for $k" || fail "$m missing for $k"
|
||||
done
|
||||
done
|
||||
[[ -f /etc/modules-load.d/steamify-fremont-poweroff.conf ]] && pass "modules-load.d has the power-off fix" || fail "no modules-load.d entry"
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
# Guest side ($LOADER = limine|systemd-boot|grub): Steamify's state as its own
|
||||
# menu detects it (the same *_status functions), the OS name untouched, and
|
||||
# the boot loader as expected.
|
||||
pass() { echo "PASS $*"; }; fail() { echo "FAIL $*"; }
|
||||
sudo mountpoint -q /mnt || sudo mount -t 9p -o trans=virtio,version=9p2000.L repo /mnt
|
||||
cd /mnt || exit 1
|
||||
for lib in common state packages login-manager single-user steam-desktop steam-machine fremont-poweroff vram-booster hdmi-refresh cec boot-session vapor-theme steamos-extras bios desktop-shortcut wizard-shortcut steam-game update-notifier; do
|
||||
# shellcheck source=/dev/null
|
||||
. "lib/$lib.sh" 2>/dev/null
|
||||
done
|
||||
# Items this Steam Machine VM has on after `--options gaming,theme,glyphs,single,launcher,notify,cec,machine,poweroff`.
|
||||
for item in gaming theme glyphs single launcher notify poweroff cec; do
|
||||
if "${item}_status" 2>/dev/null; then pass "$item is on (the menu shows it ticked)"; else fail "$item is off"; fi
|
||||
done
|
||||
# Steamify never renames the OS (limine-snapper-sync / grub-btrfs read it).
|
||||
grep -qx 'NAME="CachyOS Linux"' /etc/os-release && grep -qx 'PRETTY_NAME="CachyOS"' /etc/os-release && pass "os-release NAME and PRETTY_NAME are CachyOS's" || fail "os-release NAME/PRETTY_NAME changed"
|
||||
grep -q 'with Steamify' /etc/lsb-release && fail "lsb-release still says 'with Steamify'" || pass "lsb-release name is CachyOS's"
|
||||
# The boot loader is the one this VM was installed with.
|
||||
case "$LOADER" in
|
||||
limine) command -v limine-update >/dev/null && [[ -f /etc/default/limine ]] && pass "Limine is installed" || fail "no Limine"
|
||||
grep -q '^TARGET_OS_NAME="CachyOS"' /etc/default/limine && pass "limine TARGET_OS_NAME is set" || fail "TARGET_OS_NAME missing in /etc/default/limine" ;;
|
||||
systemd-boot) sudo bootctl status --no-pager 2>/dev/null | grep -q 'Product: systemd-boot' && pass "systemd-boot is the boot loader" || fail "not systemd-boot" ;;
|
||||
grub) sudo bootctl status --no-pager 2>/dev/null | grep -q 'Product: GRUB' && pass "GRUB is the boot loader" || fail "not GRUB" ;;
|
||||
esac
|
||||
# "BIOS" menu item: rebooting into the firmware setup must be possible (never trigger it here).
|
||||
sudo bootctl status --no-pager 2>/dev/null | grep -q 'Boot into FW: supported' && pass "reboot into firmware setup is supported" || fail "firmware setup reboot not supported"
|
||||
Reference in new issue
Block a user