08.09  
Inicio arrow Artigos arrow FreeBSD + Asterisk
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histórico da Lista
Galeria de Imagens
Contador Usuários FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS
-
DOC-BR (FUG BR)
Introdução
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usuário

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


FreeBSD + Asterisk PDF Imprimir E-mail
Por Danilo Bedani   
11/09/2007

Image
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 & 

Teste acesssando: http://ipdoservidor/
 
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.conf
Configuraçã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.conf
Configuraçã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 postgree

Salve 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.

Comentários
Bem legal
Por Patrick Tracanelli em 13/09/2007 15:31:49
Muito boa contribuição Danilo, mais uma otima referencia de FreeBSD com asterisk. Uma nota, o csup ja esta na base do sistema, no 6.2, dispensando instalação via ports. 
 
Continue contribuindo.
Aowww...
Por tholoko em 14/09/2007 09:40:25
Valeu Danilo, por isso que tenho orgulho de trabalhar com um parceiro desses!!! 
 
Abraços e muito BSD na Veiaa!!! 
 
ThOLOko 
FrEEBSD 
Unix Team!
=(
Por Dark em 14/09/2007 11:06:41
Otimo artigo Danilo.  
 
Pena ainda não conseguir funcionar a bibliote libunicall e libmfcr2 para sinalizacao R2 muito comum no Brasil ainda.
Por Danilo em 14/09/2007 12:05:32
Unicall no bsd é triste... só uso o bsd + asterisk qdo é placa digium e ISDN... nas R2, uso digivoice+debian, infelizmente! pois o driver desenvolvido por eles é apenas para linux!
Belo artigo!
Por lippe em 17/09/2007 09:04:31
Parabens, e continue contribuindo :)
Meu how-to
Por dbedani em 18/09/2007 21:28:52
Bom, muito chato isso, mas eu fiz esse tutorial pra ajudar quem tem dificuldades nisso! 
E agora, olha o autor do artigo: "Administrador" 
Sacanagem, já mandei e-mail pedindo que arrumassem, mas até agora nada!
asterisk-stat
Por puga em 17/03/2008 11:27:05
Ola Danilo, 
nao consegui instalar o asterisk-stat pelo ports, obtenho o seguinte erro: 
http://paste-bin.com/13179 
 
Ele diz que nao tenho o asterisk-addons, mas tenho e estah rodando normalmente aqui. Saberia me dizer o que pode ser? 
 
Alem disso, seria interessante vc integrar ao artigo a instalacao do Flash Operator Panel =)
Por marco em 20/08/2008 15:03:50
Olá. Fiz exatamente como descrito acima, porem, não grava. Não vejo nenhum record no astrisk-stat. Tem mais alguma configuraçao no extensions para iniciar a gravaçao? Obrigado


Comente!*
Nome:
E-mail
Homepage
Título:
Comentário:

Código:* Code

Última Atualização ( 11/10/2007 )
 
< Anterior   Próximo >
FUG-BR - Espalhando BSD
Dicas Rápidas:

Cansado de nao usar sua tecla DELETE pra nada, e apenas o BACKSPACE apagar caracteres, e pra tras? Ative a tecla DELETE apagando o caracter onde esta o cursor, assim: 

bindkey "\e[3~" delete-char

Para automatizar, adicione ao seu ~/.cshrc

 




Wallpapers
Sua Opiniao
Online:
Nós temos 20 visitantes online


Devil Store - Sua loja BSD
FreeBSD Brasil LTDA

FUG-BR: Desde 1999, espalhando BSD pelo Brasil.