Установка Asterisk 16 на Debian 10 или Centos 7, 8

загрузить asterisk

# cd /usr/src
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz

распаковка

# tar xzvf asterisk-16-current.tar.gz

перейти в распакованную директорию

# cd asterisk-16.*

 

Установка зависимостей

установить все зависимости

# contrib/scripts/install_prereq install

При установке на Centos 7 не было найдено 3 пакета: speexdsp-devel, iksemel-devel, hoard

Вместо speexdsp-devel, установить пакет speex-devel.

Для установки пакета iksemel-devel не нашел решения.

скачать исходники mp3

# contrib/scripts/get_mp3_source.sh

Установка пакетов для шифрования TLS:

# yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm
# yum install libsrtp-devel

или скачать и установить:

для Centos 7:

libsrtp-1.4.4-11.20101004cvs.el7.x86_64.rpm

libsrtp-devel-1.4.4-10.20101004cvs.el7.x86_64.rpm

для Centos 8:

libsrtp-1.5.4-8.el8.x86_64.rpm

libsrtp-devel-1.5.4-8.el8.x86_64.rpm

 

Установка

подготовка исходников к компиляции

# ./configure

На Centos 7 подготовка исходников закончилась с ошибкой:

configure: *** Asterisk requires libjansson >= 2.11 and no system copy was found.
configure: *** Please install the 'libjansson' development package or
configure: *** use './configure --with-jansson-bundled'

При проверке на существование пакета:

# rpm -qa | grep jansson
jansson-2.10-1.el7.x86_64
jansson-devel-2.10-1.el7.x86_64

Версия пакетов не подходит.

Установка подходищих версий:

# yum install https://disweb.ru/files/rpm/jansson-2.11-2.2.x86_64.rpm https://disweb.ru/files/rpm/jansson-devel-2.11-2.2.x86_64.rpm

 

выбрать компоненты asterisk для установки

# make menuselect
  • на первой вкладке выбрать format_mp3.
  • вкладка Core Sound Packages выбрать RU-WAV
  • вкладка Extras Sound Packages выбрать EN-WAV

Для работы TLS нужно проверить, что установлено Resource Modules -> res_srtp

нажать Save & Exit

запуск компиляции (-j<количество задействованных ядер процесора>)

# make -j2

ошибка при компиляции:

[CC] res_hep.c -> res_hep.o
   [CC] res_ari_device_states.c -> res_ari_device_states.o
   [CC] ari/resource_device_states.c -> ari/resource_device_states.o
   [CC] res_sorcery_memory_cache.c -> res_sorcery_memory_cache.o
   [CC] res_srtp.c -> res_srtp.o
   [CC] res_pjsip_outbound_publish.c -> res_pjsip_outbound_publish.o
   [CC] res_timing_timerfd.c -> res_timing_timerfd.o
   [CC] res_fax_spandsp.c -> res_fax_spandsp.o
res_fax_spandsp.c: In function ‘set_logging’:
res_fax_spandsp.c:452:2: warning: passing argument 2 of ‘span_log_set_message_handler’ from incompatible pointer type [enabled by default]
  span_log_set_message_handler(state, spandsp_log);
  ^
In file included from /usr/include/spandsp.h:53:0,
                 from res_fax_spandsp.c:67:
/usr/include/spandsp/logging.h:123:20: note: expected ‘message_handler_func_t’ but argument is of type ‘void (*)(int,  const char *)’
 SPAN_DECLARE(void) span_log_set_message_handler(logging_state_t *s, message_handler_func_t func, void *user_data);
                    ^
res_fax_spandsp.c:452:2: error: too few arguments to function ‘span_log_set_message_handler’
  span_log_set_message_handler(state, spandsp_log);
  ^
In file included from /usr/include/spandsp.h:53:0,
                 from res_fax_spandsp.c:67:
/usr/include/spandsp/logging.h:123:20: note: declared here
 SPAN_DECLARE(void) span_log_set_message_handler(logging_state_t *s, message_handler_func_t func, void *user_data);
                    ^
