Oft gefragt, nie gelöst: Telefonbuch FBF

... findet man mittels "mount" heraus, wo er gemountet ist:
Code:
# mount
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw)
ramfs on /var type ramfs (rw)
/dev/mtdblock5 on /data type jffs2 (rw)
usbfs on /proc/bus/usb type usbfs (rw)
sysfs on /var/sysfs type sysfs (rw)
/dev/sda1 on /var/media/ftp/USBMassStorageDevice-Partition-0-1 type vfat (rw,uid=1000,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
Im oben gezeigten Fall kann man die Dateien nach "/var/media/ftp/USBMassStorageDevice-Partition-0-1" kopieren. Dann sind sie auf dem USB Stick und auch vom PC aus zu erreichen. Umgekehrt geht natürlich auch.

//EDIT: Immer dran denken: Es sind Character Devices, also mit cat arbeiten, nicht mit cp!
 
Danke, das werde ich dann mal versuchen. Gute Erläuterung !


EDIT:

Irgendwie klappt das nicht, aber ich melde mich nochmal, wenn ich mehr Ruhe zum Testen hab.
 
Zuletzt bearbeitet von einem Moderator:
z.B. so:

- per Telnet auf die Box einloggen und dann (am Beispiel der debug.cfg):
Code:
cd /var/tmp
cat /var/flash/debug.cfg > debug.cfg
Damit hast du die Datei in /var/tmp

Dann mit der entsprechenden Funktion des verwendeten FTP-Programmes auf den PC bringen, bearbeiten (NICHT! mit einem Windows-Editor) und mit dem FTP-Programm zurückspielen.

Nun noch ein
Code:
cat /var/tmp/debug.cfg > /var/flash/debug.cfg
um das wieder zurückzuschreiben.

Joe
 
Zuletzt bearbeitet:
... also nach dem kleine Exkurs "wie kopiere ich von F nach L" :)

Nach dem Ändern in /var/flash/phonebook und einem reboot sehe ich die Änderung auch in der Webanwendung.

Das mit dem reboot ist jedoch äußerst suboptimal. Das sieht so aus als ob es nur einem Prozeß auf der FritzBox gibt der dieses File benutzt. Dem ist dann egal ob jemand anders dran dreht: der liest das File, beantwortet Anfragen vom Callmonitor und der Webanwendung und schreibt "selbstherrlich" wann immer er will wieder zurück.

Jetzt das interessante: Da nach einem reboot die Änderungen da sind, müsste man a) diesem Prozeß mitteilen können über ein kill -SIGNAL (SIGHUP / SIGUSR1 z.B.) /var/flash/phonebook zu "flashen" oder b) man muss diesen Prozess wie beim runterfahren mit dem kill -SIGTERM stoppen und dann neu starten können.

Die Frage ist nur: welcher Prozess verwaltet das Telefonbuch?

Thomas
 
T_H schrieb:
Die Frage ist nur: welcher Prozess verwaltet das Telefonbuch?
Das wäre interessant. Ich hab jetzt mal ein paar Sachen im Schnelldurchlauf durch von ctlmgr bis telefon. Hab auch mal paar SIGHUPs gesendet ohne Erfolg. Rumstochern bringt da nicht viel. Man müsste den Reboot auseinandernehmen (strace), bzw. es ist irgendwo in der rc.S.

Ein 'reboot' fänd ich auch suboptimal.
 
Hallo Thomas,

wenn du in diesem Thread genau aufgepasst hast, müsstest du ja schon wissen, dass die Datei phonebook wohl von mehreren Prozessen ausgelesen wird (frank_m24 hat das ja schon gut beschrieben).

Wir warten also alle gespannt darauf, welche Lösung du für dein Problem mit der automatischen Aktualisierung mittels LDAP findest. :D

Joe
 
Also es muss da eine Lösung geben. Der LCR zum Beispiel schreibt ja auch neue Wahlregeln nach /var/flash/... (ich rate mal fx*) und erfordert keinen reboot.

Vieleicht verrät uns ja "TelefonSparbuch" den Mechanismus.

Sonst wird es schwer. Dann muss der Kernel Debugger kdb ran, dazu habe ich allerdings als Einsteiger keine grosse Lust da gleich ans "Eingemachte" zu gehen (habe zwar 15 Jahre Unix Erfahrung, das steigert die Lust aber auch nicht gerade) ;-)

Thomas
 
Ich denke das geht über das Webinterface direkt (mit dem webcm Binary auf der Box), bin mir aber nicht sicher, da ich kein LCR habe. Das wäre natürlich auch eine Möglichkeit, jedoch fände ich das etwas aufwändiger als einfach ein XML zurückzukopieren.

Vielleicht kann man auch anstelle des Character-Devices beim Boot (/etc/init.d/rc.S) einfach einen Link auf USB hinterlegen. Das wäre ja auch ganz schick.
 
