HowTo: Asterisk statisch für die FBF kompilieren

dfroe

Mitglied
Mitglied seit
1 Feb 2006
Beiträge
321
Punkte für Reaktionen
0
Punkte
16
Hallo,
ich möchte an dieser Stelle eine kleine Schritt-für-Schritt Anleitung geben, nach der sich ein statisches Build des Asterisks aus den aktuellen Quellen für die FritzBox kompilieren lässt. Gewisse Kenntnisse im Umgang mit Linux-System sind im Folgenden von Vorteil, wenn nicht sogar zwingend notwendig.

Einleitung

Anlass war für mich, dass ich mir hin und wieder gerne einen aktuellen Asterisk selber kompilieren möchte, um nicht auf vorgefertigte Pakete angewiesen zu sein. So kann man bei Bekanntwerden von Sicherheitslücken problemlos eine neue Version kompilieren, und kann diese bei Bedarf auch selber im Quelltext etwas modifizieren. Es lassen sich z.B. weitere Module in den Quelltext des Asterisks kopieren, die anschließend direkt mit kompiliert werden.

Als kleine Besonderheit habe ich mich dazu entschlossen, ein statisches Build des Asterisks zu erstellen. Jede etwas über Hello World hinaus gehende Software greift auf bestimmte Bibliotheken zurück, im Unix-Umfeld shared libraries genannt. Das ist im Prinzip eine feine Sache, denn so müssen z.B. die OpenSSL-Funktionen nicht in jedes einzelne Programm hinein kompiliert werden, sondern es genügt, wenn das Binary einen Verweis auf die Library hat. Beim Starten des Programms wird die Library dann automatisch dynamisch dazu gebunden. Das macht das eigentliche Programm-Binary deutlich schlanker. Diese Sache hat aber auch eine Negativseite: Ändert sich etwas grundlegendes an der Library, so kann diese u.U. von der dagegen kompilierten Software nicht mehr verwendet werden. Des Weiteren gibt es auf der FritzBox das Problem, dass es hin und wieder zu Instabilitäten kommt, wenn man z.B. die openssl-Library als shared library in die Firmware packt.

Um diesem ganzen Library-Dilemma zu entgehen, kommt nun das statische Build zum Einsatz. Hierbei werden wirklich alle benötigten Libraries direkt mit in das Binary einkompiliert. Das heißt das Asterisk-Binary besteht am Ende nicht nur aus dem eigentlichen Asterisk, sondern enthält z.B. auch eine Kopie der OpenSSL-Libraries etc.
Vorteil: Alles was zum Starten des Binaries von Nöten ist, ist darin enthalten.
Nachteil: Das Binary wird sehr groß (bei mir über 5 MB).

Ein USB-Stick als Speichermedium ist also unbedingt notwendig. Eine Integration des Asterisks in die Firmware ist auf diesem Wege nicht möglich. Es genügt aber bereits der billigste 1 GB USB-Stick für sehr wenige Euros. Und ein klein wenig Speicherplatz (auch für ein Swap-File) tut der FritzBox manchmal ganz schön gut.

Vorkompilierte Binaries
Als Alternative zum Selberkompilieren biete ich hier auch fertig vorkompilierte Binaries für die FritzBox 7270 (und binärkompatible) an. Weitere Informationen hierzu finden sich in folgendem Posting:
IPPF: Vorkompiliertes Statisches Asterisk Build
Die Downloads finden sich direkt im Anhang des Posting.
Die weiteren Abschnitte dieses Postings beziehen sich auf das Selberkompilieren des Asterisks.

Voraussetzungen

Was ihr auf jeden Fall braucht, ist eine funktionierende Freetz Buildumgebung. Das heißt ihr solltet bereits ein funktionierendes Freetz-Image für eure FritzBox gebacken haben. Dadurch ist schonmal gewährleistet, das alle wichtigen Entwicklungstools vorhanden sind.

