- 'on' prueft nach dem Start wirklich, ob der Dienst aktiv ist (Type=simple meldet sonst schon Erfolg, wenn der Prozess nur gestartet wurde), und faehrt den Zugangspunkt bei einem toten Server wieder herunter statt ihn offen mit bekanntem Passwort ohne Server dahinter stehen zu lassen. - 'off' faengt einen fehlschlagenden Wechsel zurueck ins Heim-WLAN ab statt unter set -eu mit nmclis Rohausgabe abzubrechen. - Fehlende Schluessel in der Konfiguration werden nach dem Sourcen explizit geprueft und mit einem Verweis auf setup_pi.sh gemeldet statt mit "parameter not set" abzubrechen. - station.conf.example verwendet einfache statt doppelter Anfuehrungszeichen: POSIX ". datei" wertet $ und ` auch in doppelten Anfuehrungszeichen aus, ein Passwort mit "$1" waere sonst lautlos durch ein Shell-Argument ersetzt worden. systemds EnvironmentFile= fuehrt ohnehin nie eine Shell aus und entfernt einfache wie doppelte Anfuehrungszeichen gleichermassen. - ninlight-station.service: BindsTo=NetworkManager.service entfernt (ein dadurch ausgeloester Stop gilt fuer systemd als sauber und wird von keiner Restart=-Politik erneut gestartet - ein NetworkManager-Neustart haette den Server sonst still und dauerhaft mitgerissen); stattdessen nur After=NetworkManager.service fuer die Startreihenfolge und Restart=always, damit der Prozess nach einem Absturz (z.B. Bind-Fehler) automatisch wiederkommt. - Trailer-Reader im 'status'-Zweig nutzt jetzt errors="replace" wie trailer_version() in server.py, statt bei nicht-ASCII-Bytes im Versionsfeld abzustuerzen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
33 lines
1.2 KiB
Desktop File
33 lines
1.2 KiB
Desktop File
[Unit]
|
|
Description=ninlight recovery station (HTTP image server)
|
|
# Ohne den Zugangspunkt hat der Server beim Start keine Adresse zum Binden.
|
|
# Bewusst kein BindsTo=NetworkManager.service: ein dadurch ausgeloester Stop
|
|
# gilt fuer systemd als sauber und wuerde von KEINER Restart=-Politik erneut
|
|
# gestartet - ein NetworkManager-Neustart wuerde den Server dann still und
|
|
# dauerhaft mitreissen. Stattdessen nur Start-Reihenfolge vorgeben und den
|
|
# Prozess bei jedem Absturz (z.B. Bind-Fehler nach einem NM-Neustart) per
|
|
# Restart=always in kurzen Abstaenden neu versuchen lassen.
|
|
After=network.target NetworkManager.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
EnvironmentFile=/etc/ninlight-station.conf
|
|
ExecStart=/usr/bin/python3 /opt/ninlight-station/server.py --image-dir ${IMAGE_DIR}
|
|
Restart=always
|
|
RestartSec=2
|
|
|
|
# Laeuft als root: Port 80 und - fuer 4c - die DHCP-Leases in
|
|
# /var/lib/NetworkManager (Verzeichnis 0700 root:root) sind sonst nicht erreichbar.
|
|
# Gegengewicht:
|
|
NoNewPrivileges=yes
|
|
ProtectSystem=strict
|
|
ProtectHome=yes
|
|
PrivateTmp=yes
|
|
RuntimeDirectory=ninlight-station
|
|
ReadWritePaths=/run/ninlight-station
|
|
RestrictAddressFamilies=AF_INET AF_UNIX
|
|
MemoryMax=128M
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|