Olá!
Neste how-to veremos como instalar um servidor de telefonia digital (VoIP) utilizando o software gratuito asterisk. Também é possível comprar placas PCI ou PCI-express para utilização com links de telefonia digital (um canal “E1”, por exemplo), altém de ATAs (adaptadores de de telefones ou linhas analógicas).
Inicialmente, precisamos de um servidor com o linux Ubuntu Server 10.04 instalado. No meu caso, utilizei a versão de 64bits, pois o computador que utilizei possuía esta capacidade. Recomendo a instalação do servidor SSH, para facilitar o acesso posteriormente ;). OK, pode ser qualquer outro linux, mas eu usei este porque facilita bastante hehe.
Neste how-to também instalaremos um servidor MySQL neste Ubuntu, para armazenar os registros de ligação em banco de dados.
Em muitos casos irei explicar o que estamos fazendo. Farei isto colocando a explicação do lado do comando, e entre parênteses. Por exemplo, quando você ver:
make (compilar a biblioteca)
você só executa “make”, a parte “(compilar a biblioteca)” é o comentário explicativo ;).
Primeiramente precisamos instalar alguns pacotes que não são instalados por padrão.
Efetue login no servidor, e depois execute “sudo su”. A senha que será solicitada será a sua própria senha. Com isto, você se tornará usuário “root”, possibilitando e facilitando a execução dos comandos necessários. Abaixo, a lista de comandos para instalar os pacotes. Em alguns casos, o “apt” solicitará confirmação do download, pois será feito download de mais de um pacote. Basta digitar “s” e pressionar “enter” (eu instalei o Ubuntu em português… se você preferiu instalar em inglês, digite “y” ao invés de “s”).
apt-get install gcc
apt-get install build-essential
apt-get install libncurses5-dev
apt-get install m4
apt-get install bison
apt-get install zlib1g-dev
apt-get install libssl-dev
apt-get install libpng12-dev
apt-get install libslang2-dev
apt-get install libnewt-dev
apt-get install cvs
apt-get install doxygen
Também iremos instalar o subversion, para que possamos efetuar o download da interface web de configuração do asterisk, o asterisk-gui:
apt-get install subversion
E já que estamos instalando um montão de coisas :P, vamos aproveitar e instalar o MySQL:
apt-get install mysql-server
Agora, crie uma pasta temporária para armazenarmos os arquivos do asterisk. Vamos supor, “mkdir /asterisk_temp”.
Efetue o download do asterisk, asterisk-addons, libpri e do driver “dahdi” (versão completa) e salve tudo na pasta temporária. Abaixo, comandos para efetuar o download do próprio servidor, mas seria interessante acessar o site do asterisk para verificar por versões mais novas.
wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.11.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/releases/dahdi-linux-complete-2.3.0+2.3.0.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.4.31.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.4.11.tar.gz
Também já vamos efetuar o download do asterisk-gui. O comando abaixo irá efetuar o download, e salvará o conteúdo na subpasta “asterisk-gui”:
svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0/ asterisk-gui
Caso queira gerar um pacote do asterisk-gui, para ter um backup, execute o comando abaixo após o download ter sido concluído:
tar -jcvf asterisk-gui-2.0.tar.bz2 ./asterisk-gui
Agora, vamos à instalação destes pacotes:
1) libpri
tar -zxvf libpri-1.4.11.tar.gz (descompactar o arquivo)
cd libpri-1.4.11 (entrar na pasta)
make (compilar a biblioteca)
make install (instalar a biblioteca)
cd .. (voltar pra pasta enterior)
2) dahdi
tar -zxvf dahdi-linux-complete-2.3.0+2.3.0.tar.gz
cd dahdi-linux-complete-2.3.0+2.3.0
make
make install
make config (alguns pacotes tem comandos “make” adicionais…)
cd ..
Caso você tenha uma placa para link de telefonia digital (o canal “E1”, por exemplo), também precisa efetuar os seguintes passos:
pico /etc/dahdi/system.conf (editar este arquivo; efetue as alterações necessárias, conforme indicado no manual da sua placa)
pico /etc/modules (editar este arquivo; retire os módulos desnecessários, colocando um “;” no início da linha para, assim, torná-las “comentários” que serão ignorados)
3) asterisk
tar -zxvf asterisk-1.4.31.tar.gz
cd asterisk-1.4.31
./configure (alguns pacotes precisam ser “configurados” antes de serem compilados)
make
make install
make samples (instala os arquivos de configuração iniciais)
make progdocs
cd ..
4) MySQL Client (a partir do fonte)
O asterisk-addons não reconhece o cliente do Mysql instalado com o “apt-get”.
Acesse o site do Mysql e baixe o código fonte da mesma versão que você instalou (por exemplo. 5.1.58).
Instale o cliente com:
tar -zxvf mysql-5.1.58.tar.gz
cd mysql-5.1.58
./configure –without-server
make
make install
cd ..
5) asterisk-addons
tar -zxvf asterisk-addons-1.4.11.tar.gz
cd asterisk-addons-1.4.11
./configure
make
make install
make samples (instala os arquivos de configuração iniciais)
cd ..
Edite o arquivo “/etc/asterisk/modules.conf” e, bem ao final do arquivo, adicione a seguinte linha:
load => cdr_addon_mysql.so
Agora, crie um arquivo chamado “MySQL-script” (por exemplo), e coloque o conteúdo abaixo dentro dele:
————————COPIE A PARTIR DA LINHA ABAIXO
create user asterisk;
update user set password=password(‘ALTERE-ESTA-SENHA’) where user=’asterisk’;
create database asterisk;
grant insert,select on asterisk.* to asterisk@’%’;
flush privileges;
USE asterisk;
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default ‘0000-00-00 00:00:00’,
`clid` varchar(80) NOT NULL default ”,
`src` varchar(80) NOT NULL default ”,
`dst` varchar(80) NOT NULL default ”,
`dcontext` varchar(80) NOT NULL default ”,
`channel` varchar(80) NOT NULL default ”,
`dstchannel` varchar(80) NOT NULL default ”,
`lastapp` varchar(80) NOT NULL default ”,
`lastdata` varchar(80) NOT NULL default ”,
`duration` int(11) NOT NULL default ‘0’,
`billsec` int(11) NOT NULL default ‘0’,
`disposition` varchar(45) NOT NULL default ”,
`amaflags` int(11) NOT NULL default ‘0’,
`accountcode` varchar(20) NOT NULL default ”,
`uniqueid` varchar(32) NOT NULL default ”,
`userfield` varchar(255) NOT NULL default ”
);
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
————————COPIE SOMENTE ATÉ A LINHA ACIMA
Este é um script para criação do usuário e banco de dados que o asterisk utilizará, no MySQL, para o registro das ligações.
Se você não alterou nada no início do script, tanto o usuário quanto o nome do banco serão “asterisk”. A senha do usuário ficaria “ALTERE-ESTA-SENHA” :P.
Após ter criado o arquivo com o conteúdo acima, execute o script com:
mysql -p -u root < ./MySQL-script
A senha que será solicitada é a do usuário “root” do MySQL.
Feito isto, continuamos com a configuração dos addons. Edite o arquivo “/etc/asterisk/cdr_mysql.conf”.
Altere a seção “[global]” para que fique como o exemplo abaixo (retire os comentários se necessário):
[global]
hostname=localhost
dbname=asterisk
table=cdr
password=ALTERE-ESTA-SENHA
user=asterisk
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1
Para retirar os comentários, basta apagar o “;” do início da linha.
Caso você tenha alterado o nome do usuário, banco ou tabela, faça as alterações necessárias ;).
Também precisamos editar o arquivo “/etc/asterisk/res_mysql.conf”. Altere a seção “[general]” para que fique como o exemplo abaixo (retire os comentários se necessário):
[general]
dbhost = 127.0.0.1
dbname = asterisk
dbuser = asterisk
dbpass = ALTERE-ESTA-SENHA
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock
E como vamos salvar os registros em banco de dados, vamos desativar o armazenamento deles em “texto puro”, que vem ativo por padrão. Para isto, edite o “/etc/asterisk/cdr.conf”. Comente (coloque um “;” no início da linha) todas as linhas da seção “[csv]”, incluindo a própria linha “[csv]”.
5) asterisk-gui
cd asterisk-gui
./configure
make
make install
Edite o “/etc/asterisk/http.conf”. Na seção “[general]”, altere as linhas mencionadas abaixo, deixando-as como informado (retire os comentários se necessário):
enabled = yes
enablestatic = yes
bindaddr=0.0.0.0
Também é necessário editar o “/etc/asterisk/manager.conf”.
Nele, na seção “[general]”, altere as linhas indicadas abaixo (retire os comentários se necessário):
enabled = yes
webenabled = yes
Além disto, adicione as seguintes linhas bem no final do arquivo:
[admin] (“admin” será o usuário de acesso à interface web)
secret = SENHAsecreta (esta será a senha do usuário)
read = system,call,log,verbose,command,agent,config (com estas opções, poderemos visualizar todas as configurações possíveis)
write = system,call,log,verbose,command,agent,config (com estas opções, poderemos alterar todas as configurações possíveis)
Agora precisamos criar um arquivo de inicialização para o asterisk, para que ele inicie juntamente com o linux. Crie o arquivo “/etc/init.d/asterisk” e coloque o seguinte conteúdo no mesmo:
————————COPIE A PARTIR DA LINHA ABAIXO
#! /bin/sh -e
#### BEGIN INIT INFO
# Provides: asterisk
# Required-Start: $mysql
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Asterisk Server
# Description: Asterisk Server
### END INIT INFO
#
# Author: Huff
#
set -e
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/asterisk
test -x $DAEMON || exit 0
. /lib/lsb/init-functions
case “$1” in
start)
log_daemon_msg “Starting” “asterisk”
$DAEMON
log_end_msg $?
;;
stop)
log_daemon_msg “Stopping” “asterisk”
$DAEMON -rx “stop now”
log_end_msg $?
;;
restart)
$0 stop
$0 start
;;
reload)
log_daemon_msg “Reloading config for” “asterisk”
$DAEMON -rx “module reload”
log_end_msg $?
;;
*)
echo “Usage: /etc/init.d/asterisk {start|stop|restart|reload}”
exit 1
;;
esac
exit 0
————————COPIE SOMENTE ATÉ A LINHA ACIMA
Altere as permissões do arquivo, para que ele possa ser executado:
chmod 755 /etc/init.d/asterisk
Agora, vamos adicionar o script à inicialização do servidor:
update-rc.d -f asterisk defaults
Agora já vamos iniciar o asterisk :):
/etc/init.d/asterisk start
Agora, abra um navegador de internet em algum computador que tenha acesso ao servidor asterisk, pela rede.
Acesse o endereço “http://Endereco.IP.do.Servidor:8088/asterisk/static/index.html” (obs: altere “Endereco.IP.do.Servidor” pelo Endereço IP do Servidor :P).
Efetue login com o usuário (admin) e a senha (SENHAsecreta).
Neste primeiro acesso o asterisk-gui irá preparar os arquivos de configuração, adaptando-os para utilização com esta interface web. Após ele ter concluído o processo, saia da interface clicando no botão “logout” localizado bem acima à direita.
Volte para o servidor (SSH é muito útil nessas horas :D) e edite o arquivo “/etc/asterisk/extensions.conf”.
Nele, comente as seções indicadas abaixo (com isto, quero dizer que você deve comentar todas as linhas que estiverem dentro de cada seção, bem como a linha que indica a seção, como no caso do “[csv]” visto anteriormente):
[dundi-e164-canonical]
[dundi-e164-customers]
[dundi-e164-via-pstn]
[dundi-e164-local]
[dundi-e164-switch]
[dundi-e164-lookup]
[macro-dundi-e164]
[iaxtel700]
[iaxprovider]
[trunkld]
[trunklocal]
[trunktollfree]
[international]
[longdistance]
[local]
[macro-trunkdial]
[macro-stdPrivacyexten]
[macro-page]
[demo]
[page]
Após ter feito isto (eu sei, é bastante coisa, mas são coisas desnecessárias, muitas delas criadas apenas para testes, o melhor é remover mesmo ;)), vamos fazer o asterisk recarregar a configuração:
/etc/init.d/asterisk reload
Pronto! Agora é só configurar o asterisk, seja editando os arquivos de configuração manualmente, ou pela interface web ;).
Em breve, mais dicas de asterisk!