Продолжаю обновление и актуализацию статей после выхода новой версии популярной серверной системы. Сегодня расскажу как собрать из исходников и установить сервер телефонии Asterisk 16 на Centos 8. Установка будет из исходных текстов, так как репозиториев с готовыми пакетами под новую систему я не смог найти.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Цели статьи
- Подготовить из исходников все зависимости.
- Установить asterisk 16 из исходников.
- Запустить asterisk и убедиться в его работоспособности.
Данная статья является частью единого цикла статьей про сервер Centos.
Введение
Устанавливать Asterisk 16 на Centos 8 будем из исходников. Это не для того, чтобы показать олдскул и крутость самостоятельной сборки софта. Это вынужденная мера. Всегда, когда есть возможность установить из пакетов, лучше ей воспользоваться. Либо можно собрать свой пакет и ставить уже из него. Сборка софта из исходников крайняя мера, когда готового пакета просто не существует.
Я устанавливаю версию 16, хотя есть уже 17-я. Именно 16-я версия имеет статус LTS, то есть длительная поддержка. Если вам не нужны новые фичи промежуточных версий, рекомендую всегда ставить lts версии.
Для установки Asterisk 16 на свежую Centos 8 я не нашел репозитория, где бы были собраны все пакеты с зависимостями для быстрой и безпроблемной установки. Так что будем по старинке собирать все руками. Ничего сложного тут нет. Все примерно так же, как и в прошлых версиях. Каких-то новых сложностей или нюансов я не заметил.
Если у вас еще нет готового сервера, то рекомендую мои статьи по установке и настройке Centos.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Подготовка сервера
Первым делом надо отключить SELinux. Открываем файл /etc/sysconfig/selinux и меняем параметр.
# mcedit /etc/sysconfig/selinux
SELINUX=disabled
Для применения настройки нужно перезагрузиться, либо временно приостановить selinux.
# setenforce 0
Установим теперь пакеты, которые нам понадобятся для сборки. В первую очередь подключим репозиторий epel.
# dnf install epel-release
Дальше идет мета пакет Development Tools со всем необходимым для сборки из исходников.
# dnf groupinstall "Development Tools"
И еще некоторые зависимости, которые будут нужны.
# 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.
# systemctl start mariadb # systemctl enable mariadb # /usr/bin/mysql_secure_installation
На этом подготовка закончена.
Устанавливаем Jansson и pjsip
# 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 и копируем ссылку на нужную версию. Загружаем ее на сервер.
# 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.
# dnf config-manager --set-enabled powertools # dnf install libedit-devel
Собираем asterisk.
# ./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, русского к сожалению нет.
Все остальные настройки оставляем по-умолчанию. Ставится много модулей. Все они не нужны, но мало ли, пригодится что-то в будущем. Неиспользуемые модули можно будет потом отключить в конфигурации.
Продолжаем установку:
# make && make install && make samples && make config # ldconfig
Создание пользователя asterisk и запуск
По-умолчанию, asterisk установлен от root и будет запускаться от него же. Я предлагаю для этого создать отдельного пользователя и запускать астериск от него. Для этого создаем пользователя и добавляем его в некоторые группы.
# 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 параметры:
AST_USER="asterisk" AST_GROUP="asterisk"
Теперь добавим примерно то же самое в сам конфиг астера /etc/asterisk/asterisk.conf.
runuser = asterisk rungroup = asterisk
Пробуем запустить asterisk:
# systemctl start asterisk
Если нет сообщений об ошибке, скорее всего все в порядке. Проверяем статус службы.
# systemctl status asterisk
Asterisk запустился, но есть небольшие ошибки.
radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Связаны с тем, что в конфигах неверно указан путь к radiusclient. Сейчас исправим это.
# 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 и убеждаемся, что ошибок нет. Проверим, все ли в порядке, зайдя в консоль:
# asterisk -r
Если получили такой же вывод команды, значит все в порядке, астериск 16 установлен. Добавим его теперь в автозагрузку.
# systemctl enable asterisk
Видео
Для тех, у кого что-то не получается или не понятно, как сделать, записал видео по приведенной инструкции. Видео подтверждает, что материал актуален и если делать по нему, то все получится.
Заключение
На этом установка Asterisk 16 на Centos 8 закончена. Можете приступать к настройке. В этой статье очень подробно рассказано как настроить на астериске базовый функционал по телефонии для среднего офиса или коллектива.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Добавьте пометку что в файле /etc/asterisk/asterisk.conf параметры
runuser = asterisk
rungroup = asterisk
нужно добавить в отдел [options], иначе астериск все равно стартует под рутом
Спасибо за мануал! Подскажите, у вас был опыт переноса астера с физической машины на виртуальную? Есть ли там подводные камни?
Никаких нет. Можете в виртуалке установить ту же версию asterisk и перенести конфиги. Весь астериск живет в них, если не использовали mysql для хранения настроек.
Спасибо! Классная инструкция. Все получилось
К сожалению на шаге "И еще некоторые зависимости, которые будут нужны." ошибка:
Error: Unable to find a match: kernel-devel-4.18.0-240.el8.x86_64
Может я не понимаю зачем устанвливать pjsip если используем только sip ?
Добавьте в инсрукци иначе репозитарий не добавится и установка не начнется dnf install libedit-devel
dnf config-manager --set-enabled powertools
Спасибо, поправил. Раньше имя репозитория с заглавными буквами указывалось, теперь только со строчными.
Вам спасибо за отличные инструкции за ваши труды
После выполнения команды: "# systemctl enable asterisk" выдается сообщение:
asterisk.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable asterisk.
Выполняю "/usr/lib/systemd/systemd-sysv-install enable asterisk", пишется: пусто.
Выполняю снова первую команду- выдается тоже самое сообщение.
Это в Centos 8 происходит?
у меня в oracle linux 8 такая история
Здравствуйте. У меня все работает помимо вкладки Inbound Routes. Никакие изменения не применяются, даже если удалить маршрут, входящие звонки все еще идут через старый маршрут, который когда-то применился. А теперь игнорирует любые изменения. Из за чего это может быть?
Что может быть, если при команде:
service asterisk restart
Получаю:
Restarting asterisk (via systemctl): Job for asterisk.service failed. See "systemctl status asterisk.service" and "journalctl -xe" for details.
[FAILED]
Дальше:
systemctl status asterisk.service
Выход:
Oct 24 10:26:07 pbx***.ru systemd[1]: Starting LSB: Asterisk PBX...
Oct 24 10:26:07 pbx***.ru asterisk[13186]: Asterisk is already running.
Oct 24 10:26:07 pbx***.ru systemd[1]: New main PID 11312 does not belong to service, and PID file is not owned by root. Refusing.
Oct 24 10:26:07 pbx***.ru systemd[1]: New main PID 11312 does not belong to service, and PID file is not owned by root. Refusing.
Oct 24 10:26:07 pbx***.ru systemd[1]: Failed to start LSB: Asterisk PBX.
Oct 24 10:26:07 pbx***.ru systemd[1]: Unit asterisk.service entered failed state.
Oct 24 10:26:07 pbx***.ru systemd[1]: asterisk.service failed.
Asterisk 16.13. Что делать, как бороться?? ЗАРАНЕЕ БОЛЬШОЕ СПАСИБО!!!
По этому выводу не понятно, в чем конкретно проблема. Надо еще посмотреть системный лог в messages и лог самого астериска.
Ошибка с radius актуальна. не устранятется путём правки как в статье.
У меня получилось исправить ошибку через останов asteriska -
# systemctl stop asterisk
Затем - правки исправление radius, как в статье.
Затем - снова
# systemctl start asterisk
Затем - проверка
# systemctl status asterisk
Ошибок нет.
Zerox день добрый, вы не пробовали разворачивать asterisk через docker ?
Нет, ни разу. Да и смысла особо не вижу. Его же один раз развернул и он годами работает. Докер для разработки хорош, когда постоянно новые версии выкатывают.
Не знаю но при конфигурации, при выполнения команды "# ./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" – prefix=/usr – libdir=/usr/lib64 – enable-shared – disable-video – disable-sound – disable-opencore-amr" ровно как и "./configure – prefix=/usr/" выдаётся ошибка checking build system type... Invalid configuration `–': machine `–' not recognized
aconfigure: error: /bin/sh ./config.sub – failed
Такое ощущение что ругается он на -
Подскажите пожалуйста что с этим делать?
Внимательно проверьте глазами команду. Где-то ошибка, как-будто после дефиса пробелы стоят. Их быть не должно. С помощью дефисов указываются ключи. Покажите скрин команды из консоли.
Ребята помогите уже от бессилия
1 каким то чудом завелась на одной из машин сейчас к ней нет доступа
2 решил дома реализовать srtp и упал
loader.c:2396 load_modules: Error loading module 'res_srtp.so': /usr/lib64/asterisk/modules/res_srtp.so: undefined symbol: crypto_policy_set_aes_cm_128_hmac_sha1_32
День добрый, при выполнении команды dnf config-manager --set-enabled PowerTools, выдаёт ошибку Failed to set locale, defaulting to C.UTF-8
Извиняюсь, разобрался, надо было предыдущую статью по настройке Centos прочитать и сделать всё как там. Походе не хватало репозитория yum install epel-release
Язык какой стоит в системе? Попробуйте установить локаль en_US.UTF-8 Работа с локалями у меня описана в статье - https://serveradmin.ru/centos-8-locale-for-language-ru_ru-is-not-found-on-the-server/
Дайте знать, если это поможет.
перед созданием пользователя Asterisk и измените его
useradd -m asterisk &&
chown asterisk.asterisk /var/run/asterisk &&
chown -R asterisk.asterisk /etc/asterisk &&
chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk &&
chown -R asterisk.asterisk /usr/lib/asterisk
нужно выполнить Asterisk от имени того же пользователя
sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g' /usr/sbin/safe_asterisk
!!! Коллеги кто будет обновляться до Asterisk 17.2.0, Copyright (C) 1999 - 2018, Digium, Inc. and others.
обратите внимание на то что по умолчанию отключен модуль sip и походу его не будет скоро!!!
*******************************
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35379 deprecation_notice: chan_sip has no official maintainer and is deprecated. Migration to
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35380 deprecation_notice: chan_pjsip is recommended. See guides at the Asterisk Wiki:
*******************************
localhost*CLI> sip show peers
No such command 'sip show peers' (type 'core show help sip show' for other possible commands)
localhost*CLI> module load chan_sip.so
Loaded chan_sip.so
SIP channel loading...
== SIP Listening on 0.0.0.0:5060
== Using SIP CoS mark 4
-- Message technology 'sip' registered.
== Registered channel type 'SIP' (Session Initiation Protocol (SIP))
== Registered RTP glue 'SIP'
== Registered application 'SIPDtmfMode'
== Registered application 'SIPAddHeader'
== Registered application 'SIPRemoveHeader'
== Registered custom function 'SIP_HEADER'
== Registered custom function 'SIP_HEADERS'
== Registered custom function 'SIPPEER'
== Registered custom function 'CHECKSIPDOMAIN'
== Manager registered action SIPpeers
== Manager registered action SIPshowpeer
== Manager registered action SIPqualifypeer
== Manager registered action SIPshowregistry
== Manager registered action SIPnotify
== Manager registered action SIPpeerstatus
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35379 deprecation_notice: chan_sip has no official maintainer and is deprecated. Migration to
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35380 deprecation_notice: chan_pjsip is recommended. See guides at the Asterisk Wiki:
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35381 deprecation_notice: https://wiki.asterisk.org/wiki/display/AST/Migrating+from+chan_sip+to+res_pjsip
[Mar 3 11:51:45] WARNING[19186]: chan_sip.c:35382 deprecation_notice: https://wiki.asterisk.org/wiki/display/AST/Configuring+res_pjsip
Loaded chan_sip.so => (Session Initiation Protocol (SIP))
localhost*CLI> sip show peers
Name/username Host Dyn Forcerport Comedia ACL Port Status Description
0 sip peers [Monitored: 0 online, 0 offline Unmonitored: 0 online, 0 offline]
localhost*CLI>
Беда. Я только от Macro отказался, переделал все на Gosub. Теперь вот sip выпиливают :( Пустая возня на ровном месте. Переделываешь ради переделывания. Функционал, который используешь, все равно не меняется.
Добрый вечер. При попытки сборки астериска получаю вот что:
checking for embedded pjproject (may have to download)... configuring
[pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.9/pjproject-2.9.tar.bz2 to /tmp/pjproject-2.9.tar.bz2
[pjproject] Retrying download
[pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.9/pjproject-2.9.tar.bz2 to /tmp/pjproject-2.9.tar.bz2
make: *** [Makefile:92: /tmp/pjproject-2.9.tar.bz2] Error 4
make: *** Deleting file '/tmp/pjproject-2.9.tar.bz2'
failed
configure: Unable to configure third-party/pjproject
configure: error: Re-run the ./configure command with 'NOISY_BUILD=yes' appended to see error details.
По адресу 404, это понятно. Установил этот пакет в ручную, но результата это не дало. В чем причина? Как лечить?
Как я понял, просто установить пакет не достаточно. При сборке идет попытка его скачать и установить и она не проходит. Надо либо убрать как-то эту проверку, либо решить вопрос с доступом к github. У меня нормально открывается путь по ссылке на pjproject.
С офф сайта все качается отлично, оттуда я пакет ручками и установил, но вот с гитхаба 404. Собственно вопрос в том и заключается, как убрать эту проверку? И может ли помочь ручной перенос установленного пакета в директорию, в которую пытается скачаться требуемый пакет?
Так попробуйте. Никто другой, кроме вас, не полезет смотреть исходники, чтобы убрать эту проверку. Пробуйте все варианты сами. Это какая-то ваша локальная проблема.
Проблема локальная, я согласен. Но вот мне теперь интересно, ставлю астериск на девственно чистую центось, в каком месте что-то пошло не так?
Решение проблемы, скачать данный пакет в tmp
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# wget https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2
.9/pjproject-2.9.tar.bz2
Не помогает, ошибка
verifying /tmp/pjproject-2.10.tar.bz2
Verify failed
а зачем вам mariadb если вы не подключаете odbc в меню конфигурации?
Чаще всего она все же нужна. В том числе используется в моей статье про настройку астериск. Так что лучше сразу поставить.
выскакивает asterisk.service: Supervising process 4384 which is not
как исправить?
Может кому будет полезно.
При сборке астериска получил ошибку
error: unknown type name ‘my_bool’; did you mean ‘bool’
Я так понял, что в новом mysql переменная my_bool не может быть использована. Не знаю насколько правильно, но это решилось строчкой
sed -i s/my_bool/bool/ ./addons/cdr_mysql.c
По сути просто заменил переменную my_bool на bool в двух местах.
Припоминаю такую ошибку. Вроде тоже видел, но не стал разбираться, потому что прямая работа с mysql уже давно объявлена deprecated, а используется подключение через odbc.
Добрый день!
Спасибо за обзор. lame-3.98.4.tar.gz не пробовали ставить? Make install выводит Nothing to be done for 'install-exec-am'.
Как насчет утилиты DAHDI? Я не увидел её в процессе установки.
Она еще кому-то нужна? Я ни разу ей не пользовался, поэтому не описываю ее установку.
Libpri...?
еще бы добавить связку Centos 8 + Asterisk + Freepbx было бы вообще отлично!
Попробовал установить астера 16.6.1 на 7-ой центос, на этапе запуска systemctl start asterisk долго пытается запуститься, но потом таймаут и ошибка. Посмотрите выхлоп на пастедбин, подскажите что-нибудь -> https://pastebin.com/S93Dy5z2
Эта статья про 8-ю версию. Для 7-й есть другая статья, смотрите там.
Для 7-ой версии астериск 13-ый. Чем плох астериск 16-ый на 7-ом центосе...?
Я вот тут 16-й ставлю на centos 7 - https://serveradmin.ru/ustanovka-asterisk-i-freepbx-na-centos-7/#_Asterisk
у меня при команде contrib/scripts/get_mp3_source.sh выдаётся ошибка
[root@caller asterisk-16.6.1]# contrib/scripts/get_mp3_source.sh
svn: E170013: Unable to connect to a repository at URL 'http://svn.digium.com/svn/thirdparty/mp3/trunk'
svn: E175002: Unexpected HTTP status 400 'Bad Request' on '/svn/thirdparty/mp3/trunk'
при открытие файла видим строчку
svn export http://svn.digium.com/svn/thirdparty/mp3/trunk addons/mp3 $@
что с этим делать? ) есть идеи?
Проверьте, почему нет коннекта к http://svn.digium.com/svn/thirdparty/mp3/trunk
Можно скачать, положить в другое место и изменить url, если с сервера никак не получается загрузить.
Почему нет конекта, я так и не понял. Причём сайт пингуется, и с другого компа на него зайти могу (ip на 1 цифру отличаются). Но проблему решил просто: на 7 центосе скачал и руками переложил на 8 :)
Здравствуйте,
Я встретил похожу проблему во время установки Asterisk на тестовой платформе, как оказалось проблема возникает, когда на устройстве, где устанавливаете Asterisk доступ в интернет проходит, через прокси-сервер.
Для решения, необъодимо прописать в конфиг файле svn, ваш прокси-сервер:
vi ~/.subversion/servers
[global]
http-proxy-host = proxy-server.com # (your-proxy-server)
http-proxy-port = 3128 # (your-proxy-port)
Надеюсь, что это решение поможет кому-то сэкономить время.
Ку всем! Если у вас всё ещё наблюдаются проблемы со скачиванием, можете попробовать добавить так же в [global] строчку http-chunked-requests = no
Лично у меня после этой строки поехало.
А начерта если есть пакеты rpm собраные под 7 центос.?
Чем отличается установка из исходников на версию 7 центос?
8 версию ещё рано в продакшен ставить
Почему рано? Я лично все новые установки буду делать на Centos 8, поэтому и обновляю всю информацию.
1. Т.к. часть пакетов ставится командой dnf groupinstall "Development Tools", то следующую команду лучше сократить: dnf install wget net-tools sqlite-devel psmisc ncurses-devel libtermcap-devel newt-devel libxml2-devel libtiff-devel gtk2-devel libuuid-devel subversion -y. Иначе вываливается ошибка на версию ядра.
2. Базы данных (mariadb mariadb-server) ставите с расчетом на следующую статью про FreePBX? Буду рад продолжению цикла статей про Asterisk на CentOS 8.
3. После установки PJSIP рекомендуется ldconfig -p | grep pj (Verify that pjproject has been installed in the target location by looking for, and finding the various pjproject modules).
4. У меня после команды make basic-pbx исчезает проблема с radiusclient.
5. При установке Asterisk в CentOS 7/8 всегда (!) получаю такую ошибку:
asterisk.service: Can't open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory
asterisk.service: Supervising process 4903 which is not our child. We'll most likely not notice when it exits.
Критично ли появление этого сообщения?
Кроме этого запускается /usr/sbin/safe_asterisk помимо стандартного /usr/sbin/asterisk как в Debian.
Еще в Вашем старом гайде имеется правка файла safe_asterisk: sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g' /usr/sbin/safe_asterisk
6. На asterisk_wiki пишут, что модули pjsip и jannson лучше подключать в asterisk на момент кофигурации через аргументы (--with-pjproject-bundled --with-jansson-bundled), но тогда у меня не работают команды в самом asterisk_CLI (sip show peers и другие). На форумах пишут, что не был подключен chan_sip, хотя он там был. Одним словом, компиляцию из исходников считаю самым надежным способом.
Спасибо за статью. На текущий момент это лучшая в рунете по установке Asterisk на CentOS 8.
1. Ошибок не будет. Пакеты, которые уже есть, просто будут пропущены. Убедиться в этом можно в видео.
2. Чаще всего база используется для хранения информации о звонках (cdr), поэтому я ее ставлю.
5. Это не знаю, не проверял. Вроде все работает.