Instalando FreePBX 13 com Asterisk 13 no CentOS 7



O FreePBX é uma das opções para gerenciar o moderno mecanismo de telefonia IP - Asterisk. Por mais que os integradores não gostem dessa "superestrutura", certamente é o líder das instalações de PBX IP.

Desativando o SELINUX

vim /etc/sysconfig/selinux

Substitua SELINUX=enforcing

para

SELINUX=disabled

Configurando Dependências

root@asteriskhelp# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

root@asteriskhelp# yum install -y kernel-devel kernel-headers

root@asteriskhelp# yum install -y e2fsprogs-devel keyutils-libs-devel krb5-devel libogg \
libselinux-devel libsepol-devel libxml2-devel libtiff-devel gmp php-pear \ 
php-gd php-mysql php-pdo php mbstring ncurses-devel \ 
mysql-connector-odbc unixODBC unixODBC-devel \ 
audiofile-devel libogg-devel openssl-devel zlib-devel \ 
perl-DateManip sox git wget net-ferramentas psmisc \ 
yum instalar -y gcc gcc-c ++ fazer gnutls-devel \ 
libxml2-devel ncurses-devel subversion doxygen \ 
texinfo curl-devel net-snmp-devel néon-devel \ 
uuid-devel libuuid-devel sqlite-devel sqlite \ 
speex-devel gsm-devel libtool libtool-ltdl libtool-ltdl-devel \ 
libsrtp libsrtp-devel xmlstarlet

Fazendo as atualizações do sistema

root@asteriskhelp# yum install update -y

Reinicie o servidor

root@asteriskhelp# reboot

Instalando o mysql (mariadb)

root@asteriskhelp# yum -y instala mariadb-server mariadb mariadb-devel

Habilitando mariadb na inicialização do sistema

root@asteriskhelp# systemctl enable mariadb.service

Iniciando o mariadb

root@asteriskhelp# systemctl start mariadb.service

Iniciando o configurador do Mysql

root@asteriskhelp# mysql_secure_installation
Set root password? [Y/n] y 
New password:
Re-enter new password:
Password updated successfully! 
Reloading privilege tables.. 
 ... Success!
 

By default, a MariaDB installation has an anonymous user, allowing anyone 
to log into MariaDB without having to have a user account created for 
them.  This is intended only for testing, and to make the installation 
go a bit smoother.  You should remove them before moving into a 
production environment. 

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from "localhost".  This 
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n 
... skipping.

By default, MariaDB comes with a database named "test" that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done!  If you"ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Instalando o PJProject
root@asteriskhelp# cd /usr/src

root@asteriskhelp# git clone https://github.com/asterisk/pjproject pjproject

root@asteriskhelp# cd pjproject/

root@asteriskhelp# sudo ./configure --libdir=/usr/lib64 --prefix=/usr \ 
--enable-shared --disable-sound --disable-resample --disable-video

root@asteriskhelp# sudo make dep

root@asteriskhelp# sudo make

root@asteriskhelp# sudo make install

root@asteriskhelp# sudo ldconfig


Instalando o libjansson
root@asteriskhelp#  cd /usr/src

root@asteriskhelp#  wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz

root@asteriskhelp#  tar xzf jansson-2.5.tar.gz

root@asteriskhelp#  cd jansson-2.5

root@asteriskhelp#  sudo ./configure --prefix=/usr/

root@asteriskhelp#  sudo make clean

root@asteriskhelp#  sudo make

root@asteriskhelp#  sudo make install

root@asteriskhelp#  sudo ldconfig


Lame - para codificação de áudio para o formato MP3
root@asteriskhelp# cd /usr/src

root@asteriskhelp# wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz

root@asteriskhelp# tar zxvf lame-*.gz

root@asteriskhelp# cd lame-*

root@asteriskhelp# sudo ./configure

root@asteriskhelp# sudo make

root@asteriskhelp# sudo make install


Instalando DAHDI
root@asteriskhelp# cd /usr/src

root@asteriskhelp# wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/ \ 
dahdi-linux-complete-current.tar.gz

root@asteriskhelp# tar xzf dahdi-linux-complete-current.tar.gz

root@asteriskhelp# cd dahdi-linux-complete-*

