Home » Asterisk » Установка Asterisk 16 на Centos 8

Установка Asterisk 16 на Centos 8

Продолжаю обновление и актуализацию статей после выхода новой версии популярной серверной системы. Сегодня расскажу как собрать из исходников и установить сервер телефонии Asterisk 16 на Centos 8. Установка будет из исходных текстов, так как репозиториев с готовыми пакетами под новую систему я не смог найти.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

Цели статьи

  1. Подготовить из исходников все зависимости.
  2. Установить asterisk 16 из исходников.
  3. Запустить asterisk и убедиться в его работоспособности.

Данная статья является частью единого цикла статьей про сервер Centos.

Введение

Устанавливать Asterisk 16 на Centos 8 будем из исходников. Это не для того, чтобы показать олдскул и крутость самостоятельной сборки софта. Это вынужденная мера. Всегда, когда есть возможность установить из пакетов, лучше ей воспользоваться. Либо можно собрать свой пакет и ставить уже из него. Сборка софта из исходников крайняя мера, когда готового пакета просто не существует.

Я устанавливаю версию 16, хотя есть уже 17-я. Именно 16-я версия имеет статус LTS, то есть длительная поддержка. Если вам не нужны новые фичи промежуточных версий, рекомендую всегда ставить lts версии.

Для установки Asterisk 16 на свежую Centos 8 я не нашел репозитория, где бы были собраны все пакеты с зависимостями для быстрой и безпроблемной установки. Так что будем по старинке собирать все руками. Ничего сложного тут нет. Все примерно так же, как и в прошлых версиях. Каких-то новых сложностей или нюансов я не заметил.

Если у вас еще нет готового сервера, то рекомендую мои статьи по установке и настройке Centos.

Подготовка сервера

Первым делом надо отключить SELinux. Открываем файл /etc/sysconfig/selinux и меняем параметр.

# mcedit /etc/sysconfig/selinux
SELINUX=disabled

Для применения настройки нужно перезагрузиться, либо временно приостановить selinux.

# setenforce 0

Установим теперь пакеты, которые нам понадобятся для сборки. В первую очередь подключим репозиторий epel.

# dnf install epel-release

Дальше идет мета пакет Development Tools со всем необходимым для сборки из исходников.

# dnf groupinstall "Development Tools"

Установка 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

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

Настройте 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

Установка Jansson

# 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

Установка pjsip

Все готово к установке непосредственно 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

Установка Asterisk 16 на Centos 8

Выбирайте необходимые модули и звуки, в зависимости от того, что вам нужно. Я в общем случае указываю:

  • 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

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.

Супер-интенсив "Tarantool"

Если у вас есть желание освоить платформу in-memory вычислений, востребованную в современных высоконагруженных приложениях, рекомендую пройти интенсив Tarantool в OTUS. Обучение длится 5 дней. Что даст вам этот интенсив:
  • Узнаете архитектуру и внутреннее устройство Tarantool.
  • Поймете сильные и слабые стороны Tarantool.
  • Сможете назвать сходства и отличия от других СУБД.
  • Увидите кейсы использования: куда брать, куда не брать.
  • Установите и запустите Tarantool.
  • Поднимете собственный кластер.
Смотрите подробнее программу по .

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

