Runlevel - ab wann Netzwerk ?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Raspberry Fans,

    ich habe da mal eine Frage bezüglich runlevels. Der Raspberry bootet ja in runlevel 2 dort befinden sich einige Systemlinks zu den Unterscripten in /etc/init.d Wie man ein Script schreibt ist mir klar, da gibt es ja ein super Tutorial in diesem Forum. Nur leider funktioniert es nicht.

    Was will ich überhaupt ?
    Ich möchte, wenn der Raspberry eingeschalten wird, dass er so bald wie möglich mittels etherwake mir einen Media Server startet. Das Script selber funktioniert tadellos, nur im Runlevel eben nicht, weil da das Netzwerk noch nicht aktiv ist.

    Hier mal das einfache Script:

    Unter den Abhängigkeiten habe ich es versucht mit $network, $all nichts funktioniert. Auch den symbolischen Link habe ich in S99wakup umbenannt ....

    Ich habe es auch unter rc.local probiert, aber da ist das Netzwerk auch noch nicht aufgebaut. Das weiß ich, weil in der Log Ausgabe keine Ping ausgabe steht....

    Habt ihr eine Idee ?

    lg Martin

    Einmal editiert, zuletzt von emka81 (8. September 2014 um 15:20)


  • ..., weil da das Netzwerk noch nicht aktiv ist.

    Habt ihr eine Idee ?

    Bei mir ist das Netzwerk dann aktiv, wenn das zuständige Interface up ist, eine brauchbare IP-Adresse bekommen hat und z. B. den Router oder evtl. auch mehr erreichen/pingen kann. Das kann man prüfen, bevor man ein Script startet.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • danke derweil,

    rpi444 wie kann man das überprüfen ?

    Ich werds einmal mit runlevel3 versuchen ....

    Danke, lg Martin

    Tja, das mit runlevel3 hat leider nicht funktioniert. Was mich ein wenig irritiert ist, dass in runlevel 2,3,4,5 überall das selbe steht.

    Code
    root@raspbmc:/etc/rc3.d# ls -l
    insgesamt 4
    -rw-r--r-- 1 root root 677 Dez 23  2013 README
    lrwxrwxrwx 1 root root  17 Dez 23  2013 S16rsyslog -> ../init.d/rsyslog
    lrwxrwxrwx 1 root root  14 Dez 23  2013 S16sudo -> ../init.d/sudo
    lrwxrwxrwx 1 root root  14 Sep  3 22:51 S17dbus -> ../init.d/dbus
    lrwxrwxrwx 1 root root  18 Dez 23  2013 S20rc.local -> ../init.d/rc.local
    lrwxrwxrwx 1 root root  19 Dez 23  2013 S20rmnologin -> ../init.d/rmnologin
    lrwxrwxrwx 1 root root  15 Sep  8 13:59 S99wakup -> ../init.d/wakup

    wisst ihr, wann bzw. wo das /etc/init.d/networking script gestartet wird ? Ich habe es schon versucht, den etherwake Befehl direkt in diesen Script hineinzu schummeln, hat aber auch keine Früchte getragen. Weiters habe ich versucht in .bashrc .profile /etc/profile das einzutragen, was aber den Effekt hat, dass das Script dann gestartet wird wenn man sich als user einlogged, aber der rasbmc startet ja automatisch ....

    any ideas ?

    lg Martin

    Einmal editiert, zuletzt von emka81 (8. September 2014 um 14:10)


  • rpi444 wie kann man das überprüfen ?

    Z. B. mit Hilfe des Rückgabewertes von ip, ifconfig, ping, ... aus einem Script im Verzeichnis "/etc/network/if-up.d" oder aus der Datei "/etc/network/interfaces" heraus.

    Z. B. wenn dein Router die IP-Adresse 192.168.178.1 hat, dann siehe die Ausgabe von:

    Code
    ping -c 1 -w 1 192.168.178.1 >/dev/null 2>&1; echo $?


    und von:

    Code
    ping -c 1 -w 1 192.168.178.2 >/dev/null 2>&1; echo $?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • glaubst du, dass man mittels einer While Schleife dann in den loop gehen kann und wenn dann der Befehl

    Code
    ping -c 1 -w 1 192.168.178.1 >/dev/null 2>&1; echo $?

    den Wert 0 zurückgibt erst das etherwake ausgeführen lassen soll ? Ich habe nur bedenken, dass dann mein Script den Bootvorgang blockiert und der Raspberry vielleicht überhaupt nicht mehr startet ....

    Grüße Martin


  • glaubst du, dass man mittels einer While Schleife dann in den loop gehen kann ...

    Eine while Schleife wirst Du nicht brauchen. I. d. R. reicht ein Script im Verzeichnis "/etc/network/if-up.d", das nur auf das "richtige" interface/gateway prüft, damit das Script nicht öfter als einmal ausgeführt wird.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • habe es nun "riskiert" und eine while eingebaut in der Hoffnung dass es nicht meinen Bootvorgang blockiert.
    Er startet ganz normal, ist im while, geht dann aber einfach weiter ohne zu warten ....

    mein derzeitiges Script

    Ausgabe von log ist:
    Bin jetzt im start und führe etherwake aus
    Schaue ob Netzwerk schon aktiv
    Bin im wile Wert von Netzwerk = 1

    Das heißt irgendwie steigt der aus der while Schleife einfach aus, und ich weiß nicht warum...

    Verbesserung ?

    lg Martin

    Einmal editiert, zuletzt von emka81 (8. September 2014 um 15:21)

  • Von wo startest Du dein jetziges Script? Evtl. brauchst Du den Pfad für die binaries.
    BTW: Das "echo $?" war für das Terminal gedacht. Im Script kannst Du den Rückgabewert von "ping -c 1 -w 1 192.168.1.1 >/dev/null 2>&1" anders prüfen. Siehe auch die Ausgabe von "sudo sh -x <dein-Script>".

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Ich starte es im runlevel3 als S99wakup also als letztes Script.

    Ausgabe vom Skript schaut so aus ....

    wie kann ich in einem Skript den Rückgabewert prüfen wenn nicht über $? ?

    Einmal editiert, zuletzt von emka81 (8. September 2014 um 15:20)


  • Ich starte es im runlevel3 als S99wakup also als letztes Script.

    Starte mal aus runlevel3 als letztes Script, folgendes Script:

    Bash
    #!/bin/sh -e
    #
    /usr/bin/logger "$0  - , `/sbin/ip neigh show`"


    und poste nach dem Start, die Ausgabe von:

    Code
    cat /var/log/syslog | grep -i logger

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • also:

    jetzt habe ich in meinem Script am Ende von start das ausführen von deinem Script veranlasst mit folgendem Resultat:
    Ich habe dein Script loggi getauft, und es wird so ausgeführt

    Code
    pi@raspbmc:~$ cat /var/log/syslog | grep -i logger
    Sep  8 15:32:56 raspbmc logger: /etc/init.d/loggi  - , 
    Sep  8 15:32:56 raspbmc logger: /etc/init.d/loggi  - ,
  • Code
    pi@raspbmc:~$ cat /var/log/syslog | grep -i logger
    Sep  8 15:32:56 raspbmc logger: /etc/init.d/loggi  - , 
    Sep  8 15:32:56 raspbmc logger: /etc/init.d/loggi  - ,

    Wie ist jetzt im Terminal, die Ausgabe von:

    Code
    ip neigh show


    ?

    EDIT:

    Bei deinem Start aus dem runlevel3, kann "ip neigh show" noch keinen dynamischen arp-cache-Eintrag feststellen. D. h. m. E., dass der Zeitpunkt von dir, zu früh gewählt ist. Dein Pi kann am "Netzwerkleben", aus dem runlevel3 heraus, noch nicht teilnehmen. Kopiere das Script "loggi" in das Verzeichnis "/etc/network/if-up.d", mache es ausführbar und wiederhole das Ganze, inkl. Ausgaben posten.

    EDIT 2:

    Du kannst auch im Verzeichnis "/etc/network/if-up.d", einen symlink auf das ausführbare Script "/etc/init.d/loggi" erstellen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (8. September 2014 um 16:02)

  • Ausgabe Terminal:
    fe80::e96:bfff:feb8:9bf2 dev eth0 lladdr 0c:96:bf:b8:9b:f2 router STALE
    192.168.1.4 dev eth0 INCOMPLETE
    192.168.1.1 dev eth0 lladdr 0c:76:bf:d8:9c:f5 REACHABLE

    Ausgabe nachdem neustart
    Sep 8 16:04:28 raspbmc logger: /etc/init.d/loggi - ,
    Sep 8 16:04:28 raspbmc logger: /etc/init.d/loggi - ,
    Sep 8 16:04:48 raspbmc logger: /etc/network/if-up.d/loggistart - , fe80::e96:bfff:feb8:9bf2 dev eth0 lladdr 0c:96:bf:b8:9b:f2 router STALE#012192.168.1.1 dev eth0 lladdr 0c:96:bf:b8:9b:f2 REACHABLE


  • Ausgabe Terminal:
    192.168.1.1 dev eth0 lladdr 0c:76:bf:d8:9c:f5 REACHABLE

    Ausgabe nachdem neustart
    Sep 8 16:04:48 raspbmc logger: /etc/network/if-up.d/loggistart - , fe80::e96:bfff:feb8:9bf2 dev eth0 lladdr 0c:96:bf:b8:9b:f2 router STALE#012192.168.1.1 dev eth0 lladdr 0c:96:bf:b8:9b:f2 REACHABLE

    Wie man sehen kann, ist der Start aus dem Verzeichnis "if-up.d", der richtige Zeitpunkt. Der dynamische arp-cache-Eintrag für das Interface eth0 und den Router 192.168.1.1 ist vorhanden, ... anders als beim Start aus dem runlevel3.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • das heißt ich starte mein Script wakup aus dem Ordner
    /etc/network/if-up.d/

    Probiert, leider geht es aber auch nicht, ich vermute mal, dass zu diesem Zeitpunkt die Befehle noch nicht funktionieren

    Bash
    #!/bin/sh -e
            echo "Bin im script ping ausgabe=" >> /tmp/logwakup
            /bin/ping -c 1 192.168.1.1 >> /tmp/logwakup
            /usr/sbin/etherwake 54:24:a6:ed:22:57
            echo "Bin am Ende des scripts und starte noch logger" >> /tmp/logwakup
           /etc/init.d/loggi
    exit 0

    Das habe ich momentan als wakup script. aus den runlevels habe ich es komplett entfernt, und "nur" mehr als symbolischen Link im Verzeichnis /etc/network/if-up.d/

    Aber irgendwie funktioniert es trotzdem nicht ....

    LÖSUNG: (nicht sonderlich Profi mäßig aber was solls)
    ich habe jetzt ganz am Anfang noch ein sleep 5 (für 5 Sekunden warten) eingetragen und jetzt funktioniert es.

    DANKE speziell rpi444 für Deine HILFE !!!

    lg Martin

    Einmal editiert, zuletzt von emka81 (8. September 2014 um 17:23)


  • das heißt ich starte mein Script wakup aus dem Ordner
    /etc/network/if-up.d/

    Probiert, leider geht es aber auch nicht, ich vermute mal, dass zu diesem Zeitpunkt die Befehle noch nicht funktionieren

    Ich vermute, dass der Datenträger auf dem sich dein "/tmp"-Verzeichnis befindet, zum Zeitpunkt der Scriptausführung noch nicht gemountet ist oder noch nicht "erstellt" ist, und wegen dem "-e" in der 1. Zeile deines Scriptes (nach der Shebang), das Script "aussteigt". BTW: M. E. könntest Du nach einer angemessenen und ausreichenden Testzeit, wenn Du festgestellt hast, dass dein Script zuverlässig funktioniert, auf das ("übertriebene") Loggen (... mit echo, ping und logger) verzichten.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (8. September 2014 um 21:11)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!