AsteriskТелефония

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

Для начала определимся что такое Asterisk – это бесплатное решение компьютерной телефонии, проще говоря IP АТС. Первая версия ПО была выпущена 23 сентября 2004. Asterisk активно развивается и по сей день. Большое сообщество поклонников не зря выбирают данную АТС. Благодаря не очень сложной настройке, стабильности и большому количеству расширений. Давайте рассмотрим как проходит установка Asterisk 18 на Centos 8.

Настройка системы

Все действия по настройке и установке я произвожу с правами суперпользователя (root). Если у вас возникает ошибка с доступом используйте root или sudo.

Установка времени

Если при установки операционной системы вы выставили правильное время, можете смело пропускать данный пункт. Проверить текущий часовой пояс и время можно командой

timedatectl status

В моём случае стоит временная зона America/New_York необходимо заменить ее на Europe/Moscow.

timedatectl set-timezone Europe/Moscow
Перевод SELINUX в режим Permissive

Режим Permissive означает что SELINUX не будет ничего блокировать. Все действия попадающие под блокировку будут просто записываться в журнал.

setenforce 0
sed -i 's/\(^SELINUX=\).*/\SELINUX=permissive/' /etc/selinux/config

Проверить текущий статус SELINUX можно командой

sestatus
Откроем необходимые порты

Откроем порты в firewalld для подключения клиентов

firewall-cmd --permanent --add-port=5060/{tcp,udp}
firewall-cmd --permanent --add-port=5061/{tcp,udp}
  • 5060 – порт для подключения SIP
  • 5061 – порт для подключения SIP с использованием шифрования TLS

Перечитаем измененный конфиг для применения новых параметров firewalld

firewall-cmd --reload
Подключение репозитория EPEL
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

EPEL репозиторий содержит большое количество дополнительных пакетов, которых нет в стандартном репозитории. Некоторые из пакетов необходимых для работы Asterisk будут устанавливаться отсюда.

Установка связанного ПО

Перед установкой самого Asterisk необходимо скачать и установить дополнительные пакеты. Если вы планируете использовать в своем сервере платы T1/E1/J1/BRI и прочее оборудование, необходимо установить DAHDI и LibPRI. Я данное железо использовать не собираюсь, поэтому установку этих пакетов не описываю.

Установим набор пакетов Development Tools

dnf groupinstall "Development tools"

Установка пакета jansson

dnf install jansson-devel

Установим пакет libedit

dnf install https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/l/libedit-3.1-48.20230828cvs.fc39.x86_64.rpm
dnf install https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/l/libedit-devel-3.1-48.20230828cvs.fc39.x86_64.rpm

Загрузим и установим PJSIP

PJSIP – это новая мультимедийная библиотека для работы с протоколами SIP, RTP, STUN, SDP и т.д. Впоследствии Asterisk откажется от старой библиотеки SIP в пользу PJSIP.

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

Скачаем последнюю версию Asterisk с сайта разработчика и распакуем архив

cd /opt
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar -xvf asterisk-*.tar.gz
cd asterisk-*/

Запустим установку зависимостей Asterisk

./contrib/scripts/install_prereq install

После успешной установки появится соответствующее сообщение.

Очистка временных файлов созданных в процессе установки

make distclean

Добавляем возможность работы с форматом mp3

./contrib/scripts/get_mp3_source.sh

Конфигурируем исходник Asterisk

./configure --libdir=/usr/lib64

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

Запустим меню выбора дополнительных параметров установки Asterisk

make menuselect

Передвигаемся по меню стрелочками, выбрать или отменить выбор компонента можно клавишей Enter. Разберем какие компоненты помимо стандартных должны быть отмечены.

  • Add-onschan_ooh323, format_mp3, res_config_mysql
  • Codec Translators – отмечаем все кодеки
  • Core Sound Packages – выделяем все звуковые пакеты с русским языком CORE-SOUNDS-RU
  • Music On Hold File Packages – выделяем все пункты в данном меню
