Upgrade on Raspberry Pi¶
Remote upgrade from your dev machine¶
The repo includes deploy/pi-remote-upgrade.py (Python 3.9+, stdlib). It compares versions, backs up /opt/waddle-view/bundle to bundle.backup.<timestamp>, then runs install.sh.
Authentication
- SSH: key-based auth recommended (
BatchMode=yesby default; use--no-batchfor password auth) - GitHub:
GITHUB_TOKENorGH_TOKENrequired for Actions artifacts (actions:read)
Examples
# Local tarball
python3 deploy/pi-remote-upgrade.py [email protected] \
--bundle ./waddle-view-linux-arm64-v1.0.0.tar.gz
# Latest release or Actions artifact
export GITHUB_TOKEN=ghp_...
python3 deploy/pi-remote-upgrade.py --ssh [email protected] --source auto
# Non-interactive
python3 deploy/pi-remote-upgrade.py [email protected] \
--bundle ./waddle-view-linux-arm64-v1.0.0.tar.gz --yes
Flags: -i / --identity, -p / --port, --branch, --dry-run, --yes.
Manual upgrade on the Pi¶
- Stop the app (
systemctl --user stop waddle-viewor end the session). - Replace
bundle/under/opt/waddle-viewwith the new release. Preserve SQLite and app support (includingwaddle_instance.id) unless resetting auth. - Start the app again.
- Drift runs migrations on startup — back up the SQLite file before major upgrades.
In-band upgrade from the controller¶
When GET /v1/health returns upgrade_capable: true:
- Copy
waddle-view-upgrade.shto the Pi (e.g./opt/waddle-view/waddle-view-upgrade.sh) andchmod +x. - Set
WADDLE_DISPLAY_UPGRADE_SCRIPTto that path. - Grant passwordless sudo for the script only:
The controller Backup & restore tab can then call POST /v1/display/ops/upgrade with a release download URL.
Without sudo, the UI still links to GitHub Releases for manual upgrades.
Operator session rotation¶
After upgrade, rotate passwords via controller Settings → Users or POST /v1/users/<id>/password. POST /v1/auth/logout invalidates the current session.