43 комментария

  1. Аватар

    Что может быть, если при команде:
    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. Что делать, как бороться?? ЗАРАНЕЕ БОЛЬШОЕ СПАСИБО!!!

    • Zerox

      По этому выводу не понятно, в чем конкретно проблема. Надо еще посмотреть системный лог в messages и лог самого астериска.

  2. Аватар

    Ошибка с radius актуальна. не устранятется путём правки как в статье.

  3. Аватар
    Виталий

    Zerox день добрый, вы не пробовали разворачивать asterisk через docker ?

    • Zerox

      Нет, ни разу. Да и смысла особо не вижу. Его же один раз развернул и он годами работает. Докер для разработки хорош, когда постоянно новые версии выкатывают.

  4. Аватар
    Алексей

    Не знаю но при конфигурации, при выполнения команды "# ./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

    Такое ощущение что ругается он на -

    Подскажите пожалуйста что с этим делать?

    • Zerox

      Внимательно проверьте глазами команду. Где-то ошибка, как-будто после дефиса пробелы стоят. Их быть не должно. С помощью дефисов указываются ключи. Покажите скрин команды из консоли.

  5. Аватар

    Ребята помогите уже от бессилия
    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

  6. Аватар
    Виталий

    День добрый, при выполнении команды dnf config-manager --set-enabled PowerTools, выдаёт ошибку Failed to set locale, defaulting to C.UTF-8

  7. Аватар

    перед созданием пользователя 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

  8. Аватар

    !!! Коллеги кто будет обновляться до 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>

    • Zerox

      Беда. Я только от Macro отказался, переделал все на Gosub. Теперь вот sip выпиливают :( Пустая возня на ровном месте. Переделываешь ради переделывания. Функционал, который используешь, все равно не меняется.

  9. Аватар

    Добрый вечер. При попытки сборки астериска получаю вот что:
    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, это понятно. Установил этот пакет в ручную, но результата это не дало. В чем причина? Как лечить?

    • Zerox

      Как я понял, просто установить пакет не достаточно. При сборке идет попытка его скачать и установить и она не проходит. Надо либо убрать как-то эту проверку, либо решить вопрос с доступом к github. У меня нормально открывается путь по ссылке на pjproject.

      • Аватар

        С офф сайта все качается отлично, оттуда я пакет ручками и установил, но вот с гитхаба 404. Собственно вопрос в том и заключается, как убрать эту проверку? И может ли помочь ручной перенос установленного пакета в директорию, в которую пытается скачаться требуемый пакет?

        • Zerox

          Так попробуйте. Никто другой, кроме вас, не полезет смотреть исходники, чтобы убрать эту проверку. Пробуйте все варианты сами. Это какая-то ваша локальная проблема.

          • Аватар

            Проблема локальная, я согласен. Но вот мне теперь интересно, ставлю астериск на девственно чистую центось, в каком месте что-то пошло не так?

    • Аватар
      Александр

      Решение проблемы, скачать данный пакет в 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

  10. Аватар

    а зачем вам mariadb если вы не подключаете odbc в меню конфигурации?

    • Zerox

      Чаще всего она все же нужна. В том числе используется в моей статье про настройку астериск. Так что лучше сразу поставить.

  11. Аватар
    Сергей

    выскакивает asterisk.service: Supervising process 4384 which is not
    как исправить?

  12. Аватар
    Владислав

    Может кому будет полезно.
    При сборке астериска получил ошибку
    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 в двух местах.

    • Zerox

      Припоминаю такую ошибку. Вроде тоже видел, но не стал разбираться, потому что прямая работа с mysql уже давно объявлена deprecated, а используется подключение через odbc.

  13. Аватар
    Александр

    Добрый день!
    Спасибо за обзор. lame-3.98.4.tar.gz не пробовали ставить? Make install выводит Nothing to be done for 'install-exec-am'.

  14. Аватар

    Как насчет утилиты DAHDI? Я не увидел её в процессе установки.

  15. Аватар

    еще бы добавить связку Centos 8 + Asterisk + Freepbx было бы вообще отлично!

  16. Аватар

    Попробовал установить астера 16.6.1 на 7-ой центос, на этапе запуска systemctl start asterisk долго пытается запуститься, но потом таймаут и ошибка. Посмотрите выхлоп на пастедбин, подскажите что-нибудь -> https://pastebin.com/S93Dy5z2

  17. Аватар

    у меня при команде 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 $@

    что с этим делать? ) есть идеи?

    • Zerox

      Проверьте, почему нет коннекта к 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
            Лично у меня после этой строки поехало.

  18. Аватар
    Александр

    А начерта если есть пакеты rpm собраные под 7 центос.?
    Чем отличается установка из исходников на версию 7 центос?
    8 версию ещё рано в продакшен ставить

    • Zerox

      Почему рано? Я лично все новые установки буду делать на Centos 8, поэтому и обновляю всю информацию.

  19. Аватар

    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.

    • Zerox

      1. Ошибок не будет. Пакеты, которые уже есть, просто будут пропущены. Убедиться в этом можно в видео.
      2. Чаще всего база используется для хранения информации о звонках (cdr), поэтому я ее ставлю.
      5. Это не знаю, не проверял. Вроде все работает.

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.