Installing And Configuring Asterisk 1.6 + PostgreSQL To Manage CDR & RealTime Config On Debian
In this tutorial, I will describe how to install and configure Asterisk 1.6 on a Debian system to work with PostgreSQL in order to manage CDR (Call Detail Records) and real-time configuration.
For this we will use a clean and up-to-date Debian Etch/Lenny system; the first step is to reconfigure the kernel with some new parameters so that it supports Asterisk optimally.
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
cd /usr/src
Download the kernel source, I will use 2.6.26:
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.8.tar.gz
tar xfv linux-2.6.26.8.tar.gz
ln -s /usr/src/linux-2.6.26.8 /usr/src/linux
cd /usr/src/linux
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
make menuconfig
Now in the kernel configuration, we select this:
Processor type and features >> [*]IRQ balancing
Processor type and features >> Timer frequency = 1000 Hz.
Processor type and features >> [*]High Resolution Timer Option
Processor type and features >> [*]HPET Timer Support
Device Drivers >> Character Devices >> [*]Enchanced Real Time Clock Support
Library Routines >> [*]CONFIG_CRC_CCITT
Now compile and make a .deb package for the kernel:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers
We can now install the kernel as follows:
cd /usr/src
dpkg -i *.deb
Now we need to reboot:
reboot -t now!
Ok, now we have the system fully optimized for best performance with VoIP. Now we prepare the machine for compiling Asterisk from the sources:
apt-get install build-essential libcurl3-dev libvorbis-dev libspeex-dev unixodbc unixodbc-dev libiksemel-dev
apt-get install flex xsltproc odbc-postgresql libusb-dev libnewt-dev libxml2-dev bison
apt-get install linux-headers-`uname -r` g++ libncurses5-dev libnewt-dev libusb-dev subversion git-core
apt-get install postgresql-8.1 postgresql-contrib-8.1 postgresql-client-8.1 postgresql-dev
Our system is ready, now download the Asterisk sources from the svn repo. In Asterisk 1.6 Zaptel is renamed to DAHDI, and we add mISDN for ISDN trunks:
cd /usr/src
mkdir asterisk
cd asterisk
svn co http://svn.digium.com/svn/asterisk/trunk asterisk
svn co http://svn.digium.com/svn/asterisk-addons/trunk asterisk-addons
svn co http://svn.digium.com/svn/dahdi/linux/trunk dahdi-linux
svn co http://svn.digium.com/svn/dahdi/tools/trunk dahdi-tools
svn co http://svn.digium.com/svn/libpri/branches/1.4 libpri
git-clone git://git.misdn.org/git/mISDN.git/
git-clone git://git.misdn.org/git/mISDNuser.git/
Now we start compiling the DAHDI modules, for managing and controlling Digium devices and others:
cd /usr/src/asterisk/dahdi-linux
make && make install
Now the DAHDI tools
cd /usr/src/asterisk/dahdi-tools
./configure
make menuselect
make
make install
make config
To optimize boot time, we unload unnecesary modules, therefore edit /etc/dahdi/modules and comment out all modules, except that one you will use, for example, I have a Digium TDM400P, so I uncomment wctdm.
Now we build libpri:
cd /usr/src/asterisk/libpri
make && make install
Now only if you have the ISDN trunk. This step is
**OPTIONAL**
cd /usr/src/asterisk/mISDN
make
make install
cd /usr/src/asterisk/mISDNuser
make && make install
mISDN scan
mISDN config
mISDN start
misdnportinfo
/usr/sbin/update-rc.d mISDN defaults 15 30
**END OPTIONAL**
Now we compile Asterisk itself:
cd /usr/src/asterisk/asterisk
./configure
make menuconfig
make
make install
make samples
make config
asterisk -vvvc
Ctrl+C for exitSo, we have an ordinary Asterisk 1.6 just like any other, but now we make it unique and configure it to work in realtime.
First we need the DB schema, Asterisk has one, but it is bugged, so I use my own DB.
cd /usr/src/asterisk
wget http://coto.debianchile.cl/files/realtime_pgsql.sql
su - postgres
createuser -s -D -R -l -P -e asterisk
createdb -O asterisk -e asteriskDB
pgsql -U asterisk -h localhost -d asteriskDB < /usr/src/asterisk/realtime_pgsql.sql
Allow asterisk to connect to PostgreSQL:
echo "local asteriskDB asterisk md5" >> /etc/postgresql/8.1/pg_hba.conf
Now we prepare the configuration files in Asterisk:
nano /etc/asterisk/cdr_pgsql.conf
[global] hostname=localhost port=5432 dbname=asteriskDB password=password user=asterisk table=cdr
nano /etc/asterisk/extconfig.conf
[settings] extensions => pgsql,asteriskDB,extensions_conf sipuser => pgsql,asteriskDB,sip_conf sippeers => pgsql,asteriskDB,sip_conf sipregs => pgsql,asteriskDB,sip_conf voicemail => pgsql,asteriskDB,voicemail_users queues => pgsql,asteriskDB,queue_table queue_members => pgsql,asteriskDB,queue_member_table
nano /etc/asterisk/res_pgsql.conf
[general] dbhost=127.0.0.1 dbport=5432 dbname=asteriskDB dbuser=asterisk dbpass=password requirements=warn
All set... we are ready, now just restart Asterisk. Congratulations!
/etc/init.d/asterisk restart
HOW-TO IS OUTDATED... UpGrade in progress in http://coto.debianchile.cl/asterisk/asterisk-postgresql/ This is in Spanish, very soon English version, only here.. in HowToForge! Cheers, Coto Cisternas