Da ich selbst mal wieder nicht betroffen bin und das hier auch nicht reproduzieren kann brauche ich zur Analyse Hilfe von den Betroffenen.
Obwohl ich mir was "relativ einfaches" für die Test's ausgedacht habe ist das Prozedere, um in meinen Debug-Modus zu kommen, leider doch nicht ganz so simpel.
Ihr braucht ssh - Zugang und ich empfehle (für Windows-User) WinSCP.
Wer also per PuTTY (oder sonst einem Terminal-Programm) per ssh auf die RM kommt und in WinSCP das Dateisystem der RM vor sich sieht ist dabei.
Für die Modifikationen die wir hier vornehmen braucht man kein Backup, wenn alle Stricke reißen muss man nur die RM "drüberinstallieren" um wieder zum Ausgangszustand zu kommen.
Wie das mit dem Internet-Check abläuft hatte ich kürzlich >> hier beschrieben <<.
Meine aktuelle Vermutung geht dahin das bei den Betroffenen irgendwas mit der DNS-Auflösung versagt.
Es gibt 3 Tests die eine DNS-Adresse auflösen und dann die Konnektivität prüfen. Versagen alle 3 wird eben der Status auf "kein Internet" gesetzt.
Das "Testscript" selbst beinhaltet zwar noch 2 Test's auf hardcodierte IP-Adressen, in diesen Testbereich kommt es aber nie. Dazu später mehr.
Für das Testszenario habe ich das Script '/bin/checkInternet' um jede Menge Debug-Ausgaben erweitert die im SysLog landen.
Vorgehen:
- per ssh das Dateisystem der RM beschreibbar machen:
Code: Alles auswählen
mount -o remount,rw / - nun die '/bin/checkInternet' mit z.B. WinSCP öffnen und den ganzen Inhalt durch meinen Testcode ersetzen.
Code: Alles auswählen
#!/bin/sh output="" test0="Check aktiv: nein" test1="DNS-Test1: -" test2="DNS-Test2: -" test3="DNS-Test3: -" extratest0="Hardcoded-IP-Tests: -" extratest1="Hardcoded-IP-Test1: -" extratest2="Hardcoded-IP-Test2: -" exitcode="Exit: na" if [ ! -e /etc/config/internetCheckDisabled ]; then test0="Check aktiv: ja" if ! /usr/bin/timeout 3 /usr/bin/wget -q --spider http://google.com/ >/dev/null 2>&1; then test1="DNS-Test1: fail" if ! /usr/bin/timeout 3 /bin/ping -q -W 3 -c 1 google.com >/dev/null 2>&1; then test2="DNS-Test2: fail" if ! /usr/bin/timeout 3 /usr/bin/nc -z -w 3 google.com 80 >/dev/null 2>&1; then test3="DNS-Test3: fail" #if grep -q nfsroot /proc/cmdline ; then if [ -e /proc/cmdline ] ; then extratest0="Hardcoded-IP-Tests: ok" if ! /usr/bin/timeout 3 /bin/ping -q -W 3 -c 1 8.8.8.8 >/dev/null 2>&1; then extratest1="Hardcoded-IP-Test1: fail" if ! /usr/bin/timeout 3 /usr/bin/nc -z -w 3 142.250.185.174 80 >/dev/null 2>&1; then extratest2="Hardcoded-IP-Test2: fail" [ -f /var/status/hasInternet ] && rm -f /var/status/hasInternet exitcode="Exit: 1 = InternetCheck fehlgeschlagen!" output="$test0 / $test1 / $test2 / $test3 / $extratest0 / $extratest1 / $extratest2 / $exitcode" echo $output logger -t CheckInternet-Debug -p user.info "$output" exit 1 else extratest2="Hardcoded-IP-Test2: ok" fi else extratest1="Hardcoded-IP-Test1: ok" fi else [ -f /var/status/hasInternet ] && rm -f /var/status/hasInternet exitcode="Exit: 1 = InternetCheck fehlgeschlagen!" extratest0="Hardcoded-IP-Tests: fail" output="$test0 / $test1 / $test2 / $test3 / $extratest0 / $extratest1 / $extratest2 / $exitcode" echo $output logger -t CheckInternet-Debug -p user.info "$output" exit 1 fi else test3="DNS-Test3: ok" fi else test2="DNS-Test2: ok" fi else test1="DNS-Test1: ok" fi fi if [ ! -f /var/status/hasInternet ]; then touch /var/status/hasInternet fi sleep 1 statusfile="Statusfile: ok" if [ ! -e /var/status/hasInternet ]; then statusfile="Statusfile: -" fi exitcode="Exit: 0 = InternetCheck erfolgreich!" output="$test0 / $test1 / $test2 / $test3 / $extratest0 / $extratest1 / $extratest2 / $exitcode / $statusfile" echo $output logger -t CheckInternet-Debug -p user.info "$output" exit 0 - Die Änderungen speichern und das war's dann auch schon soweit.
- Jetzt kann man sich per ssh auf die Lauer legen...
... oder man lässt einfach laufen und guckt irgendwann ins SysLog.
Code: Alles auswählen
tail -f /var/log/messages | grep "CheckInternet" - Eine "gute Ausgabe" sieht dann bspw. so aus:
Hier sieht man das der erste der 3 DNS-Test's gleich erfolgreich war.
Code: Alles auswählen
Aug 14 18:41:43 RM80-CM4-4GB user.info CheckInternet-Debug: Check aktiv: ja / DNS-Test1: ok / DNS-Test2: - / DNS-Test3: - / Hardcoded-IP-Tests: - / Hardcoded-IP-Test1: - / Hardcoded-IP-Test2: - / Exit: 0 = InternetCheck erfolgreich - Eine "schlechte Ausgabe" sieht dann bspw. so aus:
Hier sieht man das alle 3 DNS-Test's fehlgeschlagen sind und demzufolge der Status "kein Internet" gesetzt wird. Der eigentliche WatchDog-Alarm kann sich aber verzögern.
Code: Alles auswählen
Aug 14 18:50:28 RM80-CM4-4GB user.info CheckInternet-Debug: Check aktiv: ja / DNS-Test1: fail / DNS-Test2: fail / DNS-Test3: fail / Hardcoded-IP-Tests: fail / Hardcoded-IP-Test1: - / Hardcoded-IP-Test2: - / Exit: 1 = InternetCheck fehlgeschlagen!
Wie weiter oben erwähnt gibt es zusätzliche Test's die hardcodierte IP-Adressen prüfen. Der "funktioniert" aber nicht weil niemals in diesen Testbereich des Scriptes reingesprungen wird. Hatte dazu mit Jens gesprochen und die Aussage war grob "wenn DNS nicht geht dann geht auch kein Internet". Ergo sind diese Test's eigentlich überflüssig.
Wer die Test's aktivieren möchte (die werden dann nur ausgeführt wenn alle 3 DNS-Test's fehlschlagen) der muss folgendes ändern:
Aus:
Code: Alles auswählen
if grep -q nfsroot /proc/cmdline ; then
#if [ -e /proc/cmdline ] ; thenCode: Alles auswählen
#if grep -q nfsroot /proc/cmdline ; then
if [ -e /proc/cmdline ] ; thenCode: Alles auswählen
Aug 14 19:12:47 RM80-CM4-4GB user.info CheckInternet-Debug: Check aktiv: ja / DNS-Test1: fail / DNS-Test2: fail / DNS-Test3: fail / Hardcoded-IP-Tests: ok / Hardcoded-IP-Test1: ok / Hardcoded-IP-Test2: - / Exit: 0 = InternetCheck erfolgreich!Ganz klar die Logausgaben und bei Auffälligkeiten (Exit: 1 = InternetCheck fehlgeschlagen!) eine möglichst präzise Beschreibung der Netzwerksituation. Also FritzBox Zwangsreset, Stromausfall, Netzwerkkabel vom Meerschwein zerbissen usw.
Damit kann man dann hoffentlich die Probleme finden und lösen.
Schon mal Danke für's mitmachen...