Anbindung von postgresql an asterisk

Diesen Beitrag schrieb ich 16 Jahre und 2 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 1 Minute

Eine weitere Übersicht: asterisk-1.4.4 an postgresql knüppeln.

Installation der Abhängigkeiten

$ apt-get install zlib1g-dev zlib1g
$ apt-get install postgresql postgresql-client postgresql-contrib
$ apt-get install libpq-dev libpq
$ apt-get instal odbc-postgresql
$ apt-get unixodbc-dev unixodbc

asterisk und die Datenbank

Danach asterisk-1.4.4 kompilieren, installieren (./configure, make, make install, make samples). Dann einen User asterisk und eine Datenbank asterisk hinzufügen:

$ su - postgres
$ createuser -s -d -l -E asterisk
$ createdb asterisk

User asterisk kann sich jetzt noch nicht unfallfrei einloggen; wenn er es versucht (psql -W -d asterisk -U asterisk), erhält er eine Fehlermeldung:

psql: FATAL: IDENT authentication failed for user "asterisk"

Deshalb ist folgender Eintrag nötig in der Datei /etc/postgresql/8.2/main/pg_hba.conf:

local asterisk asterisk password
host asterisk asterisk 127.0.0.1 255.255.255.255 password

Befüllen der Datenbank

Ist das geschafft, ist ein /etc/init.d/postgresql-8.2 restart fällig. Und nun kann die Datenbank mit Inhalt gefüllt werden: der Reihe nach aufrufen:

$ psql -U asterisk -W -d asterisk -f extensions_conf
$ psql -U asterisk -W -d asterisk -f cdr.sql
$ psql -U asterisk -W -d asterisk -f sip_conf.sql
$ psql -U asterisk -W -d asterisk -f voicemail_users.sql
$ psql -U asterisk -W -d asterisk -f queue_table.sql
$ psql -U asterisk -W -d asterisk -f queue_member_table.sql
$ psql -U asterisk -W -d asterisk -f grants.sql

Jetzt steht die Datenbank und es geht eigentlich nur noch darum, diese auch wirklich an den asterisk anzubinden; das ist vergleichsweise trivial.

/etc/asterisk/res_odbc.conf

[pg]
dsn => asterisk
username => asterisk
password => keins
pre-connect => yes

/etc/asterisk/extconfig.conf

[settings]
extensions => odbc,pg,extensions_conf
sipusers => odbc,pg,sip_conf
sippeers => odbc,pg,sip_conf
iaxusers => odbc,pg,sip_conf
iaxpeers => odbc,pg,sip_conf
queues => odbc,pg,queue_table
queue_members => odbc,pg,queue_member_tables

Abschließend

Nachdem der asterisk gestartet wurde, kann man übers CLI prüfen, ob die Datenbankverbindung steht:

\*CLI> odbc show
Name: pg
DSN: asterisk
Pooled: no
Connected: yes

Sieht gut aus. Hierbei handelt es sich übrigens um ein Realtime-Setup; d.h. weder asterisk noch Datenbank müssen wegen etwaiger Änderungen neu gestartet werden, jede Änderung wird on-the-fly aktiv. Nachteil: ist die Datenbank down, gehen auch die Telefone nicht. Daher ist hier ein repliziertes System zumindest anzudenken.