Wenn Sie in Einstellungen → Update auf Upgrade oder Downgrade klicken, läuft ein mehrstufiger Prozess. Dieses Dokument erklärt, was im Hintergrund passiert — nützlich, wenn etwas nicht wie erwartet abläuft.
Beteiligte Komponenten
- MainUI — die Bedienoberfläche, die den Klick entgegennimmt und die Update-Dateien herunterlädt.
- BOS Update Server (
https://update.brinkhaus-gmbh.de) — die zentrale Quelle aller Firmware-Versionen, signiert mit einem Ed25519-Schlüssel. - UpdateService — ein eigener Hintergrund-Container auf der Edge, der den eigentlichen Austausch orchestriert. Er läuft in einem separaten Compose-Stack als der Haupt-Stack — denn er muss den Haupt-Stack neu starten können, ohne sich selbst zu beenden.
Phase 1: Auswahl und Download (durch MainUI)
- MainUI ruft die verfügbaren Versionen vom Update-Server ab.
- Sie klicken auf eine Version → MainUI lädt drei Dateien in genau dieser Reihenfolge:
public-key.pem— der öffentliche Signaturschlüsseldocker-compose.yml.sig— die Signatur über die neue Compose-Dateidocker-compose.yml— die eigentliche Compose-Datei (zuletzt!)
- MainUI verifiziert die Ed25519-Signatur. Bei Fehlschlag → Diagnose-Code 1009, Update wird abgebrochen.
- Die drei Dateien liegen jetzt unter
/home/gmn-service/docker/updates/data/. Das Schreiben der Compose-Datei ist das Trigger-Ereignis für den UpdateService.
Phase 2: 7-Phasen-Deploy (durch UpdateService)
Der UpdateService prüft das Staging-Verzeichnis im 10-Sekunden-Takt. Sobald er eine neue docker-compose.yml findet, läuft folgender Ablauf:
| Phase | Aktion |
|---|---|
| 1 | Validierung — gestagete Compose-Datei vorhanden und syntaktisch gültig? |
| 2 | Backup — aktuelle Compose-Datei und description.json ins Backup-Verzeichnis kopieren. |
| 3 | Stop — docker compose stop + docker compose rm -f für den Haupt-Stack (nicht down, damit das gemeinsame bos-internal-Netz erhalten bleibt). |
| 4 | Deploy — atomares Kopieren der neuen Dateien an den Live-Speicherort. config.json wird nicht überschrieben (MainUI mergt neue Defaults beim Start). |
| 5 | Start — .env neu generieren (für die aktuelle Multi-IP-Liste), docker compose pull, docker compose up -d. |
| 6 | Health-Check — Container-Stabilität (≥ 10 s laufend, keine Restart-Loops) und HTTP-Probe gegen http://localhost:5000/api/version im Container. |
| 7 | Cleanup (bei Erfolg) oder Rollback (bei Misserfolg). |
Während des gesamten Vorgangs ist die Bedienoberfläche nicht erreichbar.
Phase 3: Rollback (nur bei Misserfolg)
Wenn der Health-Check innerhalb von 90 Sekunden nicht grün wird, springt der UpdateService automatisch zurück:
- Stack mit der neuen Version stoppen.
- Backup-Compose und -Description an den Live-Speicherort kopieren.
- Stack mit der alten Version wieder starten.
- Diagnose-Codes 2005 (Rollback gestartet), dann 2006 (erfolgreich) oder 2007 (fehlgeschlagen) absetzen.
💡 One-cycle backwards-compatibility: der vorherige UpdateService führt den Health-Check während eines Upgrades durch — die neue MainUI muss daher mindestens einen Update-Zyklus lang noch genauso auf
http://localhost:5000/api/versionantworten, wie es der alte UpdateService erwartet. Diese Regel galt nicht in 2.1.0 — alle Upgrades von 2.0.x rollten zurück; 2.1.1 hat es korrigiert.
Was bedeuten die Versionen in der Service-Tabelle?
In Einstellungen → Update sehen Sie nicht nur die Firmwareversion (z. B. 2.2.1), sondern auch die individuellen Versionen jedes Docker-Containers:

Eine Firmware-Version ist eine Sammlung kompatibler Service-Versionen, festgelegt in der ausgelieferten docker-compose.yml. Updates ersetzen also nicht nur ein Image, sondern stellen eine geprüfte Kombination aus 9–11 Containern her.
Verwandt
- Firmware aktualisieren — die Schritte am Bildschirm
- Diagnose-Codes — was bedeuten Update-Fehlermeldungen (Bereich 2xxx)