install: always install serve; resolve it via PATH in wrolpi-app

wrolpi-app crash-loops with 203/EXEC when /usr/local/bin/serve is missing.
Two independent causes, both fixed here:

1. The `single-file --version ||` guard in the install scripts only installed
   serve (and readability) when single-file was ABSENT. On a machine that
   already has single-file (a prior install or a baked image), serve was
   skipped, and re-running install.sh could never repair it. Install each npm
   global independently based on its own presence.

2. The service hardcoded /usr/local/bin/serve, which breaks when npm's global
   prefix puts serve in /usr/bin (depends on how node was installed). Resolve
   serve via PATH with `/usr/bin/env serve`.

Verified on a fresh Raspberry Pi OS Trixie install (10.0.0.8): wrolpi-app is
active with 0 restarts and serves 200 with the PATH-resolved ExecStart.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Roland 2026-07-23 18:10:52 -06:00
parent cd11b5b7b7
commit 36f84941db
No known key found for this signature in database
GPG key ID: 1BA620CE6C9A4680
3 changed files with 13 additions and 5 deletions

View file

@ -20,8 +20,11 @@ apt-get install -y $(cat /opt/wrolpi/debian-live-config/config/package-lists/wro
node -v
npm -v
# Install serve, and archiving tools.
single-file --version || sudo npm i -g serve@12.0.1 single-file-cli@2.0.73 readability-extractor@0.0.6
# Install serve, and archiving tools. Check each independently so a present
# single-file cannot mask a missing serve (which breaks wrolpi-app).
command -v serve >/dev/null || sudo npm i -g serve@12.0.1
single-file --version >/dev/null 2>&1 || sudo npm i -g single-file-cli@2.0.73
command -v readability-extractor >/dev/null || sudo npm i -g readability-extractor@0.0.6
# Install Deno runtime; single-file runs under it.
command -v deno || {

View file

@ -20,8 +20,11 @@ apt-get install -y $(cat /opt/wrolpi/pi-gen/stage2/04-wrolpi/01-packages-nr)
node -v
npm -v
# Install serve, and archiving tools.
single-file --version || sudo npm i -g serve@12.0.1 single-file-cli@2.0.73 readability-extractor@0.0.6
# Install serve, and archiving tools. Check each independently so a present
# single-file cannot mask a missing serve (which breaks wrolpi-app).
command -v serve >/dev/null || sudo npm i -g serve@12.0.1
single-file --version >/dev/null 2>&1 || sudo npm i -g single-file-cli@2.0.73
command -v readability-extractor >/dev/null || sudo npm i -g readability-extractor@0.0.6
# Install Deno runtime; single-file runs under it.
command -v deno || {