Установка Asterisk 16 на Ubuntu 18 LTS Server из исходников

Статья рассчитана для новичков в установке астериск из исходников. В этом нет ничего трудного, как может показаться.

Итак, имеем установленную Ubuntu 18 LTS Server и цель установить Asterisk 16.X.X Communications Framework:
cd /usr/src/
sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
sudo tar zxvf asterisk-16-current.tar.gz
cd asterisk-16*/
Устанавливаем зависимости:
sudo apt-get install build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev git subversion
Поддержку mp3
sudo contrib/scripts/get_mp3_source.sh
Доустанавливаем зависимости:
sudo contrib/scripts/install_prereq install
Компилим и ставим астериск:
sudo ./configure && make menuselect && make && make install
В процессе установки вам нужно будет отметить нужные компоненты, если ставите в первый раз - оставляйте все как есть. Я обычно включаю поддержку MySQL/Postgres (либо ODBC) и русские звуковые файлы. В данном случае, помимо стандартного набора по умолчанию, я добавил chan_ooh323, res_config_mysql, app_macro и codec_g729.
Если вам нужны базовые конфиги после установки, то выполняем:
sudo make samples
Устанавливаем скрипты для ротации логов:
make install-logrotate
Устанавливаем скрипт инициализации (для автозапуска):
make config
Если вы хотите повысить безопасность заставив asterisk работать от одноименного пользователя, выполняем следующее:
sudo groupadd asterisk
sudo useradd -d /var/lib/asterisk -g asterisk asterisk
sudo sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/g' /etc/default/asterisk
sudo sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/g' /etc/default/asterisk
sudo sed -i 's/;runuser = asterisk/runuser = asterisk/g' /etc/asterisk/asterisk.conf
sudo sed -i 's/;rungroup = asterisk/rungroup = asterisk/g' /etc/asterisk/asterisk.conf
sudo chown -R asterisk:asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib/asterisk
Перенастроим logrotate, чтобы он создавал новые файлы лога с правильными правами:
nano /etc/logrotate.d/asterisk
Находим строчку:
create 640 root root
и меняем на
create 640 asterisk asterisk
Иначе на следующий день вы получите в консоли астериска ошибку: Unable to open log file '/var/log/asterisk/messages': Permission denied' и Unable to create queue log: Permission denied.

При необходимости добавляем астер в автозапуск и стартуем службу:
sudo /etc/init.d/asterisk start
sudo systemctl enable asterisk
Если вам нужно перекомпилировать астериск и запустить заново, все просто:
cd /usr/src/asterisk-16*/
./configure 
make menuselect 
make install 
/etc/init.d/asterisk restart
Добавим дополнительные русские звуковые файлы для Asterisk, которых не было в исходниках:
wget --no-check-certificate https://github.com/pbxware/asterisk-sounds-additional/tarball/master -Oadditional-sounds.tar.gz
Звуковые файлы из полученного архива нужно извлечь в папку /var/lib/asterisk/sounds/ru/ и на всякий случай обновить права:
sudo chown -R asterisk:asterisk /var/lib/asterisk
Посмотреть, что озвучено можете по этой ссылке.

Для сохранения минимально необходимого функционала я использую следующий набор модулей для Asterisk 16. По названию чаще всего можно понять, зачем нужен модуль. Все файлы модулей должны присутствовать в папке /usr/lib/asterisk/modules/.
nano /etc/asterisk/modules.conf
[modules]
autoload=no ; отменяем загрузку всех модулей, будем подключать только необходимые
;для работы SIP VoIP
load => chan_sip.so ; SIP протокол, требует res_features.so
load => res_sorcery_config.so
load => res_pjproject.so ; без него не загружается следующий
load => res_rtp_asterisk.so
load => app_dial.so ; приложение для звонка, требует res_features.so, res_musiconhold.so
load => app_echo.so
load => bridge_simple.so ; для соединения каналов
load => app_bridgewait.so
load => app_transfer.so ; для перевода звонка
load => app_verbose.so ; для детальной статистики в консоли
load => app_voicemail.so ; голосовая почта, требует res_adsi.so
load => app_playback.so ; проиграть сообщений в линию
load => app_stack.so
load => app_confbridge.so ;конференции
load => app_directory.so
load => res_adsi.so
load => app_system.so ;для запуска внешний приложений
load => app_queue.so ;для работы очередей

;для получения статусов линий
load => func_devstate.so
load => app_chanisavail.so; для работы ChanIsAvail
load => func_cut.so; для использования функции cut

;для работы музыки на удержании вызова
load => res_musiconhold.so
load => pbx_config.so

