sexta-feira, 17 de maio de 2013

Criando um Planet

Introdução:
Um planet é um concentrador de artigos relacionados a determinado assunto, no mundo do Software Livre, existem muitos Planets famosos: Planet Apache, Planet Debian, Planet Gnome, Planet KDE e etc.

Como funciona?

Basicamente você configura seu planet para ler os feed rss de determinados sites/blogs, na maioria das vezes essa configuração é feita para pegar apenas o rss de determinadas categorias/tags. Com isso os usuários fazem os posts em seus sites/blogs e automaticamente isso é publicado no planet, a vantagem para os que acessam o planet é que todas as informações estão concentradas em um único lugar.

Configuração nos sites/blogs que irão alimentar o Planet:
A única coisa que o site/blog precisa fazer é habilitar o rss das notícias, porém duas ações são fortemente recomendadas:
  • Utilizar categorias/tags nas postagens;
  • Alterar o feed do rss para mostrar apenas o resumo (sinopse).
Suprindo as dependências de instalação:
A única dependência é a instalação do Python 2.2 (ou superior) no sistema.

Instalação do Planet:
Baixe a última versão estável do pacote no site Planet Planet. Por exemplo, para a versão no momento em que escrevo esse post, usei os comandos:
# cd /var/www/html
# wget http://www.planetplanet.org/download/planet-2.0.zip


Descompacte o pacote e renomeie o diretório:
# unzip planet-2.0.zip
# mv planet-2.0 planetzabbixbrasil


Torne o script executável, acesse o diretório de exemplos, e copie o diretório fancy para o nome que você quer dar ao planet, vou usar como exemplo o zabbix:
# cd planetzabbixbrasil
# chmod 755 planet.py
# cd examples
# cp -rv fancy zabbix


Configurando o planet:
As configurações são bem simples e com exemplos, vou comentar apenas alguns trechos, uma versão traduzida do arquivo pode ser encontrada no Viva o Linux
# cd zabbix/
# vi config.ini
[Planet]
name = Planet Zabbix Brasil
link = http://planet.zabbixbrasil.org
owner_name = Zabbix Brasil
owner_email = zabbixbr@zabbixbrasil.org

cache_directory = examples/cache
new_feed_items = 2
log_level = DEBUG
feed_timeout = 20

template_files = examples/fancy/index.html.tmpl examples/atom.xml.tmpl examples/rss20.xml.tmpl examples/rss10.xml.tmpl examples/opml.xml.tmpl examples/foafroll.xml.tmpl

output_dir = examples/output
items_per_page = 60
date_format = %d de %B de %Y, %H:%M
new_date_format = %d de %B de %Y
encoding = utf-8
locale = pt_BR.UTF-8

days_per_page = 7

activity_threshold = 0

[DEFAULT]
facewidth = 65
faceheight = 85

