Как установить asterisk на centos 7

Настройка Web сервера

Для работы панели FreePBX нужен web сервер с php. Я буду использовать версию php 7.1. Более подробно про настройку web срвера на Centos вы можете прочитать отдельно. Сейчас же коротко пройдем по шагам весь процесс.

Подключаем репозиторий epel, если еще не сделали это ранее.

# yum install epel-release

Подключаем remi репозиторий для centos 7.

# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Ставим пакет yum-utils.

# yum install yum-utils

Активируем репу remi-php71, для этого выполняем команду.

# yum-config-manager --enable remi-php71

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

# yum install wget php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysql php-gettext php-bcmath php-zip php-xml php-imap php-json php-process php-snmp

Далее установим httpd. Он, по идее, должен установиться в качестве зависимости на предыдущем шаге, но на всякий случай проверьте.

# yum install httpd

Теперь нам нужно изменить некоторые параметры httpd — запустить его от пользователя asterisk и включить опцию AllowOverride. Это можно сделать руками в файле /etc/httpd/conf/httpd.conf, либо автоматически с помощью sed.

# sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
# sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf

Мы просто выставили следующие параметры:

  • User asterisk
  • Group asterisk
  • AllowOverride All

Httpd запускать пока не надо, так как пользователя asterisk мы еще не создали. Сделаем это после установки asterisk.

Изменим параметр php, который отвечает за максимальный размер загружаемого файла. Дефолтное значение слишком низкое для freepbx. Для этого в /etc/php.ini устанавливаем параметр.

upload_max_filesize = 120M

Сделать это можно либо руками, либо автоматически с помощью sed.

# sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini

С веб сервером закончили. Продолжаем подготовку к установке FreePBX на CentOS.

Smithing Copr

Jared Smith has created an Asterisk packages for CentOS 8 repository that contains a few packages used by Asterisk that are currently missing from the other repositories mentioned. If you can’t find the package you are looking for in another repository you might want to check for it in this one.

DISCLAIMER: This repository has been created, and is currently maintained by Jared Smith as an open source contributor. The current existence of this repository, and the packages within makes no claim to any future existence of this repository or its packages, or others like it.

That said, Jared is working to get some of the packages located in his repository into one of the “base” repositories. For instance, libresample. In the meantime though if you’d like to use a package from his repository you can enable it using the following:

$ dnf copr enable jsmith/Asterisk_17_Centos_8

As a note, it says “Asterisk_17”, but it should work against other releases of Asterisk. For instance, I was able to use a few of the packages to build against Asterisk 16.

Подготовка к инсталляции FreePBX

5.1. Запуск и проверка MariaDB

Запустите СУБД Maria DB:

systemctl enable mariadb.service
systemctl start mariadb

Проверка:

Примерный ожидаемый вывод:

mysql 7160     1  1 10:44 ?	00:00:00 /usr/libexec/mysqld --basedir=/usr
root  7227  8399  0 10:44 pts/0	00:00:00 grep --color=auto mysql

5.2. Настройка, запуск и проверка Apache

Внесите правки в конфигурационные файлы Apache:

sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf
sed -i 's/AllowOverride none/AllowOverride All/' /etc/httpd/conf/httpd.conf

Запустите web-сервер Apache:

systemctl enable httpd.service
systemctl start httpd

Проверка:

Примерный ожидаемый вывод:

root  6674     1  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6676  6674  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6677  6674  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6678  6674  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6679  6674  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6680  6674  0 09:33 ?	00:00:00 /usr/sbin/httpd -DFOREGROUND

Загрузите и установите NodeJS:

curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum -y install nodejs

5.4. Корректировка владельца процессов PHP-FPM

sed -i 's/user = apache/user = asterisk/' /etc/php-fpm.d/www.conf
sed -i 's/user = root/user = asterisk/' /etc/php-fpm.d/www.conf
sed -i 's/group = apache/group = asterisk/' /etc/php-fpm.d/www.conf
sed -i 's/group = root/group = asterisk/' /etc/php-fpm.d/www.conf