Eine Anleitung zum Kompilieren von Freetz werde ich an dieser Stelle nicht geben - sondern wie gesatz voraussetzen. Wenn ihr noch kein Freetz kompiliert habt, braucht ihr an dieser Stelle auch gar nicht weiterlesen - ihr werdet keinen Erfolg haben. Weitere Infos zu Freetz gibt es unter www.freetz.org.

An dieser Stelle auch ein ganz großes Dankeschön an alle Freetz-Entwickler für die Bereitstellung der gesamten Entwicklungsumgebung.

Auf der FritzBox benötigt ihr aus Speicherplatzgründen einen USB-Stick. Dieser sollte mindestens 256 MB fassen, ich würde 1 GB empfehlen. Der USB-Stick (bzw. dessen Partition) sollte mit ext3 formatiert sein. Windows-Dateisysteme (wie z.B. FAT oder NTFS) würde ich vorsichtshalber nicht verwenden. Ich nehme im weiteren an, dass der USB-Stick in der FritzBox unter /var/media/ftp/uStor01 eingebunden ist. Der Asterisk wird später unter /var/media/ftp/uStor01/asterisk installiert werden.

Auf eurem Build-System nehme ich an, dass freetz-trunk unter /usr/src/freetz/freetz-trunk liegt. Die aktuelle Asterisk-Version habe ich nach /usr/src/freetz/asterisk-1.6.* entpackt.

Wenn ihr andere Pfade verwendet, so ist das natürlich gar kein Problem, ihr solltest sie dann nur konsequent anpassen. Also nicht einfach nur blind per copy&paste aus diesem Posting übernehmen.

Vorbereitung der Freetz-Umgebung

Zuerst sind einige kleine Anpassung an der Freetz-Umgebung nötig. Ich empfehle auf jeden Fall eine eigene Toolchain zu bauen. Im freetz-trunk Verzeichnis ruft ihr dazu ein
make menuconfig
auf, und schaut dass unter Advanced -> Compiler Options -> Toolchains die Option Build Toolchain ausgewählt ist. Des Weiteren muss die ncurses-Library ausgewählt sein. Anschließend die Konfiguration beenden und speichern.

Als nächstes geht es um die uclibc, in der ein paar zusätzliche Funktionen aktiviert werden müssen, die später vom Asterisk benötigt werden.
Dazu ruft ihr in eurem freetz-trunk Verzeichnis
make uclibc-menuconfig
auf.
Dort sind folgende zusätzliche Optionen zu aktivieren:
* Networking Support -> Support res_close()
* Big and Tall -> Support gnu glob() interface

Anschließend wird mittels make die neue Buildumgebung kompiliert.

Anmerkung: Ihr müsst das hieraus resultierende Freetz-Image nicht zwangsläufig auf eurer FritzBox installieren. Es geht nur darum, dass eine uclibc vorliegt, die über die o.g. Features verfügt, und somit vom Asterisk während des Kompilierens verwendet werden kann. Beim Kompilieren des Asterisks wird diese Library sowieso statisch mit einkompiliert, so dass es keine Rolle spielt, ob in der Firmware nun eine eine uclibc mit res_close Unterstützung vorhanden ist oder nicht.

Hilfsdatei zum Cross-Compiling

Unter Cross-Compiling versteht man, eine Software für eine andere Prozessorarchitektur zu kompilieren. In unserem Fall läuft euer Buildsystem z.B. auf einer Intel kompatiblen x86_64 CPU, das resultierende Asterisk Binary soll später aber auf einer little endian Mips CPU laufen. Entsprechende Cross-Compiling Werkzeuge, die Binaries speziell für die Mips CPU der FritzBox erstellen, sind bereits vollständig in Freetz enthalten (und kompilieren euch auch jedes Mal die Software für euer Freetz-Image). Um diese Werkzeuge aber auch außerhalb von Freetz nutzen zu können, müssen einige Umgebungsvariablen entsprechend gesetzt werden.
Erstellt euch daher unter /usr/src/freetz/compile_env eine Textdatei mit folgendem Inhalt. Diese setzt die notwendigen Umgebungsvariablen. Ggfs. müsst ihr die Pfade an euer System anpassen.
Code:
TOOLCHAIN=/usr/src/freetz/freetz-trunk/toolchain/build/gcc-4.2.4-uClibc-0.9.29/mipsel-linux-uclibc