Add-ons
Codec Translators
Core Sound Packages
Music On Hold File Packages

После завершения выбора компонентов нажимаем кнопку Save & Exit

Переходим к установке Asterisk

make

Результатом успешного выполнения команды make будет текст такого содержания

Далее выполним make install

make install

После успешной установки будет сообщение

На данном этапе установка Asterisk завершена, перейдём к настройке. Соберем конфигурационные файлы с комментариями и примерами. Данная процедура не обязательна, делаете по необходимости.

make samples

Добавим скрипты инициализации в автозагрузку

make config
ldconfig

Учитывая тот факт что Asterisk генерирует достаточно большое количество журналов, советую использовать ротацию. Это не обязательно, но в случае высокой нагрузки крайне желательно. Итак, включить ротацию логов можно так

make install-logrotate
Создание пользователя asterisk

Необходимо создать пользователя под которым Asterisk будет запускаться.

groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
usermod -aG audio,dialout asterisk

Изменим владельца соответствующих каталогов

chown -R asterisk.asterisk /etc/asterisk
chown -R asterisk.asterisk /var/lib/asterisk
chown -R asterisk.asterisk /var/log/asterisk
chown -R asterisk.asterisk /var/spool/asterisk
chown -R asterisk.asterisk /usr/lib64/asterisk
Укажем пользователя от которого будет запускаться Asterisk

Редактируем файл /etc/sysconfig/asterisk

nano /etc/sysconfig/asterisk

Проверяем указанные строки, если они есть раскомментируем, если нет, добавим в файл.

AST_USER="asterisk"
AST_GROUP="asterisk"
/etc/sysconfig/asterisk

Откроем на редактирование файл /etc/asterisk/asterisk.conf

nano /etc/asterisk/asterisk.conf

Раскомментируем две строки

runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.
/etc/asterisk/asterisk.conf

Перезагрузим Asterisk для применения внесенных нами изменений

systemctl restart asterisk

Добавим Asterisk в автозагрузку при старте системы

systemctl enable asterisk
Проверяем работу Asterisk

Давайте проверим статус процесса asterisk. Запущен он или нет и есть ли какие-то ошибки

systemctl status asterisk
systemctl status asterisk

По статусу видно что служба запущена (active). Внизу можно увидеть краткий лог работы программы.

Зайдем в консоль Asterisk и проверим что программа отвечает. Также выполним несколько команд. Зайти в консоль можно командой asterisk -r я обычно использую asterisk -rvvvvvv для полной детализации лога в консоли.

asterisk -rvvvvvv
asterisk -rvvvvvv

После успешного входа в консоль можно увидеть версию Asterisk. Попробуем ввести парочку команд для проверки работы.

core show channels

Команда отработала успешно, проверим список всех SIP peers

sip show peers

Эта команда не сработает. В предыдущих версиях Asterisk данная команда сработала бы без вопросов. Дело в том что начиная с 17 версии Asterisk модуль chan_sip отвечающий за работу модуля SIP считается устаревшим и по умолчанию отключен. Попытаемся его загрузить из консоли.

module load chan_sip.so
module load chan_sip.so

Видим что модуль загрузился но с предупреждениями. WARNING как раз повествует о том, что модуль устарел и скоро его не станет, используйте PJSIP. Попробуем выполнить

sip show peers
sip show peers

Команда отработала успешно. Но, чтобы модуль загружался и после выхода из консоли при старте сервера, необходимо отредактировать файл /etc/asterisk/modules.conf

nano /etc/asterisk/modules.conf

Находим в файле запись noload => chan_sip.so и комментируем её поставив перед ней точку с запятой

;noload => chan_sip.so

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

Я сам постепенно перехожу и всем советую использовать новую библиотеку res_pjsip

В данной статье я рассмотрел как проходит установка Asterisk 18 на Centos 8. В следующей статье планирую рассмотреть процесс первоначальной настройки: подключение пользователей, транков и т.п. Список консольных команд Asterisk также есть на нашем сайте.