5.5. Запуск скрипта безопасной работы MySQL

Запустите скрипт:

В ходе интерактивной работы скрипта ответьте на вопросы следующим образом:

Enter current password for root (enter for none): <Нажмите Enter>
Set root password? [Y/n] Y
New password: Qwerty123456
Re-enter new password: Qwerty123456
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

5.6. Замена драйвера ODBC

Драйвер ODBC, входящий в состав дистрибутива Asterisk, некорректно поддерживает кодировку UTF-8, что приводит к неправильному отображению кириллицы в БД CDR. Для исправления данной проблемы необходимо заменить стандартный драйвер (UNICODE) на драйвер ANSI.

Загрузите, установите и активируйте yum-репозиторий MySQL:

cd /usr/src
mkdir mysql-community-release
cd mysql-community-release
wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
rpm -Uvh mysql80-community-release-el8-1.noarch.rpm
yum config-manager --set-enabled mysql80-community

Установите корректную версию драйвера ODBC из репозитория MySQL community:

Отредактируйте файл

Найдите в указанном файле секцию

Добавьте в конец данной секции следующую строку:

Убедитесь, что для всех остальных секций, присутствующих в файле, установлено значение

Данная корректировка позволит избежать нежелательного обновления сервера БД при обновлении системы.

Замена драйвера ODBC

Проверьте наличие строк в файле

Driver=/usr/lib64/libmyodbcXa.so

В случае отсутствия данных строк, следует загрузить библиотеку и добавить указанные выше строки вручную.

В контексте данного пункта X – номер версии, x – номер подверсии коннектора ODBC.

5.7. Задание директории для записей разговоров

Измените директорию, в которой будут храниться записи разговоров:

rmdir /var/spool/asterisk/monitor
mkdir /home/asterisk/monitor/
ln -s /home/asterisk/monitor/ /var/spool/asterisk/
chown -R asterisk:asterisk /home/asterisk/

5.8. Настройка автоматического удаления записей вызовов

Запустите редактор файла crontab:

Добавьте в файл следующие строки:

31 3 * * * find /home/asterisk/monitor/ -type f -mtime +120 -exec rm -rf {} \;
32 3 * * * find /home/asterisk/monitor/ -type d -exec rmdir -p {\} \;

Сохраните изменения:

Онлайн курс «Сетевой инженер»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные сети, рекомендую познакомиться с онлайн-курсом «Сетевой инженер» в OTUS. Это авторская программа в сочетании с удалённой практикой на реальном оборудовании и академическим сертификатом Cisco! Студенты получают практические навыки работы на оборудовании при помощи удалённой онлайн-лаборатории, работающей на базе партнёра по обучению — РТУ МИРЭА: маршрутизаторы Cisco 1921, Cisco 2801, Cisco 2811; коммутаторы Cisco 2950, Cisco 2960.

Особенности курса:

  • Курс содержит две проектные работы.;
  • Студенты зачисляются в официальную академию Cisco (OTUS, Cisco Academy, ID 400051208) и получают доступ ко всем частям курса «CCNA Routing and Switching»;
  • Студенты могут сдать экзамен и получить вместе с сертификатом OTUS ещё сертификат курса «CCNA Routing and Switching: Scaling Networks»;

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Доступ в web интерфейс Freepbx

Переходим в браузере по ip адресу или доменному имени сервера и создаем учетную запись администратора Freepbx. При первом заходе в 14-ю версию я увидел ошибку.

Текст ошибки.

Whoops \ Exception \ ErrorException (E_DEPRECATED)
Methods with the same name as their class will not be constructors in a future version of PHP; gui_hidden has a deprecated constructor in /var/www/html/admin/libraries/components.class.php on line 571

