Auto-Update-Erkennung mit automatischem Neustart #2

Open
opened 2026-06-03 11:29:47 +02:00 by ppfeiffer · 1 comment
Owner

Beschreibung

Ein zweites Hintergrund-Script soll laufend prüfen ob eine neue Version des Dashboards verfügbar ist und bei einem Versionswechsel einen automatischen Neustart auslösen.

Gewünschtes Verhalten

  • Script läuft als separater Prozess im Hintergrund
  • Vergleicht die lokale VERSION-Datei mit der Remote-Version im Forgejo-Repo (z.B. via git fetch oder API-Abfrage)
  • Erkennt einen Upgrade (neue Version vorhanden)
  • Führt git pull aus um die neue Version zu laden
  • Löst anschließend einen Neustart des rpi-dashboard-Service aus (systemctl restart rpi-dashboard)

Implementierungsideen

  • Script: update-watcher.sh
  • Als systemd-Service: rpi-dashboard-updater.service (Typ simple, Restart always)
  • Prüfintervall: alle 60 Sekunden via sleep-Loop
  • Versionsdatei: VERSION im Repo-Root
  • Benötigt Token für Repo-Zugriff
  • Optionaler Bestätigungsdialog auf dem Display bevor Neustart

Akzeptanzkriterien

  • Script erkennt zuverlässig ob Remote-Version > lokale Version
  • git pull wird nur bei tatsächlichem Upgrade ausgeführt
  • Neustart des Dashboard-Service wird ausgelöst
  • Script läuft dauerhaft im Hintergrund als systemd-Service
  • Fehlerbehandlung wenn kein Netzwerk verfügbar
## Beschreibung Ein zweites Hintergrund-Script soll laufend prüfen ob eine neue Version des Dashboards verfügbar ist und bei einem Versionswechsel einen automatischen Neustart auslösen. ## Gewünschtes Verhalten - Script läuft als separater Prozess im Hintergrund - Vergleicht die lokale `VERSION`-Datei mit der Remote-Version im Forgejo-Repo (z.B. via `git fetch` oder API-Abfrage) - Erkennt einen Upgrade (neue Version vorhanden) - Führt `git pull` aus um die neue Version zu laden - Löst anschließend einen Neustart des `rpi-dashboard`-Service aus (`systemctl restart rpi-dashboard`) ## Implementierungsideen - Script: `update-watcher.sh` - Als systemd-Service: `rpi-dashboard-updater.service` (Typ `simple`, Restart `always`) - Prüfintervall: alle 60 Sekunden via sleep-Loop - Versionsdatei: `VERSION` im Repo-Root - Benötigt Token für Repo-Zugriff - Optionaler Bestätigungsdialog auf dem Display bevor Neustart ## Akzeptanzkriterien - [ ] Script erkennt zuverlässig ob Remote-Version > lokale Version - [ ] git pull wird nur bei tatsächlichem Upgrade ausgeführt - [ ] Neustart des Dashboard-Service wird ausgelöst - [ ] Script läuft dauerhaft im Hintergrund als systemd-Service - [ ] Fehlerbehandlung wenn kein Netzwerk verfügbar
Author
Owner

Alternative Methoden ohne Token

1. Vorhandene .git/config nutzen (einfachste Lösung)

Das Repo wurde bereits mit Token in der Remote-URL geklont (https://ppfeiffer:<TOKEN>@git.pfeiffer-privat.de/...). Der Token steckt bereits in .git/config — der Update-Watcher kann einfach git fetch aufrufen ohne eigenen Token, weil git die gespeicherte URL nutzt.

git -C /home/admin/dashboard fetch --quiet
LOCAL=$(cat VERSION)
REMOTE=$(git -C /home/admin/dashboard show origin/main:VERSION)

2. SSH Deploy Key (empfohlen für Produktion)

Ein Read-Only Deploy Key für das Repo — kein Passwort, kein Token, läuft ewig.

ssh-keygen -t ed25519 -f ~/.ssh/rpi_dashboard_deploy -N ""
# Public Key in Forgejo unter Repo → Einstellungen → Deploy Keys eintragen

Dann Remote-URL auf SSH umstellen:

git remote set-url origin git@git.pfeiffer-privat.de:ppfeiffer/rpi-dashboard.git

3. Forgejo API ohne Auth (nur bei öffentlichem Repo)

Wenn das Repo auf public gestellt wird, reicht ein einfacher HTTP-Aufruf:

REMOTE=$(curl -sf https://git.pfeiffer-privat.de/ppfeiffer/rpi-dashboard/raw/branch/main/VERSION)

Kein Token nötig.


Empfehlung: Option 1 (vorhandene git config) für schnelle Implementierung, Option 2 (Deploy Key) wenn Sicherheit wichtig ist und der Token aus .git/config entfernt werden soll.

## Alternative Methoden ohne Token ### 1. Vorhandene `.git/config` nutzen (einfachste Lösung) Das Repo wurde bereits mit Token in der Remote-URL geklont (`https://ppfeiffer:<TOKEN>@git.pfeiffer-privat.de/...`). Der Token steckt bereits in `.git/config` — der Update-Watcher kann einfach `git fetch` aufrufen ohne eigenen Token, weil git die gespeicherte URL nutzt. ```bash git -C /home/admin/dashboard fetch --quiet LOCAL=$(cat VERSION) REMOTE=$(git -C /home/admin/dashboard show origin/main:VERSION) ``` ### 2. SSH Deploy Key (empfohlen für Produktion) Ein Read-Only Deploy Key für das Repo — kein Passwort, kein Token, läuft ewig. ```bash ssh-keygen -t ed25519 -f ~/.ssh/rpi_dashboard_deploy -N "" # Public Key in Forgejo unter Repo → Einstellungen → Deploy Keys eintragen ``` Dann Remote-URL auf SSH umstellen: ``` git remote set-url origin git@git.pfeiffer-privat.de:ppfeiffer/rpi-dashboard.git ``` ### 3. Forgejo API ohne Auth (nur bei öffentlichem Repo) Wenn das Repo auf public gestellt wird, reicht ein einfacher HTTP-Aufruf: ```bash REMOTE=$(curl -sf https://git.pfeiffer-privat.de/ppfeiffer/rpi-dashboard/raw/branch/main/VERSION) ``` Kein Token nötig. --- **Empfehlung:** Option 1 (vorhandene git config) für schnelle Implementierung, Option 2 (Deploy Key) wenn Sicherheit wichtig ist und der Token aus `.git/config` entfernt werden soll.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ppfeiffer/rpi-dashboard#2
No description provided.