#Entrada dos blogs:
[http://andredeo.blogspot.com.br/feeds/posts/default/-/Zabbix?alt=rss]
name = André Déo
face = deo.png

O parâmetro face serve para mostrar uma miniatura do logo do blog/site ou rosto do autor, ele é opcional e a imagem deve estar dentro da pasta examples/output/images.

Colocando o endereço dos rss:

Wordpress:
[http://nome-do-blog.wordpress.com/categoria/nome-da-categoria/feed/]
[http://spinola.net.br/blog/?cat=3/zabbix/feed/]
[http://gutocarvalho.net/octopress/categories/zabbix/atom.xml]
[http://www.helviojunior.com.br/category/it/monitoramento/zabbix/feed/]

Blogger:
[http://nome-usuario-blog.blogspot.com/feeds/posts/default/-/nome-da-categoria]
[http://andredeo.blogspot.com.br/feeds/posts/default/-/Zabbix?alt=rss]

Serendipity:
[http://url-principal-blog/index.php?/feeds/categorias/numerocategoria-nomecategoria]
[http://www.jacksonheraldtoday.com/index.php?/feeds/categories/9-Education-Stories]
[https://www.globalways.net/blog/index.php?/feeds/categories/2-Linux]

Populando o planet com as informações dos blogs:
# cd /var/www/html/planetzabbix
# ./planet.py examples/zabbix/config.ini


Configure o apache para apontar para o diretório:
/var/www/html/planetzabbix/examples/output/

Automatizando o processo de coleta dos dados:
# crontab -e
# Roda a atualização do Planet Zabbix Brasil a cada 10 minutos
*/10    *       *       *       *       /var/www/html/planetzabbix/planet.py /var/www/html/planetzabbix/examples/zabbix/config.ini

Referências:
http://teachingopensource.org/index.php/Planet_Feed_List
https://library.linode.com/web-applications/social-networking/planet/ubuntu-12.04-precise-pangolin
https://github.com/GNOME/planet-web/blob/master/config/gnome-br/config.ini

terça-feira, 7 de maio de 2013

Utilizando o Yum para instalar módulos Perl

Introdução:
Para quem utiliza os descendentes do Red Hat, o yum é velho conhecido, mas para instalar módulos perl eu sempre utilizei o CPAN, achava isso o máximo, até que descobri que posso usar o próprio yum para fazer esse trabalho.

Instalando módulos perl da maneira clássica:
# perl -MCPAN -e shell

cpan> install IO::Socket::SSL
cpan> install Net::SSLeay

Instalando módulos perl via yum:
# yum install 'perl(IO::Socket::SSL)'
# yum install 'perl(Net::SSLeay)'

Como disse o autor do texto original "Agora me sinto como se eu tivesse vivido na idade das trevas".

Referência:
Installing Perl Packages on CentOS - The magic of YUM

Zabbix e passagem de parâmetros

Introdução:
O objetivo deste tutorial é demostrar que através de um único script podemos ter coletas diversas, dinâmicas e sem a necessidade de alteração do script original e reinicialização de serviços (zabbix_agentd e/ou zabbix_proxy).

Entendendo a passagem de parâmetros:
Primeiro uma pequena aula de Shell Script para demonstrar o uso de parâmetros.

Nossos scripts aceitam um numero "ilimitado" de paramentros, basta executar o $*, para comprovarmos esse detalhe:
# cd /usr/local/etc/

# vi zabbix_parametros.sh
#!/bin/bash

echo $*


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

Na execução acima foram passados 20 parametros e foram exibidos os 20 parametros.

Neste segundo exemplo, demonstro que podemos referenciar apenas 9 parametros por vez:
# vi zabbix_parametros.sh
#!/bin/bash

echo $1 $2 $3 $4 $5 $6 $7 $8 $9
echo $10


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09
010


Na execução acima ao passar o parametro $10, ele reconheceu $1 seguido de 0, por isso o resultado foi 010, que é o primeiro parâmetro (01), seguido de 0, ou seja 010.

Mas usando o shift para eliminar um número X de parâmetros da memória podemos referenciar todos.
# vi zabbix_parametros.sh
#!/bin/bash

echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 9
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 9
echo $1 $2


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18
19 20

Como pode ser observado na execução acima, exibi os 9 primeiros parâmetros, eliminei os 9 primeiros parametros da memória (shift 9), exibi os nove primeiros parametros dos que restam na memória, eliminei os 9 primeiros parametros da memoria (shift 9) e exibi os dois primeiros parametros que restam na memória.

Script versão final:
Após essa pequena "aula" de Shell e compreendido como trabalhar com parametros, vamos entender o quanto essa abordagem pode ser produtiva no Zabbix. Vamos a versão final do nosso script:
# vi zabbix_parametros.sh

#!/bin/bash

case $1 in

quant_arq)cd $2
ls -la | grep ^- | wc -l;;

tam_dir)cd $2
du -khs | tr "\t" " " | cut -d" " -f1;;

tam_arq)ls -lh $2 | cut -d " " -f5;;

esac


Primeiramente vamos testar a execução das opções do script:
# ./zabbix_parametros.sh quant_arq /etc
137

# ./zabbix_parametros.sh quant_arq /var/log
51

# ./zabbix_parametros.sh tam_dir /var
24G

# ./zabbix_parametros.sh tam_dir /etc
30M
# ./zabbix_parametros.sh tam_arq /etc/passwd
1.9K

# ./zabbix_parametros.sh tam_arq /var/log/messages
2.0K

Alguns detalhes importantes que temos que observar:
Possuo um único script com 3 funções (quant_arq, tam_dir e tam_arq), mas poderiam ser inumeras funções, de acordo com a necessidade.
Como podemos observar nas funções, graças a passagem de parametros, elas se tornam dinâmicas, podendo retornar a quantidade de arquivos, tamanho de diretório e o tamanho de arquivo, de qualquer arquivo/diretório que nos interesse.

Colocando o Script no Zabbix:
O primeiro passo é alterar o proprietário e grupo do script:
#chown zabbix:zabbix /usr/local/etc/zabbix_parametros.sh

Para utilizar o script no Zabbix, vamos utilizar o UserParamenter:
# cat /usr/local/etc/zabbix_agentd.conf
UserParameter=parametros[*],/usr/local/etc/zabbix_parametros.sh $1 $2 $3 $4 $5 $6 $7 $8 $9

Reinicie o serviço do agente:
# service zabbix_agentd restart
Shutting down zabbix agent:               [  OK  ]
Starting zabbix agent:
                    [  OK  ]

Testando a leitura das informações:
# zabbix_get -s IP -k parametros[quant_arq,/etc]
137

# zabbix_get -s IP -k parametros[quant_arq,/var/log]
51

# zabbix_get -s IP -k parametros[tam_dir,/var]
24G

# zabbix_get -s IP -k parametros[tam_dir,/etc]
20M

# zabbix_get -s IP -k parametros[tam_arq,/etc/passwd]
1.9K

# zabbix_get -s IP -k parametros[tam_arq,/var/log/messages]
2.0K

Conclusão:
Além da vantagem óbvia que é o fato do script se tornar dinâmico,  a outra vantagem, como dito no início, é que eu preciso criar o UserParameter uma única vez, pois o nome do script não muda, apenas o seu conteúdo, logo não preciso reiniciar o agente ou o proxy toda vez que alterar o script.

Basta criar os itens no Zabbix utilizando como chave o que foi passado no comando zabbix_get na opção -k (de Key - Chave em inglês).

Para saber mais:
Passagem de parâmetros em Shell Script;
Case em Shell Script;
UserParameter.

sexta-feira, 26 de abril de 2013

Modem USB Huawei E173 no CentOS 6.2

Introdução:
Esse modem é muito comum e disponível em todas as operadoras do Brasil, a instalação é relativamente simples, mas pode dar muita dor de cabeça se não forem alguns macetes, acredite em mim.

Suprir as dependências:
# yum install libusb usbutils

Instalando o usb_modeswitch a partir dos fontes:
Esse é o macete mais importante, sofri, sofri, sofri, por ter instalado o pacote .rpm, baixe os fontes e compile.

Os pacotes podem ser obtidos em http://www.draisberghof.de/usb_modeswitch/#download. Por exemplo, para a versão no momento em que escrevo esse post, usei os comandos:
# wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-1.2.5.tar.bz2
# wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20121109.tar.bz2
# tar -xjvf usb-modeswitch-1.2.5.tar.bz2
# tar -xjvf usb-modeswitch-data-20121109.tar.bz2

# cd usb-modeswitch-1.2.5
# make install
gcc -o usb_modeswitch usb_modeswitch.c -Wall -l usb
install -D -s --mode=755 usb_modeswitch /usr/sbin/usb_modeswitch
install -D --mode=755 usb_modeswitch.sh /lib/udev/usb_modeswitch
install -D --mode=644 usb_modeswitch.conf /etc/usb_modeswitch.conf
install -D --mode=644 usb_modeswitch.1 /usr/share/man/man1/usb_modeswitch.1
install -d /var/lib/usb_modeswitch
install -D --mode=755 usb_modeswitch_dispatcher /usr/sbin/usb_modeswitch_dispatcher

# cd ../usb-modeswitch-data-20121109
# cp 40-usb_modeswitch.rules /lib/udev/rules.d
# cp -r usb_modeswitch.d /usr/share/usb_modeswitch

Conecte o modem.

Verifique se o mesmo foi reconhecido pelo sistema:
# dmesg
usb 1-6: new high speed USB device using ehci_hcd and address 122
usb 1-6: New USB device found, idVendor=12d1, idProduct=1c05
usb 1-6: New USB device strings: Mfr=2, Product=1, SerialNumber=0
usb 1-6: Product: HUAWEI Mobile
usb 1-6: Manufacturer: HUAWEI
usb 1-6: configuration #1 chosen from 1 choice
scsi11 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 122
usb-storage: waiting for device to settle before scanning
scsi12 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 122
usb-storage: waiting for device to settle before scanning
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems
option 1-6:1.0: GSM modem (1-port) converter detected
usb 1-6: GSM modem (1-port) converter now attached to ttyUSB0
option 1-6:1.1: GSM modem (1-port) converter detected
usb 1-6: GSM modem (1-port) converter now attached to ttyUSB1
option 1-6:1.2: GSM modem (1-port) converter detected
usb 1-6: GSM modem (1-port) converter now attached to ttyUSB2


# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2

Baixar o rpm do Gammu:
Os pacotes podem ser obtidos em http://wammu.eu/download/, você vai precisar baixar dois pacotes gammu e  libGammu. Para a versão no momento em que escrevo esse post, usei os comandos:
# wget http://download.opensuse.org/repositories/home:/Nijel/CentOS_CentOS-6/x86_64/gammu-1.32.0-1.2.x86_64.rpm
# wget http://download.opensuse.org/repositories/home:/Nijel/CentOS_CentOS-6/x86_64/libGammu7-1.32.0-1.2.x86_64.rpm
# yum install gammu-1.32.0-1.2.x86_64.rpm libGammu7-1.32.0-1.2.x86_64.rpm
Segundo macete, usei o yum para instalar os pacotes, pois ele já verifica as dependências no sistema.

Criar o arquivo gammurc:
# vi/etc/gammurc
[gammu]

port = /dev/ttyUSB0
connection = at19200
model = at
synchronizetime = yes
logfile = /var/log/gammu.log
logformat = textalldate
use_locking =
gammuloc =
name=e173s


Testar o modem:
# gammu --identify
Device               : /dev/ttyUSB0
Manufacturer         : Huawei
Model                : E173 (E173)
Firmware             : 21.015.01.03.149
IMEI                 : 35XXXXXXXXXXX15
SIM IMSI             : 72XXXXXXXXXXX76


# echo "Teste de envio" | gammu --sendsms TEXT 9XXXXXX9
If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network answer..OK, message reference=4


Obs. 9XXXXXX9 é o número do celular para onde a mensagem será enviada.

Agradecimentos:
Agradeço ao meu amigo Éderson Ribeiro (Dérsão), na realidade ele me deu todos os toques importantes, eu quebrei muito a cabeça e não ia, o que eu fiz foi só colocar neste artigo o que ele me ensinou ;-)

terça-feira, 18 de dezembro de 2012

Coleção de Ícones para Zabbix

Fiz uma pequena coleção de ícones para Zabbix para usar nos meus mapas e estou disponibilizando aqui!

Abaixo uma imagem deles:

Marcelo Ariatti disponibilizou uma série de ícones feitos por ele, e me autorizou a disponibiliza-los aqui!

Abaixo uma imagem deles:

 A utilização e distribuição é livre.

segunda-feira, 10 de dezembro de 2012

Conversão de Máquina Física em Máquina Virtual

Introdução:
O VMware vCenter Converter Standalone permite converter máquinas físicas em virtuais, o que já é bem interessante, mas além disso ele permite fazer essa conversão direto para um servidor de virtualização VMware ESX ou VMware ESXi.

Instalação do VMware vCenter Converter Standalone
Instalar a última versão do software VMware vCenter Converter Standalone no site da VMware, é necessário cadastro gratuito no site.
O processo é bem simples, next, next, finish.

Processo de Conversão da máquina
Abra o VMware vCenter Converter Standalone e clique em “Convert machine”.

Configure as opções de acordo com as necessidades:
Select source type: Tipo de máquina de origem.
Specify the powered-on-machine: A própria máquina local ou uma máquina remota.
A remote machine:
Ip addres or name: Nome ou IP da máquina.
    User name: Login da máquina.
    Password: Senha do usuário acima.
    OS Family: Escolher entre Windows ou Linux.

Clique em “View source details...”.

No alerta que surge clique em “Yes”.

O software faz o levantamento das configurações da máquina. Aguarde.

Surge a janela com as configurações da máquina. Confira os dados e clique em “Close”.

Se tudo estiver correto clique em “Next”.

No aviso do certificado clique em “Ignore”.

Surge a janela com as informações da máquina de destino, se você quiser pode alterar o nome da máquina, observe também que são exibidas todas as VMs existentes no destino e seu status atual, se tudo estiver certo clique em “Next”.

Nesta tela podemos escolher qual datastore e versão da máquina virtual serão utilizados. Clique em “Next”.

Este é o resumo de acordo com as informações levantadas, uma série de configurações pode ser realizada, mas o que nos interessa é a seção “Helper VM network”, clique em “Edit”.

É preciso utilizar um IP da mesma rede que a máquina que será migrada, faça as configurações necessárias e clique em “Next”.

Resumo da conversão, se tudo estiver de acordo clique em “Finish”.

O processo inicia e exibe o tempo estimado inicial.

Durante o processo de conversão, o tempo estimado é automaticamente ajustado.

Se tudo ocorreu de forma correta, a mensagem de “Completed” é exibida em “Status”.

Alterações pós-conversão
Conecte-se no Servidor de Virtualização para onde a máquina foi migrada.

Selecione a máquina e clique em “Power On”.

Depois de iniciada a máquina é preciso alterar o script de inicialização da placa de rede, anote o endereço MAC da placa de rede.

Vamos copiar o conteúdo do script de inicialização original da máquina e edita-lo.

Alterando o endereço MAC para o atual.

Desligue a máquina antiga e reinicie a máquina nova.

Grace Hopper

10 de Dezembro é o dia do nascimento de duas mulheres muito importantes para a área de computação: Ada Lovelace e Grace Hopper,  hoje quero falar sobre a segunda, desde que lí essa história na lista do Linuxchix Brasil, nunca mais esqueci, e resgatei a história no blog da Sulamita Garcia, num post de 2006, que reproduzo abaixo.

Grace Brewster Murray nasceu em Nova York, e chegou ao PhD em Matemática em 1934, com a tese “Novos critérios de irredutibilidade”(relacionado a polinômios). Seus feitos mais memoráveis são a criação do primeiro compilador, e o Cobol, que segundo o Wikipedia foi inspirado no FLOW-MATIC(de autoria dela), a primeira linguagem de programação a se aproximar da linguagem humana ao invés da linguagem de máquina.

Porém, em uma visita ao Brasil, tivemos a honra de conhecer algumas outras histórias curiosas a respeito dela de alguem que a conheceu pessoalmente e esteve em uma de suas palestras, Jon Hall Maddog. A primeira é que ela dizia que era melhor pedir desculpas que pedir permissão. Quando você queria fazer alguma coisa, se você dissesse ao seu chefe “posso fazer tal coisa, será bom por isto isto e isto”, geralmente ele vai pedir que vc preencha um relatorio, escreva porque seria bom, qual a previsão, o cronograma, as consequencias… O invés disso, você vai lá e faz. E quando vierem dizer “mas você fez isto!” você diz “desculpe, fiz, mas olha como ficou legal!”. Deve ter funcionado com ela, pois ela tentou se aposentar pelo menos 5 vezes(ela se aposentava e eles a chamavam novamente para o trabalho).

Outra foi sobre os nano e pico segundos. Ela é do tempo daqueles computadores enormes, que processavam informações em segundos ou centésimos de segundos. Ela certa vez conversando com um cadete estava falando: “sabe, eu posso entender o que é um centesímo de segundo, até mesmo um milésimo de segundo, mas não consigo entender um nanosegundo. Faz o seguinte, me arrume um nanosegundo”. Ele perguntou “como, oficial?” e ela repetiu “me arrume um nanosegundo”. Ele acatou, e frequentemente quando ela o encontrava, ela cobrava novamente “e o meu nanosegundo? Eu não vou esquecê-lo, me consiga um nanosegundo”. Meses depois, este cadete vem até ela e entrega uma folha de papel. Ela pergunta “o que é isto?” ele diz “isto é o seu nanosegundo. Esta é a distância que a luz percorre em um nanosegundo”. Ela ficou encantada, e como sempre fazia palestras sobre computação, passou a distribuir nanosegundos nas palestras: folhas de papel de 29.9792458 cm(segundo o wikipedia a medida que a luz percorre em um nanosegundo é esta). Alguns anos depois, ela encontrou este mesmo cadete, mas agora ele já era capitão. Ela disse “sabe, você fez um trabalho tão bom aquela vez com o nanosegundo, será que você conseguiria para mim um picosegundo?” Desta vez ele levou menos de um dia, aparecendo no outro dia com uma semente de pimenta preta, e a depositou sobre a mesa. Ele diste “este é o seu picosegundo. Em um picosegundo, a luz vai de um lado a outro desta semente.” A partir de então, ela passou a distribuir picosegundos nas suas palestras, e segundo Maddog, ele ainda tem o dele guardado.

Obrigada Almirante, por seu exemplo nos encorajar e servir de inspiração a todos.