Насколько я понял, это сообщение о том, что используется какая-то конструкция, которая объявлена Deprecated и скоро не будет работать. Что с этим делать сейчас, я не понял. Нашел баг репорт с этой ошибкой — https://issues.freepbx.org/browse/FREEPBX-19941 Он почему-то отклонен, помещен как дублирующий, но найти эту же ошибку в трекере я не смог.

Если взять версию php 5.6, то там этой ошибки не будет. Freepbx 14 официально поддерживает только 5.6, но откатываться на нее совсем не хочется.

Я решил просто отключить обработчик ошибок bootstrap. Для этого открываем конфиг freepbx и добавляем туда новое значение.

# mcedit /etc/freepbx.conf
$bootstrap_settings = false;

Заходим в web интерфейс freepbx еще раз и создаем администратора.

Потом, используя созданную учетку, логинимся в панель и указываем начальные настройки. Рекомендую выбрать английский язык. Как я уже говорил, перевод на русский так себе, с ним иногда бывает сложно понять суть настроек.

После этого оказываетесь в веб панели Freepbx. Нажмите сверху на Dashboard и увидите сводную информацию по системе. Теперь можно начинать ее настройку, но это тема отдельной статьи. Возможно, до нее у меня когда-нибудь дойдут руки.

Mariadb

Centos 7 comes with Mariadb instead of Mysql.

1. Install mariadb if not already present

yum install mariadb-server

2. Setup mariadb to start on boot:

systemctl enable mariadb

3. Start mariadb:

systemctl start mariadb

4. Secure the installation by running following script and answering with defaults:

/usr/bin/mysql_secure_installation

Output:

usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] 
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] 
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] 
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] 
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Заведение пользователя

Создадим наш первый диалплан (правило обработки звонков):

exten => _XXX,1,Dial(SIP/$,,m)

* в данном примере мы создаем контекст с именем outcaling для трехзначных номеров (XXX) с вызовом по SIP по внутреннему номеру.

Теперь создадим два внутренних номера:

(!) type=friend context=outcaling host=dynamic disallow=all allow=alaw allow=ulaw language=ru qualify=yes canreinvite=yes call-limit=4 nat=no

(public) regexten=101 secret=1234 callerid=»101″ callgroup=1 pickupgroup=1

(public) regexten=102 secret=5678 callerid=»102″ callgroup=1 pickupgroup=1

* сначала мы создали шаблон public, в который занесли общие параметры. Шаблон мы применили к создаваемым коротким номерам. * где:

  • , — имена для обозначения номеров.
  • type — типы проверки номеров. Могут быть peer, user или friend. Peer — вызовы сопоставляются с IP-адресами и номерами портов. User — проверка username. Friend — включает возможности peer и user (проверка username и IP-адреса источника) и лучше всего подходит для телефонов и телефонных программ.
  • regexten — добавочный номер. Если не задан, используется имя.
  • secret — пароль для аутентификации.
  • context — контекст или группа правил.
  • host — IP-адрес или имя клиента. Для автоматической регистрации используем dynamic.
  • callerid — идентификатор пользователя при звонке.
  • disallow — запрещает кодеки (задается перед параметром allow).
  • allow — разрешает кодеки. alaw и ulaw — алгоритмы для кодеков g711.
  • language — код используемого языка.
  • callgroup — задает группу устройства (для возможности перехвата).
  • pickupgroup — задает перечень групп, которые можно перехватывать.
  • qualify — включает или отключает периодическую проверку подключенного клиента.
  • canreinvite — включает или отключает прохождение голосового RTP трафика через Asterisk. Устанавливать, только если клиент поддерживает функцию SIP re-invites.
  • call-limit — ограничение количества одновременных вызовов.
  • nat — устанавливается в yes, если клиент находиться за NAT.

systemctl restart asterisk

Установка

Установку можно выполнить с помощью команды apt install asterisk. Но в данной инструкции мы разберем установку путем сборки из исходников.

