SCROLL
Среднее время на прочтение: 3 мин.

Установка 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:

 

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

 

Обсуждение

20 комментариев
  • Часть 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

      • Это ответ на комментарий Жаконда

        У меня есть готовые виртуалки с Астериском 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

    • Это ответ на комментарий werwer

      Да, действительно.. поправил. Спасибо за зоркость! 🙂