root@asteriskhelp# sudo make all

root@asteriskhelp# sudo make install

root@asteriskhelp# sudo make config


Instalando LIBPRI
root@asteriskhelp# cd /usr/src

root@asteriskhelp# wget https://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

root@asteriskhelp# tar xzf libpri-*.tar.gz

root@asteriskhelp# cd /usr/src/libpri-*

root@asteriskhelp# sudo make

root@asteriskhelp# sudo make install


Instalando Asterisk 13
root@asteriskhelp# cd /usr/src

root@asteriskhelp# wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

root@asteriskhelp# tar xvfz asterisk-13*.tar.gz

root@asteriskhelp# cd asterisk-13.*

root@asteriskhelp# sudo ./contrib/scripts/install_prereq install

root@asteriskhelp# sudo ./configure --libdir=/usr/lib64

root@asteriskhelp# sudo contrib/scripts/get_mp3_source.sh

root@asteriskhelp# sudo make menuselect


Depois de inserir o comando make menuselect, será solicitado a selecionar os módulos a serem instalados. A maioria os módulos necessários são selecionados automaticamente. Para suporte a mp3, inclua o módulo "format_mp3"
--->  Add-ons (See README-addons.txt)
             --- extended ---
             XXX chan_mobile
             [*] chan_ooh323
             [*] format_mp3
             [*] res_config_mysql
             --- deprecated ---
             [*] app_mysql
             [*] app_saycountpl
             [*] cdr_mysql

  ---> Core Sound Packages
            [*] CORE-SOUNDS-RU-GSM
  ---> Extras Sound Packages
            [*] EXTRA-SOUNDS-EN-GSM 
root@asteriskhelp# make && make install && make config && ldconfig

Instalar o asterisk a partir do usuario asterisk

No arquivo /usr/sbin/safe_asterisk nós substituímos as linhas:

ASTARGS="" para ASTARGS="-U asterisk"

Crie um usuário do Asterisk e defina as permissões do usuário.

root@asteriskhelp# useradd -m asterisk

Definir as permissões de pasta necessárias para o usuário asterisk
root@asteriskhelp# chown asterisk.asterisk /var/run/asterisk

root@asteriskhelp# chown -R asterisk.asterisk /etc/asterisk

root@asteriskhelp# chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk

root@asteriskhelp# chown -R asterisk.asterisk /usr/lib64/asterisk


Configurar o servidor web httpd (Apache)

No arquivo de configuração do servidor web /etc/httpd/conf/httpd.conf

Nós especificamos o usuário asterisk nas diretivas Usuário e Grupo:
root@asteriskhelp# user  asterisk 
root@asteriskhelp# group asterisk
Especifique todas as diretivas para substituir as configurações do arquivo .htaccess

No arquivo de configuração do servidor web /etc/httpd/conf/httpd.conf

Alterar o AllowOverride None para AllowOverride All

Configurando o php
No arquivo /etc/php.ini
Defina as diretivas no próximo. valores:
date.timezone = America/Sao_Paulo
upload_max_filesize = 120 milhões

Reinicie o apache
root@asteriskhelp# systemctl restart httpd

root@asteriskhelp# systemctl enable httpd

Instalando FreePBX
root@asteriskhelp# cd /usr/src

root@asteriskhelp# wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz

root@asteriskhelp# tar xzf freepbx-13.0-latest.tgz

root@asteriskhelp# cd freepbx

root@asteriskhelp# sudo ./start_asterisk start

NOTA:
Alterar as configurações de conexão do banco de dados

No arquivo installlib/installcommand.class.php, um array $settings está configurado, a chave dbpass, que é um array, e neste array para a chave padrão, configure o valor da sua senha atual para o usuário root se conectar ao banco de dados:

