CLI und beide Skripte (setup_pi.sh, deploy.sh) rufen sudo nicht-interaktiv auf; ohne passwortloses sudo fuer den SSH-Benutzer bricht der gesamte Ablauf mit einem Passwort-Prompt ab, den nichts davon behandeln kann. Das war bisher eine unausgesprochene Voraussetzung. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
49 lines
2.4 KiB
Markdown
49 lines
2.4 KiB
Markdown
# ninlight-Recovery-Station
|
|
|
|
Ein Raspberry Pi spannt den Zugangspunkt `ninlight-recovery` auf und liefert unter
|
|
`http://192.168.8.1/ninlight_<target>_ota.img` Firmware-Images aus.
|
|
|
|
Jede ninlight-Lampe sucht beim Booten bis zu drei Sekunden nach dieser Station. Findet sie
|
|
sie, lädt sie das Image für ihren Gerätetyp und flasht es — ohne dass die Lampe im WLAN
|
|
erreichbar sein muss. Das ist der Rettungsweg für Lampen, an die man sonst nur noch mit dem
|
|
Lötkolben käme.
|
|
|
|
Trägt das angebotene Image dieselbe Version, die bereits läuft, lehnt die Lampe es ab und
|
|
bootet normal weiter. Eine angelassene Station flasht also nicht in einer Endlosschleife.
|
|
|
|
## Voraussetzung
|
|
|
|
Der SSH-Benutzer auf dem Pi braucht passwortloses `sudo` — beide Skripte und die CLI
|
|
(`ninlight-station on|off|status`) rufen `sudo` nicht-interaktiv auf; ein Passwort-Prompt
|
|
würde dort nur mit einer Fehlermeldung enden.
|
|
|
|
## Bedienung
|
|
|
|
tools/station/setup_pi.sh <pi-host> einmalig einrichten
|
|
tools/station/deploy.sh <pi-host> [target] Images ausliefern
|
|
ssh <pi-host> ninlight-station on einschalten
|
|
ssh <pi-host> ninlight-station status Zustand und letzte Auslieferungen
|
|
ssh <pi-host> ninlight-station off ausschalten
|
|
|
|
SSID und Passwort stehen in `/etc/ninlight-station.conf` auf dem Pi und müssen zu den
|
|
Build-Parametern `NINLIGHT_RECOVERY_SSID` und `NINLIGHT_RECOVERY_PASSWORD` aus
|
|
`config.local.cmake` passen. Weicht eines ab, findet die Lampe die Station nicht.
|
|
|
|
## Vertrauensgrenze
|
|
|
|
Der Trailer eines Images prüft Gerätetyp und SHA256. Er ist **keine** kryptografische
|
|
Signatur, und der Download läuft über `http://` ohne TLS. Die Station schützt allein ein
|
|
WPA2-Passwort, dessen Default im Repo steht. Wer in Funkreichweite ist und es kennt, kann
|
|
jeder Lampe beim nächsten Boot beliebige Firmware unterschieben.
|
|
|
|
Das ist gewollt: Die Signaturprüfung der alten Firmware auszuhebeln ist der Zweck dieses
|
|
Projekts. Daraus folgen zwei Regeln.
|
|
|
|
**Setz ein eigenes Passwort.** In `config.local.cmake` und in
|
|
`/etc/ninlight-station.conf` — an beiden Stellen denselben Wert.
|
|
|
|
**Lass die Station nur an, solange du sie brauchst.** Nicht nur wegen des Fremdzugriffs:
|
|
Die Firmware löscht den Power-Cycle-Zähler, bevor sie einen Recovery-Versuch startet.
|
|
Solange eine Station in Reichweite ist, funktioniert der Werksreset per fünf Stromzyklen
|
|
bei **keiner** Lampe in Reichweite mehr.
|