Введение
Устанавливать Asterisk 16 на Centos 8 будем из исходников. Это не для того, чтобы показать олдскул и крутость самостоятельной сборки софта. Это вынужденная мера. Всегда, когда есть возможность установить из пакетов, лучше ей воспользоваться. Либо можно собрать свой пакет и ставить уже из него. Сборка софта из исходников крайняя мера, когда готового пакета просто не существует.
Я устанавливаю версию 16, хотя есть уже 17-я. Именно 16-я версия имеет статус LTS, то есть длительная поддержка. Если вам не нужны новые фичи промежуточных версий, рекомендую всегда ставить lts версии.
Для установки Asterisk 16 на свежую Centos 8 я не нашел репозитория, где бы были собраны все пакеты с зависимостями для быстрой и безпроблемной установки. Так что будем по старинке собирать все руками. Ничего сложного тут нет. Все примерно так же, как и в прошлых версиях. Каких-то новых сложностей или нюансов я не заметил.
Подготовка сервера
Первым делом надо отключить SELinux. Открываем файл /etc/sysconfig/selinux и меняем параметр.
1 |
nano /etc/sysconfig/selinux |
1 |
SELINUX=disabled |
Для применения настройки нужно перезагрузиться, либо временно приостановить selinux.
1 |
setenforce 0 |
Установим теперь пакеты, которые нам понадобятся для сборки. В первую очередь подключим репозиторий epel.
1 |
dnf install epel-release |
Дальше идет мета пакет Development Tools со всем необходимым для сборки из исходников.
1 |
dnf groupinstall "Development Tools" |
И еще некоторые зависимости, которые будут нужны.
1 |
dnf install git wget net-tools sqlite-devel psmisc ncurses-devel libtermcap-devel newt-devel libxml2-devel libtiff-devel gtk2-devel libtool libuuid-devel subversion kernel-devel kernel-devel-$(uname -r) crontabs cronie-anacron mariadb mariadb-server |
Настройте mysql сервер, задав пароль для root.
1 2 3 |
systemctl start mariadb systemctl enable mariadb /usr/bin/mysql_secure_installation |
На этом подготовка закончена.
Устанавливаем Jansson и pjsip
1 2 3 4 5 6 7 8 9 10 11 12 13 |
cd ~ git clone https://github.com/akheron/jansson.git cd jansson autoreconf -i ./configure --prefix=/usr/ make && make install cd ~ git clone https://github.com/pjsip/pjproject.git cd pjproject ./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib64 --enable-shared --disable-video --disable-sound --disable-opencore-amr make dep && make && make install ldconfig |
Все готово к установке непосредственно Astersik
Установка Asterisk 16
Я буду устанавливать LTS версию Asterisk 16. Советую для долгосрочного использования всегда использовать LTS версии. Они в целом стабильнее и дольше срок поддержки. Идем на страницу https://www.asterisk.org/downloads/asterisk/all-asterisk-versions и копируем ссылку на нужную версию. Загружаем ее на сервер.
1 2 3 4 5 6 |
cd ~ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz tar xfz asterisk-16-current.tar.gz cd asterisk-16*/ contrib/scripts/install_prereq install contrib/scripts/get_mp3_source.sh |
Устанавливаем на centos 8 пакет libedit-devel.
1 2 |
dnf config-manager --set-enabled PowerTools dnf install libedit-devel |
Собираем asterisk.
1 2 |
./configure --libdir=/usr/lib64 make menuselect |
Выбирайте необходимые модули и звуки, в зависимости от того, что вам нужно. Я в общем случае указываю:
Add-ons: format_mp3, res_config_mysql.
Core Sound Packages: русские звуки RU-WAV.
Music On Hold File Packages: звук WAV.
Extras Sound Packages: английский EN-WAV, русского к сожалению нет.
Все остальные настройки оставляем по-умолчанию. Ставится много модулей. Все они не нужны, но мало ли, пригодится что-то в будущем. Неиспользуемые модули можно будет потом отключить в конфигурации.
Продолжаем установку:
1 2 |
make && make install && make samples && make config ldconfig |
Создание пользователя asterisk и запуск
По-умолчанию, asterisk установлен от root и будет запускаться от него же. Я предлагаю для этого создать отдельного пользователя и запускать астериск от него. Для этого создаем пользователя и добавляем его в некоторые группы.
1 2 3 4 |
groupadd asterisk useradd -r -d /var/lib/asterisk -g asterisk asterisk usermod -aG audio,dialout asterisk chown -R asterisk.asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk |
Настраиваем Asterisk на запуск под этим пользователем. Для этого добавляем в конфиг /etc/sysconfig/asterisk параметры:
1 2 |
AST_USER="asterisk" AST_GROUP="asterisk" |
Теперь добавим примерно то же самое в сам конфиг астера
1 |
nano /etc/asterisk/asterisk.conf |
1 2 |
runuser = asterisk rungroup = asterisk |
Пробуем запустить asterisk:
1 |
systemctl start asterisk |
Если нет сообщений об ошибке, скорее всего все в порядке. Проверяем статус службы.
1 |
systemctl status asterisk |
Asterisk запустился, но есть небольшие ошибки.
1 |
radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory |
Связаны с тем, что в конфигах неверно указан путь к radiusclient. Сейчас исправим это.
1 2 3 |
sed -i 's";\[radius\]"\[radius\]"g' /etc/asterisk/cdr.conf sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cdr.conf sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cel.conf |
Перезапускаем asterisk и убеждаемся, что ошибок нет. Проверим, все ли в порядке, зайдя в консоль:
1 |
asterisk -r |
Добавим Astersk в автозагрузку.
1 |
systemctl enable asterisk |
Теперь установим наш USB модем:
1 2 3 4 5 6 7 8 9 |
cd /home/asterisk/install yum install git git clone https://github.com/wdoekes/asterisk-chan-dongle.git cd asterisk-chan-dongle ./bootstrap ./configure --with-astversion=16.8.0 # Заменить на свою версию астериск make sudo make install sudo cp dongle.conf /etc/asterisk/ |
Если команда cp dongle.conf /etc/asterisk/ выполнилась с ошибкой, то необходимо в ручном режиме создать файл с содержимым
1 |
nano /etc/asterisk/dongle.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
[general] interval=15 ; Number of seconds between trying to connect to devices ;------------------------------ JITTER BUFFER CONFIGURATION -------------------------- ;jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a ; Dongle channel. Defaults to "no". An enabled jitterbuffer will ; be used only if the sending side can create and the receiving ; side can not accept jitter. The Dongle channel can't accept jitter, ; thus an enabled jitterbuffer on the receive Dongle side will always ; be used if the sending side can create jitter. ;jbforce = no ; Forces the use of a jitterbuffer on the receive side of a Dongle ; channel. Defaults to "no". ;jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. ;jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is ; resynchronized. Useful to improve the quality of the voice, with ; big jumps in/broken timestamps, usually sent from exotic devices ; and programs. Defaults to 1000. ;jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a Dongle ; channel. Two implementations are currently available - "fixed" ; (with size always equals to jbmaxsize) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. ;jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. ; The option represents the number of milliseconds by which the new jitter buffer ; will pad its size. the default is 40, so without modification, the new ; jitter buffer will set its size to the jitter value plus 40 milliseconds. ; increasing this value may help if your network normally has low jitter, ; but occasionally has spikes. ;jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- ; [GSM01] ;966XXXXXXX context=dial-plan-GSM01-in imei=861961123456789 rxgain=0 rxgain=0 ; [defaults] ; now you can set here any not required device settings as template ; sure you can overwrite in any [device] section this default values ;context=default ; context for incoming calls group=0 ; calling group rxgain=0 ; increase the incoming volume; may be negative txgain=0 ; increase the outgoint volume; may be negative autodeletesms=yes ; auto delete incoming sms resetdongle=yes ; reset dongle during initialization with ATZ command u2diag=-1 ; set ^U2DIAG parameter on device (0 = disable everything except modem function) ; -1 not use ^U2DIAG command ;u2diag=0 usecallingpres=yes ; use the caller ID presentation or not callingpres=allowed_passed_screen ; set caller ID presentation by default use default network settings disablesms=no ; disable of SMS reading from device when received ; chan_dongle has currently a bug with SMS reception. When a SMS gets in during a ; call chan_dongle might crash. Enable this option to disable sms reception. ; default = no language=en ; set channel default language smsaspdu=yes ; if 'yes' send SMS in PDU mode, feature implementation incomplete and we strongly recommend say 'yes' mindtmfgap=45 ; minimal interval from end of previews DTMF from begining of next in ms mindtmfduration=80 ; minimal DTMF tone duration in ms mindtmfinterval=200 ; minimal interval between ends of DTMF of same digits in ms callwaiting=auto ; if 'yes' allow incoming calls waiting; by default use network settings ; if 'no' waiting calls just ignored disable=no ; OBSOLETED by initstate: if 'yes' no load this device and just ignore this section initstate=start ; specified initial state of device, must be one of 'stop' 'start' 'remote' ; 'remove' same as 'disable=yes' ;exten=+1234567890 ; exten for start incoming calls, only in case of Subscriber Number not available!, also set to CALLERID(ndid) dtmf=relax ; control of incoming DTMF detection, possible values: ; off - off DTMF tones detection, voice data passed to asterisk unaltered ; use this value for gateways or if not use DTMF for AVR or inside dialplan ; inband - do DTMF tones detection ; relax - like inband but with relaxdtmf option ; default is 'relax' by compatibility reason ; ; dongle required settings ;[dongle0] ;audio=/dev/ttyUSB1 ; tty port for audio connection; no default value ;data=/dev/ttyUSB2 ; tty port for AT commands; no default value ; ; or you can omit both audio and data together and use imei=123456789012345 and/or imsi=123456789012345 ; imei and imsi must contain exactly 15 digits ! ; imei/imsi discovery is available on Linux only ;imei=123456789012345 ;imsi=123456789012345 ; ; if audio and data set together with imei and/or imsi audio and data has precedence ; you can use both imei and imsi together in this case exact match by imei and imsi required |
Заключение
На этом установка Asterisk 16 на Centos 8 закончена. Можете приступать к настройке.