Ich denke da, daß das Thema etwas komplexer ist:

Wenn der Webserver einfach direkt /var/flash/phonebook lesen und schreiben würde, währe ja eine Änderung in dieser Datei sofort sichtbar.

Also wird irgendwo "gepuffert"

Das ein Webserver (und insbesondere so ein kleiner ;) ) selbst puffert ist extrem unwahrscheinlich - ok, man hat schon Pferde k*** gesehen :rolleyes:

Es handelt sich ja um ein character special devices, da wird normalerweise der (konkurrente) Zugriff über Semaphore gesteuert und nicht direkt geschrieben. Ich vermute also stark das da ein Prozess dazwischen hängt.

Schön währe es ein executable von "truss" zu haben, da könnte man dann direkt sehen was passiert wenn man einen Eintrag im Telefonbuch über das Webinterface bearbeitet.

Ich denke ich werde da mal 'ne Nacht drüber schlafen müssen :)

Thomas
 
Meine Idee ging hingegen eher dahin, das Telefonbuch bei einem Reboot schon zur Verfügung zu haben, anstelle einen Reboot zu provozieren, damit das Telefonbuch aktuell ist. Die Änderungen zur Laufzeit lasse ich erstmal Außen vor.
 
Vieleicht hilft es etwas zu erklären was ich eigentlich erreichen möchte:

Ich habe einen LDAP Server mit einem (recht grossen) Telefonbuch. Dieser Server wird extern gehosted, ist aber mit der FBF über VPN verbunden. Nun kann ich alle meine Anwendungen (Outlook, Thunderbird) direkt und auch alle Mobiltelefone (indirekt über Outlook) mit diesem einem Telefonbuch synchronisieren. Wenn ich also eine neue Telefonnummer habe, trage ich sie nur im zentralen LDAP-Server ein und diese wird dann überallhin synchronisiert.

Das wollte ich eigentlich auch für die FritzBox einrichten. Ein cron-Job der einmal pro Stunde die aktuelle Adressendatei (hier nur Telefonnummern) holt. Damit sehe ich dann sofort über dem Callmonitor zentral neu eingetragene Nummern (Reverse-Lookup hilft hier nicht: 95% der Nummern sind entweder Nebenstellen oder Mobilnummern).

Deshalb ist es erforderlich dieses FBF Telefonbuch kontinuierlich mit externen Daten zu überschreiben und gleichzeitig sicherzustellen das der interne Callmonitor die Daten auch sieht. Für die "ferne" Zukunft könnte man dann theoretisch auch die ISDN Telefone später über Bluetooth updaten :)

vieleicht hat ja jemand anders eine Idee ;-) wie die /var/flash/phonebook "gesynct" werden kann.

beste Grüße

Thomas
 
Dann wird es ja erstmal für deine Verhältnisse reichen, mit dem Reboot (z.B. alle 24h). Es wären zwar nicht die aktuellsten Daten, aber ein Anfang. Das Zusammenspiel mit LDAP würde ich aber erstmal testen...
 
Die Wahlregeln/LCR werden aktualisiert, bzw. vom Telefonmodul neu eingelesen mit:
killall -SIGUSR1 telefon

Es gibt zwar einige Prozesse, die auch auf SIGUSR1 "reagieren", aber wohl keinen der das Telefonbuch neu einliest.

Wenn der ctlmgr beendet und neu gestartet wird, dann ist auch das Telefonbuch erneuert oder auf dem alten Stand vor der Änderung (wie man es beeinflussen kann, dass immer der Stand von /var/flash/phonebook erhalten bleibt...?):
# ctlmgr -s
# ctlmgr

Grüße
Harald
 
Zuletzt bearbeitet:
Harald, vielen Dank!

Ich habs ausprobiert und es funktioniert. Fürs erste reicht mir das. Allerdings ist es natürlich etwas unbefriedigend beim Ändern von "Anwenderdaten" jedesmal Systemprozesse neu zu starten :silly:

Es muss da zumindestens irgendwo tief unten eine C-Library geben die mit dem entsprechenden Kernel-Treiber spricht. Aber realistisch gesehen wird uns das AVM wohl nie als Doku rüberschieben.

Beste Grüße

Thomas
 
Um das Thema nochmal zu pushen, hier eine Q'n'D Lösung das Telefonbuch ohne reboot, per Konsole zu bearbeiten:

avm_pb.sh:
Code:
#!/bin/sh

PASSW="$1"
ENTRY="$2"
NAME="$3"
NUMBER1="$4"
NUMBER2="$5"
NUMBER3="$6"