; кодеки
load => codec_a_mu.so
load => codec_adpcm.so
load => codec_alaw.so
load => codec_ulaw.so
load => codec_gsm.so
load => codec_ilbc.so
load => codec_lpc10.so
;load => codec_g729.so; этот скачивал с сайта asterisk.hosting.lv, оптимальный для медленных подключений
load => codec_g726.so
load => codec_g722.so
;и форматы
load => format_gsm.so ; Raw GSM data - Requires N/A
load => format_h263.so ; Raw h263 data - Requires N/A
load => format_pcm.so ; Raw uLaw 8khz Audio support (PCM) - Requires N/A
load => format_wav_gsm.so ; Microsoft WAV format (Proprietary GSM) - Requires N/A
load => format_wav.so ; Microsoft WAV format (8000hz Signed Linear) - Requires N/A
load => format_mp3.so ; mp3

; парковка вызовов
load => res_parking.so

; для IAX2-транков:
load => res_crypto.so
load => chan_iax2.so ;Inter Asterisk eXchange (Ver 2), требует res_crypto.so, res_features.so
load => res_timing_timerfd.so ;Timerfd Timing Interface

; модули которые понадобятся при настройке записи разговоров
; требуется если используется res_monitor.so
load => func_periodic_hook.so
;её зависимости
load => app_chanspy.so
load => func_groupcount.so
load => func_uri.so

; требуется если используется res_monitor.so, функция STRFTIME
load => func_strings.so

; требуется если используется res_monitor.so для определения номера, функция CALLERID
load => func_callerid.so
load => func_volume.so

; для записи разговоров
load => res_monitor.so
load => app_macro.so ; для выполнение макросов, но лучше перейти на GoSub
load => app_mixmonitor.so
load => func_channel.so

; для записи статистики звонков в MySQL базу напрямую, минуя ODBC
load => cdr_mysql.so
load => res_config_mysql.so ;MySQL RealTime Configuration Driver

;для записи статистики звонков в MySQL базу через ODBC
;я отключаю т.к. удобнее настроить mysql соединение напрямую средствами Asterisk
;load => res_odbc.so
;load => res_config_odbc.so
;load => cdr_odbc.so ;

;для запросов в БД астериска AstDB
load => func_db.so
load => app_db.so

; для включения функционала SNMP, например чтобы собирать статистику различными системами мониторинга
load => res_snmp.so

; для совершения вызовов из контекста помещаемых файлов в директорию /var/spool/asterisk/outgoing/
load => pbx_spool.so

; для 323-транков:
load => chan_ooh323.so

; еще несколько необходимых
load => app_exec.so; для работы exec и execif
load => app_while.so ; для циклов в диалплане
load => res_sorcery_astdb.so
load => res_sorcery_realtime.so
load => app_read.so
load => app_stack.so
load => cdr_csv.so ; выгрузка логов в /var/log/asterisk/cdr-csv/Master.csv
load => func_cdr.so
load => func_logic.so
load => func_timeout.so
load => func_shell.so
load => pbx_ael.so
load => res_ael_share.so
load => res_agi.so
load => res_speech.so ; нужен для res_agi.so
;
А вот список конфигурационных файлов по умолчанию в папке /etc/asterisk:
acl.conf, asterisk.conf, calendar.conf, ccss.conf, cdr.conf, cdr_mysql.conf, cel.conf, chan_dahdi.conf, cli.conf, codecs.conf, confbridge.conf, extensions.ael, extensions.conf, extensions.lua, features.conf, festival.conf, followme.conf, iax.conf, indications.conf, logger.conf, manager.conf, mgcp.conf, modules.conf, musiconhold.conf, muted.conf, ooh323.conf, pjproject.conf, queuerules.conf, queues.conf, res_parking.conf, res_snmp.conf, rtp.conf, sip.conf, stasis.conf, udptl.conf, voicemail.conf.

На этом все, проверяем работу и смотрим на возможные ошибки в консоли:
sudo asterisk -c
Если выводятся только предупреждения, переходим к дальнейшей настройке. Например, по этой статье.

5 комментариев:

  1. как бы теперь удалить этот Asterisk ?

    ОтветитьУдалить
    Ответы
    1. Удалить Asterisk установленный из исходников можно так:
      cd /usr/src/asterisk-16*
      make uninstall-all

      Или руками:
      /etc/init.d/asterisk stop
      killall -9 safe_asterisk
      killall -9 asterisk
      systemctl disable asterisk
      rm -rf /etc/asterisk
      rm -rf /var/log/asterisk
      rm -rf /var/lib/asterisk
      rm -rf /var/lib64/asterisk
      rm -rf /var/spool/asterisk
      rm -rf /usr/lib/asterisk
      rm -rf /usr/lib64/asterisk

      Удалить
    2. спасибо. к сожалению, дюже много места занимает на vps'ке (

      и от себя добавлю, удалить исходники
      rm -rf /usr/src/asterisk-16.10.0

      Удалить
  2. как "настроить mysql соединение напрямую средствами Asterisk" ?

    ОтветитьУдалить
    Ответы
    1. Использовать для настройки не драйвер odbc, а модули выше и конфиг /etc/asterisk/cdr_mysql.conf
      В конфиге указываем настройки для подключения к БД. Например:
      hostname=127.0.0.1
      dbname=asteriskcdr
      table=cdr
      user=asterisk
      password=password

      Удалить