Install Asterisk PBX Server on CentOS 8 - CentLinux

Latest

Saturday, 28 November 2020

Install Asterisk PBX Server on CentOS 8

Install Asterisk PBX Server on CentOS 8

Asterisk PBX is software implementation of Personal Branch Exchange (PBX). In this guide you will learn how to install Asterisk PBX server on CentOS 8.

 

Table of Contents:

     

    What is PBX? :

    PBX is a telephone exchange or switching system that serves a private organization and permits sharing of central office trunks between internally installed telephones, and provides intercommunication between those internal telephones within the organization without the use of external lines. The central office lines provide connections to the public switched telephone network (PSTN) and the concentration aspect of a PBX permits the shared use of these lines between all stations in the organization. Its intercommunication ability allows two or more stations to directly connect while not using the public switched telephone network. This method reduces the number of lines needed from the organization to the public switched telephone network.

     

    What is Asterisk PBX? :

    Asterisk is a software implementation of a private branch exchange (PBX). In conjunction with suitable telephony hardware interfaces and network applications, Asterisk is used to establish and control telephone calls between telecommunication endpoints, such as customary telephone sets, destinations on the public switched telephone network (PSTN), and devices or services on voice over Internet Protocol (VoIP) networks. Its name comes from the asterisk (*) symbol for a signal used in dual-tone multi-frequency (DTMF) dialing.

    Asterisk was created in 1999 by Mark Spencer of Digium, which since 2018 is a division of Sangoma Technologies Corporation. Originally designed for Linux, Asterisk runs on a variety of operating systems, including NetBSD, OpenBSD, FreeBSD, macOS, and Solaris, and can be installed in embedded systems based on OpenWrt (Open Wireless Router). (Source: Wikipedia)

    Asterisk PBX is available in Community and Commercial editions.Asterisk Community edition is a free software and distributed under GPLv2 license. Whereas, Asterisk Commercial edition provides enterprise features but have a licensing cost.

     

    Asterisk PBX Features:

    Some popular features of Asterisk PBX are.

    • Voice over IP (VoIP)
    • Voice Mail
    • Conference Calling
    • Interactive Voice Response (Phone Menus)
    • Automatic Call Distribution
    • Supports common VoIP, ISDN protocols

    Complete list of Asterix PBX features is available on their official website.

     

    Environment Specification:

    We are using a minimal CentOS 8 virtual machine with following specifications.

    • CPU - 3.4 Ghz (2 cores)
    • Memory - 2 GB
    • Storage - 20 GB
    • Operating System - CentOS 8.2
    • Hostname – asterisk-pbx.centlinux.com
    • IP Address - 192.168.116.236 /24

     

    Update CentOS 8 Software Packages:

    Connect with asterisk-pbx.centlinux.com as root user by using a ssh client.

    By following the best practice, update your Linux server packages before installing Asterisk PBX software.

    Use dnf command to update software packages in your Linux server.

    [root@asterisk-pbx ~]# dnf update -y Last metadata expiration check: 0:00:30 ago on Wed 25 Nov 2020 08:24:39 PM PKT. Dependencies resolved. Nothing to do. Complete!

    All packages in our Linux server are already up-to-date.

    Check Kernel version of Linux server.

    [root@asterisk-pbx ~]# uname -r 4.18.0-193.28.1.el8_2.x86_64

    Check Linux operating system version.

    [root@asterisk-pbx ~]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)

     

    Downloading Asterisk PBX 18:

    Asterisk PBX 18 is a free software and you can download Asterisk PBX from their official website or Asterisk GitHub Repository.

    Open Asterisk PBX website in a web browser and copy the URL of Asterisk PBX software. Currently Asterisk PBX 18 is the latest version, and it is available for download.

    01-install-asterisk-pbx-server-on-centos-8-download

     

    Use wget command to download the Asterisk PBX 18 from the copied URL.

    [root@asterisk-pbx ~]# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz --2020-11-25 20:55:00-- http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz Resolving downloads.asterisk.org (downloads.asterisk.org)... 76.164.171.238, 2001:470:e0d4::ee Connecting to downloads.asterisk.org (downloads.asterisk.org)|76.164.171.238|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 27886299 (27M) [application/x-gzip] Saving to: âasterisk-18-current.tar.gzâ asterisk-18-current 100%[===================>] 26.59M 949 B/s in 82s 2020-11-25 20:56:24 (331 KB/s) - âasterisk-18-current.tar.gzâ saved [27886299/27886299]

    Extract the downloaded tarball by using tar command.

    [root@asterisk-pbx ~]# tar xf asterisk-18-current.tar.gz

     

    Installing Asterisk PBX Prerequisites Packages:

    Asterisk PBX software comes with a well written script that can be used to install prerequisite software packages on Linux server.

    Execute this script and install all prerequisite packages in one go.

    [root@asterisk-pbx ~]# cd asterisk-18.1.0/contrib/scripts/ [root@asterisk-pbx scripts]# ./install_prereq install ... elfutils-libelf-devel-0.178-7.el8.x86_64 emacs-filesystem-1:26.1-5.el8.noarch fftw-3.3.5-11.el8.x86_64 fftw-devel-3.3.5-11.el8.x86_64 fftw-libs-3.3.5-11.el8.x86_64 fftw-libs-double-3.3.5-11.el8.x86_64 fftw-libs-long-3.3.5-11.el8.x86_64 fftw-libs-quad-3.3.5-11.el8.x86_64 fftw-libs-single-3.3.5-11.el8.x86_64 flex-2.6.1-9.el8.x86_64 fontconfig-2.13.1-3.el8.x86_64 fontpackages-filesystem-1.44-22.el8.noarch fribidi-1.0.4-8.el8.x86_64 gcc-8.3.1-5.el8.0.2.x86_64 gcc-c++-8.3.1-5.el8.0.2.x86_64 gd-2.2.5-6.el8.x86_64 gdk-pixbuf2-2.36.12-5.el8.x86_64 gdk-pixbuf2-modules-2.36.12-5.el8.x86_64 ghc-srpm-macros-1.4.2-7.el8.noarch glibc-devel-2.28-101.el8.x86_64 glibc-headers-2.28-101.el8.x86_64 go-srpm-macros-2-16.el8.noarch google-droid-sans-fonts-20120715-13.el8.noarch graphite2-1.3.10-10.el8.x86_64 graphviz-2.40.1-40.el8.x86_64 gtk-update-icon-cache-3.22.30-5.el8.x86_64 gtk2-2.24.32-4.el8.x86_64 harfbuzz-1.7.5-3.el8.x86_64 hicolor-icon-theme-0.17-2.el8.noarch isl-0.16.1-6.el8.x86_64 jansson-devel-2.11-3.el8.x86_64 jasper-libs-2.0.14-4.el8.x86_64 jbig2dec-libs-0.14-4.el8_2.x86_64 jbigkit-libs-2.1-14.el8.x86_64 kernel-headers-4.18.0-193.28.1.el8_2.x86_64 keyutils-libs-devel-1.5.10-6.el8.x86_64 krb5-devel-1.17-18.el8.x86_64 lcms2-2.9-2.el8.x86_64 libICE-1.0.9-15.el8.x86_64 libSM-1.2.3-1.el8.x86_64 libX11-1.6.8-3.el8.x86_64 libX11-common-1.6.8-3.el8.noarch libXau-1.0.8-13.el8.x86_64 libXaw-1.0.13-10.el8.x86_64 libXcomposite-0.4.4-14.el8.x86_64 libXcursor-1.1.15-3.el8.x86_64 libXdamage-1.1.4-14.el8.x86_64 libXext-1.3.3-9.el8.x86_64 libXfixes-5.0.3-7.el8.x86_64 libXft-2.3.2-10.el8.x86_64 libXi-1.7.9-7.el8.x86_64 libXinerama-1.1.4-1.el8.x86_64 libXmu-1.1.2-12.el8.x86_64 libXpm-3.5.12-8.el8.x86_64 libXrandr-1.5.1-7.el8.x86_64 libXrender-0.9.10-7.el8.x86_64 libXt-1.1.5-12.el8.x86_64 libXxf86misc-1.0.4-1.el8.x86_64 libXxf86vm-1.1.4-9.el8.x86_64 libcap-devel-2.26-3.el8.x86_64 libcom_err-devel-1.45.4-3.el8.x86_64 libcurl-devel-7.61.1-12.el8.x86_64 libdatrie-0.2.9-7.el8.x86_64 libevent-devel-2.1.8-5.el8.x86_64 libfontenc-1.1.3-8.el8.x86_64 libgcrypt-devel-1.8.3-4.el8.x86_64 libgpg-error-devel-1.31-1.el8.x86_64 libgs-9.25-5.el8_1.1.x86_64 libical-3.0.3-3.el8.x86_64 libical-devel-3.0.3-3.el8.x86_64 libicu-devel-60.3-2.el8_1.x86_64 libidn-1.34-5.el8.x86_64 libijs-0.35-5.el8.x86_64 libjpeg-turbo-1.5.3-10.el8.x86_64 libkadm5-1.17-18.el8.x86_64 libmcpp-2.7.2-20.el8.x86_64 libmpc-1.0.2-9.el8.x86_64 libpaper-1.1.24-22.el8.x86_64 libpq-12.4-1.el8_2.x86_64 libpq-devel-12.4-1.el8_2.x86_64 libquadmath-8.3.1-5.el8.0.2.x86_64 librsvg2-2.42.7-3.el8.x86_64 libselinux-devel-2.9-3.el8.x86_64 libsepol-devel-2.9-1.el8.x86_64 libserf-1.3.9-8.module_el8.0.0+45+75bba4f4.x86_64 libstdc++-devel-8.3.1-5.el8.0.2.x86_64 libthai-0.1.27-2.el8.x86_64 libtiff-4.0.9-17.el8.x86_64 libuuid-devel-2.32.1-22.el8.x86_64 libverto-devel-0.3.0-5.el8.x86_64 libwebp-1.0.0-1.el8.x86_64 libxcb-1.13.1-1.el8.x86_64 libxcrypt-devel-4.1.1-4.el8.x86_64 libxml2-devel-2.9.7-7.el8.x86_64 libxslt-devel-1.1.32-4.el8.x86_64 libzstd-devel-1.4.2-2.el8.x86_64 lm_sensors-devel-3.4.0-21.20180522git70f7e08.el8.x86_64 lm_sensors-libs-3.4.0-21.20180522git70f7e08.el8.x86_64 m4-1.4.18-7.el8.x86_64 make-1:4.2.1-10.el8.x86_64 mariadb-connector-c-3.0.7-1.el8.x86_64 mariadb-connector-c-config-3.0.7-1.el8.noarch mcpp-2.7.2-20.el8.x86_64 mysql-common-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 mysql-devel-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 mysql-libs-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 net-snmp-agent-libs-1:5.8-14.el8_2.1.x86_64 net-snmp-devel-1:5.8-14.el8_2.1.x86_64 net-snmp-libs-1:5.8-14.el8_2.1.x86_64 newt-devel-0.52.20-11.el8.x86_64 ocaml-srpm-macros-5-4.el8.noarch openblas-srpm-macros-2-2.el8.noarch openjpeg2-2.3.1-6.el8.x86_64 openldap-devel-2.4.46-11.el8_1.x86_64 openssl-devel-1:1.1.1c-15.el8.x86_64 pango-1.42.4-6.el8.x86_64 patch-2.7.6-11.el8.x86_64 pcre2-devel-10.32-1.el8.x86_64 pcre2-utf16-10.32-1.el8.x86_64 pcre2-utf32-10.32-1.el8.x86_64 perl-CPAN-Meta-2.150010-396.el8.noarch perl-CPAN-Meta-Requirements-2.140-396.el8.noarch perl-CPAN-Meta-YAML-0.018-397.el8.noarch perl-Carp-1.42-396.el8.noarch perl-Data-Dumper-2.167-399.el8.x86_64 perl-Digest-1.17-395.el8.noarch perl-Digest-MD5-2.55-396.el8.x86_64 perl-Encode-4:2.97-3.el8.x86_64 perl-Encode-Locale-1.05-9.el8.noarch perl-Errno-1.28-416.el8.x86_64 perl-Exporter-5.72-396.el8.noarch perl-ExtUtils-Command-1:7.34-1.el8.noarch perl-ExtUtils-Install-2.14-4.el8.noarch perl-ExtUtils-MakeMaker-1:7.34-1.el8.noarch perl-ExtUtils-Manifest-1.70-395.el8.noarch perl-ExtUtils-ParseXS-1:3.35-2.el8.noarch perl-File-Path-2.15-2.el8.noarch perl-File-Temp-0.230.600-1.el8.noarch perl-Getopt-Long-1:2.50-4.el8.noarch perl-HTTP-Tiny-0.074-1.el8.noarch perl-IO-1.38-416.el8.x86_64 perl-IO-Socket-IP-0.39-5.el8.noarch perl-IO-Socket-SSL-2.066-4.el8.noarch perl-JSON-PP-1:2.97.001-3.el8.noarch perl-MIME-Base64-3.15-396.el8.x86_64 perl-Math-BigInt-1:1.9998.11-7.el8.noarch perl-Math-Complex-1.59-416.el8.noarch perl-Mozilla-CA-20160104-7.el8.noarch perl-Net-SSLeay-1.88-1.el8.x86_64 perl-PathTools-3.74-1.el8.x86_64 perl-Pod-Escapes-1:1.07-395.el8.noarch perl-Pod-Perldoc-3.28-396.el8.noarch perl-Pod-Simple-1:3.35-395.el8.noarch perl-Pod-Usage-4:1.69-395.el8.noarch perl-Scalar-List-Utils-3:1.49-2.el8.x86_64 perl-Socket-4:2.027-3.el8.x86_64 perl-Storable-1:3.11-3.el8.x86_64 perl-Term-ANSIColor-4.06-396.el8.noarch perl-Term-Cap-1.17-395.el8.noarch perl-Test-Harness-1:3.42-1.el8.noarch perl-Text-ParseWords-3.30-395.el8.noarch perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch perl-Time-HiRes-1.9758-1.el8.x86_64 perl-Time-Local-1:1.280-1.el8.noarch perl-URI-1.73-3.el8.noarch perl-Unicode-Normalize-1.25-396.el8.x86_64 perl-constant-1.33-396.el8.noarch perl-devel-4:5.26.3-416.el8.x86_64 perl-interpreter-4:5.26.3-416.el8.x86_64 perl-libnet-3.11-3.el8.noarch perl-libs-4:5.26.3-416.el8.x86_64 perl-macros-4:5.26.3-416.el8.x86_64 perl-parent-1:0.237-1.el8.noarch perl-podlators-4.11-1.el8.noarch perl-srpm-macros-1-25.el8.noarch perl-threads-1:2.21-2.el8.x86_64 perl-threads-shared-1.58-2.el8.x86_64 perl-version-6:0.99.24-1.el8.x86_64 pixman-0.38.4-1.el8.x86_64 platform-python-devel-3.6.8-23.el8.x86_64 popt-devel-1.16-14.el8.x86_64 python-rpm-macros-3-38.el8.noarch python-srpm-macros-3-38.el8.noarch python3-pyparsing-2.1.10-7.el8.noarch python3-rpm-generators-5-6.el8.noarch python3-rpm-macros-3-38.el8.noarch qt5-srpm-macros-5.12.5-3.el8.noarch redhat-rpm-config-122-1.el8.noarch rpm-devel-4.14.2-37.el8.x86_64 rust-srpm-macros-5-2.el8.noarch slang-devel-2.3.2-3.el8.x86_64 sqlite-devel-3.26.0-6.el8.x86_64 subversion-1.10.2-1.module_el8.0.0+45+75bba4f4.x86_64 subversion-libs-1.10.2-1.module_el8.0.0+45+75bba4f4.x86_64 systemtap-sdt-devel-4.2-6.el8.x86_64 unbound-devel-1.7.3-11.el8_2.x86_64 unixODBC-2.3.7-1.el8.x86_64 unixODBC-devel-2.3.7-1.el8.x86_64 unzip-6.0-43.el8.x86_64 urw-base35-bookman-fonts-20170801-10.el8.noarch urw-base35-c059-fonts-20170801-10.el8.noarch urw-base35-d050000l-fonts-20170801-10.el8.noarch urw-base35-fonts-20170801-10.el8.noarch urw-base35-fonts-common-20170801-10.el8.noarch urw-base35-gothic-fonts-20170801-10.el8.noarch urw-base35-nimbus-mono-ps-fonts-20170801-10.el8.noarch urw-base35-nimbus-roman-fonts-20170801-10.el8.noarch urw-base35-nimbus-sans-fonts-20170801-10.el8.noarch urw-base35-p052-fonts-20170801-10.el8.noarch urw-base35-standard-symbols-ps-fonts-20170801-10.el8.noarch urw-base35-z003-fonts-20170801-10.el8.noarch utf8proc-2.1.1-4.module_el8.0.0+45+75bba4f4.x86_64 xorg-x11-font-utils-1:7.5-40.el8.x86_64 xorg-x11-fonts-ISO8859-1-100dpi-7.5-19.el8.noarch xorg-x11-server-utils-7.7-27.el8.x86_64 xz-devel-5.2.4-3.el8.x86_64 zip-3.0-23.el8.x86_64 zlib-devel-1.2.11-16.el8_2.x86_64 Complete! ############################################# ## install completed successfully #############################################

    To enable mp3 support for playing music while the client is on hold, you are required to install a few more dependencies. Luckily, Asterisk PBX provides a script for the same. Execute it now.

    [root@asterisk-pbx scripts]# ./get_mp3_source.sh A addons/mp3 A addons/mp3/MPGLIB_README A addons/mp3/common.c 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 Exported revision 202.

    Asterisk PBX server also required libedit and libedit-devel packages not available in standard yum repositories. Therefore, you have to install these packages from rpmfind website as follows.

    [root@asterisk-pbx scripts]# cd ~/asterisk-18.1.0 [root@asterisk-pbx asterisk-18.1.0]# dnf install -y https://www.rpmfind.net/linux/centos/8-stream/PowerTools/x86_64/os/Packages/libedit-devel-3.1-23.20170329cvs.el8.x86_64.rpm https://www.rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libedit-3.1-23.20170329cvs.el8.x86_64.rpm Last metadata expiration check: 0:08:21 ago on Wed 25 Nov 2020 09:51:09 PM PKT. libedit-devel-3.1-23.20170329cvs.el8.x86_64.rpm 28 kB/s | 44 kB 00:01 libedit-3.1-23.20170329cvs.el8.x86_64.rpm 75 kB/s | 102 kB 00:01 Package libedit-3.1-23.20170329cvs.el8.x86_64 is already installed. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: libedit-devel x86_64 3.1-23.20170329cvs.el8 @commandline 44 k Installing dependencies: ncurses-c++-libs x86_64 6.1-7.20180224.el8 BaseOS 58 k ncurses-devel x86_64 6.1-7.20180224.el8 BaseOS 527 k Transaction Summary ================================================================================ Install 3 Packages Total size: 629 k Total download size: 585 k Installed size: 1.0 M Downloading Packages: (1/2): ncurses-c++-libs-6.1-7.20180224.el8.x86_ 653 B/s | 58 kB 01:30 (2/2): ncurses-devel-6.1-7.20180224.el8.x86_64. 4.5 kB/s | 527 kB 01:57 -------------------------------------------------------------------------------- Total 4.9 kB/s | 585 kB 01:58 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : ncurses-c++-libs-6.1-7.20180224.el8.x86_64 1/3 Installing : ncurses-devel-6.1-7.20180224.el8.x86_64 2/3 Installing : libedit-devel-3.1-23.20170329cvs.el8.x86_64 3/3 Running scriptlet: libedit-devel-3.1-23.20170329cvs.el8.x86_64 3/3 Verifying : ncurses-c++-libs-6.1-7.20180224.el8.x86_64 1/3 Verifying : ncurses-devel-6.1-7.20180224.el8.x86_64 2/3 Verifying : libedit-devel-3.1-23.20170329cvs.el8.x86_64 3/3 Installed: libedit-devel-3.1-23.20170329cvs.el8.x86_64 ncurses-c++-libs-6.1-7.20180224.el8.x86_64 ncurses-devel-6.1-7.20180224.el8.x86_64 Complete!

    All prerequisites has been installed successfully.

     

    Installing Asterisk PBX on CentOS 8:

    Now, you can start setup of Asterisk PBX from extracted directory.

    [root@asterisk-pbx asterisk-18.1.0]# ./configure --libdir=/usr/lib64 --with-jansson-bundled checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking whether char is unsigned... no checking for uname... /usr/bin/uname checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking how to run the C preprocessor... gcc -E checking how to run the C++ preprocessor... g++ -E checking for a sed that does not truncate output... /usr/bin/sed checking for egrep... grep -E checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for gawk... gawk checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for ranlib... ranlib checking for GNU make... make checking for egrep... (cached) /usr/bin/grep -E checking for strip... strip checking for ar... ar checking for bison... /usr/bin/bison checking for cmp... /usr/bin/cmp checking for cat... /usr/bin/cat checking for cut... /usr/bin/cut checking for flex... /usr/bin/flex checking for grep... (cached) /usr/bin/grep checking for python2.7... no checking for python2... no checking for python... no checking for python3... no checking for find... /usr/bin/find checking for basename... /usr/bin/basename checking for dirname... /usr/bin/dirname checking for sh... /bin/sh checking for ln... /usr/bin/ln checking for doxygen... : checking for dot... /usr/bin/dot checking for wget... /usr/bin/wget checking for curl... /usr/bin/curl checking for xmllint... /usr/bin/xmllint checking for xmlstarlet... no checking for xml... no checking for bash... /bin/sh checking for git... : checking for alembic... : checking for bzip2... /usr/bin/bzip2 checking for tar... /usr/bin/tar checking for patch... /usr/bin/patch checking for sed... (cached) /usr/bin/sed checking for nm... /usr/bin/nm checking for ldconfig... /usr/sbin/ldconfig checking for sha1sum... /usr/bin/sha1sum checking for openssl... /usr/bin/openssl checking for bison that supports parse-param... /usr/bin/bison checking for soxmix... no checking for md5... no checking for md5sum... md5sum checking for a sed that does not truncate output... (cached) /usr/bin/sed checking whether gcc is Clang... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking whether more special flags are required for pthreads... no checking for PTHREAD_PRIO_INHERIT... yes checking for RAII support... checking for gcc -fnested-functions... no checking for clang strsep/strcmp optimization... no checking for embedded jansson (may have to download)... configuring [jansson] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/jansson/2.12/jansson-2.12.tar.bz2 to /tmp/jansson-2.12.tar.bz2 [jansson] Verifying /tmp/jansson-2.12.tar.bz2 [jansson] Verify successful [jansson] Verifying /tmp/jansson-2.12.tar.bz2 [jansson] Verify successful [jansson] Unpacking /tmp/jansson-2.12.tar.bz2 [jansson] Applying patches /root/asterisk-18.1.0/third-party/jansson/patches /root/asterisk-18.1.0/third-party/jansson/source No patches in /root/asterisk-18.1.0/third-party/jansson/patches [jansson] Rebuilding [jansson] Configuring checking for bundled jansson... yes checking for embedded pjproject (may have to download)... configuring [pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2 [pjproject] Verifying /tmp/pjproject-2.10.tar.bz2 [pjproject] Verify successful [pjproject] Verifying /tmp/pjproject-2.10.tar.bz2 [pjproject] Verify successful [pjproject] Unpacking /tmp/pjproject-2.10.tar.bz2 [pjproject] Applying patches /root/asterisk-18.1.0/third-party/pjproject/patches /root/asterisk-18.1.0/third-party/pjproject/source [pjproject] Applying user.mak [pjproject] Applying custom include file patches/config_site.h [pjproject] Applying custom include file patches/asterisk_malloc_debug.h [pjproject] Rebuilding [pjproject] Configuring with --prefix=/opt/pjproject --disable-speex-codec --disable-speex-aec --disable-bcg729 --disable-gsm-codec --disable-ilbc-codec --disable-l16-codec --disable-g722-codec --disable-g7221-codec --disable-opencore-amr --disable-silk --disable-opus --disable-video --disable-v4l2 --disable-sound --disable-ext-sound --disable-sdl --disable-libyuv --disable-ffmpeg --disable-openh264 --disable-ipp --disable-libwebrtc --without-external-pa --without-external-srtp --disable-resample --disable-g711-codec --enable-epoll checking for bundled pjproject... yes checking for gawk... (cached) gawk checking for curl-config... /usr/bin/curl-config checking for the version of libcurl... 7.61.1 checking for libcurl >= version 7.10.1... yes checking whether libcurl is usable... yes checking for curl_free... yes checking for size_t... yes checking for working alloca.h... yes checking for alloca... yes checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for ANSI C header files... (cached) yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for sys/types.h... (cached) yes checking for netinet/in.h... yes checking for arpa/nameser.h... yes checking for netdb.h... yes checking for resolv.h... yes checking for arpa/nameser.h... (cached) yes checking assert.h usability... yes checking assert.h presence... yes checking for assert.h... yes checking ctype.h usability... yes checking ctype.h presence... yes checking for ctype.h... yes checking dlfcn.h usability... yes checking dlfcn.h presence... yes checking for dlfcn.h... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking float.h usability... yes checking float.h presence... yes checking for float.h... yes checking grp.h usability... yes checking grp.h presence... yes checking for grp.h... yes checking for inttypes.h... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking math.h usability... yes checking math.h presence... yes checking for math.h... yes checking pwd.h usability... yes checking pwd.h presence... yes checking for pwd.h... yes checking for netinet/in.h... (cached) yes checking regex.h usability... yes checking regex.h presence... yes checking for regex.h... yes checking sched.h usability... yes checking sched.h presence... yes checking for sched.h... yes checking stdarg.h usability... yes checking stdarg.h presence... yes checking for stdarg.h... yes checking for stdint.h... (cached) yes checking stdio.h usability... yes checking stdio.h presence... yes checking for stdio.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking syslog.h usability... yes checking syslog.h presence... yes checking for syslog.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking sys/resource.h usability... yes checking sys/resource.h presence... yes checking for sys/resource.h... yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking for sys/stat.h... (cached) yes checking sys/time.h usability... yes checking sys/time.h presence... yes checking for sys/time.h... yes checking for sys/types.h... (cached) yes checking sys/un.h usability... yes checking sys/un.h presence... yes checking for sys/un.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking time.h usability... yes checking time.h presence... yes checking for time.h... yes checking for unistd.h... (cached) yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking libintl.h usability... yes checking libintl.h presence... yes checking for libintl.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking for netdb.h... (cached) yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for strings.h... (cached) yes checking sys/event.h usability... no checking sys/event.h presence... no checking for sys/event.h... no checking utime.h usability... yes checking utime.h presence... yes checking for utime.h... yes checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for LIBEDIT... no checking for history_init in -ledit... no checking for neon-config... no checking for neon-config... no checking for net-snmp-config... /bin/net-snmp-config checking for newtBell in -lnewt... yes checking newt.h usability... yes checking newt.h presence... yes checking for newt.h... yes checking for ub_ctx_delete in -lunbound... yes checking unbound.h usability... yes checking unbound.h presence... yes checking for unbound.h... yes checking for unbound version >= 1.5... yes checking for SQLConnect in -lodbc... yes checking sql.h usability... yes checking sql.h presence... yes checking for sql.h... yes checking for ogg_stream_init in -logg... no checking for backtrace in -lexecinfo... no checking for backtrace in -lc... yes checking execinfo.h usability... yes checking execinfo.h presence... yes checking for execinfo.h... yes checking for ba2str in -lbluetooth... no checking for bs_version in -lbeanstalk... no checking linux/soundcard.h usability... yes checking linux/soundcard.h presence... yes checking for linux/soundcard.h... yes checking for pg_config... /usr/bin/pg_config checking for PQescapeStringConn in -lpq... yes checking for pg_encoding_to_char within Postgres headers... yes checking for poptStrerror in -lpopt... yes checking popt.h usability... yes checking popt.h presence... yes checking for popt.h... yes checking for PORTAUDIO... no checking for Pa_GetDeviceCount in -lportaudio... no checking for pri_connected_line_update in -lpri... no checking for resample_open in -lresample... no checking for fftw_malloc in -lfftw3... yes checking fftw3.h usability... yes checking fftw3.h presence... yes checking for fftw3.h... yes checking for sf_open in -lsndfile... no checking for minimum version of SpanDSP... no checking for ss7_set_isup_timer in -lss7... no checking for openr2_chan_new in -lopenr2... no checking for opus_encoder_create in -lopus... no checking for op_open_callbacks in -lopusfile... no checking for luaL_newstate in -llua5.4... no checking for luaL_newstate in -llua5.3... no checking for luaL_newstate in -llua5.2... no checking for luaL_newstate in -llua5.1... no checking for luaL_newstate in -llua... no checking for rc_read_config in -lfreeradius-client... no checking for rc_read_config in -lradiusclient-ng... no checking for rc_read_config in -lradcli... no checking for codec2_create in -lcodec2... no checking for cpg_join in -lcpg... no checking for corosync_cfg_state_track in -lcfg... no checking for speex_encode in -lspeex... no checking for speex_preprocess_ctl in -lspeex... no checking for speex_preprocess_ctl in -lspeexdsp... no checking for sqlite_exec in -lsqlite... no checking for sqlite3_open in -lsqlite3... yes checking sqlite3.h usability... yes checking sqlite3.h presence... yes checking for sqlite3.h... yes checking for crypt in -lcrypt... yes checking crypt.h usability... yes checking crypt.h presence... yes checking for crypt.h... yes checking for crypt... no checking for crypt_r in -lcrypt... yes checking for AES_encrypt in -lcrypto... yes checking openssl/aes.h usability... yes checking openssl/aes.h presence... yes checking for openssl/aes.h... yes checking for SSL_connect in -lssl... yes checking openssl/ssl.h usability... yes checking openssl/ssl.h presence... yes checking for openssl/ssl.h... yes checking for BIO_meth_new in -lssl... yes checking for openssl/ssl.h... (cached) yes checking osp/osp.h usability... no checking osp/osp.h presence... no checking for osp/osp.h... no checking for srtp_init in -lsrtp2... no checking for srtp_init in -lsrtp... no checking for GMIME... no checking for GMIME... no checking for GMIME... no checking for GMIME... no checking for GMIME... no checking for malloc in -lhoard... no checking for dbinit in -lsybdb... no checking for tone_zone_find_by_num in -ltonezone... no checking for tone_zone_find in -ltonezone... no checking for vorbis_info_init in -lvorbis... no checking for OV_CALLBACKS_NOCLOSE declared in vorbis/vorbisfile.h... no checking for vpb_open in -lvpb... no checking for compress in -lz... yes checking zlib.h usability... yes checking zlib.h presence... yes checking for zlib.h... yes checking whether ODBC has support for Unicode types... yes checking linux/compiler.h usability... no checking linux/compiler.h presence... no checking for linux/compiler.h... no checking for linux/ixjuser.h... no checking for MSG_NOSIGNAL in sys/socket.h... yes checking for SO_NOSIGPIPE in sys/socket.h... no checking for sdl-config... no checking for IMG_Load in -lSDL_image... no checking for sws_getContext in -lavcodec... no checking linux/videodev.h usability... no checking linux/videodev.h presence... no checking for linux/videodev.h... no checking for XOpenDisplay in -lX11... no checking for XOpenDisplay in -lX11... (cached) no checking for /sbin/launchd... no checking for GTK2... no checking for SYSTEMD... no checking for LOG_AUTH in syslog.h... yes checking for LOG_AUTHPRIV in syslog.h... yes checking for LOG_CRON in syslog.h... yes checking for LOG_DAEMON in syslog.h... yes checking for LOG_FTP in syslog.h... yes checking for LOG_KERN in syslog.h... yes checking for LOG_LPR in syslog.h... yes checking for LOG_MAIL in syslog.h... yes checking for LOG_NEWS in syslog.h... yes checking for LOG_SYSLOG in syslog.h... yes checking for LOG_UUCP in syslog.h... yes checking for bridges/bridge_softmix/include/hrirs.h... yes checking for mandatory modules: JANSSON PJPROJECT... ok configure: creating ./config.status config.status: creating build_tools/menuselect-deps config.status: creating makeopts config.status: creating include/asterisk/autoconfig.h checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for GNU make... make checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for size_t... yes checking for working alloca.h... yes checking for alloca... yes checking for asprintf... yes checking for getloadavg... yes checking for setenv... yes checking for strcasestr... yes checking for strndup... yes checking for strnlen... yes checking for strsep... yes checking for unsetenv... yes checking for vasprintf... yes checking for newtBell in -lnewt... yes checking newt.h usability... yes checking newt.h presence... yes checking for newt.h... yes checking for initscr in -lncurses... yes checking ncurses.h usability... yes checking ncurses.h presence... yes checking for ncurses.h... yes checking for keypad in -ltinfo... yes checking for ncurses.h... (cached) yes checking for a sed that does not truncate output... /usr/bin/sed checking for xml2-config... /bin/xml2-config checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for GTK2... no configure: creating ./config.status config.status: creating makeopts config.status: creating autoconfig.h configure: Menuselect build configuration successfully completed .$$$$$$$$$$$$$$$=.. .$7$7.. .7$$7:. .$$:. ,$7.7 .$7. 7$$$$ .$$77 ..$$. $$$$$ .$$$7 ..7$ .?. $$$$$ .?. 7$$$. $.$. .$$$7. $$$$7 .7$$$. .$$$. .777. .$$$$$$77$$$77$$$$$7. $$$, $$$~ .7$$$$$$$$$$$$$7. .$$$. .$$7 .7$$$$$$$7: ?$$$. $$$ ?7$$$$$$$$$$I .$$$7 $$$ .7$$$$$$$$$$$$$$$$ :$$$. $$$ $$$$$$7$$$$$$$$$$$$ .$$$. $$$ $$$ 7$$$7 .$$$ .$$$. $$$$ $$$$7 .$$$. 7$$$7 7$$$$ 7$$$ $$$$$ $$$ $$$$7. $$ (TM) $$$$$$$. .7$$$$$$ $$ $$$$$$$$$$$$7$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$. 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 :

    The next step in the build process is to tell Asterisk PBX, which modules to compile and install, as well as set various compiler options. These settings are all controlled via a menu-driven system called Menuselect. To access the Menuselect system, execute the following command.

    [root@asterisk-pbx asterisk-18.1.0]# make menuselect CC="cc" CXX="g++" LD="" AR="" RANLIB="" CFLAGS="" LDFLAGS="" make -C menuselect CONFIGURE_SILENT="--silent" cmenuselect make[1]: Entering directory '/root/asterisk-18.1.0/menuselect' gcc -g -D_GNU_SOURCE -Wall -DHAVE_NCURSES -I/usr/include/libxml2 -c -o menuselect.o menuselect.c gcc -g -D_GNU_SOURCE -Wall -DHAVE_NCURSES -c -o strcompat.o strcompat.c gcc -g -D_GNU_SOURCE -Wall -DHAVE_NCURSES -c -o menuselect_curses.o menuselect_curses.c gcc -o cmenuselect menuselect.o strcompat.o menuselect_curses.o -lncurses -ltinfo -lxml2 -lz -llzma -lm -ldl make[1]: Leaving directory '/root/asterisk-18.1.0/menuselect' CC="cc" CXX="g++" LD="" AR="" RANLIB="" CFLAGS="" LDFLAGS="" make -C menuselect CONFIGURE_SILENT="--silent" nmenuselect make[1]: Entering directory '/root/asterisk-18.1.0/menuselect' gcc -g -D_GNU_SOURCE -Wall -DHAVE_NCURSES -c -o menuselect_newt.o menuselect_newt.c gcc -o nmenuselect menuselect.o strcompat.o menuselect_newt.o -lnewt -lxml2 -lz -llzma -lm -ldl make[1]: Leaving directory '/root/asterisk-18.1.0/menuselect' CC="cc" CXX="g++" LD="" AR="" RANLIB="" CFLAGS="" LDFLAGS="" make -C menuselect CONFIGURE_SILENT="--silent" gmenuselect make[1]: Entering directory '/root/asterisk-18.1.0/menuselect' make[1]: Nothing to be done for 'gmenuselect'. make[1]: Leaving directory '/root/asterisk-18.1.0/menuselect' make[1]: Entering directory '/root/asterisk-18.1.0' Generating input for menuselect ... CC="cc" CXX="g++" LD="" AR="" RANLIB="" CFLAGS="" LDFLAGS="" make -C menuselect CONFIGURE_SILENT="--silent" menuselect make[2]: Entering directory '/root/asterisk-18.1.0/menuselect' gcc -g -D_GNU_SOURCE -Wall -DHAVE_NCURSES -c -o menuselect_stub.o menuselect_stub.c gcc -o menuselect menuselect.o strcompat.o menuselect_stub.o -lxml2 -lz -llzma -lm -ldl make[2]: Leaving directory '/root/asterisk-18.1.0/menuselect' menuselect/menuselect --check-deps menuselect.makeopts menuselect/menuselect --check-deps menuselect.makeopts menuselect changes saved! make[1]: Leaving directory '/root/asterisk-18.1.0'

    02-install-asterisk-pbx-server-on-centos-8-menuselect

    Select the required addons/modules that you want to install with Asterisk PBX server.

    Compile and build the Asterisk PBX software based on the above configurations.

    [root@asterisk-pbx asterisk-18.1.0]# make ... Building Documentation For: third-party channels pbx apps codecs formats cdr cel bridges funcs tests main res addons +--------- Asterisk Build Complete ---------+ + Asterisk has successfully been built, and + + can be installed by running: + + + + make install + +-------------------------------------------+

    Install the Asterisk PBX software on your Linux server.

    [root@asterisk-pbx asterisk-18.1.0]# make install ... +---- Asterisk Installation Complete -------+ + + + YOU MUST READ THE SECURITY DOCUMENT + + + + Asterisk has successfully been installed. + + If you would like to install the sample + + configuration files (overwriting any + + existing config files), run: + + + + For generic reference documentation: + + make samples + + + + For a sample basic PBX: + + make basic-pbx + + + + + +----------------- or ---------------------+ + + + You can go ahead and install the asterisk + + program documentation now or later run: + + + + make progdocs + + + + **Note** This requires that you have + + doxygen installed on your local system + +-------------------------------------------+

    Install Asterisk PBX sample configuration files.

    [root@asterisk-pbx asterisk-18.1.0]# make samples ... Updating asterisk.conf /usr/bin/install -c -d "/var/spool/asterisk/voicemail/default/1234/INBOX" build_tools/make_sample_voicemail "//var/lib/asterisk" "//var/spool/asterisk" Installing file phoneprov/000000000000.cfg Installing file phoneprov/000000000000-directory.xml Installing file phoneprov/000000000000-phone.cfg Installing file phoneprov/polycom_line.xml Installing file phoneprov/polycom.xml Installing file phoneprov/snom-mac.xml

    Install Asterisk sample files to configure basic PBX.

    [root@asterisk-pbx asterisk-18.1.0]# make basic-pbx Installing basic-pbx config files... Installing file configs/basic-pbx/asterisk.conf Installing file configs/basic-pbx/cdr.conf Installing file configs/basic-pbx/cdr_custom.conf Installing file configs/basic-pbx/confbridge.conf Installing file configs/basic-pbx/extensions.conf Installing file configs/basic-pbx/indications.conf Installing file configs/basic-pbx/logger.conf Installing file configs/basic-pbx/modules.conf Installing file configs/basic-pbx/musiconhold.conf Installing file configs/basic-pbx/pjsip.conf Config file configs/basic-pbx/pjsip_notify.conf is unchanged Installing file configs/basic-pbx/queues.conf Installing file configs/basic-pbx/README Installing file configs/basic-pbx/voicemail.conf Updating asterisk.conf

     

    Create OS User for Asterisk PBX:

    Create OS user and group to own Asterisk PBX software directory.

    [root@asterisk-pbx asterisk-18.1.0]# groupadd asterisk [root@asterisk-pbx asterisk-18.1.0]# useradd -r -d /var/lib/asterisk -g asterisk asterisk [root@asterisk-pbx asterisk-18.1.0]# usermod -aG audio,dialout asterisk

    Change owner to asterisk user of following directories.

    [root@asterisk-pbx asterisk-18.1.0]# chown -R asterisk.asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk

    Edit following configuration file by using vim text editor.

    [root@asterisk-pbx asterisk-18.1.0]# vi /etc/sysconfig/asterisk

    And add following configurations therein to set default user for Asterisk PBX.

    AST_USER="asterisk" AST_GROUP="asterisk"

    Edit asterisk.conf file in vim text editor.

    [root@asterisk-pbx asterisk-18.1.0]# vi /etc/asterisk/asterisk.conf

    And add following directives to set default user to own Asterisk PBX processes.

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

    Enable and start Asterisk PBX service.

    [root@asterisk-pbx ~]# systemctl enable --now asterisk

    Check the status of asterisk.service.

    [root@asterisk-pbx ~]# systemctl status asterisk.service â asterisk.service - LSB: Asterisk PBX Loaded: loaded (/etc/rc.d/init.d/asterisk; generated) Active: active (running) since Thu 2020-11-26 19:30:25 PKT; 13s ago Docs: man:systemd-sysv-generator(8) Process: 1806 ExecStop=/etc/rc.d/init.d/asterisk stop (code=exited, status=0/> Process: 1832 ExecStart=/etc/rc.d/init.d/asterisk start (code=exited, status=> Main PID: 1863 Tasks: 2 (limit: 5879) Memory: 18.1M CGroup: /system.slice/asterisk.service ââ1861 /bin/sh /usr/sbin/safe_asterisk ââ1892 sleep 4 Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: asterisk.service: Killin> Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: asterisk.service: Killin> Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: Stopped LSB: Asterisk PB> Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: asterisk.service: Found > Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: This usually indicates u> Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: Starting LSB: Asterisk P> Nov 26 19:30:25 asterisk-pbx.centlinux.com asterisk[1832]: Starting asterisk: Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: asterisk.service: Can't > Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: asterisk.service: Superv> Nov 26 19:30:25 asterisk-pbx.centlinux.com systemd[1]: Started LSB: Asterisk PB>

     

    Accessing Asterisk CLI:

    Connect to Asterisk CLI by using following command.

    [root@asterisk-pbx ~]# asterisk -r Asterisk 18.1.0, Copyright (C) 1999 - 2018, Digium, Inc. 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 18.1.0 currently running on asterisk-pbx (pid = 2350) asterisk-pbx*CLI>

    Let's execute some common commands on Asterisk CLI.

    asterisk-pbx*CLI> core show channels Channel Location State Application(Data) 0 active channels 0 active calls 0 calls processed asterisk-pbx*CLI> core show uptime System uptime: 1 hour, 29 minutes, 59 seconds Last reload: 1 hour, 29 minutes, 59 seconds asterisk-pbx*CLI> quit Asterisk cleanly ending (0). Executing last minute cleanups

    Asterisk PBX server has been installed on Linux server and working fine.

     

    Conclusion:

    In this guide, you have learned how to install Asterisk PBX server on CentOS 8. To configure Asterisk as a PBX for your corporate environment, you might read Asterisk: The Definitive Guide: Open Source Telephony for the Enterprise by O'Reilly Media.

    No comments:

    Post a comment