Дата написания: апрель 2020 г.
Автор: Graf

VOIP Server (Asterisk+FreePBX)


Дано:
IP сервера, где все это будет стоять - 192.168.10.234
Slackware64 14.2 с последними обновлениями ядра, системы и пакета sbopkg.

ASTERISK

Если вы собираетесь использовать аппаратные интерфейсы ISDN (например, карты T1/E1/J1/BRI), настроить взаимодействие Asterisk с аналоговыми и цифровыми телефонами, включая подключения к телефонной сети общего пользования или PSTN, и планируете использовать приложение набора номеров MeetMe,то сначала, вам необходимо установить библиотеки libpri и DAHDI (бывший Zaplet).
Если вышеперечисленное вы не будете использовать, то устанавливать эти библиотеки нет необходимости и можно перейти сразу к установке Asterisk.

  • DAHDI

Первым делом установим последнюю (на день написания статьи - 3.1.0) версию DAHDI.
Скачаем, соберём, создадим пакет и установим его.

# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-3.1.0.tar.gz
# tar xf ./dahdi-linux-3.1.0.tar.gz
# cd ./dahdi-linux-3.1.0
# make
# make install DESTDIR=/tmp/dahdi-linux-3.1.0
# cd /tmp/dahdi-linux-3.1.0/
# makepkg -l y -c n /tmp/dahdi-linux-3.1.0-x86_64-1.txz
# upgradepkg --install-new /tmp/dahdi-linux-3.1.0-x86_64-1.txz 
  • DAHDI-TOOLS

Далее установим последнюю (на день написания статьи - 3.1.0) версию dahdi-tool.
Скачаем, сконфигурируем, соберём, создадим пакет и установим его.

# wget http://downloads.asterisk.org/pub/telephony/dahdi-tools/dahdi-tools-3.1.0.tar.gz
# tar xf ./dahdi-tools-3.1.0.tar.gz
# cd dahdi-tools-3.1.0
# autoreconf -i
#./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=/usr/lib64 \
--includedir=/usr/include

# make
# make install DESTDIR=/tmp/dahdi-tools-3.1.0
# make install-config DESTDIR=/tmp/dahdi-tools-3.1.0
# cd /tmp/dahdi-tools-3.1.0/
# makepkg  -l y -c n /tmp/dahd-tools-3.1.0-x86_64-1.txz
# upgradepkg --install-new /tmp/dahd-tools-3.1.0-x86_64-1.txz
  • LIBPRI

Теперь, cкачаем, соберём, создадим пакет и установим последнюю версию ( на день написания статьи - 1.6.0) библиотеки libpri.

# wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.6.0.tar.gz
# tar xf ./libpri-1.6.0.tar.gz
# cd libpri-1.6.0
# make
# make install DESTDIR=/tmp/libpri-1.6.0
# cd /tmp/libpri-1.6.0/
# makepkg  -l y -c n /tmp/libpri-1.6.0-x86_64-1.txz
# upgradepkg --install-new/tmp/libpri-1.6.0-x86_64-1.txz
  • ASTERISK

Собственно, сборка и установка последней (на день написания статьи -17.3.0) версии Asterisk.

# sbopkg -Bki "libedit libsrtp jansson"
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-17.3.0.tar.gz
# tar xf ./asterisk-17.3.0.tar.gz 
# cd asterisk-17.3.0
# ./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=/usr/lib64 \
--includedir=/usr/include

Выбираем опции, подробнее об опциях ТУТ.

# make menuselect
# make
# make install DESTDIR=/tmp/asterisk-17.3.0
Если ошибка:
---> IMPORTANT INFORMATION ABOUT format_mp3 <---    ***
***                                                        ***
*** format_mp3 has been selected to be installed, but the  ***
*** MP3 decoder library has not yet been downloaded into   ***
*** the source tree.  To do so, please run the following   ***
*** command:                                               ***
***                                                        ***
***          $ contrib/scripts/get_mp3_source.sh 

Так и делаем

# ./contrib/scripts/get_mp3_source.sh

должны подгрузиться файлы, и повторяем

# make install DESTDIR=/tmp/asterisk-17.3.0

Собираем примеры конфигураций, документацию и ротацию логов.

