pi Booten verzögern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich benutze einen pi an einem UMTS-Modem zur Fernwartung einer Solaranlage.
    Modem und pi bekommen zur gleichen Zeit Einschaltspannung.
    Wenn der pi fertig gebootet hat, aber das Modem noch keine UMTS-Verbindung hat(was manchmal
    vorkommt), kann der pi keinen VPN-Tunnel aufbauen.

    Meine Idee wäre den Bootvorgang um ein paar Minuten zu Verzögern, habe aber
    noch keine wirkliche Lösung gefunden.

    Einmal editiert, zuletzt von radioshack (12. August 2013 um 19:54)

  • Hallo radioshack,

    mit welcher Software wird denn der Tunnel aufgebaut?
    Bei OpenVPN kannst du das ganze als Daemon starten. Dann baut OpenVPN den Tunnel auf und versucht es erneut falls die Verbindung nicht zustande kommt bzw. abgebrochen wird.

    Andernfalls kannst du dir ja ein kleines Skript schreiben welches überprüft ob der Tunnel aufgebaut ist und wenn nicht einfach den Tunnel aufbaut. Das ganze dann als Cronjob eintragen und alle 5 Minuten die Verbindung überprüfen.

    Gruß Georg

  • guten morgen,

    auf den Raspberry habe ich pptp installiert (Client).
    Der Client muss aus dem UMTS-Netz nach draußen die Verbindung aufnehmen
    (zurück ist so grundsätzlich nicht möglich, auch eine Kostenfrage).

    An OpenVPN habe ich auch schon gedacht, aber der VPN-Server wird auch noch von anderen
    Usern genutzt mit unterschiedlichen devives, da scheue ich die gesamte Umstellung.

    Andernfalls kannst du dir ja ein kleines Skript schreiben welches überprüft ob der Tunnel aufgebaut ist ... hört sich prima an, ist für mich aber bei meinem Kenntnisstand nicht so einfach umzusetzen.

    Ich werde mir wohl noch einen 2ten pi zulegen um hier Trockenübungen gefahrlos zu machen.
    Bei dem anderen muss ich 50km auf einen Acker fahren...und ich habe Angst ihn aus dem produktiven System zu nehmen und evtl. hinzurichten :(. War mühsam genug ihn soweit zu bringen.

    Meine Idee ist immer noch, ihn beim booten 5 Min. anzuhalten

    danke für die Unterstützung

    Michael

  • Moin radioshack,

    vielleicht "brutal" aber evtl. wirkungsvoll:

    in die /etc/rc.local einfach mal einen sleep(60) einbauen.
    Damit sollte der Bootvorgang ca. 1 Minute "angehalten" werden.
    Wenn das so weit funktioniert, den Wert entsprechend erhöhen.

    Wenn nicht, ... tja, emergency-boot und Eintrag wieder rausnehmen.
    Sollte aber gehen ...

    ciao,
    -ds-

  • Hallo zusammen,

    Zitat von radioshack

    hört sich prima an, ist für mich aber bei meinem Kenntnisstand nicht so einfach umzusetzen.

    Wenn du willst, können wir uns das ja gemeinsam ansehen. Du kannst ja jetzt auch schon auslesen ob der UMTS-Stick bereit ist oder wie bist du darauf gekommen? Wenn du das über einen Befehl ausliest, kannst du die Ausgabe auch parsen und dann eine Entscheidung treffen ob der Tunnel aufgebaut werden soll oder ob das ganze noch 5 Minuten warten soll.

    Zitat von radioshack

    Ich werde mir wohl noch einen 2ten pi zulegen um hier Trockenübungen gefahrlos zu machen.

    Das ist eine gute Entscheidung ;)

    Zitat von dreamshader

    in die /etc/rc.local einfach mal einen sleep(60) einbauen.
    Damit sollte der Bootvorgang ca. 1 Minute "angehalten" werden.

    Was wird denn da genau angehalten? Wenn der Prozess zum Starten der VPN-Verbindung nicht auf das Ende vom Sleep-Befehl wartet, hast du parallel einen Sleep eingebaut der nicht wirklich was bringt. Wenn dann müsste der Sleep an den Anfang des Init-Skriptes mit welchem der VPN-Tunnel aufgebaut wird. Dazu fehlen aber noch Informationen.

    Gruß Georg


  • Hallo zusammen,
    ...
    Was wird denn da genau angehalten? Wenn der Prozess zum Starten der VPN-Verbindung nicht auf das Ende vom Sleep-Befehl wartet, hast du parallel einen Sleep eingebaut der nicht wirklich was bringt. Wenn dann müsste der Sleep an den Anfang des Init-Skriptes mit welchem der VPN-Tunnel aufgebaut wird. Dazu fehlen aber noch Informationen.

    Gruß Georg

    Moin Schorsch :) ...

    Du hast sicher recht, weil ich nicht weiss, wann der Tunnel aufgebaut wird.
    Und wie Du schon sagtest, gehört der sleep in die Startroutine des Tunnels.

    War nur mal so eine ad hoc Idee als Schnell-Lösung...

    Schönen Tag noch,
    -ds-

  • Hallo dreamshader,

    Zitat

    War nur mal so eine ad hoc Idee als Schnell-Lösung...

    Das ist mir schon klar, allerdings kannst du so einen Neuling in der Materie schnell auf das Glatteis führen. Der probiert es aus, sucht sich erstmal dämlich weil es nicht funktioniert und kommt anschließend wieder hier her. Eventuell fallen dann noch andere auf das herein und das Chaos ist komplett ;)

    So, wieder zurück zum Thema.

    Gruß Georg

  • Moin,

    also wie gesagt: meine Spontan-Einfälle sind zwar meist brauchbar, aber eben spontan ... also Vorsicht.

    Mit deiner Vermutung liegst Du imho richtig.
    Ich würde das sogar vor das vpn="on" einfügen.
    Vielleicht ein echo "Wait xx Minutes before starting VPN" noch und anschliessend den sleep.

    cu,
    -ds-

  • Ich weiss nicht genau ob das wie gewünscht funktionieren würde:
    Vielleicht kann man das starten von OpenVPN verzögern indem man die Runlevel Start-Script's verändert :huh:
    Denn soweit ich das sehe wird OpenVPN vor dem Ausführen der rc.local ausgeführt..

    Der Header vom /etc/init.d/openvpn Script sieht so aus:

    Dh. das Script wird beim Runlevel 2 , 3 , 4 und 5 gestartet und beim Runlevel 0 , 1 und 6 gestoppt

    Zu welchem Zeitpunkt wird demnach also über Links in:

    /etc/rc2.d/
    /etc/rc3.d/
    /etc/rc4.d/
    /etc/rc5.d/

    geregelt, und zwar mit S03openvpn
    Kann man mit folgendem Befehl prüfen:

    Code
    ls /etc/rc?.d/*openvpn


    Die Ausgabe wäre dann:

    Code
    root@raspberrypi ~ > ls /etc/rc?.d/*openvpn
    /etc/rc0.d/K01openvpn  /etc/rc2.d/S03openvpn  /etc/rc4.d/S03openvpn  /etc/rc6.d/K01openvpn
    /etc/rc1.d/K01openvpn  /etc/rc3.d/S03openvpn  /etc/rc5.d/S03openvpn
    root@raspberrypi ~ >


    " S " bedeutet Start und " K " bedeutet Kill (also Stop)

    Um jetzt dafür zu sorgen das openvpn möglichst spät ausgeführt wird, könnte man die S03 in S99 umbenennen:

    Code
    for i in $(ls /etc/rc?.d/S??openvpn) ; do mv -f $i $(dirname $i)/S99openvpn; done


    Ergebnis:

    Code
    root@raspberrypi ~ > ls /etc/rc?.d/S??openvpn 
    /etc/rc2.d/S99openvpn  /etc/rc3.d/S99openvpn  /etc/rc4.d/S99openvpn  /etc/rc5.d/S99openvpn
    root@raspberrypi ~ >
  • Moin meigrafd,

    jein ...
    Natürlich hast Du recht, dass openvpn bereits vorher gestartet wird.
    Da hast Du Dir auch eine Menge Arbeit gemacht, das zu dokumentieren.

    Das Problem ist imho nicht openvpn prinzipiell, sondern der Tunnel über das UMTS-Modem.
    Und der wird, wenn ich das richtig interpretiere, erst in der rc.local aufgebaut.
    Dadurch müsste eine Verzögerung vor dem Aufbau des Tunnels ausreichen ...

    Aber sauber recherchiert, Hut ab :thumbs1: ...

    cu,
    -ds-

  • Achso oke - also würde das Problem gelöst werden wenn man openvpn aus dem Runlevel Startup herraus nehmen würde und nachdem die UMTS Verbindung aufgebaut wurde über die /etc/rc.local manuell ausführt ? :s

    Also dann in etwa so:

    openvpn aus dem Runlevel-Startup entfernen:

    Code
    update-rc.d -f openvpn remove



    /etc/rc.local
    anpassen:


  • Achso oke - also würde das Problem gelöst werden wenn man openvpn aus dem Runlevel Startup herraus nehmen würde und nachdem die UMTS Verbindung aufgebaut wurde über die /etc/rc.local manuell ausführt ? :s


    Hi,

    neee ... ;)

    Es reicht imho tatsächlich, den sleep dort einzubauen, wo der TE es schon vermutete.

    openvpn ist gestartet und alles läuft (wie auch Netzwerk, ...).
    Bevor der Tunnel aufgebaut wird (der erfordert ja das UMTS-Modem, das vielleicht noch eine Weile braucht) wartet er erstmal ein paar Minuten und lässt den script (rc.local) dann weiterlaufen.

    Keine grossen Umbauarbeiten, (hoffentlich ;)) keine Seiteneffekte ...

    Kannst Du ja mal spasshalber ausprobieren: einfach einen sleep(10) in Deine /etc/rc.local zum Ende hin, echo "Ich warte jetzt 10 Sek" davor und dann neu starten.

    cu,
    -ds-

  • Ähh, baut der UMTS Stick nicht eine PPP Verbindung über ein ppp0 Interface auf ?
    Dann einfach das VPN über das UP-Script der ppp0 starten ?

    Oder liege ich da jetzt total falsch ?

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Ja, aber warum sinnlos warten wenn ich die Vorraussetzungen die ich brauche definiert abfragen und darauf reagieren kann ?

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • ...
    Andernfalls kannst du dir ja ein kleines Skript schreiben welches überprüft ob der Tunnel aufgebaut ist ... hört sich prima an, ist für mich aber bei meinem Kenntnisstand nicht so einfach umzusetzen.
    ...
    Meine Idee ist immer noch, ihn beim booten 5 Min. anzuhalten
    ...


    ...
    das gefällt mir (sieht einfach aus :) )
    ...

    Deswegen?

    cu,
    -ds-

  • ...ja, deswegen

    war genau der richtige Tip. Es geht.

    Ich starte ja den Tunnel (pon) aus der rc.local (wird am Ende des Bootvorgangs ausgeführt).

    der erste Eintrag ist jetzt sleep 60

    die Zeit reicht aus, bis das UMTS-Modem eingewählt hat (braucht manchmal
    mehrere Versuche)

    Viele Grüße, war eine große Hilfe


    PS ich mache das ja "nebenberuflich" und mir ist schon klar, dass es elegantere
    und auch zielgerichtetere Lösungen gibt. Die Idee von boandlkramer mit dem Auslesen des Status
    um dann erst zu verbinden gefällt mir...evtl. komme ich ein andermal drauf zurück (Zeitproblem).
    Freue mich dann schon auf die Unterstützung.

Jetzt mitmachen!

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