Поиск по моему блогу

Установка сервера IP-телефонии Asterisk + FreePBX в Debian Lenny

Asterisk (PBX)Image via WikipediaВ предыдущих статьях (1, 2, 3, 4) подробнейшим образом рассматривались различные аспекты установки и настройки сервера IP телефонии Asterisk. С того времени утекло много воды, вышли новые версии пакетов. На днях пришлось столкнуться повторно с настройкой Asterisk-а. Решил поделиться, может кому поможет. В статье будет также рассмотрена настройка FreePBX - веб-интерфейса для управления астериском.
По традиции буду показывать степ-бай-степ хаутушку на свежеустановленном Debian Lenny.
Поставим минимальный софт, чтобы зацепиться по ssh и более-менее комфортно продолжать настройку по сети
# apt-get install zip unzip bzip2 arj mc ssh sudo
Пропишем дополнительные репы в /etc/apt/sources.list закомментируем привод
# vim /etc/apt/sources.list

# deb cdrom:[Debian GNU/Linux 5.0.3 _Lenny_ - Official i386 CD Binary-1 20090905-08:23]/ lenny main

deb http://ftp2.de.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp2.de.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

deb ftp://ftp.debian-multimedia.org lenny main non-free
Прежде чем обновлять список пакетов, добавим ключик для debian-multimedia, чтобы apt не ругался
# wget http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/d...
# dpkg -i debian-multimedia-keyring_2008.10.16_all.deb
# rm debian-multimedia-keyring_2008.10.16_all.deb
Теперь можно обновлять список пакетов реп и апгрейдить систему
# apt-get update
# apt-get upgrade

Установка необходимых пакетов для Asterisk

Идём на сайт астериска и вытягиваем необходимые пакеты. на сайте, как правило представлены 4 пакета астериска. В порядке убывания версий они классифицируются следующим образом: trunk, stable, release, old. К примеру на текущий момент выложены следующие версии:
Asterisk 1.6.2 - trunk     Asterisk 1.6.1 - stable     Asterisk 1.6.0 - release     Asterisk 1.4 - old
Транк, естественно, трогать не будем. Для себя я выбрал Stable. Качаем его + некоторые дополнительные пакеты, которые в дальнейшем нам могут пригодиться. Кратко поясню что и для чего надо:
  • LibPRI - добавляет поддержку ISDN
  • DAHDI - обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса Daahdi плюс программные эхоподавителели с другой. Драйвера интерфейсов позволяют использовать аппаратные средства (карты) для соединения Asterisk с традиционными аналоговыми или цифровыми телефонными сетями
  • LibSS7 - библиотека, реализующая работу по протоколу SS7
# cd /usr/local/src/
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.1.19.tar.gz \
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.6.1.3.tar.gz \
http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.3.0+2.3.0.tar.gz \
http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.2.tar.gz \
http://downloads.asterisk.org/pub/telephony/libss7/releases/libss7-1.0.2.tar.gz
Стоит отметить, что до версии 1.4 астериску, для связи с железками требовался пакет zaptel, но какая-то фирма, продающая телефонный примочки предъявили документы, по кторым товарный знак 'zaptlel' принадлежит ей, а не digium. В результате Asterisk 1.6 использует модуль DAHDI. Версия 1.4 астериска - может использовать как DAHDI, так и Zaptel. Версия 1.2 - только zaptel. По сути, DAHDI является продолжение Zaptel-а, включает поддержку оборудования, что поддерживал Zaptel, за минусом каких-то ООООЧЕНЬ древних железяк.
Соберём пакеты 
# cd /usr/local/src/
# tar xzfv /usr/local/src/libss7-1.0.2.tar.gz
# cd libss7-1.0.2
# make
# make install
# cd /usr/local/src/
# tar xzfv /usr/local/src/libpri-1.4.10.2.tar.gz
# cd libpri-1.4.10.2
# make
# make install
# cd /usr/local/src/
# tar xzfv /usr/local/src/dahdi-linux-complete-2.3.0+2.3.0.tar.gz
# cd dahdi-linux-complete-2.3.0+2.3.0
# make all
# make install
# make config

Установка Asterisk

