Files
ninlight-w600/tools/station/ninlight-station.service
T
Michael Sauer 1d3627bacd feat(station): Unterbefehle fuer Migrationsmodus und Freigabe
ninlight-station bekommt recovery/migrate/arm/listen als Unterbefehle statt nur
on/off/status; "on" bleibt Kurzform fuer "recovery on". Eine gemeinsame
ap_switch()-Funktion faehrt vor jedem Wechsel erst jedes andere Stationsprofil
herunter und prueft per nmcli nach, dass auf wlan0 wirklich nur eines aktiv
ist - die beiden Zugangspunkte (Rettung/Migration) schliessen sich damit
gegenseitig aus. Der Modus wandert per /run/ninlight-station/mode an den
(ohnehin neu gestarteten) Dienst statt ueber die Konfigurationsdatei; arm/listen
schreiben die Steuerdatei aus Task 3 mit demselben atomaren 0644-Muster wie
server.py selbst. station.conf.example und die Pflichtschluesselpruefung
bekommen die neuen Migrations- und Anzeige-Schluessel dazu.
2026-09-13 18:39:48 +02:00

41 lines
1.7 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
# Steht der Zugangspunkt nicht, kann server.py 192.168.8.1 nicht binden und
# stirbt sofort; Restart=always versucht es alle RestartSec=2 erneut. Damit
# das nicht endlos das Journal flutet, sondern nach kurzer Zeit ehrlich
# aufgibt (und ninlight-station dann mit einer klaren Fehlermeldung reagieren
# kann statt in einer stillen Neustartschleife zu haengen), hier explizit
# gedeckelt statt sich auf systemds Vorgabewerte zu verlassen.
StartLimitIntervalSec=30
StartLimitBurst=5
[Service]
Type=simple
EnvironmentFile=/etc/ninlight-station.conf
ExecStart=/usr/bin/python3 /opt/ninlight-station/server.py --image-dir ${IMAGE_DIR} --mode-file /run/ninlight-station/mode
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