RealTime Com o PostgreSQL



1. Introducão:


Resumidamente, o RealTime fornece a possibilidade de colocar os arquivos de configuração em servidores Base de Dados. Não se precisa dizer que isso facilita a configuração do servidor asterisk através de programas externos, scripts e webpages.

Quando fazendo mudanças no dialplan ou nos usuários, não há necessidade para um reload ou um restart, tudo é pego na base de dados todas às vezes. (isso é opcional e pode ser desabilitado, veja adiante).

Além da facilidade para fazer interface com outras ferramentas de configuração, esse também permite se ter um servidor reserva em standby rodando o asterisk, ou mesmo facilitar uma configuração de balanceamento de carga.

Em geral, o uso do RealTime dá a você a flexibilidade quando você armazena e arranca dados do Asterisk.


2. Mysql, iodbc, unixODBC Nativo


Existem duas formas para você poder se conectar ao módulo realtime a uma Base de Dados.

A primeira forma é usar o driver MySQL que é embutida no Asterisk-addons e a segunda forma é usar o driver ODBC que está incluído no Asterisk HEAD CVS snapshot.

O driver ODBC é de longe a melhor opção, é uma abordagem mais ampla para acesso a base de dados, e suporta muitas e não apenas o mysql. (é também o mais usado, conseqüentemente mais testado, e, portanto, o mais estável provavelmente dos dois).

Para os objetivos desse tutorial, usamos o ODBC. Novamente temos duas opções, no linux existem duas formas para conectividade ODBC, chamada iodbc e unixodbc. Usamos o unixodbc. Também temos a mencionar que por causa de algumas duplicações de arquivos cabeçalhos você não pode usar ambos os driver ao mesmo tempo, você tem de escolher um deles. Importante é que a configuração de ambos é feita numa forma similar ou com pequenas alterações.

Este tutorial é todo a respeito do ODBC com a base de dados pgsql (PostgreSQL). Se desejamos usar o pgsql, vamos precisar não somente do ODBC apim, mas também o driver odbc-postgresql.

Também precisaremos criar algumas coisas na base de dados, isso será documentado adiante neste tutorial.


{img src=http://www.asteriskguru.com/tutorials/realtime_pgsql_image307.gif link=http://www.asteriskguru.com/tutorials/realtime_pgsql_image307.gif}


3. Questão Desempenho e Confiabilidade de Projeto.


Se o Asterisk precisa se conectar a base de dados para todos os passos executa no dialplan, a base de dados pode ficar muito sobrecarregada.

É pouco conhecido que o Asterisk ~np~RealTime~/np~ pode ser configurado de duas formas diferentes:


Realtime Estático


Neste caso, o dado é recuperado do servidor database somente no startup e nos reloads.

A vantagem é que a carga sobre o servidor database é baixa, e se o servidor database cair, isso não consegue afetar seu Asterisk que está em execução.

A grande desvantagem é, ... Realmente isso não é real time:) Apos qualquer alteração na base de dados, o Asterisk precisará ser recarregado).


Realtime Dinâmico


Essa é a segunda possibilidade, aqui todas as alterações de configuração refletem imediatamente no realtime. Mas, se o seu servidor de base de dados cair, assim também vai acontecer com o seu serviço VoIP.



4. A Instalação


Neste tutorial iremos partir do estoque de uma distribuição Debian, mas qualquer outra Distro será beleza também, embora algumas coisas pequenas sejam diferentes.


Asterisk e realtime precisam de alguns pacotes adicionais instalados.


Pacotes necessários antes da instalação do Asterisk:


cvs
libssl-dev
zlib1g-dev



No Debian você os pode instalar com o comando apt-get install <package_name>.


Pacotes necessários para incluir RealTime no Asterisk:


unixodbc (our version is 2.2.4-11)
unixodbc-dev
postgresql (our version is 7.4.7-6sarge1)
postgresql-client
postgresql-contrib
postgresql-dev
odbc-postgresql (our version is 07.03.0200-5)



Como desejamos ter uma versão do asterisk com suporte ao RealTime, precisamos pegar cvs head do servidor CVS asterisk:

A versão que usamos para esse tutorial foi - CVS-HEAD-06/03/05-10:59:09.

Escolha algum diretório onde colocar os fontes e faça o download dos fontes.

astrealtime:~# mkdir /usr/src/asterisk
astrealtime:~# cd /usr/src/asterisk
astrealtime:~# export CVSROOT=:pserver:anoncvs@cvs.digium.com:/usr/cvsroot
astrealtime:~# cvs login (password for login on cvs server is “anoncvs”)
astrealtime:~# cvs checkout zaptel libpri asterisk (getting CVS HEAD sources)
astrealtime:~# cd /usr/src/asterisk/libpri
astrealtime:~# make
astrealtime:~# make install
astrealtime:~# cd /usr/src/asterisk/zaptel
astrealtime:~# make linux26



Faremos tudo com o kernel 2.6.x.

Assegure de incluir as seguintes características no kernel:
Device Drivers → Character Devices → Enhanced Real Time Clock Support Library Routines → CRC-CCITT functions


É recomendado, mas não necessário compilá-los como módulos.


Nota: No kernel 2.6, você não mais precisa do módulo usb_uhci.

astrealtime:~# make install
astrealtime:~# cd /usr/src/asterisk/asterisk



Se você tem um tipo de processador especial você pode alterá-lo no Makefile antes da compilação do Asterisk.

Por exemplo, para o VIA Samuel 2 processors precisa estar com o parâmetro PROC=i586 definido neste Makefile do contrário o Asterisk não vai rodar.

astrealtime:~# make
astrealtime:~# make install
astrealtime:~# make templates



Se essa é a sua primeira instalação do Asterisk você pode criar modelos (templates) para os arquivos de configuração necessários.



5. Configuração UnixODBC


O próximo passo é configurar o driver ODBC, no nosso caso UnixODBC. Se você instalou a partir dos pacotes Debian você pode usar arquivos modelos (templates) para montar os arquivos de configuração necessários. Os arquivo de configuração que precisamos para fazer o odbc funcionar são /etc/odbc.ini e /etc/odbcinst.ini.


astrealtime:~# odbcinst -i -d -f /usr/share/psqlodbc/odbcinst.ini.template astrealtime:~# cat /usr/share/doc/odbc-postgresql/examples/odbc.ini.template » /etc/odbc.ini


{img src=http://www.asteriskguru.com/tutorials/realtime_pgsql_image274.jpg desc= link=http://www.asteriskguru.com/tutorials/realtime_pgsql_image274.jpg}


{img src=http://www.asteriskguru.com/tutorials/realtime_pgsql_image273.jpg desc= link=http://www.asteriskguru.com/tutorials/realtime_pgsql_image273.jpg}


Depois dos dois últimos passos temos os arquivos /etc/odbcinst.ini e /etc/odbc.ini.



6. Configuração do PGSQL


Agora precisamos incluir algumas funções extras e tipos de dados na base de dados PostgreSQL para sermos capazes de usar conexão ODBC apropriada.

astrealtime:~# su – postgres (usuário admin do PostGreSQL)
astrealtime:~$ psql -d template1 </usr/share/psqlodbc/odbc.sql (na minha install não foi gerado tal arquivo ...)

astrealtime:~$ psql -d template1 (... esse BD modelo já existia)
template1=# CREATE DOMAIN lo AS int4;


template1=# \quit


Agora devemos criar o usuário asterisk e a Base de Dados chamada asterisk na qual colocaremos as tabelas que precisamos para a nossa configuração.


astrealtime:~$ createuser -P -N -d -D asterisk (isso é executado no shell Linux do usuário postgres)
astrealtime:~$ createdb asterisk
astrealtime:~$ psql -d asterisk



Agora é o momento de criar as tabelas necessárias para estocar a configuração na Base de Dados.


Criando a tabela extensions_conf:


astrealtime:~$ psql -U asterisk -W -d asterisk

CREATE TABLE extensions_conf (
id serial NOT NULL,
context character varying(20) DEFAULT '' NOT NULL,
exten character varying(20) DEFAULT '' NOT NULL,
priority smallint DEFAULT 0 NOT NULL,
app character varying(20) DEFAULT '' NOT NULL,
appdata character varying(128)
);



Criando a tabela CDR:


CREATE TABLE cdr (
calldate timestamp with time zone DEFAULT now() NOT NULL,
clid character varying(80) DEFAULT '' NOT NULL,
src character varying(80) DEFAULT '' NOT NULL,
dst character varying(80) DEFAULT '' NOT NULL,
dcontext character varying(80) DEFAULT '' NOT NULL,
channel character varying(80) DEFAULT '' NOT NULL,
dstchannel character varying(80) DEFAULT '' NOT NULL,
lastapp character varying(80) DEFAULT '' NOT NULL,
lastdata character varying(80) DEFAULT '' NOT NULL,
duration bigint DEFAULT 0::bigint NOT NULL,
billsec bigint DEFAULT 0::bigint NOT NULL,
disposition character varying(45) DEFAULT '' NOT NULL,
amaflags bigint DEFAULT 0::bigint NOT NULL,
accountcode character varying(20) DEFAULT '' NOT NULL,
uniqueid character varying(32) DEFAULT '' NOT NULL,
userfield character varying(255) DEFAULT '' NOT NULL
);



Criando a tabela sip_conf:


CREATE TABLE sip_conf (
id serial NOT NULL,
name character varying(80) DEFAULT '' NOT NULL,
accountcode character varying(20),
amaflags character varying(7),
callgroup character varying(10),
callerid character varying(80),
canreinvite character varying(3) DEFAULT ‘yes’,
context character varying(80),
defaultip character varying(15),
dtmfmode character varying(7),
fromuser character varying(80),
fromdomain character varying(80),
host character varying(31) DEFAULT '' NOT NULL,
insecure character varying(4),
“language” character varying(2),
mailbox character varying(50),
md5secret character varying(80),
nat character varying(5) DEFAULT ‘no’ NOT NULL,
permit character varying(95),
deny character varying(95),
mask character varying(95),
pickupgroup character varying(10),
port character varying(5) DEFAULT '' NOT NULL,
qualify character varying(3),
restrictcid character varying(1),
rtptimeout character varying(3),
rtpholdtimeout character varying(3),
secret character varying(80),
“type” character varying DEFAULT ‘friend’ NOT NULL,
username character varying(80) DEFAULT '' NOT NULL,
disallow character varying(100) DEFAULT ‘all’,
allow character varying(100) DEFAULT ‘g729;ilbc;gsm;ulaw;alaw’,
musiconhold character varying(100),
regseconds bigint DEFAULT 0::bigint NOT NULL,
ipaddr character varying(15) DEFAULT '' NOT NULL,
regexten character varying(80) DEFAULT '' NOT NULL,
cancallforward character varying(3) DEFAULT ‘yes’
);



Criando a tabela voicemail_users:


CREATE TABLE voicemail_users (
id serial NOT NULL,
customer_id bigint DEFAULT (0)::bigint NOT NULL,
context character varying(50) DEFAULT '' NOT NULL,
mailbox bigint DEFAULT (0)::bigint NOT NULL,
“password” character varying(4) DEFAULT ‘0’ NOT NULL,
fullname character varying(50) DEFAULT '' NOT NULL,
email character varying(50) DEFAULT '' NOT NULL,
pager character varying(50) DEFAULT '' NOT NULL,
stamp timestamp(6) without time zone NOT NULL
);



Há algum tempo que já existe suporte também no Realtime para queues e queue members que foi acrescentada ao Asterisk HEAD CVS. Permita-nos adicioná-los também...


Criando tabela de fila


CREATE TABLE queue_table (
name varchar(128),
musiconhold varchar(128),
announce varchar(128),
context varchar(128),
timeout int8,
monitor_join bool,
monitor_format varchar(128),
queue_youarenext varchar(128),
queue_thereare varchar(128),
queue_callswaiting varchar(128),
queue_holdtime varchar(128),
queue_minutes varchar(128),
queue_seconds varchar(128),
queue_lessthan varchar(128),
queue_thankyou varchar(128),
queue_reporthold varchar(128),
announce_frequency int8,
announce_round_seconds int8,
announce_holdtime varchar(128),
retry int8,
wrapuptime int8,
maxlen int8,
servicelevel int8,
strategy varchar(128),
joinempty varchar(128),
leavewhenempty varchar(128),
eventmemberstatus bool,
eventwhencalled bool,
reportholdtime bool,
memberdelay int8,
weight int8,
timeoutrestart bool,
PRIMARY KEY (name)
) WITHOUT OIDS;
ALTER TABLE queue_table OWNER TO asterisk;



Criando tabela membros da fila:


CREATE TABLE queue_member_table
(
queue_name varchar(128),
interface varchar(128),
penalty int8,
PRIMARY KEY (queue_name, interface)
) WITHOUT OIDS;



Concedendo níveis de acesso necessários pelo usuário asterisk.



GRANT ALL ON TABLE cdr TO asterisk;
GRANT ALL ON TABLE extensions_conf TO asterisk;
GRANT ALL ON TABLE sip_conf TO asterisk;
GRANT ALL ON TABLE voicemail_users TO asterisk;
GRANT ALL ON TABLE queue_member_table TO asterisk;
GRANT ALL ON TABLE queue_table TO asterisk;



O Asterisk se conectará a Base de Dados com o usuário asterisk, de modo que o PostgreSQL precisa de alguns parâmetros para permitir conexões à base de dados asterisk.


Devemos adicionar as seguintes linhas ao arquivo /etc/postgres/pg_hba. conf:


local asterisk asterisk password
host asterisk asterisk 127.0.0.1 255.255.255.255 password




Fazendo o Asterisk para se comunicar com a base de dados.



Agora é o momento de configurar o asterisk para se comunicar com a base de dados.

Os arquivos que precisamos configurar são /etc/asterisk/res_odbc.conf e /etc/asterisk/extconfig.conf.

O arquivo /etc/asterisk/res_odbc.conf contém as configurações para a conexão a base de dados.

Aqui está um exemplo do arquivo res_odbc.conf:


O arquivo /etc/asterisk/extconfig.conf contem às configurações que define o tipo de conectividade de base de dados, famílias, tabelas e outras coisas importante que vai ser considerado depois.

Aqui está um exemplo do arquivo extconfig.conf:


Os parâmetros de configuração no arquivo /etc/asterisk/res_odbc.conf são suficientes claros para serem considerados. Algumas explicações sobre o arquivo extconfig.conf.

É importante mencionar que eu explicarei somente o RealTime e não a configuração do RealTime Estático.

Portanto na primeira coluna fica a família, esse é o nome que é associado à chamada do RealTime.


Os nomes chaves de family podem ser:

extensions
sipusers
sippeers
iaxusers
iaxpeers
queues
queue_members



Somente o nome de família de extensions pode ser diferente como mencionado aqui, todas as outras precisam ser o mesma.

Os próximos parâmetros no arquivo de configuração são “driver”, “database_context”,”table_name”.


Os valores para “driver” podem ser mysql ou ODBC que depende da base de dados no backend que nós estamos usando, em nosso exemplo é o ODBC.


O parâmetro “database_context” é o contexto chamado o qual é usado no arquivo res_odbc.conf em nosso exemplo ast_cnf.


“table_name” é a tabela na qual colocamos os dados.


É muito importante mencionar que o parâmetro database_context não é o nome da database para o qual nos conectaremos é o contexto que estamos usando no arquivo res_odbc.conf para configurar a conexão da database.


Uma das coisas que não está implementada é o rastreamento das filas (queues) disponível estocada na database.


O rastreamento de filas (queues) disponíveis somente é possível depois que você tiver um Agente (Agent) registrado e logados no sistema. Com diferença de que você pode fazer tal rastreamento quando você estoca a configuração a respeito das filas (queues) nos arquivos.


A forma que você pode verificar isso é executando o comando seguinte da CLI do Asterisk:


astrealtime*CLI>show queues
No queues.>


Em geral a forma que você pode verificar seu sistema de que existe uma conexão com a database a partir da CLI para verificar a conectividade ODBC é:


astrealtime*CLI>odbc show


Possível resultado do comando pode ser:
Name: ast_cnf
DSN: asterisk
Connected: yes



Verificando registros e leitura na database dele através do módulo realtime:



astrealtime*CLI>realtime load sipusers name user_name


Resultados possíveis podem ser:

Column NameColumn Value
id3
nameuser_name
canreinviteyes
contextidefisk
hostdynamic
natno
port4569
secretbad
typefriend
usernameuser_name
disallowall
allowg729
allowilbc
allowgsm
allowulaw
allowalaw
regseconds1117842618
ipaddr10.3.3.22
cancallforwardyes




7. Nota:

Devido à carência de documentação em português sobre como configurar o realtime com o Postgresql, resolvi compartilhar essa tradução com a comunidade AsteriskBrasil e com os usuários do Asterisk no Brasil e contribuir para melhor documentar o Asterisk em português. Todos podem dar sua contribuição para melhorar esse tutorial.

 
asterisk_realtime_e_postgresql.txt (41380 views) · Modificado em: 15/01/2008 20:47 por cleviton
 
Recent changes RSS feed Creative Commons License Donate Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Powered by Joom Prosolution

Apoio


 

Blog


Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238

Warning: fsockopen() [function.fsockopen]: unable to connect to www.voipmania.com.br:80 (Unknown error) in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238

fsockopen error:

Login






Perdeu a senha?
Cadastre-se agora!
Advertisement

Enquete

Meu dia a dia com o Asterisk :