Maio 282010
 

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!

 Posted by at 22:34
Maio 272010
 

“Cientistas australianos deram um verdadeiro mergulho na corrida pelo encolhimento dos transistores, os blocos básicos com que são feitos os computadores.
Eles construíram um transístor com as menores dimensões já alcançadas para esse tipo de construção, alcançando meros 4 nanômetros de comprimento.
A maior parte da indústria trabalha hoje na faixa dos 45 nanômetros, com alguns poucos chips sendo feitos na faixa dos 32 nanômetros. A grande meta atual é alcançar os 25 nanômetros.”

Leia na íntegra.

 Posted by at 12:53
Maio 062010
 

Olá!

Neste post vou passar rapidamente como implementar controle de banda, para limitar a velocidade utilizada por downloads, utilizando o proxy squid.

Primeiramente, é necessário adicionar o parâmetro “–enable-delay-pools” na hora de configurar/compilar o squid. Por exemplo:

./configure –prefix=/usr/local/squid –enable-delay-pools
(Observação: antes do “prefix” e do “enable”, são dois sinais “-“, não sei porque o WordPress só mostra um :P)

O comando acima fará com que o squid se instale, posteriormente, na pasta “/usr/local/squid”, além de habilitar a funcionalidade que precisaremos para o controle de banda (os “delay pools”).

Após a configuração ter sido concluída, basta continuar normalmente com a compilação (os tradicionais “make” e “make install”).

Ao configurar as regras de acesso, no arquivo “squid.conf” (no nosso exemplo, localizado em “/usr/local/squid/etc”), poderemos criar “canais” (os “pools”) com limites de velocidade, e regrar que “tal acesso” será feito por “tal pool”. Vamos ao exemplo de como ficam as linhas no arquivo de configuração (lembrando que linhas iniciadas por “#” são consideradas “comentários”, e são ignoradas pelo squid):

#Tipos de arquivos para os quais limitaremos a banda
#acl nome_regra tipo_regra regra-propriamente-dita
#”url_regex -i” analisará todo o endereço sendo acessado, utilizando expressões regulares,
#e ignorando maiúsculas/minúsculas (isto quem faz é o “-i”)
acl limite_banda url_regex -i \.exe \.zip \.rar \.tar \.tar\.(gz|bz2)

#Quantidade de pools que iremos criar
delay_pools 1

#Classe para acesso com restricao de banda
#O primeiro “1” define que estamos informando a classe (digamos, o “tipo da limitação”) para o delay_pool 1
#O segundo “1” define o tipo da classe. Para mais detalhes, acesse este link para o manual do squid
delay_class 1 1

#Definição da largura da banda, em bytes
#O “1” informa que estamos parametrizando o delay_pool 1
#Por ser classe 1, estamos colocando todos os acessos dentro do mesmo “canal”, significando que todos irão
#compartilhar a banda definida (quanto mais downloads simultâneos, mais lento todos ficarão, pois a banda será
#dividida entre todos). Caso esteja utilizando outra classe, serão necessários mais parâmetros
#(veja o manual do squid)
#Aprox. 300kbps
delay_parameters 1 37500/37500

#Agora, associamos a regra ao delay_pool
delay_access 1 allow limite_banda

#E depois temos que liberar o restante, fora do limite de banda
http_access allow seus-parametros-de-acesso

Pronto! 🙂

Ao efetuar download de qualquer arquivo “exe”, “zip”, “rar”, “tar”, “tar.gz” ou “tar.bz2”, o mesmo entrará no canal com banda limitada.

Demais acessos serão feitos sem o limite.

 Posted by at 14:31