# make samples DESTDIR=/tmp/asterisk-17.3.0
# make progdocs DESTDIR=/tmp/asterisk-17.3.0
# make install-logrotate DESTDIR=/tmp/asterisk-17.3.0

Устанавливаем веб интерфейс для голосовой почты, для этого изменим в файле ./Makefile строку

HTTP_DOCSDIR=/var/www/htm
на
HTTP_DOCSDIR=/var/www/htdocs

Создаем недостающие каталоги и собираем.

# mkdir -p /tmp/asterisk-17.3.0/var/www/{htdocs,cgi-bin}
# make webvmail DESTDIR=/tmp/asterisk-17.3.0

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

# cd /tmp/asterisk-17.3.0
# makepkg -l y -c n /tmp/asterisk-17.3.0-x86_64-1.txz
# upgradepkg --install-new /tmp/asterisk-17.3.0-x86_64-1.txz

Создадим скрипт для запуска - /etc/rc.d/rc.asterisk.
В котором укажем, что он запускаться будет от пользователя apache. (нужно для FreePBX)

 #!/bin/sh

 AST_CONFIG=/etc/asterisk
 AST_SBIN=/usr/sbin

# Запускаем asterisk от имени apache
 AST_USER=apache
 AST_GROUP=apache

 . /etc/rc.d/init.d/functions 
 
 if ! [ -x $AST_SBIN/asterisk ] ; then
        echo "ERROR: /usr/sbin/asterisk not found"
         exit 0
 fi
 
 if ! [ -d $AST_CONFIG ] ; then
         echo "ERROR: $AST_CONFIG directory not found"
         exit 0
 fi
 
 DAEMON=$AST_SBIN/asterisk
 SAFE_ASTERISK=$AST_SBIN/safe_asterisk
 CONFIG0=`readlink $0`
 if [ "$CONFIG0" = "" ]; then
         CONFIGFILE=/etc/sysconfig/`basename $0`
 else
         CONFIGFILE=/etc/sysconfig/`basename $CONFIG0`
 fi
 [ -x $CONFIGFILE ] && . $CONFIGFILE 
 
 RETVAL=0 
 
 start() {
         # Start daemons.
         echo -n $"Starting asterisk: "
         if [ -f $SAFE_ASTERISK ] ; then
                 DAEMON=$SAFE_ASTERISK
         fi
         if [ $AST_USER ] ; then
                 ASTARGS="-U $AST_USER"
         fi
         if [ $AST_GROUP ] ; then
                 ASTARGS="$ASTARGS -G $AST_GROUP"
         fi
         if [ $AST_CONFIG ]; then
                 ASTARGS="$ASTARGS -C $AST_CONFIG"
         fi
         daemon $DAEMON $ASTARGS
         RETVAL=$?
         [ $RETVAL -eq 0 ] && touch /var/lock/asterisk
         echo
         return $RETVAL
 }
  
 stop() {
         # Stop daemons.
         echo -n $"Shutting down asterisk: "
         killproc asterisk
         RETVAL=$?
         [ $RETVAL -eq 0 ] && rm -f /var/lock/asterisk
         echo
         return $RETVAL
 }
  
 restart() {
         stop
         start
 } 
 
 reload() {
         $DAEMON -rx 'reload' > /dev/null 2> /dev/null
 } 
 
 case "$1" in
   start)
         start
         ;; 
   stop)
         stop
         ;; 
   restart)
         restart
         ;; 
   reload) 
         reload 
         ;; 
   condrestart)
         [ -f /var/lock/subsys/asterisk ] && restart || : 
         ;; 
   status)
         status asterisk
         ;; 
   *)
         echo "Usage: asterisk {start|stop|restart|reload|condrestart|status}"
         exit 1 
 esac  
 
 exit $?

Раздадим права:

# chown -R apache:apache /var/lib/asterisk
# chown -R apache:apache /var/log/asterisk
# chown -R apache:apache /var/run/asterisk
# chown -R apache:apache /var/spool/asterisk
# chown -R apache:apache /usr/lib64/asterisk
# chown apache /var/spool/mqueue/ 
# chown apache /var/spool/cron/crontabs/asterisk
# chmod -R 0770 /var/lib/asterisk
# chmod -R 0770 /var/log/asterisk
# chmod -R 0770 /var/run/asterisk
# chmod -R 0770 /var/spool/asterisk
# chmod -R 0770 /usr/lib64/asterisk