TOOLCHAIN_BIN=$TOOLCHAIN/bin
TOOLCHAIN_LIB=$TOOLCHAIN/lib
TOOLCHAIN_INC=$TOOLCHAIN/include

export PATH=$TOOLCHAIN_BIN:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

export AR=$TOOLCHAIN_BIN/mipsel-linux-uclibc-ar
export AS=$TOOLCHAIN_BIN/mipsel-linux-uclibc-as
export LD=$TOOLCHAIN_BIN/mipsel-linux-uclibc-ld
export NM=$TOOLCHAIN_BIN/mipsel-linux-uclibc-nm
export CC=$TOOLCHAIN_BIN/mipsel-linux-uclibc-gcc
export CPP=$TOOLCHAIN_BIN/mipsel-linux-uclibc-cpp
export GCC=$TOOLCHAIN_BIN/mipsel-linux-uclibc-gcc
export CC=$TOOLCHAIN_BIN/mipsel-linux-uclibc-gcc
export CXX=$TOOLCHAIN_BIN/mipsel-linux-uclibc-g++
export RANLIB=$TOOLCHAIN_BIN/mipsel-linux-uclibc-ranlib

export CFLAGS="-Os -s"
export LDFLAGS="-L$TOOLCHAIN_LIB"
export CPPFLAGS="-I$TOOLCHAIN_INC"

"Laden" tut ihr diese Hilfsdatei, indem ihr in eurer aktuellen Shell folgenden Befehl ausführt:
Code:
source /usr/src/freetz/compile_env

Anschließend solltet ihr beim Auflisten aller aktiven Umgebungsvariablen mit env die o.g. Variablen wieder finden.

Vorbereiten des Asterisk

Als nächstes geht's an den Asterisk. Wechselt daher in das Verzeichnis, in dem ihr euren Asterisk Sourcecode entpackt habt. Klassischer Weise wird in der Linux-Welt ein Programm mit dem drei Befehlen ./configure && make && make install installiert. Ganz so einfach wird es in unserem Fall jedoch nicht gehen.
Wichtig: Die Umgebungsvariablen für das Cross-Compiling müssen ab diesem Zeitpunkt gesetzt sein. Vorsichtshalber könnt ihr einfach nochmal den o.g. source-Befehl ausführen.

Nun wird der Asterisk mittels ./configure konfiguriert. Hierbei müssen wir ein paar Parameter übergeben, und zwar wie folgt:

Code:
source /usr/src/freetz/compile_env
./configure --prefix=/var/media/ftp/uStor01/asterisk --host=mipsel-linux --disable-xmldoc

Das Prefix gibt das Wurzelverzeichnis an, unter dem wir unseren Asterisk installieren wollen. Der host-Parameter gibt die Ziel-CPU an, für die wir kompilieren möchten, und disable-xmldoc schließt die XML-Dokumentation aus, welche wir nicht benötigen. Je nach persönlichem Geschmack lassen sich ggfs. noch weitere Features ausschließen.

Konfigurieren des Asterisk

Wenn der configure-Vorgang ohne Fehler durchgelaufen ist, geht es an die eigentliche Konfiguration des Asterisks. Um in das Konfigurationsmenu des Asterisks zu gelangen, sind folgende Befehle auszuführen:
Code:
source /usr/src/freetz/compile_env
unset CC CXX CFLAGS CPPFLAGS LDFLAGS
make menuselect

In dem folgenden Menu könnt ihr euren Asterisk nach belieben Konfigurieren. In der Standardeinstellung sind so gut wie alle Features bereits aktiviert, was eigentlich so bereits in Ordnung ist.