res_fax_spandsp.c: In function ‘set_ecm’:
res_fax_spandsp.c:482:44: error: ‘T30_SUPPORT_T4_1D_COMPRESSION’ undeclared (first use in this function)
  t30_set_supported_compressions(t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
                                            ^
res_fax_spandsp.c:482:44: note: each undeclared identifier is reported only once for each function it appears in
res_fax_spandsp.c:482:76: error: ‘T30_SUPPORT_T4_2D_COMPRESSION’ undeclared (first use in this function)
  t30_set_supported_compressions(t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
                                                                            ^
res_fax_spandsp.c:482:108: error: ‘T30_SUPPORT_T6_COMPRESSION’ undeclared (first use in this function)
  t30_set_supported_compressions(t30_state, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
                                                                                                            ^
res_fax_spandsp.c: In function ‘spandsp_fax_start’:
res_fax_spandsp.c:969:2: warning: passing argument 2 of ‘t30_set_phase_e_handler’ from incompatible pointer type [enabled by default]
  t30_set_phase_e_handler(p->t30_state, t30_phase_e_handler, s);
  ^
In file included from /usr/include/spandsp.h:122:0,
                 from res_fax_spandsp.c:67:
/usr/include/spandsp/t30_api.h:557:20: note: expected ‘t30_phase_e_handler_t’ but argument is of type ‘void (*)(struct t30_state_t *, void *, int)’
 SPAN_DECLARE(void) t30_set_phase_e_handler(t30_state_t *s, t30_phase_e_handler_t handler, void *user_data);
                    ^
res_fax_spandsp.c: In function ‘load_module’:
res_fax_spandsp.c:1259:2: error: too few arguments to function ‘span_set_message_handler’
  span_set_message_handler(NULL);
  ^
In file included from /usr/include/spandsp.h:53:0,
                 from res_fax_spandsp.c:67:
/usr/include/spandsp/logging.h:125:20: note: declared here
 SPAN_DECLARE(void) span_set_message_handler(message_handler_func_t func, void *user_data);
                    ^
make[1]: *** [res_fax_spandsp.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [res] Error 2

устранил данную ошибку отключив библиотеку: Resource Modules -> res_fax_spandsp

 

установка asterisk и всех его модулей

# make install

формирование образцов файлов конфигурации

# make samples

создание init скрипта

# make config

обновить кэш используемых динамических библиотек

# /sbin/ldconfig

 

Запуск

создать пользователя

# /sbin/adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
# /sbin/usermod -a -G dialout,audio asterisk

для Centos

# useradd --system --home-dir /var/lib/asterisk --no-create-home --comment "Asterisk" asterisk
# usermod -a -G dialout,audio asterisk

раскомментировать в конфиге /etc/sysconfig/asterisk

AST_USER="asterisk"
AST_GROUP="asterisk"

назначить пользователю права на директории asterisk

# chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk

запуск  астериска

# systemctl start asterisk

проверка статуса работы

# systemctl status asterisk

добавить в автозапуск

# systemctl enable asterisk

Открыть CLI консоль астериска:

# /usr/sbin/asterisk -rvvvvv

 

Ошибки

если в статусе есть ошибка:

radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory

в /etc/asterisk/cdr.conf раскомментировать и отредактировал строки:

[radius]
radiuscfg => /etc/radcli/radiusclient.conf

то же самое в /etc/asterisk/cel.conf:

[radius]
radiuscfg => /etc/radcli/radiusclient.conf

перезагрузить астериск и проверить статус

# systemctl restart asterisk
# systemctl status asterisk

 

При попытки открыть консоль CLI:

# asterisk -rvvvvv
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

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

# nano /etc/selinux/config

Отключить SELINUX

SELINUX=disabled

перезагрузить компьютер:

# reboot

 

Ошибка при звонке:

Matched device setup to use SRTP, but request was not!

Если подключаеться другая Asterisk то параметрах пользователя установить:

encryption=yes