export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"
POST_DATA="login:command/password=$PASSW"
export CONTENT_LENGTH=${#POST_DATA}
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=fonbuch2&var:PhonebookEntryNew=Entry$ENTRY"
cd /usr/www/html/cgi-bin
./webcm > /dev/null

if [ "$NUMBER1" != "" ]; then 
	POST_NO1="telcfg:settings/Phonebook/Entry$ENTRY/Number0/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number0/Number=$NUMBER1&telcfg:settings/Phonebook/Entry$ENTRY/Number0/Type=home"; 
else
	POST_NO1="telcfg:settings/Phonebook/Entry$ENTRY/Number0/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number0/Number=&telcfg:settings/Phonebook/Entry$ENTRY/Number0/Type="; 
fi

if [ "$NUMBER2" != "" ]; then 
	POST_NO2="telcfg:settings/Phonebook/Entry$ENTRY/Number1/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number1/Number=$NUMBER2&telcfg:settings/Phonebook/Entry$ENTRY/Number1/Type=mobile"; 
else
	POST_NO2="telcfg:settings/Phonebook/Entry$ENTRY/Number1/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number1/Number=&telcfg:settings/Phonebook/Entry$ENTRY/Number1/Type="; 
fi

if [ "$NUMBER3" != "" ]; then 
	POST_NO3="telcfg:settings/Phonebook/Entry$ENTRY/Number2/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number2/Number=$NUMBER3&telcfg:settings/Phonebook/Entry$ENTRY/Number2/Type=work"; 
else
	POST_NO3="telcfg:settings/Phonebook/Entry$ENTRY/Number2/Code=&telcfg:settings/Phonebook/Entry$ENTRY/Number2/Number=&telcfg:settings/Phonebook/Entry$ENTRY/Number2/Type="; 
fi

POST_DATA="telcfg:settings/Phonebook/Entry$ENTRY/Name=$NAME&telcfg:settings/Phonebook/Entry$ENTRY/DefaultNumber=0&$POST_NO1&$POST_NO2&$POST_NO3"
export CONTENT_LENGTH=${#POST_DATA}

export REQUEST_METHOD="POST"
export REMOTE_ADDR="127.0.0.1"
echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

Code:
# usage:
./avm_pb.sh "<webif-passwd>" "<id 0-xx?>" "<name>" "<nummer1>" "<nummer2>" "<nummer3>"

# z.B. 1. Eintrag bearbeiten / neu anlegen:
./avm_pb.sh "passwort" "0" "Ein Name" "12345"

Löschen geht nicht. Vielleicht bekommt das ja noch jemand hin.

Have phun'
 
Zuletzt bearbeitet:
Der Neueintrag löscht auch einen vorhandenen...

Hi Bodega, coole Idee - wollte das in mein calllog einbauen, bin aber schon bei den Tests gescheitert:

Neueintrag funktioniert leider nur einmal, danach bringt meine Firmware-Version 29.04.56-10575:

Code:
Apr 12 14:16:32 webcm[1298]: Got group error |Kurzwahl schon vergeben!|

weil dem Neueintrag immer die gleiche Kurzwahl **701 zugewiesen wird. Gleicher Fehler kommt, wenn die **701 schon irgendwo vorhanden ist.

Schlimmer ist aber, dass der Neueintrag immer auch einen vorhandenen Eintrag löscht :confused:

Ich kann also vor Tests noch eine Sicherung mit:
Code:
 cat /var/flash/phonebook > /var/tmp/phonebook
empfehlen. Restore geht dann mit:
Code:
cat /var/tmp/phonebook > /var/flash/phonebook
 reboot
 
Zuletzt bearbeitet:
Hab es korrigiert. Hatte das Code= wohl falsch interpretiert. Bei mir reichte auch bisher immer der Erste Eintrag für die Display-Anzeige.

Ein vorheriger Eintrag wird aber nicht gelöscht???
 
Neuer Eintrag ersetzt den ersten Eintrag.

Gut, der neue Eintrag bekommt nun keine Kurzwahl mehr, aber noch das Kreuz "wichtig"... vielleicht hängt es ja damit zusammen:

Denn nach den folgenden beiden Aufrufen:
Code:
./avm_pb.sh "xxx" "0" "ZZZ Neuer Name 1" "1111"
./avm_pb.sh "xxx" "0" "ZZZ Neuer Name 2" "2222"
bleibt nur der letzte Eintrag "ZZZ Neuer Name 2" im FBF-Tel.buch und der steht trotz "ZZZ..." auch noch am Anfang des FBF-Telelefonbuches (WebIF).

Sieht so aus, als wird einfach der an erster Stelle stehende Eintrag des Tel.buches ersetzt...:confused:
 
Code:
./avm_pb.sh "xxx" [COLOR="Red"]"0"[/COLOR] "ZZZ Neuer Name 1" "1111"
./avm_pb.sh "xxx" [COLOR="Red"]"1"[/COLOR] "ZZZ Neuer Name 2" "2222"
??? :confused:

Ansonsten überschreibst du doch Eintrag 1. Hilf mir mal auf die Sprünge, wie du das meinst...
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.