Установка 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-ons – chan_ooh323, format_mp3, res_config_mysql
- Codec Translators – отмечаем все кодеки
- Core Sound Packages – выделяем все звуковые пакеты с русским языком CORE-SOUNDS-RU
- 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/asterisk/asterisk.conf
nano /etc/asterisk/asterisk.conf
Раскомментируем две строки
runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.
Перезагрузим Asterisk для применения внесенных нами изменений
systemctl restart asterisk
Добавим Asterisk в автозагрузку при старте системы
systemctl enable asterisk
Проверяем работу Asterisk
Давайте проверим статус процесса asterisk. Запущен он или нет и есть ли какие-то ошибки
systemctl status asterisk
По статусу видно что служба запущена (active). Внизу можно увидеть краткий лог работы программы.
Зайдем в консоль Asterisk и проверим что программа отвечает. Также выполним несколько команд. Зайти в консоль можно командой asterisk -r я обычно использую asterisk -rvvvvvv для полной детализации лога в консоли.
asterisk -rvvvvvv
После успешного входа в консоль можно увидеть версию Asterisk. Попробуем ввести парочку команд для проверки работы.
core show channels
Команда отработала успешно, проверим список всех SIP peers
sip show peers
Эта команда не сработает. В предыдущих версиях Asterisk данная команда сработала бы без вопросов. Дело в том что начиная с 17 версии Asterisk модуль chan_sip отвечающий за работу модуля SIP считается устаревшим и по умолчанию отключен. Попытаемся его загрузить из консоли.
module load chan_sip.so
Видим что модуль загрузился но с предупреждениями. WARNING как раз повествует о том, что модуль устарел и скоро его не станет, используйте PJSIP. Попробуем выполнить
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 я записал на видео.
Было очень полезно, спасибо! Ждём следующую статью по настройке))
Когда планируете выпустить ?
В ближайшее время как раз будет статья по начальной настройке
Ждём следующую статью по настройке.
Она в процессе, больше половины уже готово
Великолепная, актуальная статья. Все, четко, понятно, красиво! Конечно, тоже, будем рады статье по первоначальной настройке всего этого добра ))
Спасибо за комент. Статья уже есть посмотрите в разделе asterisk
Хотелось услышать Ваше мнение по поводу стоит ли устанавливать CentOS, ведь от неё отказались
Отказалась IBM но не исключено что ее подхватит другая компания. Большие сомнения что такой дистр просто “выкинут”. Ну как вариант либо CentOS Stream либо другой RHEL дистриб.
Спасибо за ответ! А как Вы относитесь к Ubuntu Serv
Вполне нормальный сервер, скажу больше почтовые сервера у меня на нем. Можно как вариант брать его для продакшена, только лучше версию LTS
Для Asterisk он пойдет? (Ubuntu)
Конечно подойдет. Asterisk есть в RPM и DEB пакетах. А если очень захочется то можно собрать из исходников
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
после команды 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.
Команда systemctl enable asterisk добавляет asterisk в автозагрузку. Проверить отработала она или нет можно очень просто. Перезагрузите систему и зайдите к консоль asterisk, либо проверьте статус сервиса systemctl status asterisk
стартует автоматически. Просто не понял что он в остальных сообщениях не находит, будут ли потом сложности из-за этого или все потому, что пока не настроено ничего?
И еще вопрос, мы сделали пользователя asterisk и такую же группу но без пароля, это надо как-то исправить или так и задумано? Сам астериск как-то будет защищаться паролем?
Он может не находить какие-то модули, которые скорее всего никогда не будут использоваться. Если же они потребуются их можно будет подключить позже. Пользователь asterisk должен быть без пароля, под ним запускается сервис. Сам астериск паролем не защищается
Большое спасибо, крепкого Вам здоровья и удачи в начинаниях.
Спасибо, взаимно.
Устанавливаю на CentOS 9. Всё по шагам. Уже в 4-й раз. Дохожу до момента создания скриптов инициализации. Получаю следующее:
[root@localhost asterisk-18.11.2]# make config
/bin/sh: строка 7: /sbin/chkconfig: Нет такого файла или каталога
make: *** [Makefile:898: config] Ошибка 127
Что может быть не так?
Судя по ошибке скрипт не может запустить /sbin/chkconfig . Я 9 центос не ставил, возможно они что-то поменяли. В таком случае стоит дождаться дистрибутива именно под 9 версию, либо использовать более стабильную проверенную временем 8
dnf install chkconfig
здравствуйте дохожу до этого момента дальше нечего не идет
может ссылки устаревшие не понятно астериск не ставится
будьте добры подсказать кто знает что может быть
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-*/
Добрый, обратите внимание на ошибку, там где вы пытаетесь скачать астериск используя команду wget. Вам система отвечает что не знает такой команды, и понятное дело астериск не скачался. Обычно пакет wget устанавливается при установке системы. Установить его ручками:
sudo yum install wget
Все просто и доступно, но статья немного устарела. Пытаюсь установить на 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 конфигурация не проходит. Подскажите как решить вопрос
Судя по всему по тем ссылкам софт уже удален, вот обновленные
https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/l/libedit-3.1-48.20230828cvs.fc39.x86_64.rpm
https://rpmfind.net/linux/fedora/linux/releases/39/Everything/x86_64/os/Packages/l/libedit-devel-3.1-48.20230828cvs.fc39.x86_64.rpm
Ссылки в статье обновил.
При установке на 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)