Asterisk, FreePBX und mISDN unter Debian

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

In Arbeit:

Hinweis
Hinweis

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.

Setup leer freepbx.jpg

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:


Module admin freepbx.jpg


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:

Module trunks freepbx.jpg

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)