Mitchell R
|
69cd0391b5
|
feat(ota): phase 3 — rollouts + automated rollback
Rollouts (server side):
- /admin/firmware/rollouts page lists + creates campaigns. Pick release,
target kiosk_ids (empty = whole channel), percentage (1-100).
- Active rollouts override channel-latest in /api/kiosk/firmware/check.
- Deterministic bucket via sha256(rollout_id:kiosk_id) % 100 — same kiosk
consistently lands in the same bucket across re-checks.
- Pause / resume / complete state controls.
Rollback (kiosk side):
- Before swap, kiosk writes firmware-applying.json marker.
- After clean boot + first successful heartbeat, marker deleted.
- New ExecStartPre hook (/usr/local/sbin/betterframe-firmware-rollback.sh)
runs every service start; stale marker (>120s) + .prev present →
restore .prev. Pairs with systemd's StartLimit to catch crash loops.
|
2026-05-14 07:28:20 +02:00 |
|