.titleBar { margin-bottom: 5px!important; }

WOC / LCR / autom. reboot

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von Homer Simpson, 21 Nov. 2006.

  1. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo zusammen,

    weiß leider nicht mehr weiter. FBF 7050, aktuelle firmware 14.04.15, gewünschte features:

    • FTP
    • SSH
    • WOL / Etherwake
    • WOC
    • TSB-LCR
    • automatischer reboot alle 7 Tage zu bestimmter Uhrzeit

    FTP, SSH, WOL (mit putty) funktionieren prima. WOL bzw. Putty hab ich intern und extern erfolgreich getestet. Keine Probleme.

    WOC, TSB-LCR und der automatische reboot machen aber Probleme. Einmal hatte ich bisher eine Reaktion in telnet bei einem Anruf einer zugelassenen Nummer. Fehlermeldungen:
    • telefon: '/var/calllog' script not found!
    • telefon: '/var/flash/calllog' script not found!

    Beim nächsten Versuch kam keine Reaktion mehr in telnet. Der TSB-LCR scheint auch nicht geladen zu werden. Ebenso der Sleep-Job zum automatischen Reboot der FBF alle 7 Tage um 05:00. Vielleicht sind TSB-LCR und der Reboot ja Folgeprobleme von WOC.

    Hier meine debug.cfg (Benutzernamen, Passwörter, MAC-Adressen und Telefonnummern sind natürlich nicht echt):

    Code:
    #####################################################
    # Warten bis die FritzBox den Server erreichen kann #
    #####################################################
    
    while !(ping -c 1 www.tecchannel.de); do
    sleep 5
    done
    
    #####################################################
    # Installation FTP-Server, Etherwake und SSH-Server #
    #####################################################
    
    cd /var/tmp
    wget http://www.tecchannel.de/download/432803/bftpd.conf
    wget http://www.tecchannel.de/download/432803/bftpd
    
    ######################
    # ausfuehrbar machen #
    ######################
    
    chmod +x /var/tmp/bftpd
    chmod 777 /var/tmp/bftpd.conf
    
    ##################################################
    # Usernamen und den Passwort-Hash für FTP-Server #
    ##################################################
    
    echo "Name:passwort-hash:0:0:root:/:null" >> /var/tmp/passwd
    /var/tmp/bftpd -d -c /var/tmp/bftpd.conf
    
    ##########################################
    # Etherwake laden und ausfuehrbar machen #
    ##########################################
    
    wget http://www.tecchannel.de/download/432967/etherwake
    chmod +x etherwake
    
    #####################################################
    # SSH-Server dropbear laden und ausfuerhrbar machen #
    #####################################################
    
    wget http://www.tecchannel.de/download/432967/dropbear
    sleep 10
    chmod +x /var/tmp/dropbear
    
    ##################
    # Start dropbear #
    ##################
    
    ln -s /var/tmp/dropbear dropbearkey
    sleep 10
    /var/tmp/dropbearkey -t rsa -f /var/tmp/dropbear_rsa_hostkey -s 512
    cp -p /var/tmp/shadow /var/tmp/tmp_shadow
    
    #####################################
    # Hash des root-Passworts eintragen #
    #####################################
    
    sed -e "/root:/s#^root:[^:]*:#root:passwort-hash:#" /var/tmp/tmp_shadow > /var/tmp/shadow
    sleep 5
    /var/tmp/dropbear -r /var/tmp/dropbear_rsa_hostkey
    
    ###############
    # Wake on LAN #
    ###############
    
    ############################################################################################
    # Interface der Fritzbox eth0 oder eth1 und die MAC-Adresse des zu weckenden PCs eintragen #
    ############################################################################################
    
    sleep 5
    echo "/var/tmp/etherwake -i eth0 XX:XX:XX:XX:XX:XX" > /var/tmp/start_pc1
    
    ################################
    # start_pc1 ausfuehrbar machen #
    ################################
    
    sleep 15
    chmod +x /var/tmp/start_pc1
    
    #############################
    # wake-on-call config START #
    #############################
    
    # Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll mein Rechner gestartet werden
    # SIP Port Nummer: FBF Web-Interface öffnen / Telefonie / Internettelefonie
    # Beispiel: *124# ist dann z.B. SIP4
    # Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
    wolsip=SIP5
    
    # Wer darf den PC per WOL über Tel aufwecken?
    # jeder  Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
    # TelNummer, wenn es nur eine bestimmte Tel-Nummer darf
    woltel1=01xxxxxxxxx
    woltel2=02xxxxxxxxx
    woltel3=06xxxxxxxxx
    
    # $wolsip, $woltel1, $woltel2 und $woltel3 lassen sich in $localdir/wake-on-call.info kontrollieren,
    # denn manchmal wird die Nummer nicht so übermittelt 0123... sondern so +49123...
    # Bitte kontrollieren und entsprechend hier eintragen
    
    ############################
    # wake-on-call config ENDE #
    ############################
    
    
    ######################
    # wake-on-call START #
    ######################
    
    # wake-on-call.sh erstellen
    cat > /var/tmp/wake-on-call.sh << 'END'
    #!/bin/sh
    trap "" SIGCHLD
    # stdin: Ausgabe vom Telefon Daemon wird erwartet
    while read line
    do
    case ${line} in
    *IncomingCall:*)
    caller=${line#*caller: \"}
    caller=${caller%%\"*}
    called=${line#*called: \"}
    called=${called%%\"*}
    echo Angerufene Nummer = $called  > /var/tmp/wake-on-call.info
    echo Nummer des Anrufers = $caller >> /var/tmp/wake-on-call.info
    END
    echo "# Pruefen ob die angerufende Nr die WOL-SIP ist" >> /var/tmp/wake-on-call.sh
    echo "if [ "$"called = $wolsip ]; then" >> /var/tmp/wake-on-call.sh
    echo "# Prüfen ob der caller den Recher wecken darf" >> /var/tmp/wake-on-call.sh
    echo "if [ jeder = $woltel1 -o "$"caller = $woltel1 -o "$"caller = $woltel2 -o "$"caller = $woltel3 ]; then" >> /var/tmp/wake-on-call.sh
    echo "/var/tmp/start_pc1" >> /var/tmp/wake-on-call.sh
    echo "fi" >> /var/tmp/wake-on-call.sh
    echo "fi" >> /var/tmp/wake-on-call.sh
    cat >> /var/tmp/wake-on-call.sh << 'END';;
    esac
    done
    END
    sleep 5
    chmod +x /var/tmp/wake-on-call.sh
    
    #wake-on-call einbinden
    # Telefon Daemon neu starten; Ausgabe ge-piped nach wake-on-call.sh
    if [ -x /var/tmp/wake-on-call.sh ]
    then
    sleep 4
    # Telefon Daemon sicher stoppen
    killall -15 telefon
    sleep 4
    killall -9 telefon
    rm -f /var/run/telefon.pid
    sleep 4
    # Telefon Daemon starten
    telefon 1 a127.0.0.1 | /var/tmp/wake-on-call.sh &
    fi
    
    #####################
    # wake-on-call ENDE #
    #####################
    
    
    #######################
    # Telefonsparbuch LCR #
    #######################
    
    sleep 20
    /bin/update_led_on
    while !(ping -c 1 lcr.telefonsparbuch.de); do sleep 5; done;
    wget -qO /var/tmp/tsbinstaller http://lcr.telefonsparbuch.de/software/fritzbox/ xrelease_lcr_updater_installer
    sleep 10
    chmod 755 /var/tmp/tsbinstaller
    /var/tmp/tsbinstaller
    /bin/update_led_off
    /var/tmp/tsb/tsbdaemon &
    
    ############################
    # Telefonsparbuch LCR Ende #
    ############################
    
    
    ##########################################################
    # automatischer Reboot der Fritzbox alle 7 Tage um 05:00 #
    ##########################################################
    
    sleep <590000>; await() {
      local day=$((60*60*24))
      sleep $(( ($(date -d $(date +%m%d$1%Y) +%s) - $(date +%s) + $day) % $day ))
    }
    (await 0500; reboot) &
    
    #############################
    # automatischer Reboot Ende #
    #############################
    Hoffe, daß ich hier Hilfe bekomme. und sich jemand meiner debug.cfg annimmt. Spielt die Reihenfolge der einzelnen Features eine Rolle? Sollte diese vielleicht in der debug.cfg geändert werden? Sollten zusätzliche sleeps eingebaut werden? Wenn ja, wo sinnvollerweise? Sind vielleicht Befehle für die firmware-Version anders?

    Vielen Dank schonmal, Gruß

    Homer Simpson

    P.S: das Forum ist echt spitze! Juhu (OT Homer Simpson) :cool:
     
  2. u.g

    u.g Aktives Mitglied

    Registriert seit:
    27 März 2005
    Beiträge:
    1,398
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    #2 u.g, 21 Nov. 2006
    Zuletzt bearbeitet: 21 Nov. 2006
    Eine Signatur wäre hilfreich ...

    Wenn du ne akt. FW hast, dann muss der WOC-Teil geändert werden,
    das Neustarten von telefon und Anlegen von wake-on-call.sh ist dann nicht mehr nötig bzw. muss geändert werden.
    "Programme durch Anruf starten" kann man über die Datei /var/flash/calllog.

    Wenn noch nix drin, dann mit "echo > /var/flash/calllog" erst anlegen ... dann mit nvi bearbeiten

    siehe dazu z.B. auch http://www.ip-phone-forum.de/showthread.php?t=96876
    oder http://www.ip-phone-forum.de/showthread.php?t=116838
     
  3. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    WOC etwa so?

    Hallo u.g.,

    danke für die Rückmeldung und den Hinweis mit der Signatur. Hab ich nun erstellt. Könnte die Lösung für WOC etwa so aussehen?:

    Code:
    #############################
    # wake-on-call config START #
    #############################
    
    # Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll mein Rechner gestartet werden
    # SIP Port Nummer: FBF Web-Interface öffnen / Telefonie / Internettelefonie
    # Achtung: SIP-Nr. ist eins kleiner, als Auswahl
    # Beispiel: *124# ist dann z.B. SIP3
    # Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
    wolsip="SIP4"
    
    # Wer darf den PC per WOL über Tel aufwecken?
    # jeder  Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
    # TelNummer, wenn es nur eine bestimmte Tel-Nummer darf
    woltel1=016xxxxxxxx
    woltel2=02xxxxxxxxx
    woltel3=06xxxxxxxxx
    
    # $wolsip, $woltel1, $woltel2 und $woltel3 lassen sich in /var/tmp/woc.info kontrollieren,
    # denn manchmal wird die Nummer nicht so übermittelt 0123... sondern so +49123...
    # Bitte kontrollieren und entsprechend oben eintragen
    
    ############################
    # wake-on-call config ENDE #
    ############################
    
    
    ######################
    # wake-on-call START #
    ######################
    
    # calllog erstellen
    cat > /var/tmp/calllog << 'END'
    #!/bin/sh
    # Pruefen ob die angerufende Nr. die WOL-SIP ist
    if [ "$3" = "$wolsip" ]; then
    # Prüfen ob jeder den Rechner wecken darf. Wenn "jeder" dann wecken
    if [ "$woltel1" = "jeder" ]; then
    /var/tmp/start_pc1
    statuscode="OK: alle Anrufer sind zugelassen"
    else
    # Ansonsten darf es wohl nur eine bestimmte Nummer
    # Prüfen ob es eine der erlaubten Nummern ist
    if [ "$1" = "$woltel1" -o "$1" = "$woltel2" -o "$1" = "$woltel3" ]; then
    /var/tmp/start_pc1
    statuscode="OK: der Anrufer ist zugelassen"
    else
    statuscode="Fehler: der Anrufer ist nicht zugelassen"
    fi
    fi
    else
    statuscode="Info: kein WOC"
    fi
    # Ausgabe in woc.info:
    echo "Nummer des Anrufers: $1, $2, Angerufene Nummer: $3, $4, $5, $statuscode" >> /var/tmp/woc.info
    END
    # calllog fertig
    
    ##############################
    # calllog ausfuehrbar machen #
    ##############################
    
    chmod +x /var/flash/calllog
    
    #####################
    # wake-on-call ENDE #
    #####################
    Wichtig ist mir, daß es mehrere zugelassene Rufnummern gibt. Wofür stehen "$1" bis "$5"? Sind das die Zeilennummern in einem Anrufprotokoll? Wenn ja, wo finde ich dieses? Wenn es Variablen wären, kann ich nirgends die Definition dazu finden :noidea:

    Funktioniert die Ausgabe in der woc.info so?

    Danke, Gruß

    Homer Simpson
     
  4. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    Das sind die Argumente mir denen das Script aufgerufen wird, $1 das erstem $2 das zweite... $0 der name des Scriptes selbst.

    Tschö, Jojo
     
  5. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo jojo-Schmitz,

    versteh ich auf Anhieb nicht so ganz. Müssen diese Argumente dann nicht irgendwo definiert sein oder vorkommen??? In dem obigen Sript sind dann also $2, $4 und $5 für die Ausgabe in /var/tmp/woc.info überflüssig, da diese Argumente nicht verwendet werden?

    Versteh ich das richtig:
    • $3 = wolsip = SIP4 ($3 ist Platzhalter für wolsip und das wiederum für SIP4)?
    • $1 = woltel1 od. woltel2 od. woltel3 = 016xxxxxxxx od. 02xxxxxxxxx od. 06xxxxxxxxx ($1 ist Platzhalter für woltel1 od. 2 od. 3 und diese wiederum für die 3 zugelassenen Telefonnummern)?

    Ist die Ausgabe dann für die woc.info so korrekt:
    echo "Nummer des Anrufers: $1, Angerufene Nummer: $3, $statuscode" >> /var/tmp/woc.info

    Kannst ansonsten die Funktionalität des WOC-Scripts nachvollziehen? Danke für Deine Bemühungen!

    Gruß, Homer Simpson
     
  6. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    $<n> sind Variablen der Shell, daher brauchen die nicht im Script definiert werden.
    Ebenso $? (exits status des letzten Kommandos), $# (Anzahl der Argument), $! (PID des letzten Hintergrund Prozesses), $@ und $* (jeweils die gesammte Argumentenliste)

    Wenn ein Script "A" heißt und mit "./A B C D" aufgerufen wird, enthält $0 eben ./A, $1 enthält B, $2 enhält C usw. $# enthält dann 3.

    /var/flash/calllog wird von der Box, falls vorhanden, mit bis zu 5 Argumenten aufgerufen. Ausser für eine Ausgabe (per 'echo' nach woc.info) werden dort anscheinen nur $1 und $3 verwendet. Ob die Ausgabe der anderen in woc.info sinnvoll ist oder nicht, ist alleine Deine Entscheidung.

    Soweit ich das sehen kann, wird calllog nur mit max. 3 Argumenten aufgerufen, der Nummer des Anrufenden (wenn unbekannt bzw. unterdrückt, sind's nur 2 Argumente), die angerufene Nummer und die Schnittstelle (SIP0 oder POTS).

    Tschö, Jojo
     
  7. u.g

    u.g Aktives Mitglied

    Registriert seit:
    27 März 2005
    Beiträge:
    1,398
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    #7 u.g, 22 Nov. 2006
    Zuletzt bearbeitet: 22 Nov. 2006
    @ Homer:

    Leg dir einfach erstmal mit nvi /var/flash/calllog mit folgendem Inhalt an:
    echo "1=$1# 2=$2# 3=$3# 4=$4# 5=$5#" >> /var/tmp/tel.log

    Ruf dann von der gewünschten Rufnr (zb 017xxx) auf die anzurufende an (zb 030xxx) und kuck
    dir dann /var/tmp/tel.log an.

    Dann brauchste im Prinzip nur deine calllog zu ersetzen/ergänzen durch:
    Code:
    if [ "$1" = "017xxx ] && [ "$2" = "030xxx" ] ; then
      [FONT=monospace]/var/tmp/start_pc1
    fi[/FONT]

    Und den Block dann jeweils für andere zugelassene Nummern kopieren
    und anpassen (unschön, aber so viel Nummern werden es nicht sein, oder?)

    EDIT zu #3:
    Du erzeugst /var/tmp/calllog. Wozu ?
    Der evtl. angepasste Inhalt bzw. obiges muss in /var/flash/calllog.
    Deren Inhalt überlebt einen Neustart, daher brauchst du das Anlegen davon nicht jedesmal über die debug.cfg zu machen.


     
  8. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo u.g,

    dank nochmal für Deine Rückmeldung. Hab jetzt im Script den LCR und den reboot erstmal rausgeschmissen und noch ein bißchen an dem WOC-Teil weitergemacht. Den Fehler mit dem erzeugen des calllog im var-Verzeichnis habe ich auch gefunden und korrigiert. Jetzt sieht der WOC-Teil so aus:

    Code:
    #############################
    # wake-on-call config START #
    #############################
    
    # Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll mein Rechner gestartet werden
    # SIP Port Nummer: FBF Web-Interface oeffnen / Telefonie / Internettelefonie
    # Achtung: SIP-Nr. ist eins kleiner, als Auswahl
    # Beispiel: *124# ist dann z.B. SIP3
    # Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
    wolsip="SIP4"
    
    # Wer darf den PC per WOL ueber Tel aufwecken?
    # jeder  Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
    # TelNummer, wenn es nur eine bestimmte Tel-Nummer darf
    woltel1=01xxxxxxxxx
    woltel2=02xxxxxxxxx
    woltel3=06xxxxxxxxx
    
    # $wolsip, $woltel1, $woltel2 und $woltel3 lassen sich in /var/tmp/woc.info kontrollieren,
    # denn manchmal wird die Nummer nicht so uebermittelt 0123... sondern so +49123...
    # Bitte kontrollieren und entsprechend oben eintragen
    
    ############################
    # wake-on-call config ENDE #
    ############################
    
    
    ######################
    # wake-on-call START #
    ######################
    
    # calllog erstellen
    cat > /var/flash/calllog << 'END'
    #!/bin/sh
    # Pruefen ob die angerufende Nr. die WOL-SIP ist
    if [ "$3" = "$wolsip" ]; then
    # Pruefen ob jeder den Rechner wecken darf. Wenn "jeder" dann wecken
    if [ "$woltel1" = "jeder" ]; then
    /var/tmp/start_pc1
    statuscode="OK: alle Anrufer sind zugelassen"
    else
    # Ansonsten darf es wohl nur eine bestimmte Nummer
    # Pruefen ob es eine der erlaubten Nummern ist
    if [ "$1" = "$woltel1" -o "$1" = "$woltel2" -o "$1" = "$woltel3" ]; then
    /var/tmp/start_pc1
    statuscode="OK: der Anrufer ist zugelassen"
    else
    statuscode="Fehler: der Anrufer ist nicht zugelassen"
    fi
    fi
    else
    statuscode="Info: kein WOC"
    fi
    # Ausgabe in woc.info:
    echo "Datum/Uhrzeit: 'date +\"%d.%m.%y %H:%M\"', Nummer des Anrufers: $1, $2, Angerufene Nummer: $3, $4, $5, $statuscode" >> /var/tmp/woc.info
    END
    # calllog fertig
    
    ##############################
    # calllog ausfuehrbar machen #
    ##############################
    
    sleep 30
    chmod +x /var/flash/calllog
    
    #####################
    # wake-on-call ENDE #
    #####################
    Bekomme im telnet dann bei einem Anruf (mit einer zugelassenen Nummer) die angehängte Fehlermeldung. Das mit /var/calllog versteh ich nicht. Da ist nie die Rede von im Script. Warum also die Fehlermeldung? Was sagt mir die zweite Fehlermeldung? Was muss ich ändern?

    Müsste es zum Start des PC nicht besser heissen:

    cd /var/tmp
    ./start_pc1

    Ein Aufruf im telnet mit /var/tmp/start_pc1 führt zu der Fehlermeldung, daß die Datei nicht existiere. Der Weg mi "./" funktioniert aber.

    Was passiert, wenn ich am Ende des WOC-Scripts weitermachen will? Das steht momentan das Ende meiner debug. Wie kann ich sicherstellen, dass das nicht auch in den calllog geschrieben wird?

    Danke, Gruß

    Homer Simpson
     

    Anhänge:

  9. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    Die Box scheint sowohl /var/calllog als auch /var/flash/calllog aufzurufen, /var/calllog existiert aber nicht -> Fehlermeldung. Diese stört aber nicht weiter, da ja im nächsten Veruch das Script in /var/flas/callog gefunden wird. Falls es Dich dennoch stört, erzeuge Dir eine symlink /var/calllog der nach /var/flash/callog zeigt. Das allerdings nach jedem reboot...

    Die zweite Fehlermeldung verstehe ich auch nicht, ich kann keinen Fehler entdecken. Vergleiche nochmal exakt dein Script mit dem das Du heir gepostet hast. Ein paar Einrückungen zwischen den if ... else ... fi könnten die Übersichtlichkeit erhöhen...
    ein 'set -x' (bzw. #!/bin/sh -x)' schaltet den debug output ein, man sieht evtl. wo das Script langrennt und warum.

    Das 'sleep 30' scheint mir überflüssig zu sein.

    Die Fehlermeldung deutet auf Zeile 35 des Scripts calllog, Dein hier gepostetes ist aber kürzer!


    '/var/tmp/start_pc' und 'cd /var/tmp;./start_pc' bewirken exakt dasselbe. Sollte es zumindest...

    Das ist doch schon sichergestellt. Du arbeitest mit einem 'here-document'
    Code:
    cat << 'END'
    some text
    END
    
    END ist hier das EOF des here-documents.

    Tschö, Jojo
     
  10. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo jojo-schmitz,

    danke für Deine Geduld und Deine Rückmeldung.

    1. wie funktioniert das mit dem Symlink?
    2. das hier gepostete Script ist aus der debug.cfg 1:1herauskopiert; ich hab lediglich die Telefonnummern unkenntlich gemacht
    3. #!/bin/sh ergänze ich mal mit -x
    4. sleep 30: habe festgestellt, daß es häufig etwas länger dauert, bis Dateirechte gesetzt werden. Deshalb dies als Puffer.
    5. ein Aufruf der start_pc1 funktioniert wirklich nur mit cd /var/tmp; ./start_pc1 (habs mehrfach versucht)
    6. bevor ich LCR und reboot rausgeschmissen hatte, standen diese hinter dem WOC-Teil. Das END hat leider nicht das bewirkt, was Du geschrieben hast. Der LCR- und Reboot-Teil wurden auch in calllog geschrieben. Warum auch immer... Ich habe auch gedacht, daß alles bis zu dem END in den callog geschrieben wird und was danach folgt nicht mehr. Muss vielleicht irgendwo noch ein Befehl oder ein Komma/Strichpunkt gesetzt werden?
    7. ich habe auch verzweifelt nach Zeile 35 gesucht... (ich nehme mal an, daß Kommentar- und Leerzeilen nicht zum script gehören).

    Ich versuch mal, das mit dem einrücken zu machen und poste dann das Ergebnis wieder. Ich hoffe weiter auf Deine Geduld :rolleyes: :rolleyes: :rolleyes:

    Danke, Gruß

    Homer Simpson
     
  11. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    ln -s /var/flash/calllog /var/calllog
    mit 'cat'? Schau's Dir mal mit nvi an. Siehst Du ^M an den Zeilenenden?
    Glaube ich nicht, wenn chmod zurückkomt, hat es seine Arbeit erledigt und wenn nicht gibt's 'ne Fehlermeldung.
    Wie genau sieht start_pc1 aus?
    Nein. Aber bist Du sicher, dass dort im UNIX Formant (LF only) und nicht im DOS/Windows Format (CR/LF) gearbeitet wird?
    Dieses END muss ganz alleine auf einer Zeile stehen, nix davor und nix dahinter (auch kein CR, nur ein LF!)

    Ich habe das Script (mit kleinen Anpassungen) mal unter UNIX laufen gelassen: es funktioniert!

    Mit was, sprich mit welchem Editor, hast Du Dein Script erzeugt? Ich habe schwer den Verdacht, dass Du hier ein CR/LR Problem hast...

    Tschö, Jojo
     
  12. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo jojo schmitz,

    bin Dir sehr dankbar!!!

    Ich bearbeite die debug.cfg immer mit Notepad2 und speicher auch im Unix-Format (s. Anlage). So habe ich auch den WOC-Teil dort mit der Maus markiert und mit Strg + C herauskopiert und als Code hier im thread eingefügt. Mit vi kenn ich mich leider überhaupt nicht aus... Finde den Notepad2-Editor wesentlich praktischer.

    Die start_pc1 sieht folgendermassen aus und funktioniert auch mit putty (Mac-Adresse ist hier natürlich falsch):

    Code:
    ############################################################################################
    # Interface der Fritzbox eth0 oder eth1 und die MAC-Adresse des zu weckenden PCs eintragen #
    ############################################################################################
    
    sleep 5
    echo "/var/tmp/etherwake -i eth0 XX:XX:XX:XX:XX:XX" > /var/tmp/start_pc1
    
    ################################
    # start_pc1 ausfuehrbar machen #
    ################################
    
    sleep 15
    chmod +x /var/tmp/start_pc1
    Hab das Script mal leicht geändert ('-x' gesetzt, sleep 30 raus, 'ln -s /var/flash/calllog /var/calllog' gesetzt, '/var/tmp/start_pc1' durch 'cd /var/tmp; start_pc1' ersetzt) und optisch mit Leerzeichen eingerückt. Änderungen sind in roter Schrift.

    Hier das Ergebnis:

    Code:
    #############################
    # wake-on-call config START #
    #############################
    
    # Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll mein Rechner gestartet werden
    # SIP Port Nummer: FBF Web-Interface oeffnen / Telefonie / Internettelefonie
    # Achtung: SIP-Nr. ist eins kleiner, als Auswahl
    # Beispiel: *124# ist dann z.B. SIP3
    # Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
    wolsip="SIP4"
    
    # Wer darf den PC per WOL ueber Tel aufwecken?
    # jeder  Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
    # TelNummer, wenn es nur eine bestimmte Tel-Nummer darf
    woltel1=01xxxxxxxxx
    woltel2=02xxxxxxxxx
    woltel3=06xxxxxxxxx
    
    # $wolsip, $woltel1, $woltel2 und $woltel3 lassen sich in /var/tmp/woc.info kontrollieren,
    # denn manchmal wird die Nummer nicht so uebermittelt 0123... sondern so +49123...
    # Bitte kontrollieren und entsprechend oben eintragen
    
    ############################
    # wake-on-call config ENDE #
    ############################
    
    
    ######################
    # wake-on-call START #
    ######################
    
    # calllog erstellen
    cat > /var/flash/calllog << 'END'
    #!/bin/sh [COLOR="Red"]-x[/COLOR]
    # Pruefen ob die angerufende Nr. die WOL-SIP ist
    if [ "$3" = "$wolsip" ]; then
     # Pruefen ob jeder den Rechner wecken darf. Wenn "jeder" dann wecken
     if [ "$woltel1" = "jeder" ]; then
       [COLOR="Red"]cd /var/tmp; start_pc1[/COLOR]
       statuscode="OK: alle Anrufer sind zugelassen"
     else
       # Ansonsten darf es wohl nur eine bestimmte Nummer
       # Pruefen ob es eine der erlaubten Nummern ist
       if [ "$1" = "$woltel1" -o "$1" = "$woltel2" -o "$1" = "$woltel3" ]; then
         [COLOR="Red"]cd /var/tmp; start_pc1[/COLOR]
         statuscode="OK: der Anrufer ist zugelassen"
       else
         statuscode="Fehler: der Anrufer ist nicht zugelassen"
       fi
     fi
    else
    statuscode="Info: kein WOC"
    fi
    # Ausgabe in woc.info:
    echo "Datum/Uhrzeit: 'date +\"%d.%m.%y %H:%M\"', Nummer des Anrufers: $1, $2, Angerufene Nummer: $3, $4, $5, $statuscode" >> /var/tmp/woc.info
    END
    # calllog fertig
    
    ##############################
    # calllog ausfuehrbar machen #
    ##############################
    
    [COLOR="Red"]ln -s /var/flash/calllog /var/calllog[/COLOR]
    chmod +x /var/flash/calllog
    
    #####################
    # wake-on-call ENDE #
    #####################
    Gruß, Homer Simpson
     

    Anhänge:

  13. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    Du zeigst wie Deine debug.cfg aussieht, ich wollte aber wissen wie Deine start_pc1 und Deine calllog aussieht...

    Funktioniert es denn jetzt?

    Tschö, Jojo
     
  14. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo jojo schmitz,

    was meinst Du genau mit "wie die aussieht"? Hab nur den Teil aus der debug.cfg. Hab mir mal in Notepad2 die "line endings" anzeigen lassen. Nur LF zu sehen.

    Ob das funktioniert kann ich erst heute abend ausprobieren (nach 21:00). Bis dahin bin ich unterwegs.

    Gruß, Homer Simpson
     
  15. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    - die debug.cfg postest Du hier immer nur abschnitweiese , nie komplett.
    - die debug.cfg soll start_pc1 und calllog erzeugen, ob sie das richtig tut, läßt sich nur nur zeigen in dem man sich diese Dateien anguckt.

    Schonmal dran gedacht die ganze "Schmutzarbeit" von The Construct erledigen zu lassen? Evtl. auch von der Beta Version?

    Tschö, Jojo
     
  16. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    Hallo jojo schmitz,

    der Rest der debug.cfg (FTP, Etherwake/WOL, Dropbear/SSH) funktioniert ja bereits zuverlässig und ist gegenüber Post #1 unverändert (ausser dem LCR- und Reboot-Teil, die ich rausgeschmissen habe, weil ich bei WOC hängengeblieben bin; diese Sachen nehme cih mir dann vor, wenn WOC funzt.). Wo es halt jetzt gehakt hat ist die WOC-Geschichte. Deshalb habe ich auch immer nur diesen Teil in den nachfolgenden Posts gezeigt.

    Im Prinzip ist das mit "The construct" ja gut und schön. Ich möchte aber "verstehen" was passiert und probier halt gerne selbst aus, wie es geht. Ich gehe dabei immer Schritt für Schritt vor, d.h. ich mache erst weiter, wenn ich einen Punkt als funktionierend abhaken kann. Aber vielleicht mach ich das ja mal und vergleiche es mit dem, was ich bisher so fabriziert habe.

    Gruß, Homer Simpson
     
  17. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    Ich nehme immer gerne etwas existierendes und versuche das zu verstehen und zu verändern, daher wäre hier meine Vorgehensweise mit The Constuct anzufangen.

    Tschö, Jojo
     
  18. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    @ jojo-schmitz

    Hallo jojo-schmitz,

    habe gestern Abend einige Teilerfolge erzielt. In der Tat hattest Du mit Deiner Vermutung recht, daß sich irgendwo noch ein paar CR tummeln. Zwar nicht im WOC-Teil, aber am Anfang der debug.cfg. Die habe ich nun rausgeschmissen und es läuft besser. Auch geht jetzt /var/tmp/start_pc1. Der Umweg mit "./" ist nicht mehr notwendig.

    Die woc.info wird nun auch gefüllt (s. Anlage). Allerdings bleibt das Script an der Stelle "# telefon: SIGCHLD received!" stehen und der Cursor blinkt in der nächsten Zeile. Liegt das an dem "#!/bin/sh -x"? Vielleicht bin ich auch etwas zu ungeduldig, aber 2 Minuten sollten doch reichen... Ich denke, ich bin kurz vorm Ziel...

    Die Einträge in der woc.info sind richtig, aber es passiert nichts. Der Rechner bleibt aus. In der woc.info steht auch: kein WOC. Welche Dinge müssen in Anfürhrungszeichen in den WOC-Teil? Der begriff "SIP4" und die zugelassenen Rufnummern? In der woc.info würde ich gerne noch den Wochentag in der Form Mo. bis So. sowie Datum und Uhrzeit in der Form dd.mm.yyyy, hh:mm ausgeben.

    Bsp.

    Datum/Uhrzeit: Fr., 24.11.2006 07:00,

    Kannst Du mir auf die Sprünge helfen?

    Hier die komplette debug.cfg (ohne Benutzername, Passwort, Mac-Adresse und Telefonnummern):

    Code:
    #####################################################
    # Warten bis die FritzBox den Server erreichen kann #
    #####################################################
    
    while !(ping -c 1 www.tecchannel.de); do
    sleep 5
    done
    
    #####################################################
    # Installation FTP-Server, Etherwake und SSH-Server #
    #####################################################
    
    cd /var/tmp
    wget http://www.tecchannel.de/download/432803/bftpd.conf
    wget http://www.tecchannel.de/download/432803/bftpd
    
    ######################
    # ausfuehrbar machen #
    ######################
    
    chmod +x /var/tmp/bftpd
    chmod 777 /var/tmp/bftpd.conf
    
    ##################################################
    # Usernamen und den Passwort-Hash fuer FTP-Server #
    ##################################################
    
    echo "benutzer:passwort-hash:0:0:root:/:null" >> /var/tmp/passwd
    /var/tmp/bftpd -d -c /var/tmp/bftpd.conf
    
    ##########################################
    # Etherwake laden und ausfuehrbar machen #
    ##########################################
    
    wget http://www.tecchannel.de/download/432967/etherwake
    chmod +x etherwake
    
    #####################################################
    # SSH-Server dropbear laden und ausfuerhrbar machen #
    #####################################################
    
    wget http://www.tecchannel.de/download/432967/dropbear
    sleep 10
    chmod +x /var/tmp/dropbear
    
    ##################
    # Start dropbear #
    ##################
    
    ln -s /var/tmp/dropbear dropbearkey
    sleep 10
    /var/tmp/dropbearkey -t rsa -f /var/tmp/dropbear_rsa_hostkey -s 512
    cp -p /var/tmp/shadow /var/tmp/tmp_shadow
    
    #####################################
    # Hash des root-Passworts eintragen #
    #####################################
    
    sed -e "/root:/s#^root:[^:]*:#root:passwort-hash:#" /var/tmp/tmp_shadow > /var/tmp/shadow
    sleep 5
    /var/tmp/dropbear -r /var/tmp/dropbear_rsa_hostkey
    
    ###############
    # Wake on LAN #
    ###############
    
    ############################################################################################
    # Interface der Fritzbox eth0 oder eth1 und die MAC-Adresse des zu weckenden PCs eintragen #
    ############################################################################################
    
    sleep 5
    echo "/var/tmp/etherwake -i eth0 xx:xx:xx:xx:xx:xx" > /var/tmp/start_pc1
    
    ################################
    # start_pc1 ausfuehrbar machen #
    ################################
    
    sleep 15
    chmod +x /var/tmp/start_pc1
    
    
    #############################
    # wake-on-call config START #
    #############################
    
    # Wenn ein Anruf auf diesem SIP Port erfolgt, dann soll mein Rechner gestartet werden
    # SIP Port Nummer: FBF Web-Interface oeffnen / Telefonie / Internettelefonie
    # Achtung: SIP-Nr. ist eins kleiner, als Auswahl
    # Beispiel: *124# ist dann z.B. SIP3
    # Wenn Wake-On-Call deaktivert werden soll, dann irgendwas eintragen
    wolsip="SIP4"
    
    # Wer darf den PC per WOL ueber Tel aufwecken?
    # jeder  Jeder der die Nummer $wolsip anruft, darf den Rechner aufwecken
    # TelNummer, wenn es nur eine bestimmte Tel-Nummer darf
    woltel1="01xxxx"
    woltel2="02xxxx"
    woltel3="06xxxx"
    
    # $wolsip, $woltel1, $woltel2 und $woltel3 lassen sich in /var/tmp/woc.info kontrollieren,
    # denn manchmal wird die Nummer nicht so uebermittelt 0123... sondern so +49123...
    # Bitte kontrollieren und entsprechend oben eintragen
    
    ############################
    # wake-on-call config ENDE #
    ############################
    
    
    ######################
    # wake-on-call START #
    ######################
    
    # calllog erstellen
    cat > /var/flash/calllog << 'END'
    #!/bin/sh -x
    # Pruefen ob die angerufende Nr. die WOL-SIP ist
    if [ "$3" = "$wolsip" ]; then
     # Pruefen ob jeder den Rechner wecken darf. Wenn "jeder" dann wecken
     if [ "$woltel1" = "jeder" ]; then
       /var/tmp/start_pc1
       statuscode="OK: alle Anrufer sind zugelassen"
     else
       # Ansonsten darf es wohl nur eine bestimmte Nummer
       # Pruefen ob es eine der erlaubten Nummern ist
       if [ "$1" = "$woltel1" -o "$1" = "$woltel2" -o "$1" = "$woltel3" ]; then
         /var/tmp/start_pc1
         statuscode="OK: der Anrufer ist zugelassen"
       else
         statuscode="Fehler: der Anrufer ist nicht zugelassen"
       fi
     fi
    else
    statuscode="Info: kein WOC"
    fi
    # Ausgabe in woc.info:
    echo "Nummer des Anrufers: $1, Angerufene Nummer: $2, $3, $statuscode" >> /var/tmp/woc.info
    END
    # calllog fertig
    
    ##############################
    # calllog ausfuehrbar machen #
    ##############################
    
    ln -s /var/flash/calllog /var/calllog
    chmod +x /var/flash/calllog
    
    #####################
    # wake-on-call ENDE #
    #####################
    Danke, Gruß

    Homer Simpson
     

    Anhänge:

  19. jojo-schmitz

    jojo-schmitz Aktives Mitglied

    Registriert seit:
    6 Mai 2006
    Beiträge:
    2,471
    Zustimmungen:
    3
    Punkte für Erfolge:
    38
    Beruf:
    Informatiker
    Ort:
    Düsseldorf
    #19 jojo-schmitz, 24 Nov. 2006
    Zuletzt bearbeitet: 24 Nov. 2006
    Das calllog Script läuft offensichtlich immer durch den äußersten else Zweig, d.h. die erste if Bedingung triff nie zu.
    Hmm, nur wo bleibt der debug output von calllog? ... Scheint daran zu liegen wie die Box das Script aufruft, füge in der 2. Zeile (von calllog) mal folgendes ein:
    Code:
    exec 2>/var/tmp/calllog.err"
    
    Dann sieh Dir das Ergebnis an.
    Ausserdem würde ich immer noch gerne mal Dein calllog sehen...

    Das mit dem '# telefon: SIGCHLD received!" ist völlig normal, drücke mal RETURN und du bekommest einen frischen Prompt.

    Wg. Datum und Uhrzeit:
    Code:
    echo "Datum/Uhrzeit: '$(date +"%a, %d.%m.%Y %H:%M")', Nummer des Anrufers: $1, Angerufene Nummer: $2, $3, $statuscode" >> /var/tmp/woc.info
    
    Tschö, Jojo
     
  20. Homer Simpson

    Homer Simpson Neuer User

    Registriert seit:
    10 Feb. 2006
    Beiträge:
    141
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Beruf:
    Betriebswirt
    Ort:
    Südhessen
    #20 Homer Simpson, 24 Nov. 2006
    Zuletzt bearbeitet: 24 Nov. 2006
    Hallo jojo-schmitz,

    werde das mit dem jeder mal rausschmeissen oder muss es vielleicht "elif" statt "else" heissen? Hab ich auch schon irgendwo gesehen. "jeder" trifft ja eh nicht zu, weil ich das auch nicht möchte. Den exec-Befehl werde ich auch mal reintun. Datum und Uhrzeit, danke! Habs gestern nicht hinbekommen. Kann aber erst wieder heute abend testen. Ich denke aber, daß ich dank Deiner geduldigen Hilfe knapp vorm Ziel bin :noidea:

    Ich weiss leider immer noch nicht, was du damit meinst, daß Du den calllog sehen willst. Meinst Du damit den reinen Inhalt via "cat /var/flash/calllog" oder das Ergebnis, welches calllog nach einer Ausführung ausgibt? Der Inhalt steht so schon in der debug.cfg?!? Wie rufe ich ggf. das Ergebnis dazu auf?

    Danke, Gruß

    Homer Simpson