Freifunk-Firmware/Watchdog
Informationen zum Watchdog in von OpenWrt abgeleiteten Freifunk-Firmwares.
Funktionsweise
Aktuelle Versionen der Freifunk-OpenWrt-Builds beinhalten einen Watchdog-Prozess, welcher verschiedene Aspekte des Systems überwacht. Der Daemon läuft mit einem Intervall von 30 Sekunden und hat eine Hysterese von 3, d.h. etwaige Aktionen werden nach 90 Sekunden (3 * 30 Sekunden) Fehlerkondition ausgelöst.
Zur Zeit implementiert der Watchdog folgende Funktionen:
- BSSID- und Kanalüberwachung - für jedes in /etc/config/wireless definierte Ad-Hoc Interface werden BSSID und Kanal überwacht, stimmt entweder die BSSID oder der Kanal nicht überein, wird ein Wireless-Neustart mittels "/sbin/wifi" ausgelöst.
- Load-Überwachung - ist die durchschnittliche Systemlast für längere Zeit höher als 5.0, erfolgt ein Geräte-Reset.
- Cron-Überwachung - es wird geprüft, ob der Cron-Daemon läuft. Falls der Prozess längere Zeit nicht verfügbar ist, löst der Watchdog einen Neustart von Cron mittels "/etc/init.d/cron restart" aus
- SSHd-Überwachung - analog zum Cron-Daemon wird die Verfügbarkeit des "dropbear" SSH-Dienstes geprüft. Auch hier erfolgt nach längerer Nicht-Verfügbarkeit ein Neustart mittels "/etc/init.d/dropbear restart".
- Kernel-Watchdog - sofern ein "/dev/watchdog" Device existiert, wird dieses regelmäßig beschrieben, um dem Kernel die Verfügbarkeit des Systems zu signalisieren. Bleiben diese Schreib-Meldungen aus, veranlasst der Kernel einen Geräte-Reset.
OLSRd oder andere Dienste werden per Default nicht überwacht; dafür kann ggf. ff_olsr_watchdog aus dem Package freifunk-common genutzt werden.
Zusätzlich wird beim ersten Start (und aktiviertem Watchdog) ein Cronjob installiert, welcher den Watchdog-Prozess überwacht. Auf diese Weise überwachen sich die Cron- und Watchdog-Prozesse gegenseitig.
Gründe
Verschiedene Tests haben gezeigt, dass Router unter bestimmten Umständen Fehlfunktionen entwickeln können, welche die Erreichbarkeit des Gerätes erschweren oder gänzlich verhindern.
- Bei sog. BSSID-Splits oder falschen Kanaleinstellungen verliert das Gerät den Kontakt zum Netz und kann daher nur noch lokal über die LAN-Ports erreicht werden. Das ist bei Outdoor-Installationen meist schwer bis gar nicht möglich.
- Bei Out-of-Memory-Konditionen bricht der Kernel zufällige Prozesse ab, um freien Speicher zu schaffen. Unter Umständen können so essentielle Dienste wie OLSR oder SSH beendet werden, was einen Geräte-Reset erforderlich macht.
- Stürzt der Cron-Prozess ab, werden wichtige Prozesse wie der Gateway-Check oder das Splash-Whitelisting nicht mehr ausgeführt. Das kann über einen längeren Zeitraum zu Problemen führen, welche den Netzverkehr beeinträchtigen.
- Wird durch eine Fehlfunktion eine extrem hohe Systemlast verursacht, kommt das System praktisch zum Halten, SSH-Logins und OLSR-Broadcasting werden beeinträchtigt und machen das Gerät unbrauchbar.
Die Watchdog-Implementierung versucht, diese Probleme zu lösen, um die Geräte zumindest erreichbar zu halten. Dies ist im Hinblick auf Outdoor-Installationen und Remote-Administration sehr wichtig, um eine gewisse Netzstabilität zu garantieren. Auch lassen such Updates oder Softwarekorrekturen nur durchführen, wenn die Erreichbarkeit das Gerätes gewährleistet ist.
Die Bündelung der Systemchecks in einem einzigen Prozess dient der Robustheit gegenüber Fehlfunktionen oder kaskadierten Fehlerkonditionen und bringt letztendlich Vorteile wie einen geringeren Speicherverbrauch und niedrigere Systemlast mit sich.
Source
- ffwatchd aus LuCI-Package freifunk-watchdog: https://github.com/openwrt/luci/tree/master/contrib/package/freifunk-watchdog
nicht verwechseln mit dem ff_olsr_watchdog aus dem Package freifunk-common!
Watchdog dauerhaft deaktivieren
Unter Umständen verursacht ein Watchdog mehr Probleme als er löst. In diesem Fall kann es wünschenswert sein, auf die bereitgestellte Funktionalität zu verzichten. Da sich Cron-Daemon und Watchdog gegenseitig überwachen, muss man zusätzlich zum Init-Script auch den entsprechenden Crontab-Eintrag entfernen. Zum Deaktivieren des Watchdogs sollte folgendermaßen vorgegangen werden:
# Die Datei /etc/crontabs/root editieren und den Watchdog-Prüfjob entfernen sed -i -e '/ffwatchd running/d' /etc/crontabs/root # Das Init-Script dauerhaft deaktivieren /etc/init.d/freifunk-watchdog disable # Anschließend den Watchdog Prozess sauber beenden /etc/init.d/freifunk-watchdog stop # Abschließend ggf. den Cron-Daemon neu starten /etc/init.d/cron restart
Hinweis: Wenn ein /dev/watchdog Device vorhanden ist und der Watchdog-Prozess hart terminiert wird (killall -9), so wird der Kernel-Watchdog-Timer nicht angehalten, d.h. das System wird nach spätestens 10 Sekunden neu gestartet. Auf Atheros-basierten Geräten (Fonera, DIR-300) unterstützt der Watchdog-Treiber kein Anhalten des Timers, d.h. das System bootet in jedem Fall neu!
Watchdog aktivieren
Um den Watchdog wieder zu aktivieren, reicht es folgende Kommandos auszuführen:
/etc/init.d/freifunk-watchdog enable /etc/init.d/freifunk-watchdog boot