Установим непосредственно сам астериск. Перед установкий читаем ридми, в котором говорится, какие библиотеки надо доустановить. Не удивляйтесь большому списку, просто на данном этапе также будут установлены пакеты, которые потребуются позже для установки FreePBX
Устанавливаем либы, собираем:
# apt-get install libncurses5-dev openssl libssl-dev zlib1g zlib1g-dev mpg123 linux-headers-`uname -r` build-essential \
mysql-server libmysqlclient15-dev php5 php5-cli php5-mysql php5-gd php-pear apache2 curl sox bison flex cpp g++ gcc make \
libauthen-pam-perl libio-pty-perl libmd5-perl libnet-ssleay-perl libxml2 libxml2-dev libtiff4 libtiff4-dev lame\
perl-modules libaudiofile-dev
# cd /usr/local/src
# tar xzfv /usr/local/src/asterisk-1.6.1.19.tar.gz
# tar xzfv /usr/local/src/asterisk-addons-1.6.1.3.tar.gz
# cd /usr/local/src/asterisk-1.6.1.19
# ./configure
Если всех библиотек хватает, то должны увидеть следующее
.......................
config.status: creating include/asterisk/autoconfig.h

               .$$$$$$$$$$$$$$$=..
            .$7$7..          .7$$7:.
          .$$:.                 ,$7.7
        .$7.     7$$$$           .$$77
     ..$$.       $$$$$            .$$$7
    ..7$   .?.   $$$$$   .?.       7$$$.
   $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
 .777.   .$$$$$$77$$$77$$$$$7.      $$$,
 $$$~      .7$$$$$$$$$$$$$7.       .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$       .7$$$$$$$$$$$$$$$$      :$$$.
$$$       $$$$$$7$$$$$$$$$$$$    .$$$.
$$$        $$$   7$$$7  .$$$    .$$$.
$$$$             $$$$7         .$$$.
7$$$7            7$$$$        7$$$
 $$$$$                        $$$
  $$$$7.                       $$  (TM)
   $$$$$$$.           .7$$$$$$  $$
     $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
       $$$$$$$$$$$$$$$$.

configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : i686
configure: build-cpu:vendor:os: i686 : pc : linux-gnu :
configure: host-cpu:vendor:os: i686 : pc : linux-gnu :
# make
......куча всяких букофф..........
..................................
   [LD] eagi-test.o strcompat.o -> eagi-test
   [CC] eagi-sphinx-test.c -> eagi-sphinx-test.o
   [LD] eagi-sphinx-test.o -> eagi-sphinx-test
 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and +
 + can be installed by running:              +
 +                                           +
 +                make install               +
 +-------------------------------------------+

# make install
.........................
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
                /usr/bin/install -c -m 644 contrib/firmware/iax/iaxy.bin /var/lib/asterisk/firmware/iax/iaxy.bin; \
        fi
 +---- Asterisk Installation Complete -------+
 +                                           +
 +    YOU MUST READ THE SECURITY DOCUMENT    +
 +                                           +
 + Asterisk has successfully been installed. +
 + If you would like to install the sample   +
 + configuration files (overwriting any      +
 + existing config files), run:              +
 +                                           +
 +                make samples               +
 +                                           +
 +-----------------  or ---------------------+
 +                                           +
 + You can go ahead and install the asterisk +
 + program documentation now or later run:   +
 +                                           +
 +               make progdocs               +
 +                                           +
 + **Note** This requires that you have      +
 + doxygen installed on your local system    +
 +-------------------------------------------+

# make samples
......................
mkdir -p /var/spool/asterisk/voicemail/default/1234/INBOX
build_tools/make_sample_voicemail //var/lib/asterisk //var/spool/asterisk
Installing file phoneprov/000000000000.cfg
Installing file phoneprov/000000000000-directory.xml
Installing file phoneprov/000000000000-phone.cfg
Installing file phoneprov/polycom_line.xml
Installing file phoneprov/polycom.xml
На этом установка непосредственно самого астериска завершена. Причитаем ридми к аадонсам, доустановим необходимые пакеты, прикрутим сами аддонсы (ooh323-кодек, поддержка mp3,).
# apt-get install lame
# cd /usr/local/src/asterisk-addons-1.6.1.3
# ./configure
..........................
config.status: creating build_tools/menuselect-deps
config.status: creating makeopts

               .$$$$$$$$$$$$$$$=..
            .$7$7..          .7$$7:.
          .$$:.                 ,$7.7
        .$7.     7$$$$           .$$77
     ..$$.       $$$$$            .$$$7
    ..7$   .?.   $$$$$   .?.       7$$$.
   $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
