Вы здесь

Собираем ASTERISK с драйвером ODBC-MySQL из исходников

И так, первым делом обновляем систему:

# yum update -y   (ключ -y используется для подстановки утвердительных ответов на все вопросы менеджера)

и ребутимся

# reboot

 

Предварительная настройка сервера:

Помимо астериска, на данном сервере будет работать web-сервер, клиент mysql и NFS клиент (через NFS будут подмонтированы общие для астерисков конфиги)

И так, поехали:

# yum install -y httpd php mysql rpcbind nfs-utils

# service httpd start

# chkconfig --levels 235 httpd on

C web-сервером разобрались, теперь очередь NFS...

на сервере с адресом 172.26.0.154 лежат расшаренные ресурсы, сейчас мы их "зацепим"

# nano /etc/fstab

и в конец файла добавим строки:

172.26.0.154:/home/share /mnt nfs defaults,users,auto,noatime,intr  0 0
172.26.0.154:/usr/local/goip /mnt nfs defaults,users,auto,noatime,intr  0 0
172.26.0.154:/usr/local/smb_scheduler /mnt nfs defaults,users,auto,noatime,intr  0 0

для монтирования при старте сервера - в /etc/rc.d/rc.local вставим строку:

/bin/mount -t nfs 172.26.0.154:/home/share /mnt

 

# service rpcbind restart
# service nfs restart
# chkconfig rpcbind on
# chkconfig nfs on

проверить подмонтирование ресурсов можно выполнив mount

# mount

Если вы получили в конце вывода что-то типа этого:

nfsd on /proc/fs/nfsd type nfsd (rw)
172.26.0.154:/home/share on /mnt type nfs (rw,vers=4,addr=172.26.0.154,clientaddr=172.26.0.199)
 

значит NFS подмонтирован

Наш астериск будет "крутиться" на удаленном сервере и, значит, никакого "навесного" оборудования там не будет. Так что будем ставить чистый астериск без дополнительных модулей.

Для начала доустановим необходимые модули и библиотеки самой ОС (более подробно необходимые модули описаны здесь, я лишь опишу только "недокументированные"):

gcc

gcc-c++

ncurses-devel

libtermcap-devel

openssl-devel (нужен будет, если будет использоваться шифрование голосовых потоков)

zlib-devel

unixODBC (драйвер ODBC)

unixODBC-devel

libtool-ltdl

libtool-ltdl-devel

libtool

make

sqlite-devel (установка этого пакета в документации не написана, но он нужен для сборки астериск)

libuuid (установка этого пакета в документации не написана, но он нужен для правильной работы rtp)

libuuid-devel

Ну или одной командой:

# yum install gcc gcc-c++ ncurses-devel libtermcap-devel openssl-devel zlib-devel unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel libtool make sqlite-devel libuuid libuuid-devel libxml2-devel doxygen

Upd: Для Asterisk 12 версии нужно собрать janson: здесь выбираем релиз и потом собираем (подробности здесь)

Для записи разговоров  нужно поставить библиотеку vorbis-tools

# yum install vorbis-tools

# ./configure --prefix=/usr/ && make clean && make && make install && ldconfig

Перед тем, как собирать Астериск, позаботимся о защите: очень опасно запускать АТС с правами root - если хакер получит доступ к консоли самой АТС, он сможет с системой сделать всё что угодно...

И так, создадим пользователя и группу "asterisk"

# adduser -c "Asterisk PBX" asterisk

и переключимся на этого пользователя:

# su - asterisk

По умолчанию мы попадем в "домашний" каталог пользователя, в нашем случае это /home/asterisk

Создадим каталог, гуда загрузим исходники:

$ mkdir src
$ cd src

ну и загрузим последнюю версию астериска:

$ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current...

и здесь-же его распакуем:

$ tar zxvf asterisk-11-current.tar.gz

в итоге получим папку asterisk-11.5.0 и в ней исходники АТС

Теперь приступим к сборке:

$ cd asterisk-11.5.0
$ ./configure --prefix=$HOME/asterisk-bin --sysconfdir=$HOME/asterisk-bin --localstatedir=$HOME/asterisk-bin (Выполняя сценарий  ./configure с флагом  --prefix, мы указываем системе установить двоичные компоненты в подпапку asterisk-bin домашней папки пользователя, под которым мы работаем.)

и получаем первый баг: configure: *** XML documentation will not be available because the 'libxml2' development package is missing.
configure: *** Please run the 'configure' script with the '--disable-xmldoc' parameter option
configure: *** or install the 'libxml2' development package.

отсутствует библиотека libxml2-devel - доустановим ее:

# yum install libxml2-devel (обратите внимание: работа с пакетами производится только от пользователя, обладающего root правами!)

опять заходим под пользователем asterisk и продолжаем:

# su - asterisk
$ cd src/asterisk-11.5.0
$ ./configure --prefix=$HOME/asterisk-bin --sysconfdir=$HOME/asterisk-bin --localstatedir=$HOME/asterisk-bin

Если в конце получили такое:

.$$$$$$$$$$$$$$$=..
            .$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 : x86_64
configure: build-cpu:vendor:os: x86_64 : unknown : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :

проверка основных зависимостей прошла успешно... далее выбираем модули:

$ make menuselect
 

Если вместо меню получаем такое: Terminal must be at least 80 x 27. menuselect changes NOT saved! Не пугайтесь, просто расстяните окно терминала и повторите команду

И так, наконец-то получили менюшку выбра модулей:

                 **************************************************
                     Asterisk Module and Build Option Selection 
                 **************************************************

                                 Press 'h' for help.                                   .

                           --->  Add-ons (See README-addons.txt)
                                 Applications                                             
                                 Bridging Modules                                   
                                 Call Detail Recording                            
                                 Channel Event Logging                        
                                 Channel Drivers                                     
                                 Codec Translators                                 
                                 Format Interpreters                                
                                 Dialplan Functions                                 
                                 PBX Modules                                          
                                 Resource Modules                                
                                 Test Modules                                          
                                 Compiler Flags                                      
                                 Voicemail Build Options                       
                                 Utilities                                                     
                                 AGI Samples                                           
                                 Module Embedding                               
                                 Core Sound Packages                         
                                 Music On Hold File Packages             
                                 Extras Sound Packages                       

ну и что с ней делать?

Навигация по меню курсорными стрелками, выбор пробел или enter x - сохранить и выйти...

И так, нас интересует ODBC (SQL модули можно отключить) так-же можно отключить сохранение CDR записей в формате CSV, остальное оставить по умолчанию...

после выполняем компиляцию АТС:
# make install

Теперь можно пойти выпить чашечку кофе... процесс компиляции довольно длительный и зависит от ресурсов сервера.

И так, пока пил кофе выскочило вот такое:
 

+---- 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) и документацию (make progdocs), что мы и сделаем:
 

$ make samples
$ make progdocs
 

и получаем

$ make progdocs
(cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=no"; \
        echo "PROJECT_NUMBER=11.5.0") | doxygen -
/bin/sh: line 1: doxygen: команда не найдена
make: *** [progdocs] Ошибка 127

это лечится очень просто:

# yum install doxygen

Так, с астериском почти разобрались, за исключением настройки запуска от пользователя "asterisk"....  этим сейчас и займемся.

Далее будем работать под root'oм

Если из папки с исходниками астериска вышли - вернемся в ее:

# cd /home/asterisk/src/asterisk-11.5.0/
# make config

Командой make config мы запустили скрипт, устанавливающий файлы конфигурации запуска Астериск... но это еще не всё:

Если  вы  выполните  команду  service  asterisk  start, система сообщит, что не может найти asterisk. Знаете, почему? Потому,  что  сценарий  инициализации  считает,  что  исполняемый  файл asterisk должен быть установлен в /usr/sbin, где он должен был бы находиться, если бы мы установили asterisk под учетной записью root. Итак,  мы  должны  сообщить  сценарию  инициализации,  где  искать asterisk и сценарий safe_asterisk:

# ln -s /home/asterisk/asterisk-bin/sbin/asterisk /usr/sbin/asterisk
# ln -s /home/asterisk/asterisk-bin/sbin/safe_asterisk /usr/sbin/safe_asterisk

 

Поскольку  наш  сценарий  инициализации  использует  сценарий  safe_asterisk и по умолчанию пытается запустить Asterisk под учетной записью администратора, необходимо изменить сценарий safe_asterisk, указав ему запускать Asterisk под учетной записью пользователя, не обладающего правами администратора. Итак, откроем сценарий safe_asterisk в своем любимом текстовом редакторе и найдем переменную ASTARGS (это примерно 111-я строка). Вставим в кавычки -U asterisk:

# nano /home/asterisk/asterisk-bin/sbin/safe_asterisk

#
# Don't fork when running "safely"1
#
ASTARGS="-U asterisk"

Пойдем дальше и запустим Asterisk, выполнив команду service asterisk start.  С  помощью  команды  ps  убедимся,  что  Asterisk  запущена  под учетной записью пользователя asterisk:
# service asterisk start
# ps aux | grep asterisk

root      3118  0.0  0.0 108160   756 pts/1    S    15:51   0:00 /bin/sh /home/asterisk/asterisk-bin/sbin/safe_asterisk
asterisk  3120  1.4  0.6 2550392 26564 pts/1   Sl   15:51   0:00 /home/asterisk/asterisk-bin/sbin/asterisk -f -U asterisk -vvvg -c
root      3174  0.0  0.0 103260   884 pts/1    R+   15:52   0:00 grep asterisk

здесь нас интересует вторая строка вывода, которая указывает, что от основного процесса (который всегда будет иметь права root) запущен дочерний процесс с не-root правами (при работе АТС дочерних процессов может быть несколько). Ну и на последок выполним тестовое подключение через консоль:

# asterisk -rvvvvv (количеством букв v мы указываем плотность вывода консольных логов, для вывода минимальных логов можно подключиться с помощью команды asterisk -r)

если в консоли вывод примерно такой, значит наша АТС работает:

Asterisk 11.5.0, Copyright (C) 1999 - 2012 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
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 11.5.0 currently running on asterisk (pid = 3120)
asterisk*CLI>

УРА! Заработало!

На этом всё, в следующей статье мы будем всё это добро настраивать