Моя цель: Поднять/Установить Asterisk 16 не из репозитариев, а из исходников на Ubuntu 20.04 внутри гипервизора Debian 10 + Proxmox 6. Где гипервизор базируется на моем собственном железе Gigabyte C246 WU4. Это мой домашний сервер в дополнении к HP MicroServer Gen8. Ну поднял и что с того, а что дальше? А дальше хочу сделать и практически использовать персональную телефонию с внешним номером и внутренними номерами дабы не свой мобильный оставлять для связи поставщикам, клиентам. Также в планах сделать, чтобы через звонок на внешний номер от определенных номеров открывались ворота. Ладно пока остановлюсь на своих хотелках, разберу с самого начала от и до:

Виртуальная машина под осью Ubuntu 20.04 Server на гипервизоре Debian 10 + Proxmox 6, выделяю под VM следующие характеристики:

  • CPU = 1 sockets (4 cores)
  • RAM = 4096Mb
  • HDD = 50Gb (M.2 Storage or SSD Storage)

Шаг №1: Устанавливаю ОС Ubuntu 20.04 LTS Server, система была установлен по сети через сетевую загрузку + применен скрипт базовой настройки, сделан снапшот виртуальной машины, когда я к нему возвращаюсь, то после в консоли виртуальной машины выполняю:

ekzorchik@srv-us2004a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2004a:~$ sudo apt-get update && sudo apt-get -y upgrade
ekzorchik@srv-us2004a:~$ sudo reboot

Шаг №2: В дефолтных репозитариях имеется пакет Asterisk, но он не той версии которая мне нужна, я буду собирать из исходников. К сожалению Asterisk 18 мне не удалось собрать под Ubuntu 20.04 Server.

ekzorchik@srv-us2004a:~$ apt-cache show asterisk | grep Version
Version: 1:16.2.1~dfsg-2ubuntu1
ekzorchik@srv-us2004a:~$

Шаг №3: Устанавливаю зависимости для сборки Asterisk из исходников:

ekzorchik@srv-us2004a:~$ 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 из исходников:

ekzorchik@srv-us2004a:~$ cd /usr/src
ekzorchik@srv-us2004a:/usr/src$ sudo curl -O http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
ekzorchik@srv-us2004a:/usr/src$ sudo tar zxf asterisk-16-current.tar.gz 
ekzorchik@srv-us2004a:/usr/src$ cd asterisk-*/
ekzorchik@srv-us2004a:/usr/src/asterisk-*$ 
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo contrib/scripts/get_mp3_source.sh 
A    addons/mp3
A    addons/mp3/huffman.h
A    addons/mp3/tabinit.c
A    addons/mp3/Makefile
A    addons/mp3/README
A    addons/mp3/decode_i386.c
A    addons/mp3/dct64_i386.c
A    addons/mp3/MPGLIB_TODO
A    addons/mp3/mpg123.h
A    addons/mp3/layer3.c
A    addons/mp3/mpglib.h
A    addons/mp3/decode_ntom.c
A    addons/mp3/interface.c
A    addons/mp3/MPGLIB_README
A    addons/mp3/common.c
Exported revision 202.
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo contrib/scripts/install_prereq install
ITU-T telephone code: 7
#############################################
## install completed successfully
#############################################
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ 
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo ./configure

На заметку: Важно чтобы терминал был разрешением не менее 80 на 21 иначе sudo make menuselect не запустится.

ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make menuselect
  • Add-ons: отмечаю клавишей Enter format_mp3
  • Applications: отмечаю клавишей Enter app_macro
  • Core Sound Packages: отмечаю CORE-SOUNDS-EN-ULAW,CORE-SOUND-EN-ALAW,CORE-SOUNDS-RU-ULAW,CORE-SOUNDS-RU-ALAW
  • Music On Hold File Packages: MOH-OPSOUND-ULAW,MOH-OPSOUND-ALAW
  • Extras Sound Packages: отмечаю EXTRA-SOUNDS-EN-ULAW,EXTRA-SOUNDS-EN-ALAW
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make -j$((`nproc`+1))
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make install
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make progdocs
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make samples
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo make config
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ sudo ldconfig
ekzorchik@srv-us2004a:/usr/src/asterisk-16.23.0$ cd ~
ekzorchik@srv-us2004a:~$