Стартуем asterisk.

 # chmod +x /etc/rc.d/rc.asterisk
 # /etc/rc.d/rc.asterisk start

Starting asterisk:                                         [  OK  ]

Заходим в консоль Asterisk, дабы убедиться, что он работает

 # asterisk -rvvv
 
Asterisk 17.3.0, Copyright (C) 1999 - 2018, 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 17.3.0 currently running on your-voip-server (pid = 13071)
your-voip-server*CLI> 

Как видим - работает!
Для выхода из консоли нужно набрать exit.

FreePBX

Настроим MySQL.

 # mkdir /var/lib/mysql/mysql
 # mysql_install_db
 # chown -R mysql.mysql /var/lib/mysql
 # /etc/rc.d/rc.mysqld start
 # mysql 
 
 mysql> set password for 'root'@'localhost' = password('mypassword'); 
 mysql> FLUSH PRIVILEGES;
 mysql>\q

Правим /etc/httpd/httpd.conf

# Убираем знак комментария с: 
LoadModule rewrite_module lib64/httpd/modules/mod_rewrite.so

# Приводим к виду:
DocumentRoot "/srv/httpd/htdocs"
<Directory "/srv/httpd/htdocs">
    Options Indexes FollowSymLinks   
    AllowOverride All
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

 # Убираем знак комментария с:
 Include /etc/httpd/mod_php.conf

Правим /etc/httpd/php.ini

upload_max_filesize = 50M 
date.timezone = Europe/Moscow
max_execution_time = 600
memory_limit = 512M

Перезапуск (apache).

 # /etc/rc.d/rc.httpd restart

Для прослушивания записей в браузере проверьте, что у вас установлены пакеты sox и mpg123 (есть в составе дистрибутива), а также установим lame и ffmpeg4.

# wget https://slackware.uk/people/alien/sbrepos/14.2/x86_64/lame/lame-3.99.5-x86_64-1alien.txz
# upgradepkg --install-new ./lame-3.99.5-x86_64-1alien.txz

# wget http://ponce.cc/slackware/slackware64-14.2/packages/ffmpeg4-4.1-x86_64-1ponce.txz
# upgradepkg --install-new ./ffmpeg4-4.1-x86_64-1ponce.txz 

Устанавливаем PeerDB.
При помощи sbopkg, устанавливаем nodejs.
Скачиваем последнюю (на день написания статьи - 15.0) версию FreePBX.

# pear install DB
# sbopkg -Bki "nodejs"
# wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-15.0-latest.tgz
# tar xf ./freepbx-15.0-latest.tgz
# cd freepbx

В файле ./installlib/installcommand.class.php меняем команду runuser на sudo -u

sed -i "s/runuser/sudo -u/" ./installlib/installcommand.class.php

Устанавливаем FreePBX:

./install -n -vv --rootdb --force \
--dbuser=root \
--dbpass=mypassword \                    <---- Пароль root в MySQL
--user=apache \
--group=apache \
--webroot=/var/www/htdocs \
--astetcdir=/etc/asterisk \
--astmoddir=/usr/lib64/asterisk/modules \
--astvarlibdir=/var/lib/asterisk \
--astagidir=/var/lib/asterisk/agi-bin \
--astspooldir=/var/spool/asterisk \
--astrundir=/var/run/asterisk \
--astlogdir=/var/log/asterisk \
--ampbin=/usr/bin \
--ampsbin=/usr/sbin \
--ampcgibin=/var/www/cgi-bin \
--ampplayback=/var/lib/asterisk/playback

После завершения установки вы увидите сообщение:
You have install successefully installed FreePBX

Теперь можно продолжить установку перейдя в web-интерфейс по адресу (в нашем примере):

 http://192.168.10.234/admin

По завершению установки, вы должны увидеть что-то подобное. Без ошибок.



Обсуждение на форуме

Печать/экспорт
QR Code
QR Code wiki:articles:voip (generated for current page)