Весь процесс установки Asterisk 18 на Centos 8 я записал на видео.

Поделиться:
Подписаться
Уведомить о
guest
28 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Олег
Олег
3 лет назад

Было очень полезно, спасибо! Ждём следующую статью по настройке))
Когда планируете выпустить ?

Алексей
Алексей
3 лет назад

Ждём следующую статью по настройке.

Геннадий
Геннадий
3 лет назад

Великолепная, актуальная статья. Все, четко, понятно, красиво! Конечно, тоже, будем рады статье по первоначальной настройке всего этого добра ))

Сергей
Сергей
2 лет назад

Хотелось услышать Ваше мнение по поводу стоит ли устанавливать CentOS, ведь от неё отказались

Сергей
Сергей
2 лет назад
Ответить на  admin

Спасибо за ответ! А как Вы относитесь к Ubuntu Serv

Сергей
Сергей
2 лет назад
Ответить на  admin

Для Asterisk он пойдет? (Ubuntu)

Ra
Ra
2 лет назад

Running as user ‘asterisk’
Running under group ‘asterisk’
Connected to Asterisk 18.5.0 currently running on localhost (pid = 89076)
localhost*CLI> core reload
[Aug 9 20:28:42] NOTICE[89280]: res_config_ldap.c:1830 parse_config: No directory user found, anonymous binding as default.
[Aug 9 20:28:42] ERROR[89280]: res_config_ldap.c:1856 parse_config: No directory URL or host found.
[Aug 9 20:28:42] NOTICE[89280]: res_config_ldap.c:1774 reload: Cannot reload LDAP RealTime driver.
[Aug 9 20:28:42] WARNING[89280]: res_config_pgsql.c:1443 parse_config: PostgreSQL RealTime: Not connected
[Aug 9 20:28:42] NOTICE[89280]: cdr.c:4504 cdr_toggle_runtime_options: CDR simple logging enabled.
[Aug 9 20:28:42] NOTICE[89281]: sorcery.c:1348 sorcery_object_load: Type ‘system’ is not reloadable, maintaining previous values
[Aug 9 20:28:42] WARNING[89280]: res_phoneprov.c:1232 get_defaults: Unable to find a valid server address or name.
[Aug 9 20:28:42] NOTICE[89280]: chan_skinny.c:8451 config_load: Configuring skinny from skinny.conf
[Aug 9 20:28:42] ERROR[89280]: ari/config.c:312 process_config: No configured users for ARI
[Aug 9 20:28:42] NOTICE[89280]: cel_custom.c:95 load_config: No mappings found in cel_custom.conf. Not logging CEL to custom CSVs.
== == Host-ID: 77:a2:19:76:ca:9a:8b:f0:50:e4:84:20:69:0e:05:00:ea:58:46:fe
[Aug 9 20:28:42] WARNING[89280]: codec_g729a.c:463 process_licenses: Failed to initialize G.729 copy protection!
[Aug 9 20:28:42] NOTICE[89280]: app_queue.c:9155 reload_queue_rules: queuerules.conf has not changed since it was last loaded. Not taking any action.
localhost*CLI> core show channels

Михаил
Михаил
2 лет назад

после команды systemctl enable asterisk

получил сообщение:
asterisk.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable asterisk

сервис не нативный, в итоге не ясно сработало или нет?

