|
 Neste tutorial vamos atualizar o FreeBSD para a versão Stable, atualizar o Ports, depois instalar o Asterisk e Zaptel. Faremos uma configuração simples de 2 ramais SIP e um plano de discagem simples. Vamos instalar também o Apache, MySQL e o Asterisk-Stats, para poder visualizar todo o CDR via Web. Para finalizar, uma maneira de monitorar o uso do seu servidor com o Cacti. Lembrando que não é necessário atualizar o sistema para a versão Stable para poder instalar o Asterisk, apenas fiz isso por recomendação para um servidor de produção.
Atualizando o sistema Após a instalação do seu sistema FreeBSD (nesse caso estou utilizando o 6.2), é interessante atualizar para o STABLE. Vamos seguir o artigo da FUG-BR (www.fug.com.br) http://www.fug.com.br/content/view/46/9/ Pela Coleção de Ports: (se voce utiliza o 6.2, não é necessário esta etapa, o csup já está em sua base)
asterisk# cd /usr/ports/net/csup asterisk# make install clean asterisk# rehash
Agora iremos criar um arquivo supfile que servirá para o nosso csup como um "arquivo de configuração". Como o nosso objetivo inicial é atualizar o nosso FreeBSD para a última versão STABLE do FreeBSD 6.X : #--------- INICIO DO ARQUIVO ----------# *default host=cvsup12.FreeBSD.org *default base=/var/db *default prefix=/usr *default release=cvs tag=RELENG_6 *default delete use-rel-suffix
*default compress
src-all #---------- FIM DO ARQUIVO ------------#
OBS: salve com o nome/local "/usr/local/etc/src-supfile”.
Vale lembrar que podemos escolher o servidor que desejamos "baixar" os sources, neste exemplo foi utilizado o cvsup12.FreeBSD.org que é um Top Level Domain, ou seja, os primeiros servidores que são atualizados do cvs oficial. Para obter informações sobre outros mirrors consulte a pagina oficial do FreeBSD http://www.freebsd.org ou instale o fastest_cvsup (cd /usr/ports/sysutils/fastest_cvsup && make install clean), com ele você conseguirá ver qual o servidor mais rápido no momento.
Depois de tudo configurado basta digitar:
asterisk# csup -g -L 2 /usr/local/etc/src-supfile Com este comando será iniciado o "download" do novo código do FreeBSD.
Depois que tudo acabar, você terá que recompilar o seu FreeBSD, para fazer isso faça:
asterisk# cd /usr/src asterisk# make -j4 buildworld asterisk# make buildkernel KERNCONF=GENERIC asterisk# make installkernel KERNCONF=GENERIC asterisk# mergemaster -p asterisk# make TMPDIR=/var/tmp installworld asterisk# mergemaster -Pi asterisk# reboot
Observações: O "make -j4 buildworld" demora muito pode ir tomar uma cervejinha - Se sua máquina for rápida = umas 4 cervejinhas - Se sua máquina for não tão rápida = 10 cervejas + bisteca na chapa - ... agora se sua maquina for lerda.... logo após o enter..... coloque a COSTELA no celofane ;) - Leia o artigo completo em http://www.fug.com.br/content/view/46/9/ para ter maiores informações a respeito deste procedimento. Depois de tudo atualizado, é hora de fazer uma limpeza no sistema, pra remover programas, mans e libs que foram removidas do sistema, mas permanecem na sua máquina.
ATENÇÃO: Se você atualizou da série 5.x pra 6.x, por exemplo, as libs do sistema tiveram sua versão alterada, então, antes de executar os procedimentos abaixo, atualiza *TODOS* os seus ports (portupgrade -fa) e recompile programas que foram instalado por fora do ports, para garantir que nada irá parar de funcionar.
asterisk# cd /usr/src asterisk# make check-old
Faça um backup de todos os arquivo que o make check-old retornar
asterisk# make delete-old asterisk# make delete-old-libs
Esses dois comandos irão perguntar pra você antes de apagar cada arquivo e/ou cada lib. Caso você tenha conferido bem a saída do make check-old e tenha certeza de que vai apagar tudo, utilize-os da seguinte maneira:
asterisk# make -DBATCH_DELETE_OLD_FILES delete-old asterisk# make -DBATCH_DELETE_OLD_FILES delete-old-libs
Atualizando o Ports Antes de continuar, é muito interessante atualizarmos o ports do seu sistema FreeBSD, para que possamos instalar a versão mais atualizada e estável dos softwares. (Mais uma vez referenciando o artigo http://www.fug.com.br/content/view/46/9/).
Execute isso na primeira vez. É normal demorar, dependendo do seu processador e conexão.
asterisk# portsnap fetch extract
Nas próximas vezes isso basta: asterisk# portsnap fetch update
E se você for colocar no crontab:
asterisk# portsnap cron update Zaptel Para instalar o zaptel: asterisk# cd /usr/ports/misc/zaptel/ asterisk# make install
Na instalação padrão encontrada nos ports, não existe um tone_zone para o Brasil, vamos adicionar essa função. asterisk# cd /usr/ports/misc/zaptel/work/zaptel-bsd-1.4.6/ztcfg asterisk# vi zonedata.c Após o ultimo zone "China", vamos adicionar o zone para o Brasil. { 21, "br", "Brazil", { 1000, 4000 }, { { ZT_TONE_DIALTONE, "425" }, { ZT_TONE_BUSY, "425/250,0/250" }, { ZT_TONE_RINGTONE, "425/1000,0/4000" }, { ZT_TONE_CONGESTION, "425/250,0/250,425/750,0/250" }, { ZT_TONE_CALLWAIT, "425/50,0/1000" }, { ZT_TONE_DIALRECALL, "350+440" }, { ZT_TONE_RECORDTONE, "425/250,0/250" }, { ZT_TONE_INFO, "950/330,1400/330,1800/330" }, { ZT_TONE_STUTTER, "350+440" } }, }, Compilar e instalar novamente a libtonezone.a e o tonezone.h. asterisk# cd /usr/ports/misc/zaptel/work/zaptel-bsd-1.4.6/ztcfg asterisk # make asterisk # make install /usr/bin/install -o root -g wheel -m 755 -s ztcfg /usr/local/bin/ /usr/bin/install -o root -g wheel -m 644 libtonezone.a /usr/local/lib/ /usr/bin/install -o root -g wheel -m 644 tonezone.h /usr/local/include/ /usr/bin/install -o root -g wheel -m 644 ../zaptel/zaptel.h /usr/local/include/ asterisk# cd /usr/ports/misc/zaptel asterisk# make clean Startar os modulos zaptel
asterisk# /usr/local/etc/rc.d/zaptel start
Mais adiante veremos um exemplo de um arquivo zaptel.conf. Para startar o zaptel junto com a inicialização do sistema, adicione a seguinte linha no /etc/rc.conf:
zaptel_enable=”YES” Asterisk Vamos para a parte interessante da coisa! asterisk# cd /usr/ports/net/asterisk asterisk# make install clean Aparecerá uma tela com as opções para o Asterisk. Selecione “Enable Zaptel Support”, e se quiser, retire o “Enable H.323 Support”. Sem H.323 a compilação será bem mais rápida. Esse protocolo é pouco funcional e vem sendo amplamente substituído por SIP/RTP, sendo praticamente um protocolo descontinuado no que tange à VoIP (mas ainda usado em Vídeo sobre IP). Para fazer o Asterisk iniciar junto com a inicialização do sistema, adicione a seguinte linha no /etc/rc.conf: asterisk_enable=”YES” Asterisk-Addons Este pacote é muito interessante, para que o suporte a MySQL seja habilitado no Asterisk, dentre outros.
asterisk# cd /usr/ports/net/asterisk-addons asterisk# make install clean Apache 2.0 asterisk # cd /usr/ports/www/apache20 asterisk # make install clean Adicione no /etc/rc.conf as seguintes linhas: apache2_enable=”YES” Inicie o Apache asterisk# /usr/local/etc/rc.d/apache2.sh start & PHP5 asterisk # cd /usr/ports/lang/php5 asterisk # make config asterisk # make install clean Quando você der o comando make config, será exibido um menu com opções para instalação. Para instalar o APACHE com suporte a MySQL, tenha certeza de selecionar o “Apache Module”. Após instalar o PHP5, instale também: /usr/ports/databases/php5-mysql /usr/ports/www/php5-session /usr/ports/graphics/php5-gd Adicionando o módulo PHP5 no Apache Como estamos trabalhando com o Apache 2.0, no arquivo /usr/local/etc/apache2/httpd.conf, devemos inserir a seguinte linha: LoadModule php5_module libexec/apache/libphp5.so E altere a linha: DirectoryIndex index.php index.html index.htm Dessa forma, o Apache irá abrir primeiramente a página com o nome index.php. Adicione as linhas no final do arquivo: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps AddType application/x-httpd-php .php .htm .html Configurando o PHP As configurações para o PHP estão armazenadas em /usr/local/etc/php.ini Você terá que criar este arquivo, copiando ele de /usr/local/etc/php.ini-dist. asterisk# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini Testando o PHP Após você reiniciar o Apache, o PHP deverá subir automaticamente com ele. Para testar, crie um arquivo com o seguinte comando: asterisk# echo "<? phpinfo(); ?>" >> /usr/local/www/data/test.php E acesse via browser o endereço: http://ipdoservidor/test.php Se tudo estiver correto, você verá várias páginas contendo as informações a respeito do servidor, versão do PHP e tudo mais. Configurando o Asterisk Zaptel.conf Como estamos trabalhando com hardware Digium, vamos configurar uma placa para uma E1. As linhas comentadas seriam para configurar mais uma E1, e uma FXO e uma FXS. asterisk# ee /usr/local/etc/zaptel.conf span=1,1,0,ccs,hdb3,crc4 bchan=1-15 dchan=16 bchan=17-31 #span=2,0,1,ccs,hdb3 #bchan=32-46 #dchan=47 #bchan=48-62 #fxoks=63 #fxsks=66 loadzone=br defaultzone=br Salve este arquivo. Configuração de uma E1. As linhas comentadas seriam para configurar mais uma E1, e uma FXO e uma FXS. asterisk# cd /usr/local/etc/asterisk/ asterisk# mv zapata.conf zapata.conf.old asterisk# ee zapata.conf ; ;Zapata telephony interface ; ; Configuration file ; ; You need to restart Asterisk to re-configure the Zap channel ; CLI> reload chan_zap.so ; will reload the configuration file, ; but not all configuration options are ; re-configured during a reload. [channels] language = en resetinterval = never usecallerid = yes hidecallerid = no callwaiting = yes usecallingpres = yes callwaitingcallerid = yes threewaycalling = yes transfer = yes canpark = yes cancallforward = yes callreturn = yes echocancel = no rxgain = 0.0 txgain = 0.0 callgroup = 1 pickupgroup = 1 switchtype = euroisdn dtmfmode=rfc2833 group=1 context=default signalling=pri_cpe channel=>1-15 channel=>17-31 ;group = 2 ;context = entrada ;signalling = pri_cpe ;channel => 32-46 ;channel => 48-62 ;group = 3 ;signalling = fxo_ks ;context = default ;immediate=yes ;channel => 63 ;signalling = fxs_ks ;channel => 66 Sip.confConfiguração dos ramais SIP que o nosso sistema terá. Nesse caso, configuramos o ramal 8000 e 8001. asterisk# ee /usr/local/etc/asterisk/sip.conf [general] port=5060 bindaddr=0.0.0.0 context=default dtmfmode=rfc2833 include=parkedcalls disallow=all allow=g729 allow=alaw allow=ulaw maxexpiry=3600 insecure=no defaultexpiry=120
[8000] username=8000 secret=8000 type=friend context=default canreinvite=no cancallforward=yes host=dynamic callgroup=1 ;grupo de chamadas pickupgroup=1 ;puxar ligacoes nat=yes qualify=1000 dtmfmode=rfc2833 disallow=all allow=alaw allow=ulaw allow=g729 allow=gsm
[8001] username=8001 secret=8001 type=friend context=default canreinvite=no cancallforward=yes host=dynamic callgroup=1 ;grupo de chamadas pickupgroup=1 ;puxar ligacoes nat=yes qualify=1000 dtmfmode=rfc2833 disallow=all allow=alaw allow=ulaw allow=g729 allow=gsm
Extensions.confConfiguração do dialplan do nosso Asterisk. asterisk# ee /usr/local/etc/asterisk/extensions.conf
[default] exten = 8000,1,Dial(SIP/8000,40,tT) exten = 8000,n,Hangup()
exten = 8001,1,Dial(SIP/8001,40,tT) exten = 8001,n,Hangup() Aqui o seu servidor já está pronto para uso e configuração mais personalizada. Se quiser partir para um CDR (call detail record) em MySQL, monitoramento do servidor com o Cacti, continue abaixo). CDR em MySQL asterisk# cd usr/ports/databases/mysql50-server asterisk# make install clean asterisk# mysql Welcome to the MySQL monitor.Commands end with ; or \g. Your MySQL connection id is 59 Server version: 5.0.45 FreeBSD port: mysql-server-5.0.45 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123'); mysql> exit Definimos a senha de root como 123. Adicione no /etc/rc.conf as seguintes linhas: mysql_enable=”YES” Crie um arquivo cdr.sql com o seguinte conteúdo: create database asteriskcdrdb;
use asteriskcdrdb; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `cdr`
--
DROP TABLE IF EXISTS `cdr`; 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 '', KEY `calldate` (`calldate`), KEY `dst` (`dst`), KEY `accountcode` (`accountcode`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; Salve o arquivo e execute: asterisk# mysql –p < cdr.sql Enter password: Pronto, a tabela para armazenagem do cdr já está criada. Agora, vamos configurar o asterisk para isso. asterisk# cd /usr/local/etc/asterisk asterisk# ee cdr_mysql.conf E insira isso no final do arquivo: [global] hostname = localhost dbname = asteriskcdrdb user = root password = 123 port = 3306 Entre no asterisk com ‘asterisk –r’ e de um ‘restart now’. Entre novamente, e verifique: asterisk*CLI> cdr mysql status Connected to asteriskcdrdb@localhost, port 3306 using table cdr for 8 seconds. Wrote 0 records since last restart. asterisk*CLI> Pronto, seu asterisk já está gravando o CDR em MySQL. Asterisk Stats Com essa ferramenta web, você poderá analisar todo o CDR que o asterisk gerou. asterisk# cd /usr/ports/www/asterisk-stat asterisk# make install clean asterisk# cd /usr/local/www/asterisk-stat/lib asterisk# cp defines.php-dist defines.php asterisk# ee defines.php Modifique nele: define ("HOST", "localhost"); define ("PORT", "3306"); define ("USER", "root"); define ("PASS", "123"); define ("DBNAME", "asteriskcdrdb"); define ("DB_TYPE", "mysql"); // mysql or postgreeSalve este arquivo e continue: asterisk# ee /usr/local/etc/apache2/httpd.conf Insira as seguintes linhas: Alias /asterisk-stat "/usr/local/www/asterisk-stat/"
<Directory "/usr/local/www/asterisk-stat/"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Reinicie o apache, e acesse: http://ipdoservidor/asterisk-stat/cdr.php Pronto, agora você já pode visualizar todas as ligações que passam pelo seu asterisk! Cacti Dependendo do tamanho da sua aplicação, é interessante monitorar o uso do servidor, (cpu, memória, etc). Uma ótima ferramenta é o Cacti. Não vou entrar muito em detalhes a respeito disso. Para maiores detalhes, consulte: http://www.fug.com.br/content/view/84/60/ Como root, faça: asterisk# cd /usr/ports/net/cacti asterisk# make install clean Criando o banco a tabela cacti # mysqladmin --user=root create cacti –p
Criando usuário cacti:
# echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser'; FLUSH PRIVILEGES;" | mysql –u root –p Importando as tabelas cacti:
# mysql –u root cacti < /usr/local/share/cacti/cacti.sql –p Edite o db-settings.php e troque as configurações do seu mysql: # ee /usr/local/share/cacti/include/db-settings.php
Edite seu /etc/crontab adicione:
*/5 * * * * cacti /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1
Adicione um Alias no seu apache, no httpd.conf
Alias /cacti "/usr/local/share/cacti/"
<Directory "/usr/local/share/cacti/"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Abra o cacti em seu navegador, no endereço: http://ipdoservidor/cacti/ Usuário: admin Senha: admin Este usuário e senha serão válidos apenas para o primeiro login. |