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.
41 lines
1.7 KiB
Desktop File
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
|