И так, первым делом обновляем систему:
# 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>
УРА! Заработало!
На этом всё, в следующей статье мы будем всё это добро настраивать