Все, окончательно хочу (Поднимаем 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, продолжение следует.