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!