Все, окончательно хочу (Поднимаем Asterisk 16 на Ubuntu 20.04 LTS Server
) от и до пройти/разобрать всю книгу "Asterisk: Полное руководство, 5 издание.pdf"
на самом последнем релизе Ubuntu 22.04 Server
. В книге рассматривается Asterisk 16
. А то сколько не возвращаюсь к Asterisk
все время откладывается другими задачами, т.к. порой непонятно с чего начать ее решение или даже анализ. В этом случае сейчас мне поможет моя поставленная задача во что бы то ни стало, так сказать первый шаг к чему-то большему задействовав Asterisk:
Создать своего голосового ассистента и прикрутить к нему выполнение команд в моем "Умном доме"
на базе Domoticz.
Разворачиваю виртуальную машину внутри гипервизора Debian 10 + Proxmox 6
моего боевого сервера (Supermicro SYS-5019S-M: Debian 10 + Proxmox 6, ZFS разделы, 64Gb оперативной памяти (2 модуля 378A4G43MB1-CTD))
CPU = 1 sockets (4 cores)
RAM = 4096Mb
HDD = 50Gb (M.2 Storage or SSD Storage)
OS = Ubuntu 22.04 Server amd64
Шаг №1:
Обновляю информацию об установленных пакетов и обновляю установленные пакеты до версии самых последних в текущем релизе Ubuntu 22.04 Server
из стандартных репозитариев:
ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-us2204a:~$ sudo nano /etc/update-manager/release-upgrades [DEFAULT] Prompt=never ekzorchik@srv-us2204a:~$ sudo nano /etc/apt/apt.conf.d/02proxy Acquire::http { Proxy "http://172.35.35.16:3142"; }; ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get -y upgrade ekzorchik@srv-us2204a:~$ sudo reboot ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a Linux srv-us2204a 5.15.0-37-generic #39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy ekzorchik@srv-us2204a:~$
На заметку: IP
-адрес 172.35.35.16
– это виртуальная машина на моем сервере где работает сервис apt-cacher-ng
цель которого кэшировать устанавливаемые пакеты дабы после обращаться к нему, а не в интернет.
Шаг №2:
В дефолтных репозитариях имеется пакет Asterisk
, но он не той версии которая мне нужна, я буду собирать из исходников дабы идти по книге выше:
ekzorchik@srv-us2204a:~$ apt-cache show asterisk | grep Version Version: 1:18.10.0~dfsg+~cs6.10.40431411-2 ekzorchik@srv-us2204a:~$
Шаг №3:
Устанавливаю зависимости для сборки Asterisk
из исходников:
ekzorchik@srv-us2204a:~$ sudo apt-get install -y build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev git curl autoconf automake libtool cmake autoconf-archive unzip subversion net-tools
Шаг №4:
Собираю Asterisk 16
из исходников:
На заметку: от 23.01.2024
обнаружил что больше нет такой ссылки на скачивание Asterisk 16
, теперь пакет лежит по адресу: https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-16.9.0.tar.gz
как самый последний, дальше уже Asterisk 17
и т.д.
ekzorchik@srv-us2204a:~$ cd /usr/src ekzorchik@srv-us2204a:/usr/src$ sudo curl -O http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz ekzorchik@srv-us2204a:/usr/src$ sudo tar zxf asterisk-16-current.tar.gz ekzorchik@srv-us2204a:/usr/src$ cd asterisk-*/ ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo contrib/scripts/get_mp3_source.sh ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo contrib/scripts/install_prereq install ITU-T telephone code: 7 ############################################# ## install completed successfully ############################################# ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo ./configure configure: Package configured for: configure: OS type : linux-gnu configure: Host CPU : x86_64 configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu : configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu : ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$
На заметку: Важно чтобы терминал был разрешением не менее 80
на 21
иначе sudo make menuselect
не запустится.
На заметку: выбираю звуковые форматы WAV & G722
(если в процессе нужны будут другие, то доустановлю, а то порой не понятно, что нужно и что не нужно, лучше столкнуться с ошибкой и осознать, что нужно так я считаю полезнее для изучения).
ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make menuselect
Add-ons: отмечаю клавишей Enter format_mp3
Core Sound Packages: отмечаю CORE-SOUNDS-EN-WAV, CORE-SOUNDS-EN-G722, CORE-SOUNDS-RU-WAV, CORE-SOUNDS-RU-G722
Music On Hold File Packages: отмечаю MOH-OPSOUND-WAV, MOH-OPSOUND-G772
Extras Sound Packages: отмечаю EXTRA-SOUNDS-EN-WAV, EXTRA-SOUNDS-EN-G722
И нажимаю Save & Exit
ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make -j$((`nproc`+1)) ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make install ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make progdocs Generating C-API documentation. This will take a while. Generation complete. Any warnings are in ./doxygen.log. ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make samples ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo make config ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ sudo ldconfig ekzorchik@srv-us2204a:/usr/src/asterisk-16.26.1$ cd $HOME
Шаг №5:
Как и всегда мой сервис Asterisk
не будет использовать дефолтную работу от имени пользователя root
. Значит создадим специального пользователя и укажем, что от имени него запускать и работать Asterisk'у:
sudo groupadd asterisk sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk sudo usermod -aG audio,dialout asterisk sudo chown -R asterisk.asterisk /etc/asterisk sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk sudo chown -R asterisk.asterisk /usr/lib/asterisk sudo nano /etc/default/asterisk AST_USER="asterisk" AST_GROUP="asterisk" sudo nano /etc/asterisk/asterisk.conf runuser = asterisk ; The user to run as. rungroup = asterisk ; The group to run as.
Шаг №6:
Запускаю сервис Asterisk:
ekzorchik@srv-us2204a:~$ sudo systemctl enable asterisk asterisk.service is not a native service, redirecting to systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable asterisk ekzorchik@srv-us2204a:~$ sudo systemctl restart asterisk && sudo systemctl status asterisk | head -n5 ● asterisk.service - LSB: Asterisk PBX Loaded: loaded (/etc/init.d/asterisk; generated) Active: active (running) since Fri 2022-06-10 07:41:34 MSK; 14ms ago Docs: man:systemd-sysv-generator(8) Process: 76839 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS) ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo asterisk -rvv Asterisk 16.26.1, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Running as user 'asterisk' Running under group 'asterisk' Connected to Asterisk 16.26.1 currently running on srv-us2204a (pid = 76854) srv-us2204a*CLI> quit Asterisk cleanly ending (0). Executing last minute cleanups ekzorchik@srv-us2204a:~$
Итого, сборка Asterisk
успешно завершена именно 16
версии на которую у меня есть книга и я хочу освежить более подробно все в ней используемое под свои задачи, да и просто интересно, не правда ли.
Если мне понадобится какой-либо модуль, то я вернусь в каталог куда устанавливал и через команду sudo make menuselect
отмечу его и заново произведу установку.
Шаг №7:
Проверяю, что, если система Ubuntu 22.04 Server
будет перезагружена, сервис Asterisk
самостоятельно запустится:
ekzorchik@srv-us2204a:~$ sudo reboot ekzorchik@srv-us2204a:~$ sudo systemctl status asterisk | head -n5 ● asterisk.service - LSB: Asterisk PBX Loaded: loaded (/etc/init.d/asterisk; generated) Active: active (running) since Fri 2022-06-10 07:44:18 MSK; 17s ago Docs: man:systemd-sysv-generator(8) Process: 728 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS) ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | egrep asterisk tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 759/asterisk udp 0 0 0.0.0.0:51173 0.0.0.0:* 759/asterisk udp 0 0 0.0.0.0:4520 0.0.0.0:* 759/asterisk udp 0 0 0.0.0.0:4569 0.0.0.0:* 759/asterisk udp 0 0 0.0.0.0:2727 0.0.0.0:* 759/asterisk udp 0 0 0.0.0.0:5000 0.0.0.0:* 759/asterisk udp 0 0 0.0.0.0:5060 0.0.0.0:* 759/asterisk udp6 0 0 :::50590 :::* 759/asterisk ekzorchik@srv-us2204a:~$
Ответ, да! сервис стартует и порты ожидают слушаются.
На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik,
продолжение следует.