Asterisk, FreePBX e CentOS v7 tudo que você queria!


Bom o foco blog é mostrar o mundo GUI do FreePBX e o AsteriskNow. Não gosto muito de estradas mal sinalizadas, por isto hoje vamos mostrar como instalar na unha, e passo a passo o Asterisk v14, FreePBX v14 e o CentOS v7. Este post tem como base o material do Eduardo Azevedo (@dudutecinf ). Vamos colocar a mão na massa!

NOTA: Testado em CentOS v7 x64, Asterisk v13 e 14 standart e FreePBX v14. Premissas, instalação feita com o usário root (#) toda em modo texto (multi-user.target).

Pré requisitos, vamos assegure uma instalação básica do servidor com dependências iniciais para começar.

Dependências:
# yum -y update && yum -y groupinstall core && yum -y groupinstall base && yum -y install epel-release

# yum -y install automake gcc gcc-c++ ncurses-devel openssl-devel libxml2-devel unixODBC-devel libcurl-devel libogg-devel libvorbis-devel speex-devel spandsp-devel freetds-devel net-snmp-devel iksemel-devel corosynclib-devel newt-devel popt-devel libtool-ltdl-devel lua-devel sqlite-devel radiusclient-ng-devel portaudio-devel neon-devel libical-devel openldap-devel gmime-devel mysql-devel bluez-libs-devel jack-audio-connection-kit-devel gsm-devel libedit-devel libuuid-devel jansson-devel libsrtp-devel git subversion libxslt-devel kernel-devel audiofile-devel gtk2-devel libtiff-devel libtermcap-devel ilbc-devel python-devel bison tftp-server httpd sox tzdata mysql-connector-odbc mariadb mariadb-server fail2ban jwhois xmlstarlet ghostscript libtiff-tools patch e2fsprogs mpg123 lame gstreamer mongodb-server

Node.js:
# curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
# yum -y install nodejs

ODBC:
# cat >> /etc/odbc.ini << EOF
[MySQL-asteriskcdrdb]
Description = MariaDB connection to 'asteriskcdrdb' database
driver = MySQL
server = localhost
database = asteriskcdrdb
Port = 3306
Socket = /var/lib/mysql/mysql.sock
option = 3
Charset=utf8

EOF

PHP, vamos instalar o repositório e substituir os pacotes existentes do PHP.
# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
# yum -y install yum-plugin-replace
# yum replace --replace-with php56u php

Instalando o PHP v5.6:
# yum -y install php56u php56u-mysqlnd php56u-process php56u-pear php56u-mbstring php56u-xml php56u-gd php56u-curl

Perfumarias:
# yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

# yum install ffmpeg

Configurando o Timezone:
## Procurando seu Timezone
tzselect

## Exemplo de configurar o Timezone
# timedatectl set-timezone America/Sao_Paulo

# timedatectl status

Vamos instalar o DAHDI:

Nota: Mesmo que não esteja usando um servidor físico e não tenha uma placa de comutação faça a instalação do DAHDI pois vamos usar o Timing dele para transferências, salas de conferencias e para trunks IAX2. No momento da edição deste post, as versões mais recentes do que 2.10.2 (2.11.0 e 2.11.1) não estão sendo instaladas corretamente. Caso queira fazer um teste é por sua conta e risco.

# 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

Se ocorrer durante o MAKE ALL falhas, faça um reboot em seu sistema operacional e execute a instalação do "linux-headers". 

# yum install kernel-devel

Instalando o Asterisk:

Nota:  Para instalar o Asterisk v14, vamos definir "VERSION=14". Caso você tenha outra versão no servidor que está utilizando este post, é melhor primeiro você executar: 

# rm -rf /usr/lib64/asterisk/modules

Com isto evitaremos conflitos de versões dos módulos. Então lembre-se de selecionar versão 13 (VERSION=13) ou 14 (VERSION=14).


# 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

Instalando as dependências adicionais:

Nota: Usando install_prereq. O script install_prereq está incluído em todas as versões do Asterisk no subdiretório contrib/scripts. O script possui as seguintes opções:
*test - imprime apenas as bibliotecas a serem instaladas.

*install - instala apenas dependências de pacotes. Dependendo da sua distribuição de Linux, versão do Asterisk e recursos que você deseja usar, isso pode ser suficiente.

*install-unpacakged - instala dependências que não possuem pacotes, mas que tenham apenas tarballs. Você pode precisar dessas dependências para determinados recursos no Asterisk. 

Você sempre deve usar as ferramentas de gerenciamento de pacotes do seu sistema operacional para garantir que seu sistema esteja executando o software mais recente antes de executar o install_prereq. O pacote libsnmp-dev do Ubuntu 14 em diante, por exemplo, tem um problema em que tentará remover pacotes críticos do sistema se o sistema não for atualizado antes de tentar fazer uso deste script.


# cd /usr/src/asterisk-${VERSION}*/
# yum -y update
# yum -y upgrade
# ./contrib/scripts/install_prereq install
# ./install_prereq install-unpackaged


Configurando a instalação do Asterisk:
# cd /usr/src/asterisk-${VERSION}*/
# ./configure --libdir=/usr/lib64 --with-pjproject-bundled

Nota: para fazer uma analise sobre o comando e os modulos que foram habilitados e os que não foram e o porque execute:
# vim config.log

Definir as opções de compilação:
# cd /usr/src/asterisk-${VERSION}*/
# make menuselect

Nota: Selecione as opções de compilação adicionais ou deixe no padrão, saia e salve. Para adicionar/alterar opções de compilação, após instalado o Asterisk, basta realizar os procedimentos, make menuselect e depois make && make install novamente. 

Criando o usuário para o Asterisk, compilando, instalando e definindo a propriedade preliminar.
# adduser asterisk -s /sbin/nologin -c "Asterisk User"
# make && make install && chown -R asterisk. /var/lib/asterisk

Instalando o FreePBX:
# systemctl restart mariadb
# 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

Se você receber um erro de versão, é porque não foi possível determinar o Asterisk, faça o seguinte:

# Substitua a linha 266 do freepbx/installlib/installcommand.class.php para ficar como a seguir

$lastline = exec("runuser" . $answers['user'] . ' -s /bin/bash -c "cd ~/ && asterisk -rx \'core show version\' | grep ^Asterisk 2>&1"', $tmpout, $ret);

Execute reboot no seu servidor e execute novamente os seguintes procedimentos:
# cd /usr/src/freepbx
# ./start_asterisk start

# ./install -n

Instalação do Módulo:
# fwconsole ma upgrade framework core voicemail sipsettings infoservices \
# featurecodeadmin logfiles callrecording cdr dashboard music conferences
# fwconsole chown
# fwconsole reload

Nota: Módulos adicionais podem ser instalados via GUI: Admin > Module Admin. Opcionalmente, você pode instalar todos os módulos (o que não é recomendado). Você provavelmente precisará executar os seguintes comandos duas vezes.

# fwconsole ma installall
# fwconsole chown
# fwconsole reload

Configurando o FreePBX para inicializar com o BOOT do seu sistema operacional.
# cat > /etc/systemd/system/freepbx.service << EOF​
[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

EOF

#systemctl enable freepbx

Tarefas pós-instalação, primeiro, bloqueie o servidor de banco de dados:
# mysql_secure_installation

Responda Y para tudo!

Altere as configurações do servidor Apache2:
# sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
# sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
# sed -i ':a;N;$!ba;s/AllowOverride None/AllowOverride All/2' /etc/httpd/conf/httpd.conf

Certifique-se de que tanto o Banco de Dados quanto o servidor Web estejam configurados para iniciar no boot do sistema operacional.
# systemctl enable mariadb
# systemctl enable httpd

Finalmente, reinicie para que todas as alterações entrem em vigor.
# reboot

Uma perfumaria, totalmente opcional, rotação do arquivo de log. Se isto não for feito, os arquivos de LOGs continuarão crescendo indefinidamente. Logo apesar de ser uma perfumaria é importante fazer pois temos que ter os LOGs para analise de possiveis falas em nosso sistema.

# vim /etc/logrotate.d/asterisk

/var/spool/mail/asterisk
/var/log/asterisk/*log
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/freepbx_dbug
/var/log/asterisk/fail2ban {
        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
}

Novas politicas de firewall.
# systemctl enable firewalld
# systemctl restart firewalld
# firewall-cmd --permanent --zone=public --add-service={http,https}
# firewall-cmd --permanent --zone=public --add-port=5060-5061/tcp
# firewall-cmd --permanent --zone=public --add-port=5060-5061/udp
# firewall-cmd --permanent --zone=public --add-port=10000-20000/udp
# firewall-cmd --reload


Recurso TFTP, o servidor TFTP é bom caso você use Telefone IP (hardware), assim pode fazer o provisionamento do mesmo. Para isto basta criar um arquivo com nome do MAC do aparelho IP e nele disponibilizar toda configuração necessária para funcionar com seu Softswitch PBX IP.
# yum -y install tftp-server
# vim /etc/xinetd.d/tftp

Altere server_args = -s /var/lib/tftpboot para server_args = -s /tftpboot

Altere disable=yes para disable=no

# mkdir /tftpboot
# chmod 777 /tftpboot
# systemctl restart xinetd
# firewall-cmd --permanent --zone=public --add-port=69/udp
# firewall-cmd --reload

Vamos testar o ODBC.
# odbcinst -s -q

Use o nome de usuário e senha do /etc/asterisk/res_odbc_additional.conf para testar a conectividade com o Banco de Dados via ODBC.

# isql -v MySQL-asteriskcdrdb seunomedeusuario suasenhadeusuario

Vamos testar o ODBC na console do Asterisk.
# rasterisk -vvvvgci
*CLI> odbc show

Aumentando o tamanho de memory_limit = 256 do PHP.
# sed -i 's/memory_limit = .*/memory_limit = 256M/g' /etc/php.ini

Vamos travar o Asterisk para usar o Timing do DAHDI.
# rasterisk -vvvvgci
*CLI> module show like timing
Module                           Description                              Use Count  Status
res_timing_dahdi.so       DAHDI Timing Interface                0          Running
res_timing_pthread.so    pthread Timing Interface                 0          Running
res_timing_timerfd.so    Timerfd Timing Interface                1          Running
3 modules loaded
*CLI> 

Edite o arquivo modules em /etc/modules.conf e inclua.

noload = res_timing_pthread.so
noload = res_timing_timerfd.so

# reboot

# rasterisk -vvvvgci

*CLI> module show like timing
Module                         Description                              Use Count  Status
res_timing_dahdi.so            DAHDI Timing Interface                   1          Running
1 modules loaded
*CLI> 

Pronto! Seu sistema Softswitch PBX IP com GUI FreePBX v14 está pronto! Basta usar!

1 comentário:

  1. Olá ta dando esse erro na hora de instalar o freepbx, sabe como resolver? To parado aqui e não tenho como prosseguir.

    [root@centos-s7 freepbx]# ./install -n --force
    Force Install. This will reset everything!
    Assuming you are Database Root
    Checking if SELinux is enabled...Its not (good)!
    Reading /etc/asterisk/asterisk.conf...Done
    Writing /etc/asterisk/asterisk.conf...Done
    Checking if Asterisk is running and we can talk to it as the 'asterisk' user...Yes. Determined Asterisk version to be: 14.7.8
    Preliminary checks done. Starting FreePBX Installation
    Checking if this is a new install...Yes (No /etc/freepbx.conf file detected)
    Database Root installation checking credentials and permissions..Error!
    Invalid Database Permissions. The error was: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
    [root@centos-s7 freepbx]#

    ResponderEliminar