Asterisk, FreePBX und mISDN unter Debian
Inhaltsverzeichnis
- 1 In Arbeit:
- 2 Einleitung
- 3 Xen DomU Konfiguration
- 4 mISDN Treiber
- 5 Asterisk as himself
- 6 FreePBX
- 6.1 FreePBX Grundeinrichtung
- 6.2 FreePBX Weboberfläche
- 6.2.1 Grundeinrichtung
- 6.2.2 mISDN Trunk einrichten
- 6.2.3 SIP (Sipgate) Trunk einrichten
- 6.2.4 Die ersten ISDN Telefone
- 6.2.5 Und SIP/Softtelefone sowieso
- 6.2.6 Hinaus in die weite Welt, per mISDN - Outbound Routes
- 6.2.7 Die Welt zu Gast, wer mit wem - Inbound Routes
- 6.2.8 Ich klingel, du klingelst, wir alle klingeln - mit Ring Goups
- 6.2.9 Elfriiiidddaaa, gehst du mal ran? Meine Nägel sind nicht trocken - kein Problem, mit Pickup
- 6.2.10 Bertraaamm für dich! - Blind transfer
- 6.2.11 Verbindungsdaten überprüfen
- 6.3 Upgrade von FreePBX 2.0.x auf 2.1.x
- 7 Quellen
- 8 ToDo
- 9 Quellen
- 10 ToDo
In Arbeit:
Der XEN Teil funktioniert bei mir leider immer noch nicht. Ich hoffe das einige Kernel/Xen Versionen später, auch dies endlich funktioniert. Bis dahin sollte Xen Einrichtungsteil überprungen werden, für den Fall, das ISDN Hardware zum Einsatz kommt. Wird dagegen ausschlieÿlich auf SIP gesetzt, stellt dies auch unter XEN ein Problem dar.
Bei Ergänzungen bitte ich darum, nicht mit Worten zu sparen und möglichst ausführlich zu schreiben. Anleitungen im Telegramm Stil neigen häufig dazu, Fehler beim Anwender zu produzieren und Fragen heraufzubeschwören.
--Denny 18:21, 12. Mai 2006 (CEST)
Einleitung
Mein neuestes Projekt besteht darin unsere grausame Firmentelefonanlage durch Asterisk zu ersetzen. Leider ist unsere VO-IP Anlage nicht kompatibel zu Asterisk, da sie ein proprietäres Protokoll nutzt. Ob wir sie dennoch irgendwie integrieren können, steht in den Sternen. Wir möchten die Möglichkeit haben, sowohl ISDN Geräte zu verwenden als auch SIP Geräte (Soft/Hard).
Software, die zum Einsatz kommt
Asterisk wird, wie oben angesprochen, in einer Xen3.0.2 DomU Umgebung arbeiten mit den zwei HFC Karten. Als Kernel verwende ich den gleichen wie denjenigen von Dom0. Asterisk selber wird in der derzeit akutellen Version 1.2.7.1 Version zum Einsatz kommen, mit mISDN; allerdings werden die Kernel Patches verwendet und nicht, wie bisher, die Standard Treiber. Ich habe das Gefühl, das diese besser laufen. Als Frontend wird nicht der Editor verwendet, sondern, ein wenig komfortabler, die Web Oberfläche FreePBX (ehemals AMP - Asterisk Management Portal), wie sie auch unter Asterisk@home zum Einsatz kommt. Asterisk@home verwende ich nicht, da mir *.RPM Distributionen zu unsymphatisch sind. Des Weiteren gelang es mir nicht, A@H in einer Xen Umgebung zum Laufen zu bewegen. Da die Oberfläche auf PHP basiert müssen natürlich ein Webserver mit PHP Unterstützung vor Ort tätig sein, wie auch ein MySQL, da darin die Daten abgelegt werden. In meinem Fall Apache2, php4 und MySQL von Debian Sarge. Da wir später auch Mails erhalten wollen, vom Anrufbeantworter nämlich, sollte auch ein SMTP Server installiert sein bzw. eine Alternative wie ssmtp, der die Mails an den richtigen Mailserver leitet.
Ziel
Am Ende werden wir eine Telephonanalge haben, die ein Webinterface besitzt zur besseren Konfiguration, welches auch von normalen Anwendern bedient werden kann; ein Anrufbeantworter, der die Anrufaufzeichnungen auf Wunsch per Mail versendt; Standardfunktionen wie Pickup (das Annehmen eines beliebig klingelndes Telefon auf den eigenen Apparat); Weiterleitung auf ein Handy; Wartemusik und noch ein paar Dinge mehr.
Xen DomU Konfiguration
Meine Xen DomU Konfiguration sieht bisher so aus:
# standard config name ="asterisk" kernel ="/boot/vmlinuz-2.6-xen" root ="/dev/hda1" memory = 256 disk = ['phy:/dev/daten/asterisk,hda1,w','phy:/dev/daten/asterisk-swap,hda2,w'] # network vif = [ '', 'bridge=xenbr0' ] dhcp ="off" ip="192.168.100.6" netmask="255.255.255.0" gateway="192.168.100.254" hostname="asterisk" pci=['00:0c.00','00:09.00'] extra="3"
Wie ersichtlich wird liegen die Daten und Swap auf einer LVM Partition. Der PCI Bereich zeigt, welche PCI-Geräte wir in dieser DomU nutzen möchten. Das System ist ein Debian Sarge, welches ich von einer bestehenden Installation kopiert habe. Dort muÿte ich lediglich die IP Adresse anpassen, darüber hinaus auch den Hostnamen.
# mount /dev/daten/asterisk /mnt/vserver/asterisk # cp -r /lib/modules/2.6.16-xen /mnt/vserver/asterisk/lib/modules
Desweiteren habe ich auch das Xen3.0.2 Quellen (! xen-3.0.2-src.tgz !) Verzeichnis kopiert:
# cp -r /usr/src/xen-3.0.2-2 /mnt/vserver/asterisk/usr/src/
Nachdem dies abgeschlossen wurde, kann die Asterisk DomU wieder hochgefahren werden (das entmounten vorher nicht vergessen).
Als erstes sollte überprüft werden, ob auch die PCI Karten an Ort und Stelle sind:
asterisk:/usr/src/asterisk-src# lspci 0000:00:09.0 Network controller: Cologne Chip Designs GmbH ISDN network controller [HFC-PCI] (rev 02) 0000:00:0c.0 Network controller: Cologne Chip Designs GmbH ISDN network controller [HFC-PCI] (rev 02)
Meine Xen Anleitung kann kann bei Problemen weiterhelfen, insb. der Abschnitt zu Xen 3.0.2.
mISDN Treiber
Da mein Dom0 Kernel bereits mit mISDN ausgestattet ist, konnte ich diesen Schritt überspringen. Wessen Kernel das noch nicht ist, kann den Kernel entweder in der Dom0 vorbereiten, oder, wie hier aufgezeigt, in der DomU. Der dort erstellte Kernel muss dann in der Dom0 landen, entsprechend der DomU Xen Asterisk Config. Die Module können in der DomU verbleiben, sofern der Dom0 nicht den selben Kernel verwenden soll.
Weiter geht es:
Da wir ja mISDN verwenden, ist es an der Zeit, den Kernel darauf vorzubereiten. Dazu gehen wir zu unseren Quellen und installieren ein paar Programme:
# cd /usr/src/ # ln -s xen-3.0.2-2/linux-2.6.16-xen/ linux # apt-get install cvs bc libncurses5-dev
Desweiteren diverse Dinge, um Programme übersetzen zu können, wie make, gcc etc.
CVS brauchen wir, für die mISDN Kernel Treiber, bc wird von den Scripten von mISDN benötigt.
Ein Bash Script erleichtert das Herunterladen der Patches:
#!/bin/bash export CVSROOT=:pserver:anonymous@cvs.isdn4linux.de:/i4ldev cvs login cvs -z9 co mISDN # <-comment out after you made a checkout #cvs -q -z9 update -dPA # <- and uncomment this for updating
Als Kennwort einfach "readonly" eingeben. Die Patches landen dann im Verzeichnis mISDN.
Hat man die Quellen, wird der Kernel gepatched:
# cd /usr/src/mISDN # ./std2kern
Wenn der Linux Symlink korrekt war, dann wird das Script alle nötigen Dateien in die Linux Quellen kopieren.
Hinweis:
Da die mISDN Treiber bei mir in der Kernel Config nicht auftauchen wollten, musste ich folgende Datei bearbeiten:
# nano /usr/src/linux/drivers/isdn/hardware/mISDN/Kconfig
menu "Modular ISDN driver" depends on NET && ISDN && ISDN_CAPI!=n
zu
menu "Modular ISDN driver" depends on NET && ISDN_CAPI!=n
Der Grund für diesen Umstand wird wie folgt beschrieben (unter Punkt 5):
Reason: in the newest mISDN source was considered the newest changes in the I4L code (branch kernel26). There also exists a I4L patch from this branch, but I don't have it. When I will have it, will put it here.
Die Kernel Config kann am Ende so aussehen:
# # Modular ISDN driver # CONFIG_MISDN_DRV=m # CONFIG_MISDN_MEMDEBUG is not set CONFIG_MISDN_AVM_FRITZ=y CONFIG_MISDN_HFCPCI=y CONFIG_MISDN_HFCMULTI=y CONFIG_HFCMULTI_PCIMEM=y # CONFIG_MISDN_HFCUSB is not set CONFIG_MISDN_HFCMINI=y CONFIG_MISDN_XHFC=y # CONFIG_MISDN_SPEEDFAX is not set # CONFIG_MISDN_W6692 is not set CONFIG_MISDN_DSP=y CONFIG_MISDN_LOOP=y CONFIG_MISDN_L1OIP=y
Achtung bei dem Standardkernel von Debian 3.1 Kernelversion 2.6.8 hatte ich Probleme die Module von mISDN nachzuladen. Ein Update auf den Kernel 2.6.17 von http://www.kernel.org hat das Problem behoben. Die Ursache war die Funktion kzalloc. Sie ist anscheinend in älteren Kernelversionen nicht enthalten.
Sehr wichtig ist es, das mISDN selbst nur als Modul eingebunden wird, und nicht fest in den Kernel.
Ist auch dies geschafft, kann man diesen installieren und starten. Damit auch die Scripte und sonstige mISDN Dinge an die richtigen Orte gelangen, führe ich noch ein make install aus:
# cd /usr/src/mISDN/ # make install
Das kompiliert zwar nochmal die Kernel Treiber, aber das stört mich nicht weiter.
Ist alles glatt gelaufen, können wir mISDN starten:
asterisk:/usr/src/mISDN# /etc/init.d/misdn-init scan [OK] found the following devices: card=1,hfcpci card=2,hfcpci [ii] run "/etc/init.d/misdn-init config" to store this information to /etc/misdn-init.conf
Das mit dem /etc/init.d/misdn-init config überspringe ich an dieser Stelle und präsentiere dafür meine abgespeckte Config:
card=1,hfcpci card=2,hfcpci te_ptmp=1 nt_ptmp=2 poll=64 #pcm=1 debug=0
Also Karte 1 übernimmt den Kontakt zu Auÿenwelt, sprich, verhält sich wie eine normale ISDN Karte. Karte 2 hingegen ist unser S0 Bus, für unsere Telefone und stellt einen NT bereit.
Nun können wir mISDN hochfahren:
asterisk:/usr/src/mISDN# /etc/init.d/misdn-init start ----------------------------------------- Loading module(s) for your misdn-cards: ----------------------------------------- modprobe --ignore-install hfcpci protocol=0x2,0x12 layermask=0xf,0x3
Mit lsmod lässt es sich auch überprüfen:
asterisk:/usr/src/mISDN# lsmod Module Size Used by hfcpci 30660 0 mISDN_capi 100780 0 mISDN_dsp 197228 0 l3udss1 42664 0 mISDN_l2 40288 0 mISDN_l1 11304 0 mISDN_core 79936 6 hfcpci,mISDN_capi,mISDN_dsp,l3udss1,mISDN_l2,mISDN_l1 capi 17352 0 capifs 5672 2 capi kernelcapi 47008 2 mISDN_capi,capi genrtc 8540 0
Ist man bis hierher gekommen, ist man auf jedenfall schonmal warm gelaufen ;-)
Asterisk as himself
Kompilieren und installieren
Nun wäre ein guter Zeitpunkt, Asterisk selbst in Angriff zu nehmen:
# wget http://ftp.digium.com/pub/asterisk/releases/asterisk-1.2.7.1.tar.gz # wget http://ftp.digium.com/pub/asterisk/releases/asterisk-addons-1.2.2.tar.gz # wget http://ftp.digium.com/pub/asterisk/releases/asterisk-sounds-1.2.1.tar.gz # wget http://ftp.digium.com/pub/libpri/releases/libpri-1.2.2.tar.gz # wget http://asterisk.gnuinter.net/files/asterisk-perl-0.08.tar.gz # ab FreePBX 2.1.0 nicht mehr nötig. # wget http://www.beronet.com/downloads/install-misdn-mqueue.tar.gz
Die ganzen Archive entpacke ich unter /usr/src/asterisk-src/ damit es so aussieht, als würde ein Sinn dahinter stehen.
Damit wir Asterisk und FreePBS übersetzen und installieren können, benötigen wir noch einige Pakete:
Merke:
Ab FreePBX Version 2.1.0 können sämtliche Perl Module ausgelassen werden, da diese nun mit PHP gelöst worden sind.
# apt-get install libasound2 libgsm1 libpth-dev sox \ libltdl3 libpq3 libspeex1 libsqlite0 libxml-dev libxml1 \ libtonezone1 odbcinst1 unixodbc libtiff4-dev libtiff4 \ openssl libssl0.9.7 libssl-dev \ libreadline4 libreadline4-dev \ libeditline0 libeditline-dev \ libedit-dev libedit2 libncurses5 \ libncurses5-dev zlib1g-dev bison \ libnet-telnet-perl \ mime-construct libipc-signal-perl \ libmime-types-perl libproc-waitstat-perl \ subversion libipc-signal-perl libproc-waitstat-perl \ apache2 mysql-server php4 php4-cli php4-mysql curl \ php4-pear libapache2-mod-php4 php4-curl libmysqlclient14-dev libmysqlclient14 php4-gd
Dann gehts ans kompilieren:
- Libpri
# cd /usr/src/asterisk-src/libpri-1.2.2 # make && make install
- Asterisk und mpg123
# cd asterisk-src/asterisk-1.2.7.1 # make mpg123; cd mpg123*; make install # make && make install && make samples
Hinweis:
Ich musste mein Asterisk Verzeichnis löschen und neu entpacken, da ich die Quellen bereits unter Ubuntu übersetzt hatte und auch auch ein make distclean nicht half, sodass der Compiliervorgang schnell endete.
make samples könnte man überspringen, aber es wurden einige Config Dateien von freePBX erwartet, die nicht vorhanden waren, von daher ... Was bin ich doch für ein fauler Mensch ;-)
- Asterisk Addons
# cd asterisk-src/asterisk-addons-1.2.2 # perl -p -i.bak -e 's/CFLAGS.*D_GNU_SOURCE/CFLAGS+=-D_GNU_SOURCE\nCFLAGS+=-DMYSQL_LOGUNIQUEID/' Makefile # make clean; make install
- Asterisk Sounds
# cd asterisk-src/asterisk-sounds-1.2.1 # make install # cd as
- Asterisk Perl
# cd asterisk-perl-0.08 # perl Makefile.PL # make install
- Nach der Installation, muss dem Asterisk sein Pid Verzeichnis vorgegeben werden:
# nano /etc/asterisk/asterisk.conf
astrundir => /var/run/asterisk
- mISDN User und chan_misdn
Der Channel Treiber von chan_misdn benötigt benötigt mISDNuser. Dieses Programm kann mit dem Script von Beronet installiert werden, allerdings installiert der auch gleich nochmal die mISDN Treiber selber, welche sich schon im Kernel befinden.
# tar xvzf install-misdn-mqueue.tar.gz # cd install-misdn-mqueue # make && make install
Man kann sich dann also aussuchen, ob man die Version von chan_misdn verwendet, oder die Kernel internen mISDN Treiber. Es reicht, wenn das jeweilige Verzeichnis verschoben wird. Da wären:
- Von dem Script install-misdn-mqueue
/lib/modules/2.6.16-xen/extra/
- Die Kernel internen
/lib/modules/2.6.16-xen/kernel/drivers/isdn/hardware/mISDN/
Wichtig ist nur, nach dem verschieben, ein depmod -a auszuführen, sonst findet der Kernel die Treiber nicht mehr. Ein anschliesendes:
# /etc/init.d/misdn-init stop # /etc/init.d/misdn-init start
verwendet dann die Verbliebenen.
Asterisk mit mISDN vertraut machen
Nachdem der chan_misdn installiert wurde, sollte als erstes die Config Datei /etc/asterisk/misdn.conf angepasst werden. Meine abgespeckte Variante sieht so aus:
[general] debug=0 bridging=no stop_tone_after_first_digit=yes append_digits2exten=yes dynamic_crypt=no crypt_prefix=** crypt_keys=test,muh [default] context=misdn language=de nationalprefix=0 internationalprefix=00 rxgain=0 txgain=0 te_choose_channel=no method=standard dialplan=0 localdialplan=0 early_bconnect=yes hold_allowed=yes callgroup=1 pickupgroup=1 echocancelwhenbridged=no echotraining=yes ; Karte 2 ist für unsere internen Telefone [intern] ports=2 context=from-internal ; Karte 1 stellt die Verbindung zur Aussenwelt her. Er hört auf die MSN 12345 und12346 [extern] ports=1 context=from-pstn msns=12345,12346
FreePBX
Um es noch einmal zu erläutern: FreePBX ist eine webbasierende Schnittstelle zwischen dem Asterisk-Admin und Asterisk selber. Statt in den Eingeweiden von Extensions.conf etc. zu wühlen, wird es dem Anwender einfach gemacht, Asterisk von überall aus zu administrieren. Es liefert diverse sinnvolle Einstellungen mit und dazu noch Erweiterungen um alles im ÿberblick zu behalten, wie zum Beispiel eine Echtzeitanwundung auf Flash basierend, oder für die Kostenstelle, ein Programm für die Verbindungsnachweise.
Mehr über die Fähigkeiten von FreePBX findet sich auf der Webseite.
FreePBX Grundeinrichtung
Am 15. 05.06 erschien eine neue stabile Version (2.1.0) von FreePBX. Diese bringt einige neue Module mit und erspart einem die Installation sämtlicher Perl Module.
- Download von FreePBX
Falls noch kein FreePBX sich auf der Platte befinden sollte, geht kein Weg an dieser Seite vorbei. Dort wählt man das aktuelle Archiv und einen Mirror (Spiegelserver) aus und klick am Besten gleich auf Stop, seines Browsers. Denn in aller Regel benötigen wir es auf dem Asteriskserver und nicht auf der eigenen Platte. Ich kopiere mir immer den Link, den mir der Spiegelserver vorgibt und füge ihn in eine Konsole ein, und lade die Datei per wget.
wget http://mesh.dl.sourceforge.net/sourceforge/amportal/freepbx-2.0.1.tar.gz # vorletzte stabile Version wget http://mesh.dl.sourceforge.net/sourceforge/amportal/freepbx-2.1.0.tar.gz # jetzige stabile Version
Da die Server des öfteren wechseln bzw. auch mal diese Datei nicht mehr führen, kann der Link oben schon bald ins leere führen.
Liegt die Datei auf der Platte und wurde entpackt, kann es auch schon weitergehen, mit dem Einrichten der Gruppe und des Users asterisk:
- Gruppe und User einrichten
# groupadd asterisk # useradd -g asterisk -d /var/lib/asterisk -s /bin/bash asterisk
Apache Namensbasierender virtual Host, (ebenfalls frisch geklaut, von [1] )
Merke:
Die nachfolgende Konfiguration verwendet einen namensbasierenden virtual Apache Host. Dies wird immer dann verwendet, wenn nur eine IP Adresse zur Verfügung steht und man dennoch mehrere virtuelle Apache Server laufen haben möchte, bzw. unterschiedliche Domains beherbergen.
Debian hat per Default seinen Stammhost Eintrag unter /var/www/apache2-default/. Damit ein /var/www daraus wird, muss nur die Datei /etc/apache2/sites-available/default angepasst werden.
Wer mehrere Hosts beherbergt, sollte sich vorher darüber im klaren werden, wie er diese anordnen will. Die Apacheconfig im Anschluss gibt eine Variante vor.
- Vhost anlegen:
Anlegen des Verzeichnisses für unser Portal. Das uname -n sorgt dafür, das der Hostname des Rechners verwendet wird. Möchte man dies nicht, so sollte die Zeile (und alle nachfolgenden) angepasst werden:
# mkdir -p /var/www/`uname -n`/cgi-bin # mkdir -p /var/www/`uname -n`/htdocs # mkdir /var/run/asterisk
Die nachfolgenden Zeilen können direkt in eine Konsole kopiert werden. Dabei wird eine neue Vhost Konfigurationsdatei für den Apachen angelegt, jeweils mit dem Hostnamen des Rechners:
cat > /etc/apache2/sites-available/pbx.conf << EOF NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName `uname -n` DocumentRoot /var/www/`uname -n`/htdocs <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/`uname -n`/htdocs> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /var/www/`uname -n` <Directory "/var/www/`uname -n`/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On </VirtualHost> EOF
- Apache als asterisk User
Damit es zu keinen Problemen kommt, wird der Apache nicht mehr als www-data laufen (Debian Standard), sondern als User/Gruppe Asterisk:
# ln -s /etc/apache2/sites-available/pbx.conf /etc/apache2/sites-enabled # perl -p -i.bak -e 's/User www-data/User asterisk/' /etc/apache2/apache2.conf # perl -p -i.bak -e 's/Group www-data/Group asterisk/' /etc/apache2/apache2.conf
- Ein paar Anpassungen für PHP
# perl -p -i.bak -e 's/upload_max_filesize.*$/upload_max_filesize = 20M/' /etc/php4/apache2/php.ini # perl -p -i.bak -e 's#AddType application/x-httpd-php-source .phps#AddType application/x-httpd-php-source .phps\nLimitRequestBody 20000000#' /etc/apache2/mods-available/php4.conf #
FreePBX Datenbank importieren
Hier wird die Datenbank erzeugt und die Tabellen aus dem freepbx Verzeichnis importiert. Das -p sorgt dafür, dass man nach seinem MySQL Root passwort gefragt wird. Dieses Root Passwort hat nichts mit dem Root Kennwort des Linux Systems zu tun.
# mysqladmin create asteriskcdrdb -p # mysql -p asteriskcdrdb < /usr/src/asterisk-src/freepbx-2.0.1/SQL/cdr_mysql_table.sql # mysqladmin create asterisk -p # mysql --user root -p asterisk < /usr/src/asterisk-src/freepbx-2.0.1/SQL/newinstall.sql
- Datenbank Rechte
Damit auch nur die richtigen User Zugriff auf die Daten haben, vergeben wir hier entsprechende Recht. Diese Befehle werden in der MySQL Shell ausgeführt:
mysql --user root -p mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'amp109'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'amp109'; Query OK, 0 rows affected (0.00 sec) mysql> quit
Der default Benutzername und das Kennwort lauten: asteriskuser:amp109 Der Sicherheit zuliebe, sollte man dies ändern. Bei der Installation, die gleich folgt, wird man nach diesem Kennwort und Benutzernamen gefragt. Ich habe es aber noch auf Default gelassen:
FreePBX Installation
# /usr/src/asterisk-src/freepbx-2.0.1/install_amp
Bei der Frage für das AMP Root, CGI und Panel Verzeichnis, entsprechend eingeben, was oben angegeben wurde. Den Rest kann man so übernehmen, abgesehen vom Admin Passwort ;-)
Ergänzung: Das ging bei mir so nicht, ich musste erst in das Verzeichnis wechseln, um installieren zu können. Also wenn es hier klemmt folgendes tun:
cd /usr/src/asterisk-src/freepbx-2.0.1/ ./install_amp
/Ende Ergänzung, Lutz Willek, 20060606
- Rechte für /dev/mISDN
Da Asterisk nicht auf das Gerät /dev/mISDN zugreifen darf, da es noch root gehört, müssen wir die Datei /usr/sbin/amportal ein wenig anpassen. Aus den Zeilen:
if [ -d /dev/zap ] then chown -R asterisk:asterisk /dev/zap fi
machen wir ein:
if [ -d /dev/mISDN ] then chown -R asterisk:asterisk /dev/mISDN fi
Ergänzung: Das Skript sieht in neueren Versionen etwas anders aus, folgendes muss hinzugefügt werden, etwa ab Zeile 52:
[ -e /dev/mISDN ] && chown -R asterisk:asterisk /dev/mISDN
/Ende Ergänzung Lutz Willek, 20060606
- Dann kann man das amportal starten mit:
asterisk:/# amportal start SETTING FILE PERMISSIONS Permissions OK STARTING ASTERISK Asterisk Started STARTING FOP SERVER FOP Server Started
Erster Zugriff auf das Portal
Ist soweit alles gut gegangen und sämtliche Dienste gestartet ( Apache restart nicht vergessen, da User gewechselt wurde), können wir auf das Portal zugreifen, bei mir mit http://asterisk od. http://192.168.100.6. Username und Passwort sind admin:admin.
Der Erste Eindruck, dürfte ein leerer sein ;-) Bei FreePBX müssen nur die Webmodule aktivieren, die auch tatsächlich genutzt werden. Dies verbessert die ÿbersichtlichkeit enorm.
FreePBX Weboberfläche
Grundeinrichtung
Damit wir nun weitermachen können, klicken wir oben Rechts auf Setup (sofern wir da noch nicht sind) und klicken Links auf Module Admin .Dann erscheint eine Liste. Um unsere benötigten Module zu aktivieren, klicken wir zuerst auf Install und dann ein zweites Mal auf Enable . Dazu zählen:
- Core
- Ring Groups
- On Hold Music
- Backup & Restore
Am Ende sollte es so aussehen:
mISDN Trunk einrichten
Die erste Aufgabe besteht darin, den mISDN Trunk für die Verbindung zur Auÿenwelt herzustellen. Dazu wird Links im Menü auf Trunks geklickt und dann im Hauptfenster unten auf Add Custom Trunk. Die Felder die ausgefüllt werden, wären die Folgenden:
Unter General Setting:
- Outbound Caller ID : steht für die MSN, die verwendet werden soll. Wird keine eingetragen, wird die Haupt- MSN verwendet.
Unter Outgoing Settings:
- Custom Dial String: steht für die Leitung, die verwendet werden soll.
Wie der String aufgebaut wird, hängt von der mISDN Konfiguration ab. In diesem Fall haben wir in der /etc/misdn-init.conf bestimmt (te_ptmp=1), dass Karte Numer 1, die externe Leitung zur Verfügung stellt.
Von daher lautet der String also:
misdn/1/$OUTNUM$
Die Variable $OUTNUM$ ist eine vorgegebene und muss so angegeben werden. Später kommen wir auf diese Variable noch einmal zurück.
Am Ende kann es so aussehen, wie auf dem Bild:
Nach einem Submit Changes erscheint oben Rechts unser neuer Trunk. Der vorhandene "Zap" Trunk kann gefahrlos gelöscht werden. Dazu einfach diesen Trunk anklicken (oben rechts) und dann im Hauptfenster den unscheinbaren Link Delete Trunk ... anklicken.
Vermutlich ist nach dem ersten Submit Changes, dieser hübsche rote Balken aufgefallen. Nach jeder ÿnderung muss dieser angeklickt werden, welches ein "asterisk reload" nach sich zieht. Nach ein paar Sekunden (je nach Umfang der ÿnderungen) sind die ÿnderungen aktiv.
SIP (Sipgate) Trunk einrichten
Da ich nur Sipgate verwende, werde ich es an diesem Beispiel aufzeigen. Für andere Sip Provider, sollte der Weg der selbe sein.
Um auch eingehende und ausgehende Sip Gespräche zu führen, die über einen Provider wie Sipgate laufen, fügen wir einen weiteren Trunk hinzu. Dazu klicken wir im Setup Portal auf Trunks und dann auf Add Sip Trunk.
Die auszufüllenden Felder wären:
Outgoing Settings
- Trunk Name : steht für den Namen, als Beispiel habe ich Sipgate eingetragen.
- PEER Details: alle Informationen die Nötig sind, um Kontakt mit dem Provider aufzunehmen. Meine sehen so aus:
allow=gsm&ilbc&alaw&ulaw context=from-pstn disallow=all fromdomain=sipgate.net fromuser=123456 host=sipgate.de insecure=very secret=GEHEIM type=friend username=123456
Einzig fromuser, secret und username müssen angepasst werden. fromuser/username ist die Telefonnummer, die einem der Provider hat zugewiesen, ohne Vorwahl.
Das nächste Feld wäre:
Registration
- Register String : wird von vielen Providern gefordert, damit sich der Client (Asterisk) am Sip Server anmelden kann. Die Daten entsprechen denen oben, unter Outgoing Settings/PEER Details
123456:GEHEIM@sipgate.de/123456
Nach einem Submit Changes und dem Klick auf den roten Balken ist auch dieser aktiv, ob er auch funktioniert, testen wir später.
Die ersten ISDN Telefone
Damit wir endlich unsere ISDN Telefone benutzen können, richten wir dazu zwei Extensions ein. Diese sind der Dreh und Angelpunkt einer jedes Asterisk Installation. FreePBX nimmt einem hier aber schon eine Menge Vorarbeit ab, sodass wir uns nur auf die wichtigen Dinge beschränken können.
Für unser ersten ISDN Telefon, welches vorher schon die MSN 400 zugewiesen bekommen hat, richten wir die Extension folgenderweise ein:
Ein Klick links auf Extensions und ein weiterer im Hauptfenster, auf Custom.
In dem neuen Fenster, lassen sich folgende Werte vergeben:
Add Extension:
- Extension Number : Die Interne MSN
- Display Name: Wem der Anschluÿ gehört. Wird bei unterstützten Telefonen (z.B. Sip) dann auf dem Display des Angerufenen angezeigt.
Extension Options
- Outbound CID: Die externe Absender MSN kann hiermit überschrieben werden, natürlich nur dann, wenn MSN tatsächlich zu diesem Anschluÿ gehört.
Device Options
- dial: Hier wird unser Telefon der zweiten ISDN Karte zugewiesen. Der erste Wert steht für das Gerät misdn, der zweite für welchen Port bzw. Karte, in dem Fall 2 und als letzter Wert, die MSN von dem Telefon, 400 also.
Voicemail & Directory
Den stellen wir auf enable, damit wir auch gleich den Anrufbeantworter haben.
- voicemail password: Das kennwort, für die Fernabfrage
- email address: Infomail, wer wann angerufen hat, geht an diese Mailadresse
- email attachment - yes: Auf Yes stellen, damit wir die Aufnahme per Mail erhalten
- Delete Vmail - yes: ist bei mir auf Yes gestellt, dann wird die Aufahme auf dem System gelöscht, nachdem sie per Mail versandt worden ist.
Zusammen gefasst, ergeben sich somit folgende Werte:
Extension Number: 400 Display Name: denny Outbound CID: 974481 dial misdn/2/400 Voicemail & Directory: Enable voicemail password: 123456 email address sagichnicht@domain.foo email attachment: yes Delete Vmail: yes
Der Rest sind die Defaultwerte.
Nach einem Submit und dem obligatorischem Klick auf den roten Balken, lässt nun unser Telefon aktiv werden.
Diese Schritte lassen sich nun für jedes weitere ISDN Telefon wiederholen. Es müssen nur die Werte angepasst werden.
Ist dies geschehen, kann man bereits untereinander, intern, telefonieren.
Und SIP/Softtelefone sowieso
Was wir mit ISDN können, können Sip Telefoniere schon lange :-)
Um ein Sip Gerät, bzw. ein Softtelefon wie xten-lite, kphone etc. zu benutzen, müssen wir ebenfalls eine Extension hinzufügen. Dieses gestaltet sich genauso einfach, wie das vom ISDN Telefon.
Ein Klick links auf Extensions, dann auf SIP, führt uns schon auf den richtigen Weg. Dort habe ich als Beispiel folgende Werte verwendet:
Extension Number: 200 Display Name: Denny-Sip secret: 54321 voicemail password: 12347 email address: sagichnicht@domain.foo email attachment: yes Delete Vmail: yes
Einzig neu ist das Feld secret. Es wird benutzt um sich am Asterisk zu authentifizieren, zusammen mir der Extension Number.
Nach einem Submit und einem erneuten Klick rechts oben auf die neue Extension Denny-Sip, werden einem unter Device Options noch mehr Möglichkeiten geboten, etwas zu verstellen und kaputt zu machen ;-) Die einzelnen Werte werde ich später noch erläutern, sobald ich sie verstanden habe.
Nun können wir das Siptelefon so konfigurieren, dass es als Username die 200 verwendet und als Kennwort 54321. Danach kann nun fröhlich mit den ISDN Telefonen, od. anderen willigen, telefoniert werden. Dazu genügt es einfach, die jeweilige interne MSN anzugeben, egal ob auf dem SIP, od. ISDN Telefon.
Hinaus in die weite Welt, per mISDN - Outbound Routes
Da es auf Dauer langweilig wird, mit sich selbst zu telefonieren (MSN400 Rechtes Ohr, MSN401 Linkes Ohr), wollen wir es mal mit der Welt probieren.
Damit dies gelingt, müssen wir eine Abgehende Route erstellen. Dazu klicken wir links auf Outbound Routes. Sogleich können wir folgende Felder füllen:
- Route Name: wie die Route heiÿen soll
- Dial Patterns: Eine art Filter, welcher bestimmt, unter welchen Vorraussetzungen diese Route zum Einsatz kommt., näheres gleich mehr dazu.
- Trunk Sequence: Welcher Trunk für diese Route verwendet werden soll. Eine Auswahlbox, mit den erstellen Trunks.
Ich habe folgendes eingetragen:
Route Name: abgehend Dial Pattens: X. Trunk Sequence: AMP:misdn/1/$OUTNUM$
Bei den Dial Pattern ist wirklich nur ein X und ein Punkt eingetragen. Das X besagt, dass er bei jeder gewählen Nummer (0-9) diese Route verwendet. Das System ist so schlau, dass es keine Rolle spielt, ob ich eine interne Nummer wähle, zb. 400, oder eine reguläre Ortstelefonnummer. Möchte ich jedoch intern von extern trennen, kann ich dem System auch mitteilen, dass der Benutzer zuerst eine 0 wählen muss, um ein reguläres Amt zu erhalten, so wie es bei vielen Firmen üblich ist.
Wer dieses Verhalten auch unter Asterisk haben möchte, muss unter den Dial Patterns, statt dem PUNKT, folgendes eintragen:
0|.
Damit kann intern telefoniert und für extern muss eine Null vorgewählt werden.
Hat man wieder auf Submit Changes geklickt, kann auch schon raustelefoniert werden. Als erste Wahl wäre natürlich 0800 220 5050 angebracht. Domian wäre sicher erfreut zu hören, dass ihr erfolgreich die Outbound Route eingerichtet habt. :-)
Die Welt zu Gast, wer mit wem - Inbound Routes
Jetzt können wir zwar andere anrufen, intern, als auch extern, doch angerufen werden, von der Mutti z.B. , klappt noch nicht. Der Grund liegt darin, dass Asterisk noch nicht weiÿ, wie er mit den eingehenden Anrufen umgehen soll. Um dies zu ändern, stellt uns FreePBX ein Aqivalent zu Outbound Routes zur Verfügung, nämlich die Inbound Routes. Diese erreichen wir wie gehabt, per klick Links auf Inbound Routes. Auch dort lassen sich wieder Werte eintragen:
Add Incoming Route
- DID Number: auf welcher MSN Nummer die Route reagieren soll
- Caller ID Number: Auf welche ankommende Nummer er reagieren soll (sofern der Anrufende sie nicht deaktiviert hat). Damit lässt sich die Nummer immer fest einem Gesprächspartner zuordnen. Kunde X, bekommt immer Mitarbeiter Y.
Set Destination
- Ring Group: Auf welche Klingelgruppe der Anruf gehen soll. Dazu später mehr.
- Core: Auf welches Telefon der Anruf gehen soll
- (diverse andere Möglichkeiten, wird später vervollständigt)
Ich habe drei unterschiedliche eingehende Routen erstellt:
- MSN 974480 geht auf die Klingelgruppe 1
- MSN 974481 geht auf das ISDN Telefon 400
- SIP MSN geht auf mein Sip Softtelefon.
Es muss lediglich unter DID Number die entsprechend MSN angegeben werden unter unter Set Destination, das Ziel. Nach dem Klick auf Submit Changes und dem Klick auf Rot, werden die Routen aktiv und können getestet werden.
Ich klingel, du klingelst, wir alle klingeln - mit Ring Goups
In Firmen und Familienunternehmen, gibt es in der Regel eine Hauptnummer, bei dem ein eingehender Anruf alle angeschlossenen Telefone klingeln lässt. (Dieses System wurde vermutlich von Unfallversicherungen erfunden, um die Gefahr von Beinbrüchen, Prellungen und Schürfwunden zu minimieren. Denn wer kennt das nicht, das Telefon unten klingeln, man selbst befindet sich im zweiten Stock und muÿ nun schleunigst runterhechten, wobei diverse Hindernisse (Matchbox Autos, Staubsauger, Windeln, Legosteine, Socken etc.) dieses Unterfangen erschweren können, ohne Verletzungen, und rechtzeitig, unten anzukommen.)
Dies lässt sich selbstverständlich auch mit Asterisk umsetzen. Wir möchten z.B. das eingehende Anrufe auf der MSN 974480 das Telefon 400 und 401 klingeln lässt. Dazu bewegen wir unseren Mauszeiger auf die linke Seite und wählen Ring Groups.
Wieder einmal erwartert FreePBX von uns Angaben:
Add Ring Group
- group number: Eine beliebige Zahl, die 1 wäre ein guter Anfang
- ring strategy: Was soll passieren
- extension list: Welche Telefone nehmen daran teil
- CID name prefix: Ein einprägsamer Name zum zuordnen
- ring time (max 60 sec): Wie lang sollen die Telefone klingeln
Destination if no answer
- Ring Groups: Wenn keine da, dann leite auf diese Ring Group um.
- Core: Leite den Anruf auf genau dieses Telefon
Um bei mir alle Telefone klingeln zu lassen, habe ich folgende Werte vergeben:
group number: ring strategy: ringall extension list: 400 401 (untereinander geschrieben) CID name prefix: alle ring time (max 60 sec): 5
Destination if no answer: Ring Groups denny-handy<2>
Dieses hat zur folge, das bei einem Anruf auf der Haupt MSN alle Telefone 5 Sekunden lang klingeln. Wenn keiner dran geht, wird auf die Ring Group 2 weitergeleitet, welches mein Handy ist.
Wie das funktioniert, folgt jetzt.
Automatisch Umleiten
Wenn keiner im Büro sitzt, die Kunden dennoch auf das Festnetzt anrufen, kann ich bei jedem ISDN Telefon eine Rufweiterschaltung einrichten. Dies kann Asterisk natürlich ach. Dazu machen wir uns ebenfalls die Ring Group ' Funktion zu nutze.
Der Weg ist der selbe, wie für unsere erste "Ring Group 1 alle" . In der extensions list: tragen wir jedoch statt einer normalen MSN unsere Handy nummer ein, gefolgt von einer Raute/Lattenkreus (#):
group number: 2 ring strategy: ringall extensions list: 01791234567# CID name prefix: denny-handy ring time (max 60 sec): 10
Destination if no answer: Core: voicemail box 400
Geht also keiner ans Handy, wird der Anruf auf meinen lokalen Anrufbeantworter umgeleitet, welcher mir dann ja per Mail Bescheid gibt. Nachdem absenden per Submit Changes und dem Klick aufs Rote, kann ich diese Ring Gruppe 2 nun in der Ring Gruppe 1 eintragen, für den Fall, dass keiner an Telefon geht.
Die Raute (od. Lattenkreuz) # hat in diesem Fall eine besondere Bedeutet. Anhand dieses Zeichen verwendet Asterisk nämlich den mISDN Trunk, den wir weiter oben angelegt hatten:
misdn/1/$OUTNUM$
Somit heiÿt es für Asterisk: Wähle die Rufnummer 01791234567 und verwende dafür den Trunk misdn/1/$OUTNUM$.
Somit hätten wir einen geschlossenen Kreislauf :-)
Elfriiiidddaaa, gehst du mal ran? Meine Nägel sind nicht trocken - kein Problem, mit Pickup
Wieder eine Situation, die jeder kennt: Die liebe Sekretärin, wie immer besorgt um ihr äuÿeres Erscheinungsbild, hält gerade ihre tägliche Manicur Prozedere ab und sieht sich somit auÿer Stande, das stetig klingelnde Telefon abzunehmen. Also muÿ dies jemand anderes für sie übernehmen. In unserem Fall die liebe Frau Bertram. Sie drückt die Sterntaste und die 8, schon wird der Anruf zu ihr herübergeholt.
Damit dies funktioniert, müssen die Telefone in einer Gruppe sein. Dafür wird in der Datei /etc/asterisk/misdn.conf folgendes eingetragen:
; Pickup and Callgroup ; ; deafult values: not set = 0 ; callgroup=1 pickupgroup=1
Für die SIP Telefone lässt sich dies bequemer per FreePBX umsetzen. Dazu genügt es über den Klick links auf Extensions, die entsprechend angelegten Sip Telefone auszuwählen und in der Zeile pickupgroup eine Nummer zu setzen. Die Telefone in der Verwaltung könnten die Nummer 1 haben und die Techniker die Nummer 2 etc. pp. So würde verhindert werden, das Frau Bertram beispielsweise in die Verlegenheit kommen würde, einem Hilfesuchenden Windowsanwender zu erläutern, wie er seinen verschwundenen Desktop wieder bekommt :-)
Ist das passiert und Asterisk neugestartet (einfach dazu irgendwo auf ein "Submit Changes" klicken zuzüglich dem obligatorischem Klick auf den roten Balken), kann auch schon getestet werden.
Klingelt nun ein Telefon, fernab von einem selbst, reicht ein Druck auf die Stern Taste des Telefons, gefolgt von einem Druck auf die 8, schon wird der Anrufer zu einem herüber gestellt.
Merke: Dieses Verhalten funktioniert allerdings nur unter den Technologien untereinander. Das Bedeutet, klingelt ein ISDN Telefon, so ist es (derzeit) nicht möglich, das klingelnde Telefon zu sich auf ein Sip Telefon zu holen. Es geht also nur von ISDN zu ISDN und SIP zu SIP.
Bertraaamm für dich! - Blind transfer
Eine der Hauptfunktionen einer TK-Anlage besteht daran, angenommen Gespräche auf andere Apparate weiter zuvermitteln. Diese Funktion ist von hause aus in Asterisk integriert und wird mit Hilfer der Raute Taste (#) Initiiert. Dazu genügt es, das Gespräch anzunehmen, die Raute Taste zu drücken (worauf der Anrufer eine Ansage erhält mit anschlieÿender Wartemusik), gefolgt von der entsprechenden Rufnummer. Es ist dabei egal, ob dies eine interne Nummer ist, oder eine externe.
Geht alles glatt, hört man selbst nur noch das Besetztzeichen und die gewählte Nummer übernimmt das Gespräch.
Verbindungsdaten überprüfen
Jede Anlage die etwas auf sich hält, verfügt über die Möglichkeit Verbindungsdaten abzufragen. Sprich - wer hat mit wem wie lang. Bei der Installation von FreePBX wird auch eine entsprechende Anwendung mit ausgeliefert. Um dorthin zu gelangen, muss man nur oben rechts (neben Setup) auf Reports klicken und schon erhält man eine Einzelverbindungsauflistung. Am Ende eben dieser, wird noch eine grafische Anzeige geliefert, sowie die Möglichkeit nach PDF oder ins CSV Format zu exportieren.
Da in der Regel sehr viele Informationen anfallen, lässt sich dies einschränken, mit Hilfe der Selektions Wahl am Anfang der Seite. Möchte man zum Beispiel erfahren, wann Rufnummer X zum Telefon Y durchgestellt wurde, reicht es unter DESTINATION die interne od. eigene MSN Rufnummer anzugeben (z.B.400) und die gewünschte Rufnummer des Kunden unter SOURCE. Nach einem Klick auf Search, werden all diese Verbindungen aufgelistet.
Upgrade von FreePBX 2.0.x auf 2.1.x
Da soeben die neue Version von FreePBX als stabil gekennzeichnet wurde, steht einem Upgrade nichts im Wege. Unter der Voraussetzung, das ein funktionierndes (!) Backup vorhanden ist (also nicht nur das Web Verzeichnis, sondern auch die beiden Datenbanken), kann das bestehende System aktualisiert werden.
Dazu laden wir uns die neue Version herunter:
wget http://mesh.dl.sourceforge.net/sourceforge/amportal/freepbx-2.1.0.tar.gz
Welche dann entsprechend entpackt wird. Im Verzeichnis selber, kann dann mit einem:
# ./install_amp --force-version=2.0.1
installiert werden. Ist das Script durchgelaufen, muss FreePBX neugestartet werden:
amport stop amport start
ein amport restart ginge zwar auch, ist bei mir aber schon das eine od. andere Mal schief gelaufen.
Wichtig!
Aufgund eines noch ungeklärten Bugs wird Asterisk nicht immer neugestartet, bwz. überhaupt nicht. Dann kommt es zu haufenweise Fehlermeldungen auf der Webseite. Den roten Balken anzuklicken sollte man ersteinmal ignorieren, bis sowohl das Haupt- sowie die Zusatzmodule aktualisiert worden sind.
Neue Module für FreePBX 2.1
Beim erneuten Zugriff auf das Portal wird man wieder feststellen, das dass Setup leer ist. Wie schon beim ersten Mal. Um dies zu ändern, klickt man auf Tools und dann auf Module Admin. Bevor es an die Zusatzmodule geht, muss zuerst das Haupt Modul Core (core) auf den neusten Stand gebracht werden. Dazu einfach das Häckchen anklicken und den Knopf "Upgrade betätigen.
Ist das Upgrade des Modules durchgelaufen, kann man auch schon den ersten Link anklicken "Connect to Online Module Repository". (Ich schreibe den Vorgang nun aus dem Kopf, falls er anders sein sollte, bitte Bescheid geben). Danach wird eine Verbindung zu der Webseite von FreePBX hergestellt und die restlichen Modulinformationen bezogen. Denn die Module die als unknown() aufgezeigt werden, erhalten dann ihren wirklichen Namen.
Auch einige der Zusatzmodule benötigen ein Update, welches genauso bequem passiert, wie das Hauptmodul. Da es bei mir aber zu einer Fehlermeldung, aufgrund eines fehlenden Verzeichnisses kam, wird das eben noch schnell erzeugt:
# mkdir /var/lib/asterisk/sounds/custom/ # chown asterisk:asterisk -R /var/lib/asterisk/sounds/custom/
Ist alles auf dem aktuellen Stand, kann es weitergehen, wie bisher. :-)
Quellen
ToDo
noch eine Menge ;-)
Quellen
ToDo
noch eine Menge ;-) --Denny 18:27, 12. Mai 2006 (CEST)