Folgende Änderungen sind jedoch auf jeden Fall durchzuführen:
Compiler Flags: STATIC_BUILD an, LOADABLE_MODULES aus, LOW_MEMORY an
Module Embedding: Alle Optionen aktivieren

(Anmerkung: Bei Memory Leaks oder instabilem Verhalten LOW_MEMORY wieder deaktivieren.)

Anschließend speichert und beendet ihr das Konfigurationsmenu mit 'x'.

Kompilieren des Asterisk

Das eigentliche Kompilieren geschieht wieder ganz klassisch mit make. Wichtig ist, vorher wieder alle Umgebungsvariablen für das Cross-Compiling zu setzen. Für das Konfig-Menü mussten zuvor nämlich ein paar Variablen wieder zurückgesetzt werden.

Code:
source /usr/src/freetz/compile_env
make

Installieren des Asterisk

Wenn der Asterisk ohne Fehler kompiliert hat, könnt ihr in mit make install installieren. Und zwar in genau das Verzeichnis, das ihr zuvor bei ./configure als prefix angegeben habt. Da in meinem Fall das Verzeichnis /var/media/ftp/uStor01/asterisk auf meinem Buildsystem noch nicht existiert hat, lässt sich der Asterisk auch auf dem Build-System gefahrlos "installieren". Ausführen lässt er sich dort wegen der unterschiedlichen CPU natürlich nicht.

Strippen des Asterisk

Nach dem make install habt ihr im Verzeichnis /var/media/ftp/uStor01/asterisk bereits alles, was ihr braucht. Die dort installierten Asterisk-Binaries enthalten aber noch viele unnötigen Debug-Symbol u.a., was die Binaries auf über 50 MB aufbläht. Mit dem strip-Befehl lassen sich die Binaries um diese Ballast (und damit rund 90% Dateigröße) erleichtern.
Code:
for i in /var/media/ftp/uStor01/asterisk/sbin/*; do mipsel-linux-strip $i; done

Kopieren des Asterisk

Anschließend kopiert ihr das Verzeichnis /var/media/ftp/uStor01/asterisk einfach 1:1 auf eure FritzBox bzw. den USB-Stick. Das eigentliche Asterisk-Binary ist unter sbin/asterisk zu finden.

Mit etwas Glück könnt ihr dieses Binary dann direkt auf eurer FritzBox ausführen und euch über euren eigenen Asterisk freuen. :)

Häufige Fehler

undefined reference to `dlerror'

Code:
dso_dlfcn.c:(.text+0x75c): undefined reference to `dlerror'
Wenn dieser Fehler beim Kompilieren auftritt, wird die libdl nicht mit eingebunden. Dies lässt sich ganz einfach beheben, indem ihr im asterisk-Verzeichnis die Datei makeopts öffnet und dort nach der Zeile OPENSSL_LIB sucht. Dort ist -ldl zu ergänzen, so dass es wie folgt aussieht:
Code:
OPENSSL_LIB= -lssl -lcrypto -ldl
Anschließend sollte der Asterisk mit make wieder weiter kompilieren.

Memory Leaks

Falls der RAM-Verbrauch des Asterisks auf der FritzBox linear zur Zeit ansteigt, und der Asterisk irgendwann wegen Out Of Memory stirbt, sollte zum Testen die Option LOW_MEMORY im Asterisk make menuselect deaktiviert werden. Damit benötigt der Asterisk beim Starten zwar deutlich mehr RAM, das Laufzeitverhalten scheint in manchen Fällen jedoch stabiler zu sein.

Ende

Ich hoffe, dass es mit dieser Anleitung auch außer mir noch jemandem gelingen wird, den Asterisk für die FritzBox zu kompilieren. Wie gesagt, ohne gewisse Kentnisse im Umgang mit Linux-Betriebssysteme wird es vermutlich sehr schwer sein, diese Anleitung nachzuvollziehen. Um sich dem Umgang mit Linux-Betriebssysteme zu nähern, würde ich aber auch nicht gleich mit Cross-Compiling beginnen. Um dagegen eine schlichte copy&paste Anleitung zu entwerfen, sind die Systeme einfach zu komplex. Somit sollte diese Anleitung eher als roter Faden mit einigen Hilfestellungen zu sehen sein.

Wer noch Fragen, Ideen, oder Anregungen hat, darf dies gern am besten hier im Forum von sich geben.

Gruß
David
 
Zuletzt bearbeitet:
Das ist ja ein erfreuliches Feedback. Der (automatische) Mountpoint des USB-Sticks scheint sich wohl bei der unmodifizierten FritzBox von der Freetz-Firmware zu unterscheiden.
Damit man die Pfade nicht mühsam per Config an den Mountpoint anpassen muss, wäre es wahrscheinlich sinnvoll, für die unmodifizierte FritzBox den Asterisk beim ./configure --prefix gleich auf den korrekten Pfad zum späteren USB-Mountpoint zu konfigurieren. Dann sind die Standardpfade bereits im Binary verankert.
Die eigentlichen Konfigurationsdateien kann man dann entweder von einer bestehenden Asterisk-Installation übernehmen, oder die im Asterisk-Download enthaltenen Beispieldateien verwenden. Auf dem Build-System lassen sich letztere nach dem make install auch mit einem make samples installieren.

Eine weitere spannende Frage wäre nun: Ist es möglich, einen Download mit dem statischen Asterisk-Build für die FritzBox öffentlich zugänglich anzubieten, ohne dabei gegen irgendwelche Lizenzen zu verstoßen?
Ein Problem dürfte wohl sein, dass auf Grund der GPL sämtlicher SourceCode mit veröffentlicht werden müsste, der in irgendeiner Form in das Binary mit einkompiliert wurde. Das wäre dann ja sozusagen mehr oder weniger die gesamte Freetz-Umgebung. Und da wären wiederum Teile der von AVM angebotenen Software mit enthalten.

Ich bin auf diesem Gebiet kein Experte. Vielleicht kennt sich ja jemand etwas mit diesen rechtlichen Aspekten aus. Denn auf der einen Seite wäre es für manche sicherliche eine Erleichterung, sich einfach nur ein fertiges Binary mit dem aktuellen Asterisk herunterzuladen und auf den USB-Stick kopieren zu müssen. Auf der anderen Seite möchte ich mich natürlich auch wieder nicht durch Verletzung irgendwelcher Lizenzen auf's Glatteis bringen.
 
Freetz wird nicht in das Binary integriert, und erst recht nichts von AVM. Du müßtest vermutlich die Quellen von Asterisk und von allen verwendeten Libraries anbieten.
Du solltest aber auch bedenken, daß die 7390 andere Binaries braucht als die älteren Boxen.
 
Die Asterisk-Sourcen wären noch das kleinste Übel. In der Freetz-Umgebung scheint es so zu sein, dass sich sämtliche Quellen im Verzeichnis source/target* befinden. Das sollten dann ja schon reichen. Ich müsste also dort nachschauen, was ich davon so alles verwende. Ist natürlich ein gewisser Aufwand. Zumal du auch Recht hast, dass die Binaries nur innerhalb einer CPU-Architektur kompatibel sind. Ich weiß jetzt nicht genau, was AVM da je nach FritzBox-Generation so alles verbaut hat. Bei einem Wechsel von Little Endian nach Big Endian MIPS, ARM o.ä. ist sowieso auf jeden Fall wieder Neukompilieren angesagt.
 
Musst du die Sourcen anbieten? Es würde doch sicherlich ein Verweis reichen wo die Soucen zu finden sind.
Wissen tue ich es nicht. Aber bei so gut wie allen Firmwares, die GPL-SW enthalten, bieten die Hersteller immer komplette Sourcecode-Pakete zum Download an, nicht einfach nur Links. Was davon jedoch wirklich nötig ist, wäre die Frage. Einmal die URLs zu den diversen Libraries rauszuschreiben wäre denke ich nicht das große Problem.
 
Die Hersteller sollten die Sourcen zum Download anbieten. Leider tun es nicht alle, bzw. teilweise nur mit Verzögerung oder nach Aufforderung.
Im Falle einen nicht Kommerziellen Verbreitung wird wahrscheinlich niemand etwas dagegen sagen, wenn Du nur Links zum Download anbietest bzw. auf Anfrage die Quellen zusenden kannst.
Das einfachste und sicherste ist, nicht nur das ausführbare Programm, sondern auch die Quellen selbst zum Download anzubieten.
 
Hört sich nach einem sinnvollen Kompromiss an. Dieses Wochenende werde ich vermutlich nicht dazu kommen, aber ich denke in Richtung des nächsten Wochenendes werde ich dann mal die Links zu allen Libs zusammenstellen, so dass ich sie zusammen mit einer vorkompilierten Version (für die FBF7270 binärkompatiblen Geräte) hier veröffentlichen kann.
 
Einige Kleinigkeiten sind mir beim Herumspielen mit diversen Parametern noch aufgefallen. Zum einen musste ich feststellen, dass das Makefile des Asterisk scheinbar kein 'strip' am Ende von 'make install' durchführt. Ein nachträgliches 'mipsel-linux-strip' lässt das Asterisk-Binary um rund 90% einschrumpfen. Die Asterisk-Version, die ich mir für meine FritzBox kompiliert habe, ist nun nur noch knapp 6 MB groß.

Ein weiteres Phänomen konnte ich in Richtung Speicherlecks feststellen. Und zwar in Zusammenhang mit der LOW_MEMORY Option. Dazu habe ich im Anhang einen Screenshot von der Speicherauslastung meiner FritzBox angehängt.
Dort ist bis ca. 5 Uhr zu sehen, wie der belegte Speicher nahezu linear mit der Zeit ansteigt. Bis zu einem kritischen Punkt, an dem der Asterisk heimlich still und leiste und ohne Log-Einträge stirbt. Ab 5 Uhr ist die Speicherlast ohne laufenden Asterisk zu sehen. In der Zeit von 11 bis 14 Uhr habe ich ein paar Kleinigkeiten an der FritzBox ausprobiert, d.h. dieser Zeitraum ist irrelevant. Und ab 14 Uhr läuft nun der Asterisk ohne LOW_MEMORY Compiler Option. Es ist schön zu sehen, dass der Asterisk beim Start definitiv mehr Speicher benötigt - dieser aber nicht mehr wesentlich weiter ansteigt. Ich weiß nun nicht, ob dieses Phänomen nur bei mir auftritt, oder ob die LOW_MEMORY Option in der Tat ein grundsätzliches Problem mit Speicherlecks hat. Es lohnt sich jedenfalls mit dieser Option ggfs. etwas herumzuspielen und zu beobachten.
 

Anhänge

  • asterisk-memory_leak.png
    asterisk-memory_leak.png
    28.2 KB · Aufrufe: 144
6 MB. Das ist doch gar nicht so schlecht. Dann bräuchte man ja an einer unmodifizierten Fritzbox noch nicht mal einen USB-Stick. Das Binary kann bei der Größe ja locker in den RAM geladen werden. Man bräuchte nun noch ein Programm flash2config und config2flash und das alles wäre dann eine gute Alternative zum ursprünglichen Asterisk_on_FBF-Projekt (welches momentan echt veraltet ist).
 
Man bräuchte nun noch ein Programm flash2config und config2flash
Das würde wohl ähnlich wie hier erläutert funktionieren:

Thread: Dauerhaft ins /var/flash speichern
http://www.ip-phone-forum.de/showthread.php?t=108268

Es wäre sozusagen die selbe Vorgehensweise wie ein 'modsave' in Freetz.

Code:
# Flash Node erstellen
major=`grep tffs /proc/devices`
tffs_major=${major%%tffs}
mknod /var/flash/asterisk c $tffs_major $((0x88))

# Konfig auslesen
cd /pfad/zur/asterisk/conf
tar -xzf /var/flash/asterisk

# Konfig schreiben
cd /pfad/zur/asterisk/conf
tar -czf /var/flash/asterisk .

Das ist soweit aber nur eine Idee, ich möchte mein ohnehin durch Freetz schon gut befülltes TFFS nicht noch unnötig strapazieren. Aber wenn du mutig bist, der Code ist zwar ungetestet, der Ansatz sollte jedoch stimmen, um damit die Asterisk Config-Datei in den Flash zu retten.
 
Man kann das Asterisk doch bestimmt so kompilieren, dass es (wie jetzt) eine einzige binary "asterisk" gibt, die aber die ganzen Module nicht enthält. Die Module einfach extra kompilieren. Das hätte den Vorteil, dass man nur das nehmen kann, was man braucht.
Soweit ich weiß gibt es zwei Möglichkeiten, den Asterisk zu bauen. Komplett modular und damit dynamisch gelinkt, oder statisch gebaut und alle Module ins Binary eingebettet.

Normalerweise verwendet man die erste Variante. Da sind alle Module in einem extra Modul-Verzeichnis vorhanden, und können einzeln je nach Bedarf dynamisch zur Laufzeit dazugeladen werden. Ein älterer Asterisk 1.4 hat auf diese Art und Weise auch ganz gut auf einem älteren Freetz funktioniert. Mit einer aktuellen Firmware wollte dies aber einfach nicht mehr funktionieren, es kam immer wieder zu Probleme mit dem Asterisk Modul-Loader.

Daher eben meine Exeperimente mit dem statischen Build, da dort sowohl alle dynamischen Libraries (z.B. libssl) als auch alle Asterisk-Module fest im Binary eingebettet sind. Das heißt jedoch nicht, dass zwangsläufig immer alle Module kompiliert und mit in das Asterisk-Binary gebaut werden müssten. Im Schritt "Konfigurieren des Asterisk" lassen sich bei 'make menuselect' sämtliche im Lieferumfang des Asterisks enthaltene Module etc. individuellen an und abwählen. Wählt man hier nur die Channels, Apps, Funcs, etc. aus, die man selber wirklich benötigt, so lässt sich das resultierende Binary nochmals etwas verschlanken.

einfach alles (asterisk-binary, configs und module) ins /var/asterisk reinschmeißen
Das entspricht dem --prefix beim ./configure. Das ist sozusagen der Root-Pfad, unterhalb dessen dann die Verzeichnisse etc, sbin, var, usw. liegen. Auf einer unmodifizierten Box ohne USB-Stick käme hierfür ein beschreibbares Verzeichnis im RAM in Frage.
 
Vorkompilierter Asterisk Build

Auf Grund der Nachfrage habe ich nun alle gelinkten Libraries zusammengeschrieben, um an dieser Stelle ein vorkompiliertes Asterisk Binary für die FritzBox anbieten zu können. Verweise auf die verwendeten Quellen sind in der README enthalten. Die von mir kompilierten Binaries sind für die FritzBox 7270 und alle binärkompatiblen Modelle kompiliert. Da es sich um ein statisches Build handelt, sind sämtliche verwendeten bzw. benötigten Libraries statisch in das Binary mit einkompiliert, es bestehen keinerlei Verweise zu dynamischen Libraries.

Die Standard-Pfade dieser Asterisk-Installation sind beim Kompilieren auf /var/media/ftp/uStor01/asterisk gesetzt worden, was dem Standard-Pfad des ersten an einer FritzBox mit Freetz-Firmware angeschlossenen USB-Sticks entspricht.

Das zweite angehängte Archiv unterscheidet sich nur durch einen auf /var/media/NEW_LINK/asterisk angepassten Standard-Pfad. Die entspricht der Namensgebung auf einer unmodifizierten FritzBox.

Andere Pfade lassen sich jederzeit über entsprechende Config-Dateien realisieren.

Es handelt sich bei diesem Archiv um Asterisk 1.6.2.11 inklusive chan_datacard r162, curl und ssl Unterstützung. Unterstützung für iLBC und MP3 fehlen. Einige weniger gebräuchliche Module wurden ebenfalls ignoriert, um das Binary nicht unnötig aufzublähen.
 

Anhänge

  • asterisk-fbf-README.txt
    855 Bytes · Aufrufe: 551
  • asterisk-samples.tar.gz
    151.4 KB · Aufrufe: 311
  • asterisk-1.6.2.11-fbf-ustor01.tar.bz2
    2.8 MB · Aufrufe: 310
  • asterisk-1.6.2.11-fbf-newlink.tar.bz2
    2.8 MB · Aufrufe: 244
Zuletzt bearbeitet:
Das heisst, ich kopierie mir einfach das Binary samt Ordnerstruktur nach uStor01 und starte dann über Telnet die Datei "asterisk", die im sbin-Ordner liegt?

Oder wie wird sie gestartet?


Danke
 
läuft auch auf einer 7170

Nur der Vollständigkeit halber,

das Ding läuft auch auf einer 7170 problemlos.

Jetzt muß nur noch ein Admin die restlichen viel zu komplizierten Anleitungen und Diskussionen shreddern und deinen Artikel mit dem Prädikat wichtig versehen auf Nr. 1 setzen.

Herzlichen Glückwunsch!

ezhik

----

ot: warum kann ich eigentlich mit meinem alten Nick ezhik keine Dateien mehr downloaden? ...
 
Kleines Update für Zwischendurch, der Asterisk und das chan_datacard Modul stehen fertig kompiliert in einer aktualisierten Version zur Verfügung. Mit exakt den selben Parametern kompiliert, nur eben versionstechnisch wieder auf dem neusten Stand. Zu finden sind die Downloads wieder an gewohnter Stelle.
Asterisk 1.6.2.10, chan_datacard r157
http://www.ip-phone-forum.de/showpost.php?p=1563640&postcount=15
 
Das finde ich ja mal super, Freetz und Asterisk zusammengebracht. Ich bin aus Asterisk ein wenig raus da ich es seit gut zwei Jahren nicht mehr benutze. Das Thema hier reizt mich jetzt allerdings doch ein wenig da ich so mein Asterisk unabhängig von anderen auf dem Laufenden halten kann. Vielen Dank für die Mühe!

Ich habe allerdings immer die Möglichkeit vermisst Konferenzen zu führen, das lag immer am fehlenden ztdummy für meetme. Kann mir jemand sagen ob das überhaupt technisch möglich ist mit der FB? Am GUI würde ich auch gerne mal weiterbasteln dass es kompatibel wird mit der FB, muss nur erst mal die Zeit finden. Es hatte zwar schon mal jemand angesprochen das in Freetz zu intergrieren, müsste man sich aber erst mal drüber unterhalten was die Leute gerne drin haben wollen, alles wäre enorm viel Zeitaufwand.
 
Genau, die neuen Asterisk-Versionen können Konferenz endlich auch mit Boardmitteln.
http://www.voip-info.org/wiki/view/Asterisk+cmd+ConfBridge

app_confbridge ist in den fertig kompilierten Binaries von mir auch schon enthalten, ich habe es selber aber noch nicht ausprobiert. Es sollte aber ein Kinderspiel sein, ConfBridge einfach in den Dialplan mit einzubinden.
 
Ok, vielen Dank für die Info, werde ich dann mal ausprobieren und Rückmeldung geben sobald es läuft. In Asterisk bin ich noch fit genug dafür.
 
Für alle Abonnenten dieses Threads, es gibt wieder eine aktualisierte Version der vorkompilierten Binaries.
 
Habe deine Datei entpackt CAPI ?? und andere

wo sind eigentlich die module
auch suche ich das capi modul
und auch die conf.Dateien

beste Grüße
 
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.