Шаг №5: Как и всегда мой сервис Asterisk не будет использовать дефолтную работу от имени пользователя root. Значит создадим специального пользователя и укажем, что от имени него запускать и работать Asterisk'у:

ekzorchik@srv-us2004a:~$ sudo groupadd asterisk
ekzorchik@srv-us2004a:~$ sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
ekzorchik@srv-us2004a:~$ sudo usermod -aG audio,dialout asterisk
ekzorchik@srv-us2004a:~$ sudo chown -R asterisk.asterisk /etc/asterisk
ekzorchik@srv-us2004a:~$ sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
ekzorchik@srv-us2004a:~$ sudo chown -R asterisk.asterisk /usr/lib/asterisk
ekzorchik@srv-us2004a:~$
ekzorchik@srv-us2004a:~$ sudo nano /etc/default/asterisk
AST_USER="asterisk"
AST_GROUP="asterisk"
ekzorchik@srv-us2004a:~$ sudo nano /etc/asterisk/asterisk.conf
runuser = asterisk		; The user to run as.
rungroup = asterisk		; The group to run as.

Шаг №6: Запускаю сервис Asterisk:

ekzorchik@srv-us2004a:~$ 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-us2004a:~$ sudo systemctl restart asterisk.service
ekzorchik@srv-us2004a:~$ sudo systemctl status asterisk.service | head -n5
● asterisk.service - LSB: Asterisk PBX
     Loaded: loaded (/etc/init.d/asterisk; generated)
     Active: active (running) since Tue 2022-01-11 18:32:46 UTC; 50s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 57302 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
ekzorchik@srv-us2004a:~$
ekzorchik@srv-us2004a:~$ sudo asterisk -rvv
Asterisk 16.23.0, 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.23.0 currently running on srv-us2004a (pid = 57324)
srv-us2004a*CLI> 
srv-us2004a*CLI> quit
Asterisk cleanly ending (0).
Executing last minute cleanups
ekzorchik@srv-us2004a:~$

Итого, сборка Asterisk успешно завершена самой последней 16 версии, а не той что предлагается если бы я устанавливал из дефолтных репозитариев:

ekzorchik@srv-us2004a:~$ apt-cache show asterisk | grep Version
Version: 1:16.2.1~dfsg-2ubuntu1
ekzorchik@srv-us2004a:~$ asterisk -V
Asterisk 16.23.0
ekzorchik@srv-us2004a:~$

Если мне понадобится какой-либо модуль, то я вернуть в каталог куда устанавливал и через команду sudo make menuselect отмечу его и заново произведу установку.

Шаг №7: Проверяю, что если система Ubuntu 20.04 Server будет перезагружена, сервис Asterisk самостоятельно запустится:

ekzorchik@srv-us2004a:~$ sudo reboot
ekzorchik@srv-us2004a:~$ sudo systemctl status asterisk | head -n5 
● asterisk.service - LSB: Asterisk PBX
     Loaded: loaded (/etc/init.d/asterisk; generated)
     Active: active (running) since Tue 2022-01-11 18:44:02 UTC; 14s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 632 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
ekzorchik@srv-us2004a:~$ sudo netstat -tulpn | grep asterisk
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      709/asterisk        
udp        0      0 0.0.0.0:51364           0.0.0.0:*                           709/asterisk        
udp        0      0 0.0.0.0:4520            0.0.0.0:*                           709/asterisk        
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           709/asterisk        
udp        0      0 0.0.0.0:2727            0.0.0.0:*                           709/asterisk        
udp        0      0 0.0.0.0:5000            0.0.0.0:*                           709/asterisk        
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           709/asterisk        
udp6       0      0 :::39678                :::*                                709/asterisk        
ekzorchik@srv-us2004a:~$

Ответ, да! сервис стартует и порты ожидают слушаются.

На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik, продолжение следует.