feat(steamdeck): self-healing reliability — post-OS-update rebuild check + script/docs polish
- rebuild-check.sh + punktfunk-rebuild-check.service (enabled, ordered Before=punktfunk-host): ldd-probes the host binary at session start — milliseconds when healthy, a full update.sh rebuild only when a SteamOS update actually broke its library links. update.sh restarts go --no-block so the check → update.sh → restart chain can't deadlock against the unit ordering. update.sh retrofits the unit. - installer summary: web console is https (the unit serves TLS). - docs: steamos-host.md (runner in the build step, keep-list + auto rebuild = updates survive hands-free), gamescope.md (Gaming Mode touch = single-finger pointer, exact taps, no multi-touch), plugins.mdx (SteamOS runner note), scripts/steamdeck/README.md (rebuild-check, runner payload, keep list, honest packaging trade-off + the CI-prebuilt future direction). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -350,6 +350,28 @@ sed 's|^ExecStart=.*|ExecStart=%h/.local/bin/punktfunk-scripting|' \
|
||||
"$SRC/scripts/punktfunk-scripting.service" > "$UNITS/punktfunk-scripting.service"
|
||||
ok "punktfunk-scripting.service (opt-in: systemctl --user enable --now punktfunk-scripting)"
|
||||
|
||||
# Post-OS-update self-heal: SteamOS A/B updates can bump library sonames the host binary links
|
||||
# (FFmpeg/PipeWire/libva) — this oneshot probes the binary with ldd before punktfunk-host starts
|
||||
# and re-runs update.sh only when it actually stopped loading. Milliseconds on a normal boot.
|
||||
cat > "$UNITS/punktfunk-rebuild-check.service" <<EOF
|
||||
# Generated by scripts/steamdeck/install.sh — rebuild the host if a SteamOS update broke its libs.
|
||||
[Unit]
|
||||
Description=punktfunk SteamOS post-update rebuild check
|
||||
Before=punktfunk-host.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=$SRC/scripts/steamdeck/rebuild-check.sh
|
||||
# A cold-ish rebuild is minutes, not seconds.
|
||||
TimeoutStartSec=1800
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
EOF
|
||||
chmod +x "$SRC/scripts/steamdeck/rebuild-check.sh" 2>/dev/null || true
|
||||
systemctl --user enable punktfunk-rebuild-check.service 2>/dev/null || true
|
||||
ok "punktfunk-rebuild-check.service (auto-rebuild after SteamOS updates)"
|
||||
|
||||
systemctl --user daemon-reload
|
||||
loginctl show-user "$USER" 2>/dev/null | grep -q 'Linger=yes' || { sudo loginctl enable-linger "$USER" 2>/dev/null && ok "enabled linger (services run without login)" || warn "could not enable linger — services stop when you log out (sudo loginctl enable-linger $USER)"; }
|
||||
# enable + restart (not `enable --now`): restart picks up unit-file changes on a re-run, where
|
||||
@@ -371,7 +393,7 @@ echo
|
||||
log "Done — punktfunk host is running on this Steam Deck"
|
||||
echo " • Host status: systemctl --user status punktfunk-host"
|
||||
if [ "$WITH_WEB" = 1 ]; then
|
||||
echo " • Web console: http://${IP:-steamdeck.local}:$WEB_PORT (login: see $CONFIG/web.env)"
|
||||
echo " • Web console: https://${IP:-steamdeck.local}:$WEB_PORT (login: see $CONFIG/web.env)"
|
||||
echo " • Pair a device: open the web console → Devices → arm pairing → enter the PIN on the client"
|
||||
fi
|
||||
if [ "$OPEN" = 1 ]; then
|
||||
|
||||
Reference in New Issue
Block a user