.777.   .$$$$$$77$$$77$$$$$7.      $$$,
$$$~      .7$$$$$$$$$$$$$7.       .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$       .7$$$$$$$$$$$$$$$$      :$$$.
$$$       $$$$$$7$$$$$$$$$$$$    .$$$.
$$$        $$$   7$$$7  .$$$    .$$$.
$$$$             $$$$7         .$$$.
7$$$7            7$$$$        7$$$
$$$$$                        $$$
  $$$$7.                       $$  (TM)
   $$$$$$$.           .7$$$$$$  $$
     $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
       $$$$$$$$$$$$$$$$.

configure: Package configured for:
configure: OS type  : Linux
configure: Host CPU : i686
Добавьте строку ASTCFLAGS+=-DMYSQL_LOGUNIQUEID в Makefile

# make
............................
make[1]: Leaving directory `/usr/local/src/asterisk-addons-1.6.1.3/res'
 +----   Asterisk-Addons Build Complete ----+
 +                                           +
 +   Addons has successfully been built .    +
 +   If you would like to install it :       +
 +                                           +
 +                make install               +
 +-------------------------------------------+

# make install
...........................
Installing modules from cdr...
Installing modules from res...
 +---- Asterisk-Addons Installation Complete ----+
 +                                               +
 +    Addons has successfully been installed.    +
 +    If you would like to install the sample    +
 +    configuration files (overwriting any       +
 +    existing config files), run:               +
 +                                               +
 +               make samples                    +
 +-----------------------------------------------+

# make samples
........................
for x in configs/*.sample; do \
                if [ -f /etc/asterisk/`basename $x .sample` ]; then \
                        if [ "y" = "y" ]; then \
                                if cmp -s /etc/asterisk/`basename $x .sample` $x ; then \
                                        echo "Config file $x is unchanged"; \
                                        continue; \
                                fi ; \
                                mv -f /etc/asterisk/`basename $x .sample` /etc/asterisk/`basename $x .sample`.old ; \
                        else \
                                echo "Skipping config file $x"; \
                                continue; \
                        fi ;\
                fi ; \
                /usr/bin/install -c -m 644 $x /etc/asterisk/`basename $x .sample` ;\
        done
#
Добавим extra-sounds для астериска (в комплекте идут только базовые звуковые файлы).
# cd /var/lib/asterisk/sounds/en
# wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-ulaw-current.tar.gz \
http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz
# tar xzfv asterisk-extra-sounds-en-ulaw-current.tar.gz
# tar xzfv asterisk-extra-sounds-en-wav-current.tar.gz
# rm asterisk-extra-sounds-en-ulaw-current.tar.gz asterisk-extra-sounds-en-wav-current.tar.gz
Вроде всё. Запустим астериск.
# asterisk -vvvc
........................................
SIP channel loading...
  == Parsing '/etc/asterisk/sip.conf':   == Found
  == Parsing '/etc/asterisk/users.conf':   == Found
  == SIP Listening on 0.0.0.0:5060
  == Using SIP CoS mark 4
  == Parsing '/etc/asterisk/sip_notify.conf':   == Found
  == Registered channel type 'SIP' (Session Initiation Protocol (SIP))
  == Registered application 'SIPDtmfMode'
  == Registered application 'SIPAddHeader'
  == Registered custom function 'SIP_HEADER'
  == Registered custom function 'SIPPEER'
  == Registered custom function 'SIPCHANINFO'
  == Registered custom function 'CHECKSIPDOMAIN'
  == Manager registered action SIPpeers
  == Manager registered action SIPshowpeer
  == Manager registered action SIPqualifypeer
  == Manager registered action SIPshowregistry
  == Manager registered action SIPnotify
 chan_sip.so => (Session Initiation Protocol (SIP))
  == Registered custom function 'CUT'
  == Registered custom function 'SORT'
 func_cut.so => (Cut out information from a string)
Asterisk Ready.
  == Parsing '/etc/asterisk/cli.conf':   == Found
*CLI>
Asterisk Ready и *CLI> означают, что астериск поставился нормально. перезагрузите сервак, чтобы проверить, как поднимаются dahdi, zaptel и пр.
Всё вроде здорово и замечательно, но есть несколько "НО"
  1. Астериск запускается от рута
  2. Нет скриптов автозапуска астериска
Решение первой проблемы.
Убедимся, что астериск не запущен. Если запущен - кильните его. Создадим пользователя asterisk и разрешим ему доступ к либам и конфигам
# ps ax|grep aster
12791 pts/1    S+     0:00 grep aster

# adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
# adduser asterisk dialout
# adduser asterisk audio
# adduser www-data asterisk
# chown -R asterisk:asterisk /var/lib/asterisk
# chown -R asterisk:asterisk /var/log/asterisk
# mkdir -p /var/run/asterisk
# chown -R asterisk:asterisk /var/run/asterisk
# chown -R asterisk:asterisk /var/spool/asterisk
# chown -R asterisk:asterisk /usr/lib/asterisk
# chown -R asterisk:asterisk /dev/dahdi
# chmod -R u=rwX,g=rX,o= /var/lib/asterisk
# chmod -R u=rwX,g=rX,o= /var/log/asterisk
# chmod -R u=rwX,g=rX,o= /var/run/asterisk
# chmod -R u=rwX,g=rX,o= /var/spool/asterisk
# chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
# chmod -R u=rwX,g=rX,o= /dev/dahdi
# chown -R root:asterisk /etc/asterisk
# chmod -R u=rwX,g=rX,o= /etc/asterisk
# cp /etc/asterisk/asterisk.conf /etc/asterisk/asterisk.conf.orig
# vi /etc/asterisk/asterisk.conf
Меняем
astrundir => /var/run
на
astrundir => /var/run/asterisk
Астериску нужны права на voicemail.conf для смены паролей
# chmod g+w /etc/asterisk/voicemail.conf
# chmod g+w,+t /etc/asterisk
# /etc/init.d/asterisk restart
Пропишем, чтобы апач запускался под пользователем asterisk. Для этого в файле  /etc/apache2/envvars поменяем переменные APACHE_RUN_USER и APACHE_RUN_GROUP. Соответсвенно выглядеть они должны следующим образом
export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk
Перезапустим апач, посмотрим, от имени какого пользователя он стал крутиться
# /etc/init.d/apache2 restart 
# ps aux|grep apache
root      2592  0.0  3.4  24196  4384 ?        Ss   02:33   0:03 /usr/sbin/apache2 -k start
asterisk  2629  0.0  9.3  31024 11724 ?        S    02:33   0:16 /usr/sbin/apache2 -k start
asterisk  2630  0.0  8.4  30208 10548 ?        S    02:33   0:17 /usr/sbin/apache2 -k start
asterisk  2631  0.0  8.7  30376 10932 ?        S    02:33   0:16 /usr/sbin/apache2 -k start
asterisk  2632  0.0  7.8  29516  9808 ?        S    02:33   0:01 /usr/sbin/apache2 -k start
asterisk  2678  0.0  8.8  30400 11044 ?        S    02:34   0:23 /usr/sbin/apache2 -k start
asterisk  2680  0.0  8.5  30344 10740 ?        S    02:34   0:30 /usr/sbin/apache2 -k start
asterisk  2691  0.0  8.6  30348 10808 ?        S    02:34   0:09 /usr/sbin/apache2 -k start
asterisk  2692  0.0  8.8  30420 11060 ?        S    02:34   0:32 /usr/sbin/apache2 -k start
asterisk  2798  0.0  9.0  30996 11300 ?        S    02:42   0:15 /usr/sbin/apache2 -k start
asterisk  3619  0.2  8.0  29772 10128 ?        S    15:16   0:07 /usr/sbin/apache2 -k start
root      4629  0.0  0.6   3148   784 pts/3    S+   16:09   0:00 grep apache
Всё замечательно, продолжим установку. Напишем скрипт для запуска астериска, полодим его в init.d, раскидаем симлинки по ранлевелам
Старт-стоповый скрипт для астериска
В аттаче есть файл asterisk.tar.gz. Распаковываем его содержимое (файл asterisk) в /etc/init.d затем делаем
# chmod 755 /etc/init.d/asterisk
# chown asterisk.asterisk /etc/init.d/asterisk
# update-rc.d asterisk defaults
Для проверки, стартует ли астериск на автомате можете перезагрузить сервак и посмотреть список процессов. Чтобы подключиться к астериску, наберите в консольке
# asterisk -r
Asterisk 1.6.1.19, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer 
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.6.1.19 currently running on anyserv (pid = 2244)
anyserv*CLI>
Если хотите видеть отладочную информацию - в стартстоповом скрипте измените переменную PARAMS на что-то типа такого PARAMS="-U asterisk -G asterisk -vvvvvd"
Для выхода из консоли управления астериском, введите exit. На этом установка астериска закончена

Установка FreePBX

Проект FreePBX исторически начинался как Asterisk Management Portal (AMP). Проект представляет из себя довольно удобную систему управлению астериском. В принципе, никто не заставляет пользоваться ею, можно осуществлять все настройки непосредственно в файлах конфигурации, но для тех, кому Asterisk в новинку – это будет просто идеальное решение. В подавляющем большинстве вы будите работать именно во FreePBX при настройке внутренних номеров, входящих/исходящий линий, IVR (Interactive Voice Response) и т.п.
# cd /usr/local/src/
# wget http://mirror.freepbx.org/freepbx-2.7.0.tar.gz
# tar xzfv freepbx-2.7.0.tar.gz
# cd freepbx-2.7.0/
Рекомендую прочитать файл INSTALL.
Создадим базы в мускуле и заполним их.
# mysql -u root -p
mysql> create database asterisk;
Query OK, 1 row affected (0.04 sec)

mysql> create database asteriskcdrdb;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'asterpass';
Query OK, 0 rows affected (0.08 sec)

mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'asterpass';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> \q
Bye
Заполним созданные базы
# mysql -u root -p asterisk < SQL/newinstall.sql
# mysql -u root -p asteriskcdrdb < SQL/cdr_mysql_table.sql
Подправим лимиты в /etc/php5/apache2/php.ini
upload_max_filesize=20M
........................
memory_limit = 1100M
........................
magic_quotes_gpc = Off
В файле /etc/php5/cli//php.ini
memory_limit=120M
Перезапускаем Апач, запускаем астериск, запускаем установку FreeBPX
# cd /usr/local/src/freepbx-2.7.0
# ./install_amp
Скрипт задаст некоторые вопросы, ответив на которые система установится "куда прикажете". На выхлопе увидите, куда подключаться и предупреждение, что желательно обновить модули.
Module customappsreg successfully enabled
installed
Please update your modules and reload Asterisk by visiting http://192.168.0.177/admin

*************************************************************************
* Note: It's possible that if you click the red 'Update Now' bar BEFORE *
* updating your modules, your machine will start dropping calls. Ensure *
* that all modules are up to date BEFORE YOU CLICK THE RED BAR. As long *
* as this is observed, your machine will be fully functional whilst the *
* upgrade is in progress.                                               *
Т.к. ставим FreePBX под рутом, а Апач и астериск работают под пользователем asterisk, я на всякий пожарный повторно назначаю права на папки, как было показано выше
Создадим queues_additional.conf Без него FreePBX ругается.
# touch /etc/asterisk/queues_additional.conf
# chown -R asterisk:asterisk /etc/asterisk/
Подключаемся, смотрим, что получилось
Для использования русского языка в FreePBX в /usr/share/locale/locale.alias изменяем строчку
russian …
на
russian ru
ru ru_RU
ru_RU ru_RU.UTF-8
На страничке с админкой FreePNX в выпадающем списке выберем русский. Помимо всего, не забывайте нажимать кнопку "Apply configuration changes" Обновляем страничку, смотрим, что получилось:

Прикрутим русские звуки для астериска.

В аттаче 3 файла:
  • asterisk-sounds-ru-wav-2010-04-28.tar.gz
  • asterisk-sounds-ru-gsm-2010-04-28.tar.gz
  • asterisk-sounds-ru-alaw-2010-04-28.tar.gz
Внутри каждого архива папка ru. Распаковывем их в папку
/var/lib/asterisk/sounds
Устанавливаем владельца
chown -R asterisk:asterisk /var/lib/asterisk/sounds
Пропишем язык
# echo 'Language=ru' > /etc/asterisk/sip_general_custom.conf
Перезапустим астериск, порадуемся довольно качественной озвучке :)
PS: Я не гуру по астериску, поэтому мог что-то упустить или описать неверно/неточно/неполно. Буду рад, если вы выскажите свои конструктивные замечания или предложения.
ВложениеРазмер
asterisk-sounds-ru-alaw-2010-04-28.tar_.gz9.59 Мб
asterisk-sounds-ru-gsm-2010-04-28.tar_.gz2.33 Мб
asterisk-sounds-ru-wav-2010-04-28.tar_.gz20.25 Мб
asterisk.tar_.gz855 байтов

Для исключения всяких

Для исключения всяких скриптов автозапуска и телодвижений связанных с ним рекомендую ставить в следующей последовательности
# Установка Asterisk
cd /usr/src/asterisk-1.6*
./configure
make install
make config
make samples

Комментариев нет:

Реклама от BigBN