так же когда проверяю запущен ли процесс, он таки да, запущен но ниже такие вот сообщения:
Sep 07 18:40:34 asterisk[118962]: Starting asterisk:
Sep 07 18:40:34 systemd[1]: asterisk.service: Can’t open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory
Sep 07 18:40:34 systemd[1]: asterisk.service: Supervising process 118993 which is not our child. We’ll most likely not notice when it exits.
Sep 07 18:40:34 systemd[1]: Started LSB: Asterisk PBX.
Sep 07 18:40:36 asterisk[118993]: radcli: rc_read_config: rc_read_config: can’t open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Sep 07 18:40:36 asterisk[118993]: radcli: rc_read_config: rc_read_config: can’t open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Sep 07 18:40:44 systemd[1]: asterisk.service: Supervising process 118993 which is not our child. We’ll most likely not notice when it exits.
Sep 07 18:40:44 systemd[1]: asterisk.service: Supervising process 118993 which is not our child. We’ll most likely not notice when it exits.
Sep 07 18:41:36 systemd[1]: asterisk.service: Supervising process 118993 which is not our child. We’ll most likely not notice when it exits.
Sep 07 18:41:36 systemd[1]: asterisk.service: Supervising process 118993 which is not our child. We’ll most likely not notice when it exits.

Михаил
Михаил
2 лет назад
Ответить на  admin

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

Михаил
Михаил
2 лет назад
Ответить на  admin

Большое спасибо, крепкого Вам здоровья и удачи в начинаниях.

Николай
Николай
2 лет назад

Устанавливаю на CentOS 9. Всё по шагам. Уже в 4-й раз. Дохожу до момента создания скриптов инициализации. Получаю следующее:
[root@localhost asterisk-18.11.2]# make config
/bin/sh: строка 7: /sbin/chkconfig: Нет такого файла или каталога
make: *** [Makefile:898: config] Ошибка 127
Что может быть не так?

CentOS9
CentOS9
1 год назад
Ответить на  Николай

dnf install chkconfig

Евгений
Евгений
8 месяцев назад

здравствуйте дохожу до этого момента дальше нечего не идет
может ссылки устаревшие не понятно астериск не ставится

будьте добры подсказать кто знает что может быть

PJSIP — это новая мультимедийная библиотека для работы с протоколами SIP, RTP, STUN, SDP и т.д. Впоследствии Asterisk откажется от старой библиотеки SIP в пользу PJSIP.

cd /opt/
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
Установка Asterisk
Скачаем последнюю версию Asterisk с сайта разработчика и распакуем архив

cd /opt
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar -xvf asterisk-*.tar.gz
cd asterisk-*/

Скриншот 06-08-2023 183958  с ошибкой.jpg
Дмитрий
Дмитрий
4 месяцев назад

Все просто и доступно, но статья немного устарела. Пытаюсь установить на CentOS 8 Stream. Проблема с установкой пакета libedit. dnf install https://rpmfind.net/linux/fedora/linux/releases/33/Everything/x86_64/os/Packages/l/libedit-3.1-33.20191231cvs.fc33.x86_64.rpm
dnf install https://rpmfind.net/linux/fedora/linux/releases/33/Everything/x86_64/os/Packages/l/libedit-devel-3.1-33.20191231cvs.fc33.x86_64.rpm
Не дает установить.
Поставил пакет через
sudo dnf makecache
sudo dnf install libedit.x86_64
Но это видимо не то что надо ./configure –libdir=/usr/lib64 конфигурация не проходит. Подскажите как решить вопрос

Aki
Aki
19 дней назад
Ответить на  admin

При установке на Centos 8 пишет следующее:
dnf install https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/l/libedit-3.1-48.20230828cvs.fc39.x86_64.rpm

Last metadata expiration check: 0:42:40 ago on Tue 09 Apr 2024 09:51:57 AM MSK.
libedit-3.1-48.20230828cvs.fc39.x86_64.rpm 401 kB/s | 107 kB 00:00
Error:
Problem: conflicting requests
– nothing provides libc.so.6(GLIBC_2.33)(64bit) needed by libedit-3.1-48.20230828cvs.fc39.x86_64 from @commandline
– nothing provides libc.so.6(GLIBC_2.38)(64bit) needed by libedit-3.1-48.20230828cvs.fc39.x86_64 from @commandline
(try to add ‘–skip-broken’ to skip uninstallable packages or ‘–nobest’ to use not only best candidate packages)