"dbpass" => array (
"default" => "* senha para o banco de dados *",
"description" => "Senha do banco de dados"

root@asteriskhelp# ./install -n


Pronto, seu PBX IP esté pronto, conecte-se ao FreePBX.

http://IP_FreePBX/admin

FreePBX & Magnus Billing - trunk IAX (Peer to Peer)


As configurações a seguir é para auxiliar na configuração entre dois servidores asterisk, usando o protocolo IAX com FreePBX e o Magnus Billing, neste não é o foco regras de segurança de servidores linux e nem asterisk.


Neste laboratório usa-se dois servidores:

Servidor A
  • CentOS 7
  • FreePBX 13

Servidor B
  • CentOS 7
  • Magnus Billing 6

Vamos iniciar as configurações pelo FreePBX.

No Caminho: Connectivity => Trunk

Siga as instruções a seguir.

confs:
Trunk Name: Trunk_integra

PEER Details: deny=all
              allow=g729&alaw
              type=friend
              host=ip_do_MagnusBilling
              qualify=yes
              context=fron-internal
Checando o status de registro com o Magnus Billing:


A conexão com o tarifador já está estabelecida, agora precisamos fazer as configurações no magnus.

No magnus, vamos no caminho: Rotas => Provedor

Siga as instruções:


A seguir vamos criar o trunk e associá-lo ao provedor.

Caminho: Rotas => Troncos

Checando o status de registro com o FreePBX:



Adicione as regras basicas em seu iptables, liberando o protocolo IAX para os servidores autorizados.

MBilling:
iptables -A INPUT -s  IP_FreePBX/32 -p udp -m udp --dport 4569 -m comment --comment "Interligacao FreePBX" -j ACCEPT

FreePBX:
iptables -A INPUT -s  IP_MBilling/32 -p udp -m udp --dport 4569 -m comment --comment "Interligacao FreePBX" -j ACCEPT

Pronto, desta forma a comunicação entre os dois servidores asterisk está transparente.

Instalando FreePBX 13 com Asterisk 13 no Debian 9 Stretch!

Quando acabarmos com este artigo usamos as seguintes tecnologias:
- Debian 9.0;
- Asterisco 13;
- FreePBX 13;
- MariaDB 10.1;
- PHP 5.6.


Por que essa solução é usando o MariaDB, e não o MySQL, é que para facilitar a vida dos iniciantes vamos fazer uso do MariaDB, abordando a maneira correta de preparar este SGBD para o projeto FreePBX. Para a instalação, vamos utilizar um o CD minimal install do sistema Debian 9.0 é os pacotes já instalados MariaDB, PHP 7.0, Servidor OpenSSH padrão para o Debian 9 Stretch. Vamos aproveitar e configurar o parâmetro "PermitRootLogin without-password", ele desabilita a autorização do root usar o SSH. Acho isso desconfortável para máquinas de teste em uma rede local, então eu ligo novamente. Todos os comandos são executados a partir do root.

1 - Preparação do Sistema:

1vim /etc/ssh/sshd_config

2systemctl restart sshd.service

Quando terminar de fazer toda a configuração, você deve vir novamente a este ponto e desabilitar está permissão. Pois seu servidor ficara permitindo que o root se conecte nele e isto é uma quebra de segurança.

usando uma ferramenta de SSH (sugerimos o MobaXterm) faça:

1ssh root@192.168.15.99

Claro substitua o nosso ip pelo ip do seu servidor. 

Atualize os pacotes do sistema e o sistema.


1apt-get update && apt-get upgrade -y

2 - Instale os pacotes necessários:

1apt-get install -y build-essential linux-headers-`uname -r`

apt-get install -y openssh-server apache2 bison flex libmariadb-dev
apt-get install -y libmariadbclient-dev mariadb-server mariadb-client

apt-get install -y php-pear curl sox php7.0 php7.0-mysql php7.0-mcrypt

apt-get install -y php7.0-curl php7.0-gd libapache2-mod-php7.0 php7.0-mbstring

apt-get install -y php7.0-xml libncurses5-dev libssl-dev mpg123 libpng-dev

apt-get install -y libxml2-dev libxml2 libcurl3 libnewt-dev sqlite3 libsqlite3-dev
apt-get install -y pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev
apt-get install -y libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev
apt-get install -y libical-dev libneon27-dev libsrtp0-dev libspandsp-dev
apt-get install -y sudo vim subversion libgmime-2.6-0 libgmime-2.6-dev


Durante a instalação, o sistema solicitará uma senha para o usuário root do MariaDB. Aconselhamos que você crie uma senha complexa e anote-a. Para uso meramente acadêmico vamos usar aqui myPass@2018.




3 - Reinicie o sistema:


1reboot

4 - Substitua o PHP7.0 pelo PHP5.6:


1vim /etc/apt/sources.list 

Vamos adicionar os repositórios. Coloque no final do arquivo sources.list.


1# Repositorios de Jessie
2deb http://ftp.debian.org/debian/ jessie main contrib non-free
3deb-src http://ftp.debian.org/debian/ jessie main contrib non-free
4deb http://security.debian.org/ jessie/updates main contrib non-free

5deb-src http://security.debian.org/ jessie/updates main contrib non-free

Vamos configurar as preferências do apt e apt-get, para usar dois repositórios. Adicione o seguinte ao arquivo /etc/apt/preferences.d/jessie:



1Package: *
2Pin: release n=stretch
3Pin-Priority: 900
4
5Package: *
6Pin: release n=jessie

7Pin-Priority: 100

Atualize as novas configurações.

1apt update

Instalar o PHP5.6.


1apt install php5 php5-pgsql php5-gd php5-curl php5-cli apache2


5 - Defina as dependências necessárias para o Google Voice:


1pear install Console_Getopt

1cd /usr/src
3cd iksemel
4./configure
5make
6make install
7ldconfig

6 - Faça o download dos pacotes necessários Dahdi, Libpri, Asterisk 13, Jansson, PJproject:


7 - Descompacte e instale o Dahdi, Libpri:


01cd /usr/src/

02tar xvfz dahdi-linux-complete-current.tar.gz

03cd dahdi-linux-complete-*

04make all

05make install

06make config

07cd /usr/src/
08tar xvfz libpri-current.tar.gz
09cd libpri-*
10make
11make install

8 - Descompacte e instale o Pjproject:


1cd /usr/src

2tar -xjvf pjproject-2.6.tar.bz2

3cd pjproject-2.6

4CFLAGS='-DPJ_HAS_IPV6=1' ./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr

5make dep

6make

7make install

9 - Descompacte e instale o Jansson:


1cd /usr/src

2tar vxfz jansson.tar.gz

3cd jansson-*

4autoreconf -i

5./configure

6make

7make install

10 - Descompacte e instale o Asterisk 13:

1cd /usr/src/
2tar xvfz asterisk-13-current.tar.gz
3cd asterisk-*
4./contrib/scripts/get_mp3_source.sh
5./contrib/scripts/install_prereq install

Na janela que se abre, você deve fornecer o código do país, nosso caso, Brasil é 55.



6./contrib/scripts/install_prereq install-unpackaged
7./configure
8make menuselect

Também é necessário selecionar os módulos format_mp3 e aqueles que você pode precisar no futuro, as imagens é para que você tenha uma ideia do que julgamos necessários.

















Depois que os módulos forem selecionados, clique em Salvar e Sair e continue a instalação:

1make
2make install
3make config
4ldconfig

5update-rc.d -f asterisk remove


11 - Baixe e instale arquivos de som para o Asterisk 13:


1cd /var/lib/asterisk/sounds/

2mkdir br

3cd br

4wget -O core.zip https://www.asterisksounds.org/pt-br/download/asterisk-sounds-core-pt-BR-sln16.zip

5

6789
wget -O extra.zip https://www.asterisksounds.org/pt-br/download/asterisk-sounds-extra-pt-BR-sln16.zip

unzip core.zip
unzip extra.zip
chown -R asterisk.asterisk /var/lib/asterisk/sounds/br
find /var/lib/asterisk/sounds/br -type d -exec chmod 0775 {} \;


12 - Convertendo arquivos de som para outros formatos:

1cd /var/lib/asterisk/sounds/br/

2vim astconvert.sh

#!/bin/bash
for a in $(find . -name '*.sln16'); do
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t gsm -r 8k `echo $a|sed "s/.sln16/.gsm/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e a-law `echo $a|sed "s/.sln16/.alaw/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e mu-law `echo $a|sed "s/.sln16/.ulaw/"`;\
done
1chmod a+x astconvert.sh

2./astconvert.sh

Para ativar os sons utilizando FreePBX, basta alterar o parâmetro da variável language dentro de Asterisk SIP Settings. Neste caso, colocando es. Se existirem ramais ou linhas IAX2, será necessário configurar no parâmetro language acessando o menu Asterisk IAX Settings.

Cada canal de Asterisk tem sua configuração de língua. O valor inserido na configuração é dividido por cada underline para construir a rota onde Asterisk buscará os sons. Assim, Asterisk utilizará o primeiro arquivo que encontre.

Isso quer dizer que se o valor do parâmetro language for es_AR_Maria, Asterisk buscará os arquivos em:


.../sounds/pt_br_Maria
.../sounds/pt_br 
.../sounds/pt
.../sounds
Isso faz com que seja possível acrescentar novas variantes de uma língua baseadas em um esquema geral.

13 - Vamos iniciar a instalação do FreePBX 13:

Para fazer isso, crie um usuário e defina permissões nas pastas:

1adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
2usermod -a -G dialout,audio asterisk

01chown -R asterisk:asterisk /var/lib/asterisk &&
02chown -R asterisk:asterisk /var/log/asterisk &&
03chown -R asterisk:asterisk /var/run/asterisk &&
04chown -R asterisk:asterisk /var/spool/asterisk &&
05chown -R asterisk:asterisk /usr/lib/asterisk &&
06chown -R asterisk:asterisk /etc/asterisk &&
07chmod -R u=rwX,g=rX,o= /var/lib/asterisk &&
08chmod -R u=rwX,g=rX,o= /var/log/asterisk &&
09chmod -R u=rwX,g=rX,o= /var/run/asterisk &&
10chmod -R u=rwX,g=rX,o= /var/spool/asterisk &&
11chmod -R u=rwX,g=rX,o= /usr/lib/asterisk &&
12chmod -R u=rwX,g=rX,o= /etc/asterisk

14 - Vamos modificar o Apache 2 para trabalhos futuros com o FreePBX 13:


1sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini

2cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig

3sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf

4sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

5service apache2 restart

15 - Configure o ODBC:


1cat >> /etc/odbcinst.ini << EOF

2[MySQL]

3Description = ODBC for MySQL

4Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

5Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so

6FileUsage = 1

7   

8EOF

Edite ou crie o arquivo /etc/odbc.ini e configure:


01cat >> /etc/odbc.ini << EOF

02[MySQL-asteriskcdrdb]

03Description=MySQL connection to 'asteriskcdrdb' database

04driver=MySQL

05server=localhost

06database=asteriskcdrdb

07Port=3306

08Socket=/var/run/mysqld/mysqld.sock

09option=3
10   
11EOF


16 - Configure o banco de dados MariaDB:


Lembrando que a senha que informamos na instalação do MariaDB foi myPass@2018. Então iremos informar como usuário root e o password myPass@2018.



1mysqladmin -uroot -pmyPass@2018 create asterisk

2mysqladmin -uroot -pmyPass@2018 create asteriskcdrdb

3mysql -uroot -pmyPass@2018 -e "GRANT ALL PRIVILEGES ON asterisk.* TO root@localhost IDENTIFIED BY 'myPass@2018';"

4mysql -uroot -pmyPass@2018 -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO root@localhost IDENTIFIED BY 'myPass@2018';"

5mysql -uroot -pmyPass@2018 -e "FLUSH PRIVILEGES;"



17 - O estágio final. Baixe e instale o FreePBX 13:


O motivo de estarmos utilizando o FreePBX 13 é para poder usar o AstSBC 13, para conseguir o pacote visite o site do projeto.




Durante a fase de instalação, você deve especificar dbuser e dbpass, que você inseriu na etapa 16.

1cd /usr/src
3tar vxfz freepbx-13.0-latest.tgz
4cd freepbx
5./start_asterisk start
6./install -n --dbuser=root --dbpass=myPass@2018

A instalação está concluída e agora você precisa ir para o endereço http://YOUR_IP/admin e configurar o administrador, especificando o login e a senha.


Isso conclui a instalação, você pode prosseguir com a configuração. Se houver erros ou inconsistências no artigo, ficaremos gratos se você nos escrever sobre eles nos comentários.



O objetivo é criar um instalador automatizando assim este artigo.