Установка FreePBX 14 в связке с Asterisk 16 на Debian 9 Stretch
Рассмотрим как установить FreePBX 14 в связке с Asterisk 16 на Debian 9 Stretch.
Подготовка системы
Перед началом установки обновляем систему до актуального состояния:
apt-get update && apt-get upgrade -y
Устанавливаем необходимые зависимости:
apt-get install build-essential linux-image-amd64 linux-headers-* apt-transport-https bison flex curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev libspandsp-dev subversion libtool-bin python-dev unixodbc dirmngr sudo apache2 mariadb-server mariadb-client default-libmysqlclient-dev -y
[stextbox id=’alert’]ВНИМАНИЕ. Обязательно перезагружаем систему и после этого продолжаем установку.[/stextbox]
Устанавливаем PHP версии 5.6 (для корректной работы FreePBX fwconsole):
curl https://packages.sury.org/php/apt.gpg | apt-key add - echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/deb.sury.org.list apt-get update && apt-get install php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-mbstring php5.6-gd php5.6-xml php-pear -y
Устанавливаем NodeJS :
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash - apt-get install nodejs -y pear install Console_Getopt
Устанавливаем поддержку MariaDB ODBC
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-2.0.15/mariadb-connector-odbc-2.0.15-ga-debian-x86_64.tar.gz tar -zxvf mariadb* cp -v mariadb-connector-odbc-2.0.15-ga-debian-x86_64/lib/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
Устанавливаем DAHDI, LibPRI
Для удобства дальнейшей инсталляции скачиваем все необходимые исходники (dahdi, libpri, asterisk, freepbx) и распаковываем их:
cd /opt/ wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz tar -zxvf dahdi-linux-complete-current.tar.gz tar -zxvf libpri-current.tar.gz tar -zxvf asterisk-16-current.tar.gz tar -zxvf freepbx-14.0-latest.tgz
Собираем по очереди (dahdi, libpri) из исходников и устанавливаем:
cd dahdi-linux-complete-3.* make all make install make config cd ..
cd libpri-1.* make make install cd ..
Установка Asterisk
Выполняем скрипт, который проверит какие еще необходимо установить зависимости, для работы Asterisk:
cd asterisk-16.* contrib/scripts/install_prereq install contrib/scripts/get_mp3_source.sh
В процессе установки, необходимо будет задать телефонный код, оставляем по-умолчанию 7 (Россия).
Выполняем конфигурацию с поддержкой pjproject, jansson, mysqlclient, добавляем поддержку mp3 и запускаем меню выбора устанавливаемых компонентов:
./configure --with-pjproject-bundled --with-jansson-bundled --with-mysqlclient make menuselect
Выбираем:
- Add-ons — поддержка format_mp3, res_config_mysql, app_mysql, cdr_mysq.
- Applications — поддержка app_macro (необходимый модуль для работы FreePBX)
- Core Sound Packeges — CORE-SOUNDS-EN-ULAW, CORE-SOUNDS-EN-ALAW, CORE-SOUNDS-EN-GSM, CORE-SOUNDS-EN-G729, CORE-SOUNDS-RU-ULAW, CORE-SOUNDS-RU-ALAW, CORE-SOUNDS-RU-GSM, CORE-SOUNDS-RU-G729
Остальное я оставляю по-умолчанию.
Выполняем компиляцию исходников asterisk, затем выполняем установку astersik и завершаем установку asterisk:
make make install make config ldconfig update-rc.d -f asterisk remove cd ..
Добавляем asterisk в автозагрузку:
systemctl enable asterisk
Создаем пользователя (asterisk), от которого будет работать asterisk. Назначаем права на каталоги asterisk и удаляем каталог сайта (apache2) по-умолчанию:
useradd -m asterisk chown asterisk. /var/run/asterisk chown -R asterisk. /etc/asterisk chown -R asterisk. /var/{lib,log,spool}/asterisk chown -R asterisk. /usr/lib/asterisk rm -rf /var/www/html touch /etc/asterisk/{modules,cdr}.conf
Установка FreePBX
Вносим необходимые правки в файлы конфигураций php, apache и применяем сделанные изменения в них:
sed -i 's/\(^upload_max_filesize = \).*/\1 256M/' /etc/php/5.6/apache2/php.ini sed -i 's/\(^memory_limit = \).*/\1 256M/' /etc/php/5.6/apache2/php.ini cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf a2enmod rewrite service apache2 restart
Создаем файл конфигурации /etc/odbcinst.ini:
cat <<EOF > /etc/odbcinst.ini [MySQL] Description = ODBC for MySQL (MariaDB) Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so FileUsage = 1 EOF
Создаем файл конфигурации /etc/odbc.ini
cat <<EOF > /etc/odbc.ini [MySQL-asteriskcdrdb] Description = MySQL connection to 'asteriskcdrdb' database Driver = MySQL Server = localhost Database = asteriskcdrdb Port = 3306 Charset = utf8 Socket = /var/run/mysqld/mysqld.sock Option = 3 EOF
Создадим базу данных для работы FreePBX:
mysql -u root -p
CREATE DATABASE asterisk default charset utf8; CREATE DATABASE asteriskcdrdb default charset utf8; GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'asterpass'; GRANT ALL PRIVILEGES ON asteriskcdrdb.* to asteriskuser@localhost IDENTIFIED BY 'asterpass'; FLUSH PRIVILEGES; EXIT
Переходим в каталог с дистрибутивом FreePBX, запускаем Asterisk и выполняем установку:
cd freepbx/ ./start_asterisk start ./install -n --dbuser=asteriskuser --dbpass=asterpass
Установка завершена, через Web браузер заходим в консоль FreePBX:
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Часть 4 (заключительная).
Всё в порядке, можно совершить звонок, в отчёте cdr о звонке кириллица должна отображаться корректно.
Если с первого раза не заработало, попробуйте перегрузить машину.
Если при ответе на команду
echo «select 1» | isql -v MySQL-asteriskcdrdb
возникает ошибка, нужно поискать другую версию коннектора (libmaodbc.so) с сайта https://downloads.mariadb.com/Connectors/odbc/
Часть 3. Проверить обмен с базой:
odbcinst -q -d
выхлоп:
[MySQL]
Ещё одна команда:
echo «select 1» | isql -v MySQL-asteriskcdrdb
выхлоп:
—————————————+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+—————————————+
SQL> select 1
+———————+
| 1 |
+———————+
| 1 |
+———————+
SQLRowCount returns 1
1 rows fetched
Часть 2. Код:
cd /usr/src
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-2.0.15/mariadb-connector-odbc-2.0.15-ga-debian-x86_64.tar.gz
tar -zxvf mariadb*
cd lib
cp -v libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
cat < /etc/odbcinst.ini
[MySQL]
Description=ODBC for MySQL (MariaDB)
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage=1
UsageCount=1
EOF
cat < /etc/odbc.ini
[MySQL-asteriskcdrdb]
Description = MySQL connection to ‘asteriskcdrdb’ database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Charset = utf8
Socket = /var/run/mysqld/mysqld.sock
Option = 3
EOF
Странно, но у меня на Debian 9 установлен https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.12-linux-debian9-x86-64bit.tar.gz и никаких проблем с кириллицей нет..
У меня есть готовые виртуалки с Астериском 13 и FreePBX 13 на Debian 8. Устанавливал их в разных организациях около года назад и они там прекрасно работают по сей день. Но при переносе или клонировании их на другие ноды Proxmox, либо попытке перенести работающий образец другому клиенту после переноса не хочет стартовать Asterisk. День промучался, проблему так и не решил. Видимо это знак, что надо переходить на современное ПО…
Написал комментарий и 2 раза пытался его отправить, но он не отображается, видимо слишком большой. Поэтому разбиваю на части.
Часть 1. Столкнулся с ещё одной проблемой, в cdr отчётах о звонках FreePBX 14 символы на кириллице отображаются кракозябрами.
Решение:
заменить используемый mysql-connector-odbc на mariadb-connector-odbc. Нашёл на англоязычном форуме, что с 3-ей версией не работает (проверил на последней версии 3.1.6 — да, не работает) и нужно использовать версию 2.0.5. На сайте https://downloads.mariadb.com/Connectors/odbc/ такой версии не нашёл, использовал ближайшую 2.0.15
Столкнулся с ещё одной проблемой:
в cdr отчётах о звонках FreePBX 14 символы на кириллице отображаются кракозябрами.
Решение:
заменить используемый mysql-connector-odbc на mariadb-connector-odbc. Нашёл на англоязычном форуме, что с 3-ей версией не работает (проверил на последней версии 3.1.6 — да, не работает) и нужно использовать версию 2.0.5. На сайте https://downloads.mariadb.com/Connectors/odbc/ такой версии не нашёл, использовал ближайшую 2.0.15
cd /usr/src
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-2.0.15/mariadb-connector-odbc-2.0.15-ga-debian-x86_64.tar.gz
tar -zxvf mariadb*
cd lib
cp -v libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
cat < /etc/odbcinst.ini
[MySQL]
Description=ODBC for MySQL (MariaDB)
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage=1
UsageCount=1
EOF
cat < /etc/odbc.ini
[MySQL-asteriskcdrdb]
Description = MySQL connection to ‘asteriskcdrdb’ database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Charset = utf8
Socket = /var/run/mysqld/mysqld.sock
Option = 3
EOF
Проверить обмен с базой:
odbcinst -q -d
выхлоп:
[MySQL]
Ещё одна команда:
echo «select 1» | isql -v MySQL-asteriskcdrdb
выхлоп:
—————————————+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+—————————————+
SQL> select 1
+———————+
| 1 |
+———————+
| 1 |
+———————+
SQLRowCount returns 1
1 rows fetched
Всё в порядке, можно совершить звонок, в отчёте cdr о звонке кириллица должна отображаться корректно.
Если с первого раза не заработало, попробуйте перегрузить машину.
Если при ответе на команду
echo «select 1» | isql -v MySQL-asteriskcdrdb
возникает ошибка, нужно поискать другую версию коннектора (libmaodbc.so) с сайта https://downloads.mariadb.com/Connectors/odbc/
Не заметил опечатку, вместо
rm -rf /opt
д. б.
rm -rf /opt/*
После установки желательно почистить каталоги с исходниками:
rm -rf /var/lib/asterisk/sounds/tmp/*
rm -rf /usr/src/*
Или как у вас:
rm -rf /opt
В результате при установке на Proxmox в контейнер lxc занимает места на диске всего 2,5 Gb, перегружается около 10 сек (в отличии от kvm виртуалки при использовании готового iso от freepbx на CentOS 7) и оперативки ест значительно меньше (около 200 Мб). А если отключить Apache, то расход по памяти снижается до 130 Мб.
А для чего очищать !? На случай если нужно будет пересобрать пакет, но на моей памяти проблем не возникало если не очищать каталоги с исходниками. Ну тут дело наверное скорей на усмотрение, я бы не отнес к желательным события этот 🙂
У меня развёрнуто на виртуалке и делается резервное копирование по расписанию раз в неделю средствами самого Proxmox. Меньше занимаемый объём — меньше нагрузка на сервер и диски. У некоторых админов все виртуалки целиком каждый день бэкапятся, корпоративная политика…
Большое спасибо за статью, делал по ней и всё получилось, но заработало не с первого раза. При сборке Астериска кроме модулей, которые вы указали:
«Выбираем:
Add-ons — поддержка format_mp3, res_config_mysql, app_mysql, cdr_mysq.
Core Sound Packeges — CORE-SOUNDS-EN-ULAW, CORE-SOUNDS-EN-ALAW, CORE-SOUNDS-EN-GSM, CORE-SOUNDS-EN-G729, CORE-SOUNDS-RU-ULAW, CORE-SOUNDS-RU-ALAW, CORE-SOUNDS-RU-GSM, CORE-SOUNDS-RU-G729
Остальное я оставляю по-умолчанию.»
нужно обязательно выбрать
Applications — app_macro (в самом конце).
Иначе будут обрываться звонки после 1 сек. и в логах будет ругань на отсутствие этого модуля.
Он считается устаревшим, поэтому его по умолчанию выпилили. Но без него не работает. Рекомендуют использовать другой модуль, но разбираться не стал, просто собрал с ним и всё заработало.
Вероятно в текущей редакции asterisk они убрали выбранный по-умолчанию (app_macro). На момент написания статьи, он был выбран по-умолчанию. Спасибо добавил данную информацию в статью.
Про устаревший app_macro это да, но вот только FreePBX по прежнему использует его..
В статье сказано «Собираем по очереди (dahdi, libpri, jansson) из исходников и устанавливаем», а про установку jansson — ни слова. Вот пример:
cd /usr/src/
git clone https://github.com/akheron/jansson.git
cd jansson
autoreconf -i
./configure —prefix=/usr/
make
make install
При написании статьи так и делалось, но позже jansson собирать стал при сборке самого asterisk (—with-jansson-bundled), поправил в статье информацию. Спасибо за наблюдательность.
Если устанавливать на виртуальную машину и не планируется использовать платы от Digium или им подобных, скачивать и собирать dahdi и libpri не нужно.
Поскольку установлен php версии 5.6, то должно быть так:
sed -i ‘s/\(^upload_max_filesize = \).*/\1 128M/’ /etc/php/5.6/apache2/php.ini
При написании статьи выполнял установку с php7, но позже выяснилось что для корректной работы необходима версия php5, поэтому при редактировании статьи не везде поправил на версию php5. Спасибо за наблюдательность.
У вас :
sed -i ‘s/\(^upload_max_filesize = \).*/\128M/’ /etc/php/7.0/apache2/php.ini
А надо так:
sed -i ‘s/\(^upload_max_filesize = \).*/\1 128M/’ /etc/php/7.0/apache2/php.ini
Да, действительно.. поправил. Спасибо за зоркость! 🙂