Рекомендуется установить Asterisk с DAHDI (драйверы плат интерфейсов телефонии) и LibPRI (библиотека для работы с потоковыми TDM-интерфейсами). Сначала необходимо собрать DAHDI, затем LibPRI и только потом — Asterisk.

Устанавливаем пакеты, необходимые для корректной сборки DAHDI и LibPRI:

apt install make gcc

Сборка DAHDI

Распаковываем его и переходим в распакованный каталог:

tar -xvf dahdi-linux-complete-current.tar.gz

Собираем пакет и устанавливаем его:

Выходим из каталога dahdi:

tar -xvf libpri-current.tar.gz

Собираем и устанавливаем:

Выходим из каталога libpri:

Установка Asterisk

* в моем случае, последняя версия была 15.

Распаковываем архив и переходим в папку, появившуюся после распаковки:

tar -xvf asterisk-*.tar.gz

Устанавливаем библиотеки для работы с mp3:

./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var —libdir=/usr/lib64 —with-dahdi —with-pri —with-iconv —with-libcurl —with-speex

  • —with-dahdi — с драйверами DAHDI.
  • —with-pri — с библиотекой PRI.
  • —with-iconv — с возможностью конвертации кодировок (будет не лишним для поддержки русских символов).
  • —with-libcurl — возможность извлекать данные посредством CURL-запросов (по http).
  • —with-speex — дополнительный VBR-кодек (используется на многих софт-фонах).

** список всех доступных опций можно посмотреть командой ./configure -h.

Мы должны увидеть логотип астериска:

Вызываем оконное меню настройки модулей:

Для большинства случаев, настройки можно оставить по умолчанию. В противном случае рекомендуется изучить опции и выбрать необходимые. После нажимаем Save & Exit.

Затем собираем исходник:

И выполняем установку:

Установим примеры конфигурационных файлов и документацию:

Устанавливаем скрипт инициализации (для автозапуска):

Устанавливаем скрипты для отсекания логов:

Создаем конфигурационный файл для указания дополнительного пути с библиотеками:

Добавляем в него одну строчку:

* это путь до каталога с библиотеками, с которым мы собирали asterisk (опция —libdir).

Установка Asterisk

Установка астериска выполняется путем сборки исходников. Сама процедура проходит в 3 этапа:

  1. Установка DAHDI (драйверов плат интерфейсов);
  2. Установка LibPRI (библиотека для работы с потоковыми TDM-интерфейсами);
  3. Собственно, сборка и установка Asterisk.

1. Сборка DAHDI

Загружаем исходник, распаковываем его и переходим в распакованный каталог:

tar -xvf dahdi-linux-complete-current.tar.gz

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

Выходим из каталога с исходником:

2. Сборка LibPRI

Процедура, во многом, похожа на сборку DAHDI. Загружаем исходник, распаковываем его и переходим в распакованный каталог:

tar -xvf libpri-current.tar.gz

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

Выходим из каталога с исходником:

3. Установка самого астериска

Для начала, загружаем исходник на сервер. Так как мы планируем установить LTS версию, заходим на страницу https://www.asterisk.org/downloads/asterisk/all-asterisk-versions, раздел «Long Term Support (LTS) Releases» и копируем ссылку на загрузку пакета:

* Certified Asterisk — бизнес версия с поддержкой для коммерческих клиентов.

Используя ссылку, скачиваем на сервер программу:

Распаковываем архив и переходим в него:

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

Чистим образовавшиеся временные файлы:

Добавляем библиотеку для работы с mp3:

./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var —libdir=/usr/lib64 —with-dahdi —with-pri —with-iconv —with-libcurl —with-speex —with-mysqlclient

* полный перечень опция и что они означают можно посмотреть командой ./configure -h.

Выбираем необходимые компоненты (в данном примере res_config_mysql, app_mysql, cdr_mysql):

