Asterisk Freepbx on Debian (Debian v9, Asterisk v14, Freepbx v14)

Debian

This guide covers the installation of Asterisk v13 and v14 and Freepbx v14 GUI from source on Debian v9. 

 

Tested on

Debian v9 (Stretch) x64
Asterisk v13 and v14
Freepbx v14

Assumptions

Console text mode (multi-user.target)
Installation done as root user (#)

Prerequisites

Install php 5.6 repository and update

apt install -y curl apt-transport-https
curl https://packages.sury.org/php/apt.gpg | apt-key add -
echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
apt update && apt upgrade -y

Install dependencies

apt install -y build-essential aptitude openssh-server apache2 mariadb-server mariadb-client bison doxygen flex php-pear php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-mbstring php5.6-gd php5.6-xml curl sox libncurses5-dev libssl-dev libmariadbclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool-bin autoconf git subversion uuid uuid-dev libiksemel-dev libjansson-dev tftpd postfix mailutils nano ntp libspandsp-dev libcurl4-openssl-dev libical-dev libneon27-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libsrtp0-dev unixodbc unixodbc-dev python-dev xinetd e2fsprogs dbus sudo xmlstarlet mongodb linux-headers* 

Install nodejs

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt install -y nodejs

Install libmaodbc

cd /usr/src
wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.0.2/\
mariadb-connector-odbc-3.0.2-ga-debian-x86_64.tar.gz
tar -zxvf mariadb-connector-odbc-3.0.2*.tar.gz
cp mariadb-connector-odbc-3.0.2*/lib/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/

Create /etc/odbcinst.ini

cat >> /etc/odbcinst.ini << EOF
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1
  
EOF

Create /etc/odbc.ini

cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
driver = MySQL
server = localhost
database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
option = 3
  
EOF

Set Timezone

Using tzselect is one way to find the correct timezone.

tzselect
## SET TIMEZONE EXAMPLE
timedatectl set-timezone America/Vancouver
​timedatectl status

Install

DAHDI

Only required if using a physical server and installing telecom hardware.  At this time, versions newer than 2.10.2 (2.11.0 and 2.11.1) do not install correctly.

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.10.2+2.10.2.tar.gz
tar zxvf dahdi-linux-complete-2.10*
cd /usr/src/dahdi-linux-complete-2.10*/
make all && make install && make config
systemctl restart dahdi

If make all fails try reboot and run apt install linux-headers*

Asterisk

To install Asterisk v14, set VERSION=14 .  To switch versions, it is best to run  rm -rf /usr/lib/asterisk/modules first.

# Select Asterisk VERSION=14 or
VERSION=13
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-${VERSION}-current.tar.gz
tar zxvf asterisk-${VERSION}-current.tar.gz
cd /usr/src/asterisk-${VERSION}*/
make distclean

Install additional dependencies

cd /usr/src/asterisk-${VERSION}*/
./contrib/scripts/install_prereq install

Configure

cd /usr/src/asterisk-${VERSION}*/
./configure --with-pjproject-bundled

To verify type nano -v config.log.

Set compile options

cd /usr/src/asterisk-${VERSION}*/
make menuselect

# Select additional compile options or leave at default and save.
# To add more compile options afterwards just run make menuselect again and compile/install again.

Create Asterisk User, compile, install and set preliminary ownership.

adduser asterisk --disabled-password --gecos "Asterisk User"
make && make install && chown -R asterisk. /var/lib/asterisk

Freepbx

cd /usr/src
git clone -b release/14.0 --single-branch https://github.com/freepbx/framework.git freepbx
cd /usr/src/freepbx
./start_asterisk start

./install -n
# Minimal module install
fwconsole ma upgrade framework core voicemail sipsettings infoservices \
featurecodeadmin logfiles callrecording cdr dashboard music conferences
fwconsole chown
fwconsole reload

Optionally, install all modules (not recommended).  You will most likely need to run the following commands twice.

fwconsole ma installall
fwconsole chown
fwconsole reload

Set Freepbx to start on boot

nano /etc/systemd/system/freepbx.service
​[Unit]
Description=Freepbx
After=mariadb.service
 
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start
ExecStop=/usr/sbin/fwconsole stop
 
[Install]
WantedBy=multi-user.target

Now enable it.

systemctl enable freepbx

Configure Apache

Add AllowOverride All to web directory so that .htaccess is active.

cat >> /etc/apache2/conf-available/allowoverride.conf << EOF 
<Directory /var/www/html>
    AllowOverride All
    </Directory>
EOF
a2enconf allowoverride

Change default apache user/group, disable index.html, enable rewrite module

sed -i 's/\(APACHE_RUN_USER=\)\(.*\)/\1asterisk/g' /etc/apache2/envvars
sed -i 's/\(APACHE_RUN_GROUP=\)\(.*\)/\1asterisk/g' /etc/apache2/envvars
chown asterisk. /run/lock/apache2
mv /var/www/html/index.html /var/www/html/index.html.disable
a2enmod rewrite
systemctl restart apache2

Reboot and access GUI

reboot

You should now be able to access the Freepbx GUI at http://yourserverIP

Post-install tasks are mandatory.

Post-install tasks

Lock down the database server.

mysql_secure_installation

Answer Y to everything.

Log File Rotation

If this is not done the log files will keep growing indefinitely.

nano /etc/logrotate.d/asterisk
/var/spool/mail/asterisk
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/fail2ban
/var/log/asterisk/freepbx.log
/var/log/asterisk/freepbx_security.log 
/var/log/asterisk/freepbx_debug {
        weekly
        missingok
        rotate 4
        #compress
        notifempty
        sharedscripts
        create 0640 asterisk asterisk
        postrotate
        /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null || true
        endscript
        su root root
}

Test ODBC driver

odbcinst -s -q

Use username & password in /etc/asterisk/res_odbc_additional.conf to test connectivity to the DB via ODBC. 

isql -v MySQL-asteriskcdrdb someusername somepassword

Test asterisk ODBC access

asterisk -vvvr
CLI> odbc show

TFTP

If you plan to use hardware SIP phones you will probably want to enable the tftp server.

Create tftp configuration file.

nano /etc/xinetd.d/tftp
service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /tftpboot
disable         = no
}

Make the directory and restart the daemon to start tftp.

mkdir /tftpboot
chmod 777 /tftpboot
systemctl restart xinetd

Misc. settings

Set php upload_max_filesize = 20M to allow larger music on hold files.

sed -i 's/upload_max_filesize = .*/upload_max_filesize = 20M/g' /etc/php/5.6/apache2/php.ini
systemctl restart apache2
Sections: