quinta-feira

Adicionando cdr_pgsql.so no Asterisk (CentOS 5.X)

Para instalar o asterisk_postgres no CentOS siga os seguintes passos:
Instale o postgres
# cd /opt
# wget http://yum.postgresql.org/9.3/redhat/rhel-5-i386/pgdg-centos93-9.3-1.noarch.rpm
# rpm -ivh pgdg-centos93-9.3-1.noarch.rpm
# yum list postgres*
# yum install postgresql93-server postgresql93-devel postgresql93-odbc postgresql93
# service postgresql-9.3 initdb
# service postgresql-9.3 restart 

Acesse http://fabriciojf.blogspot.com.br/2013/11/instalando-postgres84-no-centos.html

Rode o comando para instalar o asterisk com a lib do PostgreSQL. Geralmente o postgres pode ser encontrado em /usr/pgsql-(versão). Aqui leva-se em conta que o asterisk já encontra-se na pasta /usr/src/asterisk-1.6.2.18 e suas dependências já estão instaladas.
# cd /usr/src/asterisk-1.6.2.18
# ./configure --with-postgres=/usr/pgsql-9.3/ --disable-xmldoc

# make menuconfig
# make
# make install
# make samples
# make config
Reinicie o servidor
# sudo reboot

terça-feira

Configurando proxy para o wget

Edite o arquivo /etc/wgetrc.conf e insira o seguinte conteudo:

nano /etc/wgetrc.conf
http_proxy = http://usuario:senha@ip_servidor_proxy:porta
ftp_proxy = http://usuario:senha@ip_servidor_proxy:porta

Configurando proxy para o yum

Edite o arquivo /etc/yum.conf e insira o seguinte conteudo:
nano /etc/yum.conf
proxy = http://usuario:senha@ip_servidor_proxy:porta

quarta-feira

Instalando Postgres8.4 no centos

Baixando o repositório 

Baixe e adicione o repositorio ao CentOs

$ wget http://yum.pgrpms.org/reporpms/8.4/pgdg-centos-8.4-2.noarch.rpm
$ rpm -Uvh pgdg-centos-8.4-2.noarch.rpm

Instalando o servidor

Execute a instalação do Postgres 8.4
yum install postgresql84 postgresql84-server postgresql84-contrib
service postgresql initdb
service postgresql start
chkconfig postgresql on

Liberando o acesso remoto

Para liberar o acesso remoto edite o arquivo pg_hba.conf e insira o seguinte conteúdo no final:
nano /var/lib/pgsql/pg_hba.conf
host    all         all         0.0.0.0/0             trust

Logo após edite o arquivo postgresql.conf e altere a linha #listen_addresses = 'localhost' para #listen_addresses = '*'
nano /var/lib/pgsql/postgresql.conf
#listen_addresses = '*'
Reinicie o servidor
service postgresql restart
crie a senha do usuario postgres
passwd postgres
Logue no postgres
su postgres
psql -c "ALTER USER postgres WITH PASSWORD 'senha'" -d template1 
edite o arquivo /etc/postgres/8.4/main/postgresql.conf e troque o conteudo
#listen_addresses = 'localhost' 
para
#listen_addresses = '*' 
edite o arquivo /etc/postgres/8.4/main/pg_hba.conf e insira o conteudo
host    all         all         0.0.0.0/0             trust

Configurando proxy para o apt-get

Edite o arquivo /etc/apt/apt.conf e insira o conteúdo:

$ nano /etc/apt/apt.conf

Acquire::ftp::proxy "ftp://usuario:senha@ip-servidor-proxy:porta/";
Acquire::socks::proxy "socks://usuario:senha@ip-servidor-proxy:porta/";
Acquire::http::proxy "http://usuario:senha@ip-servidor-proxy:porta/";
Acquire::https::proxy "https://usuario:senha@ip-servidor-proxy:porta/";

Dê um reload no apt

$ apt-get update 

terça-feira

Configurando Vono no Asterisk

Sip.conf

No sip.conf adicione as seguintes linhas:

Contexto aplicado à todos os sips
;; Adicione no arquivo sip.conf
[general]
udpbindaddr=0.0.0.0:5060
disallow=all
allow=alaw
allow=ulaw
allow=gsm
language=pt_BR
srvlookup=yes
defaultexpirey=1800  ;; importante para não perder registro nas entrantes
maxexpirey=1800      ;; importante para não perder registro nas entrantes
Registro do tronco vono
;; Adicione no arquivo sip.conf
register=>suacontavono:suasenhavono@vono.net.br:1571/suacontavono
Ramal SIP para o softfone ou telefone ip
;; Adicione no arquivo sip.conf
[6000](sip)
callerid = Fabricio <6000>
secret = suasenha
qualify = yes
context = from-internal
type = friend
host = dynamic
call-limit = 1
callgroup = 1
pickupgroup = 1
dtmfmode = rfc2833
canreinvite = no
Tronco da Vono, responsável por realizar e receber ligações
;; Adicione no arquivo sip.conf
[troncovono]
type=friend
secret=suasenhavono
domain=vono.net.br
fromdomain=vono.net.br
host=vono.net.br
context=gvt
disallow=all
allow=alaw
allow=ulaw
insecure=invite,port
qualify=no
port=1571  ;; utilizando a 5060 as entrantes não funcionaram
aut=md5 ;; importante para o registro
nat=yes
canreinvite=no
reinvite=no
dtmfmode=rfc2833
username=suacontavono
fromuser=suacontavono

Extensions.conf

Edite o arquivo /etc/asterisk/extensions.conf e insira o contexto do tronco vono para entrante. No exemplo abaixo o contexto gvt irá direcionar a ligação entrante para o ramal 6000. O contexto gvt é o que está definido no [troncovono] context=gvt dentro do arquivo sip.conf.

;; Adicione no arquivo extensions.conf 
[gvt]
exten => suacontavono,1,Dial(SIP/6000)
exten => suacontavono,n,Hangup()

Exemplo de ligação sainte no contexto from-internal que está setado no ramal 6000

;; Adicione no arquivo extensions.conf 
[from-internal]
exten => _0X.,1,Dial(SIP/${EXTEN}@troncovono,50)
exten => _0X.,n,Hangup() 

segunda-feira

Rodando comando sudo com apache no Linux

Faz um tempo, eu precisei desenvolver um pequeno painel de controle em php para um cliente rodar comandos de baixo nível no Ubuntu 11.04, o processo foi muito simples mas quando precisei implantar o mesmo painel no CentOS5 não funcionou de primeira.

Inicialmente percebi que os usuários do apache são diferentes nas duas distribuições, no Ubuntu é www-data e no CentOS5 é apache. Para descobrí-los executei os comandos:

No Centos
ps axu | grep httpd 

No Ubuntu
ps axu | grep apache2

Até um determinado momento o php não gerava mensagem nenhuma, mas analisando os logs de acesso disponíveis em /var/log/httpd e tentando executar o comando com o usuário apache pelo console, gerou o seguinte erro:

sorry, you must have a tty to run sudo. 

Para solucionar o problema, editei o sudoers e comentei a linha Defaults requiretty
nano /etc/sudoers

Alterei
Defaults    requiretty

Para 
# Defaults    requiretty

e na ultima linha adicionei
apache ALL=(ALL) NOPASSWD:ALL

sábado

Plugin m2eclipse

Eu recebo dezenas de visitas diárias, voltadas para busca de informações sobre maven, como por exemplo para acessar o post Criando um projeto Maven no Linux . Realmente, trabalhar com desenvolvimento utilizando maven para gerenciar os diversos archetypes e dependências que os projetos utilizam pode significar:
  1. Repositórios de códigos mais enxutos, já que as libs NÃO estarão dentro do source, apenas suas referências. O maven baixa e agrega as libs no momento da compilação do projeto, neste caso ele será colocado dentro da pasta target;
  2. Mais eficiência ao remover conflitos entre versões de libs, através da utilização da tag exclusion dentro da tag dependency;
  3. Maior facilidade ao integrar projetos;
  4. Facilidade ao utilizar ferramentas de integração contínua, como o Hudson;
E muitas outras vantagens. Um excelente plugin do maven para eclipse é o m2eclipse, abaixo segue um pequeno tutorial de como instalá-lo e alguns toques sobre sua utilização.

Instalando o plugin m2eclipse 

  • Acesse o menu Help > Install new Software
  • Em Work with clique no botão Add
  • Insira os dados:
  • Clique em OK
  • Selecione o item m2eclipse no combo ao lado de Work with
  • Marque o item Maven Integration for Eclipse
  • Clique em Next
  • Leia e aceite os termos de uso
  • Siga confirmando até reiniciar o eclipse

Criando um projeto utilizando o plugin m2e

  • Acesse o menu File > New > Other
  • Selecione a pasta Maven > Maven Project
  • Marque Create a Simple Project
  • Clique em Next

Entendendo o painel Artifact

Group Id

O group id deve ser formado por um nome único, que diferencie o projeto de todos os outros já desenvolvidos. Costuma-se utilizar o domínio que o desenvolvedor definiu para o projeto + o grupo do próprio projeto, onde domínio é compreendido como o endereço web de propriedade da empresa desenvolvedora ou do próprio desenvolvedor. No meu caso eu utilizo o domínio do meu site fabriciojf.com para os meus projetos pessoais e o bemmelhor.com.br para os projetos da minha empresa.

O detalhe é que o domínio deve ser escrito ao contrário, citando o exemplo do próprio projeto maven, o domínio da empresa é apache.org e o grupo do projeto é maven, sendo assim, o group id é:

Group Id: org.apache.maven 

Artifact Id

É o nome utilizado para o projeto, o ideal é utilizar um nome sem caracteres estranhos ou no máximo um traço "-" para separar palavras, Ex: maven-project, hibernate-core, hibernate-annotations e ehcache. 

Version

É a versão atual do projeto, costuma-se utilizar a versão xx-SNAPSHOT para identificar aquela que está sendo desenvolvida no momento. Por exemplo, estou gerando a versão 0.5.6-SNAPSHOT do projeto com.fabriciojf.libtools (com.fabriciojf.libtools-0.5.6-SNAPSHOT), quando eu for distribuir esta versão ela ficará simplesmente com.fabriciojf.libtools-0.5.6 e a versão SNAPSHOT será a próxima em desenvolvimento, ex: com.fabriciojf.libtools-0.6.0-SNAPSHOT.

Existem algumas formas para se controlar a versões de projetos, eu particularmente utilizo a seguinte:

X.Y.Z (1.0.5, 2.3.45, 0.12.22 ...) onde:

  • X corresponde a mudanças que tornem o projeto incompatível
  • Y corresponde a novas funcionalidades
  • Z corresponde a correções de bugs
Supondo que eu esteja desenvolvendo um projeto que está na versão 2.4.21 e faça a correção de um bug, vou gerar então a versão 2.4.22; logo após insiro uma nova tela de cadastro, subo a versão para 2.5.0 e assim sucessivamente.

Em alguns casos pode-se acrescentar a revisão do repositório no momento do geração da versão,
ex: 1.7.13.56437

Packaging

É o tipo de distribuição do projeto, pode ser por exemplo um software para internet (war) ou um software desktop (jar) e etc.

Name e Description

Como sugerido, informar nome e descrição do projeto.

Após configurar os dados do artifact clique em Finish para criar o projeto fisicamente no diretório. O próximo passo é entender o arquivo pom.xml.

O arquivo pom.xml

Dentro do eclipse navegue através do Project Explorer ou  Package Explorer, expanda o projeto criado e localize o arquivo pom.xml. Perceba que os dados configurados no momento da criação do projeto através do m2e estão dispostos nas respectivas tags. Desta forma o conteúdo do arquivo deverá estar parecido com:



Um problema que pode acontecer quando se importa um projeto existente no workspace, é o projeto perder a referência das libs, desta forma quando você executa o comando Run As ele não encontra as dependências configuradas dentro do pom. Para solucionar este problema faça o seguinte:
  • Dê um clique com o botão direito em cima do projeto;
  • Localize Maven > Update Project 
Aguarde que o projeto será reconfigurado. Com essas informações já é possível criar um projeto  maven à partir do m2e.


quinta-feira

Erro ao rodar comandos maven no console do Windows

Ao rodar qualquer comando mvn (install, compile, deploy) no console do windows (shell) gera o seguinte erro:

"Please ensure you are using JDK 1.6 or above and not a JRE (the com.sun.tools.javac.Main class is required)."

Solução Windows por sessão

  • Abra o console
  • Digite: set JAVA_HOME=endereco da JDK
  • ex: set JAVA_HOME=c:\program files\jdk 1.6\

Solução Definitiva

  • Acesse Painel de Controle > Sistema 
  • Ou pressione a tecla Win + Pause Break
  • Acesse Configurações Avançadas do Sistema
  • Acesse a aba Avançado
  • Clique em Variáveis de Ambiente
  • Nas variáveis de usuário clique em Novo
  • Em Nome da variável digite: JAVA_HOME
  • Em Valor da variável digite o endereço da instalação do JDK
    • obs: O endereço do JDK, não da pasta bin
  • Clique em OK
  • Em Variáveis do Sistema localize a variável path
  • Clique em Valor da variável, NÃO APAGUE o que já está definido,
  • Caminhe até o final do edit e adicione ;%JAVA_HOME%
    • obs: não se esqueça do ponto e vírgula antes do %JAVA_HOME%
  • Clique em OK
  • Abra o console pressionando as teclas Win + R
    • Se tiver algum console aberto, feche-o
  • Digite: set JAVA_HOME
  • Deverá aparecer o caminho do JDK
    • Caso não apareça o caminho, siga os passos novamente

Configurando telefone IP Intelbras TIP100 no Asterisk

Na semana passada precisei instalar 50 telefones IP TIP100 + Asterisk em um cliente aqui em Juiz de Fora, no início penei um pouco pra pegar o jeito, mas não foi tão difícil quanto eu imaginei. Seguem os passos que eu segui para instalá-los:

Configurando o Telefone IP

  • Conecte o telefone à rede elétrica
  • Conecte o cabo da internet à entrada Wan
  • Conecte o cabo do computador na entrada Lan
  • Mude a conexão do computador para DHCP
  • Digite 10.10.10.1 no browser do computador
  • Digite usuario admin e senha admin
  • Selecione o menu Usuário
  • Na aba Voip digite as informações do servidor asterisk:
    • Servidor SIP
      • Servidor SIP: Primário
      • Endereço: ip do servidor
      • Porta: 5060
      • Nome do domínio: [deixar em branco]
      • Enviar registro de Requisição: [selecionar]
    • Conta Voip:
      • Numero de Telefone: [ramal]
      • Identificador de Chamada: [ramal]
      • Porta: 5060
      • Nome de Usuário: [ramal]
      • Senha: [senha do ramal no asterisk]
  • Clique em Salvar
  • Clique em Reiniciar
  • Clique novamente em Reiniciar

Configurando modo Bridged

Para que você utilize apenas um cabo de rede do seu switch, será necessário colocar seu Tip100 em  modo bridge (ponte), desta forma a arquitetura ficará + ou menos assim:

Switch ----> Tip100 ----> Computador

 

Para configurar o modo bridge siga os seguintes passos:
  • Clique em Rede / Wan
  • Selecione a aba Geral
  • Selecione Topologia: Bridged
  • Configuração de Rede Dinâmica
  • Clique em Salvar
  • Clique em Reiniciar
  • Clique novamente em Reiniciar

Após estes passos o telefone irá se registrar no servidor Asterisk e será possível realizar e receber ligações.