Запускаем сборку и установку:

Устанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:

Missing Dependencies

At the time of writing the following packages were not included with CentOS 8, EPEL 8, or some other popular 3rd party repositories.  The names in brackets ( ) are the asterisk modules or features that will not compile or be available if the package is missing.

* iksemel-devel (app_xmpp, res_xmpp, chan_motif)* corosynclib-devel (res_corosync)* radiusclient-ng-devel (cdr_radius)* gmime-devel (res_http_post)* gstreamer (music on hold streaming)* mongodb-server (required for Freepbx XMPP chat)

If you want to use the features that depend on these packages you will need to find them from alternate repositories or compile them yourself from source.

CDR и подключение к базе данных

В моем случае, не работало ведение CDR, а при вводе в консоли asterisk команды:

> odbc show

… я увидел:

ODBC DSN Settings
——————
  Name:   asteriskcdrdb
  DSN:    MySQL-asteriskcdrdb
    Last fail connection attempt: 2021-05-08 10:25:52
    Number of active connections: 0 (out of 5)
    Logging: Disabled

То есть, нет подключения к базе данных asteriskcdrdb. А при попытке подключиться к нужному DSN из командной строки:

isql -v MySQL-asteriskcdrdb

… я получил ошибку:

Can’t open lib ‘/usr/lib64/libmyodbc5.so’ : file not found

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

Нам необходимо выполнить 2 действия:

  1. Установить коннектор ODBC.
  2. Изменить драйвер для подключения к СУБД в odbc.ini.

Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Для его установки воспользуемся инструкцией .

После открываем файл:

vi /etc/odbc.ini

Задаем новое значение для параметра driver:

driver=MariaDB

* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini.

Перезапускаем asterisk:

systemctl restart asterisk

После можно проверить, что Asterisk подключился к базе:

> odbc show

Мы должны увидеть:

ODBC DSN Settings
——————
  Name:   asteriskcdrdb
  DSN:    MySQL-asteriskcdrdb
    Number of active connections: 1 (out of 5)
    Logging: Disabled

FreePBX12

 
 wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-12.0-latest.tgz
 
 tar zxvf freepbx-*.tgz
cd /usr/src/freepbx

/etc/init.d/mysqld start

mysqladmin create asterisk
mysqladmin create asteriskcdrdb
mysql asterisk < SQL/newinstall.sql
mysql asteriskcdrdb < SQL/cdr_mysql_table.sql

mysql
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'SOMEPASSWORD';
GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'SOMEPASSWORD';
flush privileges;
\q

mysqladmin -u root password 'SOMEPASSWORD'
 
cd /usr/src/freepbx
./start_asterisk start

#php53
nano +946 /etc/php.ini
     date.timezone = "Europe/Moscow"
pear uninstall db
pear install db-1.7.14
yum  install php-posix
 ./install_amp --username=asteriskuser --password=SOMEPASSWORD
 

PHP warning

PHP warning

 PHP Warning:  mkdir(): File exists in /usr/src/freepbx/libfreepbx.install.php on line 199

Запустите установку ещё раз

amportal a ma refreshsignatures
amportal a ma  upgradeall
amportal reload
amportal chown

или

/usr/local/sbin/amportal  ...
 echo "/usr/local/sbin/amportal start" >> /etc/rc.local

Настройка Asterisk

В нашей тестовой конфигурации мы создадим 5 внутренних номеров от 101 до 105. И настроим внутренние звонки между ними.

Для этого в файле /etc/asterisk/sip.conf добавляем наши внутренние номера в раздел :

В поле secret устанавливаем пароль для каждого внутреннего номера соответственно. Обязательно, в продакшн серверах используйте надежные пароли! Даже если сервер разворачивается как тестовый, через время вы можете решить использовать его для работы, а пароли поменять забудете.

В файле /etc/asterisk/extensions.conf определяем контекст «internal-calls». Полное содержание файла:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: