Você está na página 1de 30

Expediente editorial

Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br

Much ado about nothing


Muito barulho por nada, em traduo literal, o significado do tema do editorial desta edio, que tambm ttulo da comdia do Bardo de Avon, William Shakespeare (15641616). A mesma expresso poderia ser usada para descrever a nova celeuma criada em torno de um recurso que considero muito bem-vindo a qualquer sistema que tem a pretenso de manter um nvel mnimo de segurana, e ao qual a Microsoft recentemente declarou suportar oficialmente a partir da prxima verso do Windows. Resumo da pera: os PCs e notebooks passariam a poder bloquear a inicializao do Linux ou de qualquer outro sistema operacional, caso o Windows 8 estivesse instalado nesse hardware anteriormente. O responsvel pelo bloqueio seria o recurso Secure Boot do firmware UEFI (Unified Extensible Firmware Interface), doravante disponvel por padro em todos os computadores de arquitetura Intel. Assim, de acordo com a verso 2.3.1 da especificao UEFI, publicada em 06 de abril deste ano, caso o recurso Secure Boot esteja ativado, o firmware UEFI permitir apenas a inicializao de sistemas operacionais que disponham de uma assinatura digital vlida, seja ela proveniente do fabricante da placa-me ou do firmware UEFI, e que ficaria armazenada em um banco de dados especial. Que ningum se engane: a ideia boa para todo mundo, pois aumenta o nvel de segurana dos sistemas e torna mais difcil contornar os mecanismos de proteo de qualquer sistema operacional. Mesmo que esses mecanismos estejam configurados do modo mais seguro possvel, se um vrus infectar o setor de boot e carregar um aplicativo malicioso na memria, poder tranquilamente desativar qualquer configurao de segurana implementada. Caso o computador s inicie gerenciadores de inicializao, sistemas operacionais ou hypervisors de fontes confiveis, no mais possvel manipular esses sistemas e contornar suas configuraes de segurana. Para iniciar o Linux em uma mquina equipada com esse tipo de mecanismo de segurana, tanto o gerenciador de boot quanto o kernel precisariam ser assinados com uma chave privada, e a chave pblica deveria estar disponvel no banco de dados do fabricante da placa-me, em um esquema mais ou menos semelhante ao que ocorre hoje com os navegadores de Internet. Esses fabricantes provavelmente no tero nenhum problema em armazenar as chaves pblicas de sistemas Linux comerciais, como os da Red Hat, Oracle, SUSE ou Canonical. Para projetos comunitrios, tais como Debian, Fedora etc, improvvel que os fabricantes de hardware disponibilizem as chaves pblicas dessas distribuies. Para esses casos, entretanto, a especificao publicada pela UEFI prev a solicitao de senha no item 5 do seu pargrafo 27.7.3.3 caso o firmware se depare com um sistema no assinado. Com isso, evita-se que um agressor manipule ocultamente o processo de boot, sem que seja necessrio desativar totalmente o recurso Secure Boot. Desse modo, todos os sistemas operacionais modernos e no apenas o Windows 8 adentrariam o Nirvana do nvel de segurana adequado era da computao em nuvem. Demorou! No se incomode com o rudo de fundo...
Rafael Peregrino da Silva Diretor de Redao

EDITORIAL

Editores Flvia Jobstraibizer fjobs@linuxmagazine.com.br Kemel Zaidan kzaidan@linuxmagazine.com.br Editora de Arte Larissa Lima Zanini llima@linuxmagazine.com.br Estagirio Felipe Brumatti Sentelhas fsentelhas@linuxmagazine.com.br Colaboradores Adriano Matos Meier, Alexandre Borges, Alexandre Santos, Augusto Campos, Charly Khnast, Dario Bestetti, Erik Brwaldt, Gavin W. Burris, Hans-Peter Merkel, Jon maddog Hall, Klaus Knopper, Kurt Seifried, Michael Uelschen, Tim Schrmann, Zack Brown. Traduo Emersom Satomi, Raquel Lucas, Rodrigo Garcia. Reviso Cristiana Ferraz Coimbra Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kiling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jrg Luther, Nils Magnus. Anncios: Rafael Peregrino da Silva (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 3675-2600 Penny Wilby (Reino Unido e Irlanda) pwilby@linux-magazine.com Amy Phalen (Amrica do Norte) aphalen@linuxpromagazine.com Hubert Wiest (Outros pases) hwiest@linuxnewmedia.de Diretor de operaes Claudio Bazzoli cbazzoli@linuxmagazine.com.br Na Internet: www.linuxmagazine.com.br Brasil www.linux-magazin.de Alemanha www.linux-magazine.com Portal Mundial www.linuxmagazine.com.au Austrlia www.linux-magazine.es Espanha www.linux-magazine.pl Polnia www.linux-magazine.co.uk Reino Unido www.linuxpromagazine.com Amrica do Norte Apesar de todos os cuidados possveis terem sido tomados durante a produo desta revista, a editora no responsvel por eventuais imprecises nela contidas ou por consequncias que advenham de seu uso. A utilizao de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permisso expressa da editora. Assume-se que qualquer correspondncia recebida, tal como cartas, emails, faxes, fotograas, artigos e desenhos, sejam fornecidos para publicao ou licenciamento a terceiros de forma mundial no-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux uma marca registrada de Linus Torvalds. Linux Magazine publicada mensalmente por: Linux New Media do Brasil Editora Ltda. Rua So Bento, 500 Conj. 802 S 01010-001 So Paulo SP Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas 2004 - 2011: Linux New Media do Brasil Editora Ltda. Impresso e Acabamento: RR Donnelley Distribuda em todo o pas pela Dinap S.A., Distribuidora Nacional de Publicaes, So Paulo. Atendimento Assinante www.linuxnewmedia.com.br/atendimento So Paulo: +55 (0)11 3675-2600 Rio de Janeiro: +55 (0)21 3512 0888 Belo Horizonte: +55 (0)31 3516 1280 ISSN 1806-9428 Impresso no Brasil

www.linuxmagazine.com.br

NDICE NDICE

CAPA
Super mquinas No revolucionrio mundo das super mquinas, o consumo de informao mais rpido do que corriam os carros no seriado dos anos 80. O que fazer para ganhar desempenho e agilidade? 29

Veloz desde o incio O systemd um conjunto de solues que promete revolucionar o processo de boot. Mas toda essa tecnologia realmente aumenta a velocidade?

30

Processamento em cluster Como congurar um cluster de computao de alto desempenho com Kickstart, SSH, Son of Grid Engine e outras ferramentas livres.

36

Nas nuvens com XCP O uso inteligente de solues de virtualizao, como cenrio para o futuro.

46

www.linuxmagazine.com.br

Linux Magazine 84 | NDICE

COLUNAS
Klaus Knopper Charly Khnast Zack Brown Augusto Campos Alexandre Borges Kurt Seifried 10 12 14 16 18 19

PROGRAMAO
Pequeno notvel 49

NOTCIAS
Geral Abertas as incries para a LinuxCon 2011 Bada poder ter seu cdigo aberto Se voc est procurando uma linguagem de script com interpretador leve e fcil de integrar com seus aplicativos, provavelmente chegar linguagem Lua. No entanto, um concorrente bem convel, chamado Squirrel, se esconde sua sombra h muitos anos. 22

CORPORATE
Notcias Novos membros ingressam na Aliana para Virtualizao Aberta Ameaas sobre dbias patentes Google compra mais patentes da IBM 22

ANLISE
Solues paralelas 66 26 28 A biblioteca da Intel, Threading Building Blocks (TBB), ajuda desenvolvedores a distribuir tarefas de processamento paralelo entre mltiplos processadores ou ncleos. Esse elegante conceito de tarefas substitui a irritante rotina de trabalhar com las de processamento. Dana dos discos 73

Coluna: Jon maddog Hall Coluna: Alexandre Santos

TUTORIAL
Olho mgico 54

Vandalismo, danos propriedade e roubo so preocupaes srias para muitas pessoas, mas o Linux e o software livre de monitoramento de video lhe do uma chance de pegar os culpados. Se no pode venc-los... 60

Discos de alta capacidade usam a tabela de partio GUID ao invs do antigo master boot record, mas os aplicativos fdisk usuais do Linux no conseguem trabalhar com o novo esquema de particionamento. Veja como contornar isso usando as ferramentas certas.

REDES
Um passo alm do Nagios OSS A OpService uma empresa brasileira que mostra como possvel criar um negcio a partir de um conhecido software de cdigo aberto, atravs da prestao de servios, personalizao e desenvolvimento de software. 62

SERVIOS
Editorial Emails Para a maioria das empresas, o comunicador instantneo inimigo da produtividade, mas podemos torn-lo um aliado. Linux.local Preview 03 06 78 82

Linux Magazine #84 | Novembro de 2011

Coluna do Alexandre Borges

Udev: ltimos exemplos


Nosso colunista, Alexandre Borges, encerra sua saga pica pelo sistema UDEV com alguns exemplos e chave de ouro.

COLUNA

omo havia prometido, neste ms mostrarei ao leitor alguns conceitos e formas de como utilizar o framework do Udev eficientemente. Esses exemplos, como ser facilmente entendido, no so mais difceis ou complicados, mas apenas foram deixados para o final por questo da evoluo lgica do assunto. Vamos modificar nosso arquivo de regras /etc/udev/ rules.d/99-usb-linuxmagazine.rules (criado para fins de teste nas ltimas colunas) e inserir a seguinte linha:
ACTION=="add", SUBSYSTEM=="block", ENV{ID_SERIAL_ SHORT}=="5B671A000C6A", RUN+="/bin/mkdir -p /media/teste", RUN+="/bin/sh -c '/bin/mount -t vfat /dev/sdb1 /media/teste'"

ca diferena que estamos criando a varivel de ambiente MY_MOUNT_POINT no framework do Udev e depois usando a mesma na linha de configurao seguinte. Alis, alm da varivel MY_MOUNT_POINT, tambm foi utilizada a varivel DEVNAME, que aponta para o dispositivo inserido /dev/sdb1. claro que possvel impor esta mesma dinmica para remover dispositivos. Observe a nova linha de configurao:
ACTION=="remove", SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="5B671A000C6A", RUN+="/bin/umount" $env{MY_MOUNT_POINT}" , RUN+= "/bin/rmdir $env{MY_MOUNT_POINT}"

Essa linha diz o seguinte: ao inserir (ACTION==add) o dispositivo de bloco (neste caso, um pendrive) com nmero de srie 5B671A000C6A (lembrando que esta varivel pertence ao ambiente do Udev e pode ser obtida com udevadm info --query=all name=/dev/sdb), crie o diretrio /media/teste (tarefa realizada pela diretiva RUN) e, em seguida, monte o mesmo no diretrio /media/teste (comando executado pela segunda ocorrncia da diretiva RUN). Aps essa modificao, necessrio fazer uma releitura das regras atravs do comando /etc/init.d/udev restart. Se tudo correu bem, o pen drive ser montado em /media/teste como descrito acima (em vez de ser montado em /media/E83D-65C0, refletindo assim o rtulo interno do dispositivo). A mesma linha acima poderia ser substituda por:
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="5B671A000C6A", ENV{MY_MOUNT_POINT}="/media/teste" ACTION=="add", SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="5B671A000C6A", RUN+="/bin/mkdir -p $env{MY_MOUNT_POINT}", RUN+="/bi n/mount -t vfat $env{DEVNAME} $env{MY_MOUNT_POINT}"

Neste caso, as alteraes feitas so que o valor da diretiva ACTION remove, o dispositivo desmontado (na primeira diretiva RUN) e o ponto de montagem apagado em seguida (segunda diretiva RUN). O leitor pode fazer o exerccio: se o pen drive for literalmente removido, o sistema de arquivos ser desmontado e o diretrio /media/teste tambm ser excludo, desde que no exista nenhum processo utilizando tal dispositivo. O que foi feito acima pode ser repetido para o Galaxy Tab da Samsung, prestando apenas ateno no detalhe de que existem, em geral, dois dispositivos de armazenamento dentro dele (um interno e outro externo um SD card), necessitando o leitor coletar todas as variveis dos dispositivos de armazenamento (atravs dos comandos udevadm info --attribute-walk --name=/dev/sdb | more ou udevadm info --query=all --name=/dev/sdb, por exemplo) e criando regras para que eles sejam identificados unicamente (no meu caso, aparecem como /dev/sdb e /dev/sdc). Espero que o leitor tenha gostado desta srie de colunas a respeito do framework do Udev e que isso o inspire a procurar e pesquisar mais sobre este assunto to facinante que acompanha o fantstico mundo Linux.
Alexandre Borges (alex_sun@terra.com.br) instrutor independente e ministra regularmente treinamentos de tecnologia Oracle, Symantec e EC-Council (CEH e CHFI), alm de estar sempre envolvido com assuntos relacionados ao kernel Linux.

interessante comparar e perceber que, no fundo, essas duas novas linhas so iguais s do exemplo anterior. A ni-

18

www.linuxmagazine.com.br

Matria | SEO

Otimizao de desempenho

Super mquinas
No revolucionrio mundo das super mquinas, o consumo de informao mais rpido do que corriam os carros no seriado dos anos 80. O que fazer para ganhar desempenho e agilidade? por Flvia Jobstraibizer

CAPA

mbora o ttulo deste artigo nos remonte poca do seriado A Super Mquina criado em 1982, onde um poderoso carro era dotado de super recursos (para a poca e at a frente de seu tempo), na era da informao, falamos de computadores otimizados, desempenho de mquinas, tempos de resposta e tudo o mais que agilize o armazenamento, a troca de informaes e at mesmo o uso do que sero os computadores do futuro: cada vez mais conectados, velozes e acessveis. Quando falamos de virtualizao, clusteres, nuvem, e todos esses jarges da moda, sempre pensamos em duas coisas: desempenho e segurana, nesta ordem.

Em se tratando do segundo item, ns da Linux Magazine j abordamos e incansavelmente trazemos novidades sobre o assunto. Mas a questo nesta edio como criar mquinas com excelente desempenho, pensando tambm em questes como consumo de energia, aquecimento (afinal mquinas que superaquecem tendem a ser mais lentas), dimensionamento de hardware versus necessidade e muitas outras questes que abordam os aspectos da otimizao e desempenho de computadores e parques computacionais. Nesta edio da Linux Magazine, voc ir conhecer a computao HPC, sigla em ingls para Computao de Alto Desempenho e vai aprender como criar mquinas

em cluster, dimensionar hardware e otimizar o ambiente. Conhea tambm o systemd, um grupo de ferramentas que juntas so uma soluo revolucionria para otimizao do processo de boot de computadores. Esta edio tambm vem recheada de novidades. Conhea o Zoneminder, soluo de videomonitoramento que voc pode criar facilmente com recursos domsticos. Programadores vo se surpreender com a facilidade de programao da linguagem Squirrel, utilizada em grande parte para a criao de jogos, mas que provavelmente, sua mente criativa ir inventar para ela diversos usos. Aproveite esta edio e boa leitura!

Matrias de capa
Veloz desde o incio Processamento em cluster Nas nuvens com XCP 30 36 46

Linux Magazine #XX | Ms de 200X Ms M 00X 0X X

2 29

Squirrel: Linguagem de script | PROGRAMAO

Introduo linguagem de script Squirrel

PROGRAMAO

Pequeno notvel
Se voc est procurando uma linguagem de script com interpretador leve e fcil de integrar com seus aplicativos, provavelmente chegar linguagem Lua. No entanto, um concorrente bem convel, chamado Squirrel, se esconde sua sombra h muitos anos. por Tim Schrmann

mais de oito anos, Alberto Demichelis estava trabalhando na famosa empresa de jogos Crytek, tendo que lidar com seu primeiro game, o Far Cry, cuja lgica de programao seria feita com a linguagem de script Lua. Quando tentou integrar os resultados, Demichelis teve um problema com a automao do gerenciamento de memria (no coletor de lixo, ou garbage collec-

tor). Aps se frustrar com algumas solues alternativas, decidiu dar um temido passo e criou sua prpria linguagem de script. Ele queria que seu interpretador fosse como o do Lua pequeno, leve e fcil de integrar com qualquer outro aplicativo. O resultado foi o Squirrel [1], cujo interpretador atualmente possui apenas 442KB.

Velhos amigos
O Squirrel uma linguagem de script imperativa e orientada a objetos, cuja sintaxe parece uma mistura de C, C++, Java, JavaScript e Python. Ele copia as tabelas da linguagem Lua, usando uma estrutura de dados flexvel em quase tudo, e tem um recurso de coleta de lixo que automatiza o gerenciamento de memria. O ponto central que o Squirrel combina uma sintaxe simples e familiar com os benefcios da linguagem Lua. A implementao dos interpretadores foi colocada sob a licena MIT 3.0. O cdigo-fonte, ento, no apenas aberto, mas tambm pode ser usado sem custos em projetos comerciais.

Listagem 1: Mximo denominador comum


01 // mximo denominador comum entre a e b 02 function mdc(a, b=10) 03 { 04 if (b == 0) return a; 05 else { 06 if (a > b) return mdc(a-b, b); 07 else return mdc(a, b-a); 08 } 09 } 10 11 // calcula alguns MDCs 12 local x=1; 13 while(x < 10) 14 { 15 print (mdc(x, 27)+\n); 16 x = x+1; 17 }

Atualmente o Squirrel usado principalmente em jogos de computador, os mais conhecidos sendo Left 4 Dead 2, Final Fantasy Crystal Chronicles: My Life as a King e Portal 2 [2]. Os desenvolvedores do clone do Transport Tycoon Deluxe, o OpenTTD, tambm escreveram o cdigo de inteligncia artificial dos jogadores automatizados com o Squirrel (figura 1). Se voc usa o IDE Code::Blocks, tambm j se deparou com o Squirrel, que usado para expandir os recursos [3] (gura 2) do programa. Assim, a linguagem recomendada tambm para outros aplicativos alm de jogos, como prova o Squirrel Shell, que pode ser usado at como substituto do Bash [4].

Instalao manual
Infelizmente, o Squirrel no est nos repositrios das distribuies mais populares. Isso geralmente s d ao usurio uma alternativa: pegar a referncia de implementao no site do Squirrel e compilar o interpretador [1]. O cdigo-fonte est disponvel em duas verses: uma verso standalone, que executa os scripts diretamente na linha

Linux Magazine #84 | Novembro de 2011

49

PROGRAMAO | Squirrel: Linguagem de script

de comando, e uma biblioteca esttica, que voc pode incluir em seus programas C++. Como bnus, h ainda a Squirrel Standard Library, com um conjunto de funes teis, programas-exemplo e um PDF de referncia para a linguagem. Para compilar o interpretador, voc precisa de um compilador C++. Assim voc pode executar o comando make no diretrio criado com a descompactao do pacote. Isso coloca o interpretador standalone sq no diretrio bin. Voc pode ento, indicar qual script Squirrel quer executar em conjunto com o interpretador:
sq meuscript.nut

Figura 1 Oponentes automatizados no OpenTTD usam inteligncia articial


codicada com scripts Squirrel.

Para acelerar a execuo do script, o interpretador primeiro o converte para bytecode. Voc pode pedir isso explicitamente atravs do comando:
sq -c meuscript.nut -o meuscript.cnut

o apontador NULL no C, ou nil em Lua. Um ponto-e-vrgula completa cada expresso. Se uma expresso for a nica coisa em uma linha, como no exemplo anterior, voc pode deixar de lado o ponto-e-vrgula. O Squirrel sensvel a maisculas. Os comentrios ficam entre /* e */, ou voc pode usar // para comentrios de uma nica linha.

Listagem 2: Delegao
01 02 03 04 05 06 07 08 09 10 11 12 13 14 Mixer <- { } Mixer.Content <- function() { ::print(_nomecor); } local cor = { _nomecor="vermelho" } Cor.setdelegate(Mixer) Cor.Content();

Em seguida, execute o meuscript. cnut resultante.


sq meuscript.cnut

Controle
As estruturas de controle, if, while e for funcionam como em C ou C++. A listagem 1 usa-os para calcular o mximo denominador comum de dois nmeros. Alm disso, o Squirrel tem um foreach prtico:
local a=[1,2,3,4,5,6] foreach(numero in a) print("nmero="+numero+"\n");

Se voc executar o sq sem nenhum parmetro, isso inicia o interpretador em modo interativo, no qual voc pode digitar comandos Squirrel diretamente (gura 3). Para sair do prompt, digite [Ctrl]+[C].

Listagem 3: Herana
01 class Ponto { 02 x = 0; 03 y = 0; 04 05 function construtor(x1,y1) 06 { 07 this.x=x1; this.y=y1; 08 } 09 } 10 11 12 class Retangulo extends Ponto { 13 altura = 0; 14 largura = 0; 15 16 function construtor (x,y, h,b) 17 { 18 this.altura=h; this.largura=b; 19 base.construtor(x,y); 20 } 21 function Saida() 22 { 23 ::print( x+","+y+", "+altura+","+largura+" \n"); 24 } 25 }

Ol mundo!
O tradicional Ol mundo!, no Squirrel, tem uma nica linha:
print("Ol mundo!");

A tipagem dinmica facilita o uso de variveis que voc pode preencher com contedo arbitrrio:
local a = 3.14; local a = "Tux ama Agnes\n"; local a = null;

A listagem 1 tambm mostra como os programadores definem uma funo no Squirrel: a palavra-chave function seguida pelo nome da funo e os parmetros entre parnteses; return retorna os resultados do processamento. Na listagem 1, b est definido como 10. O interpretador vai usar isso se o segundo argumento de uma chamada estiver ausente. O Squirrel permite inclusive um nmero varivel de parmetros:
function foo(x, ...) { local a = x+1; local b = vargv[0]; /* ... */ }

As cadeias de caracteres podem usar os caracteres de escape que voc talvez j conhea do C. A palavra-chave null esvazia a varivel, sendo assim semelhante a, por exemplo,

50

www.linuxmagazine.com.br

Squirrel: Linguagem de script | PROGRAMAO

local cores = ["vermelho", "verde", "azul"];

Em outras linguagens, essa estrutura de dados chamada de dicionrio ou campo de dados associativo. Como uma agenda de telefones, ela armazena qualquer dado que voc passar com uma chave nica. Voc pode armazenar, por exemplo, o valor Paulo sob a palavra-chave Nome. No Squirrel, os programadores podem gravar nmeros e funes completas como dados payload (no apenas texto) e possvel misturar as coisas conforme a necessidade:
Figura 2 O ambiente de desenvolvimento Code::Blocks pode ser expandido
com scripts Squirrel. local teste= { cor="vermelho" b=function(x) { return x*x; } }

Listagem 4: Classe alternativa


01 Ponto <- class { 02 x = 0; 03 y = 0; 04 05 function construtor(x1,y1) 06 { 07 this.x=x1; this.y=y1; 08 } 09 }

Listagem 5: Atributos
01 class Teste </ teste = Atributo da classe /> { 02 </ teste = Atributo da funo /> function PrintTeste() 03 { 04 ... 05 } 06 }

Voc pode passar o nmero que quiser de argumentos para essa funo e usar a matriz vargv para acess-los na funo principal. As funes so objetos de primeira classe no Squirrel: voc pode us-las em variveis ou pass-las como argumentos em outras funes. Para economizar digitao, as verses 3.0 e posteriores usam expresses lambda, ou seja, funes annimas. Elas so muito teis no caso de ordenao e busca:
local numeros = [9,3,2,4,7]; numeros.sort(@(a,b) a <=> b);

O Squirrel refere-se a cada par chave/valor como um slot. O acesso aos dados armazenados possvel atravs da notao com pontos:
print(teste.cor); print(teste.b(2));

possvel alterar um slot existente com uma simples designao:


teste.b = 20;

Para acrescentar um novo slot, use o operador <-:


teste.c <- 20;

Uma outra alternativa seria fazer assim:


numeros.sort(function(a,b){ return a <=> b; } );

A partir da verso 3.0, as tabelas tambm podem usar notao JSON:


local cor = { "nome": "azul", "cor_numero": 173, "variacoes": ["metalico","matt"] }

Listagem 6: Meta
01 class Ponto 02 { 03 ... 04 function _somar(outroponto) 05 { 06 return ::Ponto(x+ outroponto.x,y+outroponto.y); 07 } 08 }

O operador comparativo <=> tambm foi introduzido na verso 3.0. Ele retorna 0 se dois valores forem iguais. sort() uma funo de qualquer matriz, o que realmente ajuda na ordenao.

Tabelas
Alm de matrizes no estilo C ou C++, mostradas no cdigo a seguir, o Squirrel tambm permite tabelas.

O Squirrel armazena variveis, funes e tabelas globais em uma tabela global (ou root). No final da listagem 1, os slots para a funo 2mdc() e a varivel x so adicionados tabela. O sinal de dois pontos antes permite que voc acesse um desses slots na tabela-root.

Linux Magazine #84 | Novembro de 2011

51

PROGRAMAO | Squirrel: Linguagem de script

::mdc(1,2);

Na prtica, os programadores sempre precisam navegar por listas. No Squirrel, voc pode usar geradores para ajudar nisso. Essas funes especiais trabalham como uma mquina de bolas de chiclete, que solta a prxima bola sempre que voc a aciona.

D-me uma!
Para criar um gerador, voc s precisa marcar o valor de retorno de uma funo normal com yield:
function fornecedor(n) { for(local i=0; i<n; i=i+1) yield i; return null; }

Figura 3 O @ em frente da string mantm todos os caracteres entre aspas.

Quando voc chama a funo a seguir, ela retorna o gerador interrompido (ou seja, a mquina de chicletes em seu estado original):
local entrada=fornecedor(10);

uma thread function tem sua prpria pilha, tabela-root e seu prprio gerenciador de erros. Para converter uma funo em thread function, usa-se suspend() para definir os pontos em que ela deve dormir:
function digadois() { ::print("Primeiro\n"); ::suspend(); ::print("Segundo\n"); }

Objetos
Diferentemente da linguagem Lua, o Squirrel tem alguma orientao a objetos, como voc pode ver na listagem 3. Comeamos definindo a classe Ponto, de quem a classe Retangulo ento derivada. Retangulo sobrescreve a funo Construtor() nesse processo. A palavra-chave base permite o acesso funo de classe bsica. this garante que as variveis nessa classe sejam usadas, em vez de o interpretador criar variveis locais novas. Voc agora pode criar um objeto dentro da classe finalizada:
local umponto = Ponto(1,2);

O comando resume dispara o gerador:


local x=resume entrada;

A funo fornecedor() agora executada exatamente at o comando yield, que retorna o resultado da expresso que o precede nesse exemplo, o contedo de i, ou seja, 1. Depois disso, a funo fornecedor() para de novo. Se voc despert-la com resume, ela vai executar at o prximo yield, que retornaria 2 nesse exemplo. Usando essa abordagem, o loop
while((x=resume entrada)!=null) print(x+"\n");

A seguir, newthread() cria um um objeto thread a partir da funo digadois():


local meuthread = ::newthread(digadois);

e inicia o thread com call():


meuthread.call();

Ele fica executando at o primeiro suspend(). Para acord-lo, use:


meuthread.wakeup();

O Squirrel automaticamente passa esses dois argumentos funo constructor() da classe Ponto e ento retorna um objeto finalizado. Voc pode usar a notao com ponto para acessar suas variveis e funes:
umponto.saida();

pegaria todos os nmeros do gerador de 1 at n.

Parar e continuar
Alm dos geradores, o Squirrel tem threads chamadas de thread functions, que param no meio e podem ser retomados mais tarde. Diferentemente de um gerador,

Voc pode designar uma tabela-me para qualquer tabela. Ento, se procurar uma chave no existente na tabela, o interpretador Squirrel automaticamente delega a requisio para a tabela-me. Na listagem 2, voc pode ver um exemplo simples disso: como _nomecor no existe na tabela Mixer, o interpretador automaticamente consulta a tabela-me, Cor, que gentilmente retorna o valor de _nomecor.

Internamente, o Squirrel gerencia classes como tabelas. A classe Ponto tambm poderia ser escrita como na listagem 4. H um efeito colateral engraado a: voc pode usar retrospectivamente a notao com seta para acrescentar funes e variveis a uma classe:
Ponto.add <- function(c,d) { this.x=this.x+c; this.y=this.y+d; }

52

www.linuxmagazine.com.br

Squirrel: Linguagem de script | PROGRAMAO

Os programadores C++ esto acostumados com uma abreviao mais comum para isso:
function Nova::add(c,d) { this.x=this.x+c; this.y=this.y+d; }

5) podem ento ser lidos e usados

por um sistema de documentao ou ambiente de desenvolvimento.

Mtodos meta
O cdigo seguinte uma opo de abordagem elegante para acrescentar dois Pontos rapidamente:
local p1 = Ponto(1,2); local p2 = Ponto(4,7); local p3 = p1 + p2;

alguma funo interna do Squirrel ou, neste caso, de um operador. Neste exemplo, o Squirrel aprende como aplicar o sinal de + aos Pontos.

Concluso
O Squirrel no merece viver como um patinho feio sombra da linguagem Lua. Trata-se de uma linguagem testada e aprovada, sendo muito mais fcil de aprender no caso de desenvolvedores acostumados orientao a objetos. O fato de ser usada principalmente em jogos de computador no deveria desestimular ningum; pelo contrrio, os jogos geralmente exigem interpretadores muito rpidos e leves. O ponto negativo que a documentao bem sucinta na verdade, trata-se mais de uma referncia, embora inclua, sim, muitos exemplos curtos, sendo fcil de ler e bem abrangente. Para mais informaes, voc pode conferir o wiki (de aparncia meio catica) [5] do Squirrel, ou visitar o frum caso tenha questes em aberto [6].

O preo de se usar as tabelas que todas as funes e variveis ficam pblicas, mas possvel armazenar classes em variveis, assim como funes, ou pass-las para uma funo como parmetros. Como no Java 5, o Squirrel permite anotaes; os programadores podem, assim, anexar metadados a classes e funes. Esses dados, que o Squirrel chama de atributos (listagem

Para poder fazer isso, bastaria implementar a funo _somar() classe Ponto (listagem 6). A funo _somar() pertence ao grupo de mtodos meta. Se sobrescrev-los ou implement-los por si s, voc muda o comportamento de

Mais informaes
[1] Squirrel: http://squirrel-lang.org/ [2] Programas que usam o Squirrel: http://wiki.squirrel-lang. org/default.aspx/SquirrelWiki/ProjectsUsingSquirrel.html [3] Squirrel no Code::Blocks: http://wiki.codeblocks. org/index.php?title=Scripting_Code::Blocks [4] Squirrel Shell: http://squirrelsh.sourceforge.net/ [5] Wiki Squirrel: http://wiki.squirrel-lang.org/default. aspx/SquirrelWiki/SquirrelWiki.html [6] Frum Squirrel: http://forum.squirrel-lang.org/ [7] Listagens deste artigo: http://www.lnm.com.br/ issues/84/squirrel_listagens.zip

Gostou do artigo?
Queremos ouvir sua opinio. Fale conosco em cartas@linuxmagazine.com.br gazine.co br Este artigo no nosso site: noss te: http://lnm.com.br/article/5998 m.br/a e/599

Linux Magazine #84 | Novembro de 2011

53

TUTORIAL | Videomonitoramento

Monitoramento de video com ZoneMinder

TUTORIAL

Olho mgico
Vandalismo, danos propriedade e roubo so preocupaes srias para muitas pessoas, mas o Linux e o software livre de monitoramento de video lhe do uma chance de pegar os culpados. por Erik Brwaldt

icicletas roubadas, carros riscados, pichao nas paredes tudo na porta da sua casa. Quando uma investigao policial desse tipo de crime falha por falta de provas conclusivas, um sistema de monitoramento de video pode fazer milagres. Um monitoramento efetivo de pontos estratgicos no precisa custar o olho da cara. Apenas com um PC Linux, o software livre ZoneMinder [1] e algumas cmeras padro, voc pode mitigar o gasto de centenas de reais.

Preparao
O valor utilitrio de um sistema de monitoramento de video depende da qualidade das cmeras utilizadas. Para que as imagens do video tenham alguma chance de ser aceitas como

evidncia um em processo, precisam ter alta resoluo para que a imagem seja ntida quando for necessrio fazer um zoom para ver detalhes importantes. Como voc pode imaginar, nem toda cmera adequada pra monitoramento de vdeo. Alm disso, deve-se levar em considerao o local. Se quiser monitorar reas ao ar livre, a cmera deve ser projetada para uso externo: no existe vantagem se a chuva estragar o equipamento. Se ocasionalmente houver necessidade de mudar a rea observada, ser necessrio usar uma cmera pan/tilt com motor que movimente a lente em dois eixos para monitorar reas diferentes. As cmeras Pan/Tilt/Zoom (PTZ) suportam um uso ainda mais flexvel. Se necessrio, elas lhe permitem aproximar a imagem da rea monitorada.

Se as reas de monitoramento estiverem em locais escuros, ou se precisar monitorar noite, tambm ser necessria uma fonte de luz infravermelha. Caras, as cmeras profissionais de vigilncia frequentemente incluem diversos leds (diodos emissores de luz) que tm um alcance de at 10 metros em condies climticas ruins. Se estiver usando as webcams mais baratas e normalmente menores para monitorar um ambiente interno, ou se sua cmera de vigilncia no tiver led, podem ser encontradas luzes infravermelhas especiais como componentes avulsos.

Suporte Linux
Embora as cmeras especiais pan/tilt paream todas iguais por fora, elas tm grandes diferenas tcnicas. As lentes so praticamente idnticas em todos

Figura 1 A interface web simplista depois de iniciar o ZoneMinder.

54

www.linuxmagazine.com.br

Videomonitoramento | TUTORIAL

Figura 2 A interface do ZoneMinder permite que as


conguraes necessrias sejam feitas rapidamente.

Figura 3 Descubra a congurao correta


para a cmera.

os modelos disponveis hoje, exceto pela quantidade de pixels, mas muitas cmeras no suportam outros sistemas operacionais e no funcionam no Linux. As que contam com uma placa de interface para TV (TV tuner) e as cmeras S Video analgicas podem frequentemente ser usadas em combinao com o ZoneMinder, supondo que se tenha os drivers Linux para a TV ou a placa de captura. De qualquer forma, deve-se primeiramente checar a lista de compatibilidade do programa [2], especialmente se a inteno for dispr vrias cmeras diferentes em paralelo, tanto internas quanto externas. A falta de drivers para Linux (ainda) pode causar problemas com as cmeras populares USB. Em particular, voc deve ficar longe de cmeras antigas com baixa resoluo. As cmeras desse tipo normalmente no conseguem produzir evidncias teis. Graas a vrios projetos, o suporte de webcams para Linux tm melhorado significativamente nos ltimos anos. Se for usar uma cmera USB, sua primeira tentativa deve ser a GSPCA

[3] e a UVC Video [4], onde se pode

descobrir se a cmera escolhida realmente trabalha com Linux. Como o kernel incluiu ambos os drivers desde a verso 2.6.27, as cmeras classificadas como compatveis pelos projetos funcionaro no Linux sem necessidade de interveno manual. Finalmente, voc deve se assegurar de que o PC de monitoramento tem capacidade suficiente no disco rgido. Os vdeos gravados em alta resoluo, com altas taxas de frames e muito coloridos, consomem uma enorme quantidade de espao.

Instalao do software
O ZoneMinder um aplicativo altamente modular com interface de controle via web. Consequentemente, preciso preencher vrias condies antes de usar o programa. Alm do Video4Linux para suportar as cmeras e placas de video, o servidor web Apache com MySQL, e do Perl, tambm preciso instalar o FFmpeg e os pacotes libjpeg para gravar imagens estticas e em movimento.

Felizmente, os distribuidores Linux mais populares e seus derivados agora incluem pacotes para o ZoneMinder que permitem a instalao do programa diretamente do repositrio usando o Synaptic, MCC ou YaST, o que geralmente resolve qualquer dependncia. Testei o sistema em uma variao especial Live CD do ZoneMinder, mas no a testei exaustivamente porque ela baseada no Xubuntu 8.10, que est descontinuado e no tem drivers para muitas das webcams e das placas de video por avanadas causa da sua idade. Para simplificar a instalao e a configurao do sistema de vigilncia de video, que de certa maneira complexo por conta de todos os pacotes e codecs que requer, o ZoneMinder oferece um script [5] que automatiza com segurana essa tarefa e modifica a memria de configurao. Para comear, copie o script e salve-o com um editor de textos. Para torn-lo executvel, logue-se como root (ou use sudo -s) e aplique chmod +x no script. Depois execute-o.

Linux Magazine #84 | Novembro de 2011

55

TUTORIAL | Videomonitoramento

Figura 4 A tela de congurao do ZoneMinder.

Figura 5 Pr-conguraes facilitam o ajuste das cmeras PTZ e IP.

O script vai fazer todas as alteraes necessrias de uma vez s. Daqui em diante, toda vez que voc inicializar o seu sistema, o Apache vai subir automaticamente. Voc poder ver a interface do ZoneMinder acessandohttp://127.0.0.1/zmdo seu navegador.

Incio
Quando aberto pela primeira vez, o programa aparece com uma interface simples que ainda precisa ser configurada (gura 1). Preste ateno ao valor mostrado no campo Disk:. Ele indica o espao ocupado no disco como porcentagem. Se voc pensa em operar vrias cmeras, esse valor precisa ser o mais baixo possvel para evitar que as gravaes em alta resoluo ocupem toda a memria do disco, mesmo a taxas de frame aceitveis. Se tiver anexado algumas cmeras ao sistema, agora voc precisa integr-las com o ZoneMinder. Testei o

sistema com trs webcams USB diferentes da Logitech e da Chicony. Para adicionar as cmeras ao ZoneMinder, clique no boto New Monitor na janela principal. O programa agora abre outra tela com quatro colunas horizontais no topo. A coluna Source (gura 2) tem os parmetros do disco rgido que precisa ser modificado. O ZoneMinder facilita o processo graas a uma ferramenta que l os dados tcnicos da cmera. Para fazer isso entre com o seguinte comando no terminal (gura 3):
$ zmu -d nome_do_equipamento -V 1 -q -v

aos valores nas linhas Width e Height para resoluo em pixels. Na seo Picture Attributes, veja a linha Palette e preste ateno na tabela de cores. Finalmente, no final do processo do programa, ir encontrar a entrada Format que lista os padres de TV (NTSC, PAL, SECAM). De posse dessas informaes, voc pode completar as lacunas necessrias na janela de configurao Source do ZoneMinder. Assegure-se de que a entrada do campo Capture Method seja Video For Linux version 2; ele suporta mais ou menos todas as cmeras recentes. Depois de completar as entradas, clique no boto Save. Em seguida, v at a aba General (gura 4), onde, na caixa de texto Name, voc pode informar um nome intuitivo para a localizao da cmera antes de definir o modo de operao do aparelho. Normalmente no necessrio modificar a entrada Source Type para Local para cmeras conectadas diretamente na mquina. No caso das cmeras IP que voc conecta sua intranet, porm, deve-se selecionar Remote. A opo Monitor do menu Function mostra

O nome do equipamento normalmente /dev/videoX, no qual X um nmero que comea com zero. O programa agora mostra uma lista de especificaes do equipamento. Para descobrir os parmetros necessrios, v at Window Attributes e preste ateno

Modo de operao

Figura 6 Viso geral da atividade das cmeras.

56

www.linuxmagazine.com.br

Videomonitoramento | TUTORIAL

o sinal de vdeo, mas no grava nada. Escolher o Modect habilita a deteco de movimentao e gera um evento quando o ZoneMinder registrar um movimento. Neste caso a gravao inicia automaticamente, e no para at que o ZoneMinder decida que os movimentos cessaram. O prximo movimento na frente da cmera gera outro evento e comea a gravar novamente. A terceira opo, Record, inicia uma gravao permanente e independente da movimentao. Se voc no restringir manualmente a durao da gravao, o programa gravar todos os sinais de video dessa cmera, criando, portanto, uma enorme quantidade de dados. A opo Mocord combina Record e Modect. O ZoneMinder, ento,

Quadro 1: Cmeras de vigilncia: dicas e truques


Para usar o ZoneMinder ecazmente, preciso escolher as cmeras e os seus locais cuidadosamente. Como uma capacidade limitada de armazenamento no permite guardar toda a informao do monitoramento, a maioria das cmeras de vigilncia no comea a gravar at que se detecte algum movimento. Por isso, o ideal instal-las para monitorar locais calmos. Em caso de uso em rea externa, preciso evitar rvores ou arbustos cobrindo a maior parte da rea de vigilncia. Ambos iro se mover com o vento e disparar a lmagem o tempo todo. Se no for possvel deixar objetos mveis no importantes fora do alcance da cmera de vigilncia, ser preciso denir as suas prprias zonas no ZoneMinder (veja a seo Zonas de alarme). As cmeras de vigilncia nunca devem monitorar uma rea com um ngulo muito fechado, de cima. Identicar as pessoas que esto nessa rea num piscar de olhos ser muito difcil. Ao invs disso, a cmera deve monitorar de uma posio lateral elevada. Se usar cmeras de tomada, assegure-se que os os no esto visveis e de fcil alcance por pessoas no autorizadas. Cortar o o desabilitar a cmera de vigilncia, deixando o ZoneMinder no escuro.

grava permanentemente e gera um evento sempre que comea a gravar; porm, se detectar algum movimento na frente da cmera, ele o lista em maisculas na lista de eventos. A opo final, Nodect suporta o uso de detectores de movimentos externos que muitas cmeras incluem por padro. Neste caso a cmera, e no o ZoneMinder, que aciona os eventos. Aps selecionar o modo de operao, verifique a caixa de texto Enabled para ligar a cmera. Para definir o nmero de imagens por segundo que o ZoneMinder deve criar, necessrio acrescentar entradas nos campos Maximum FPS e Alarm Maximum FPS. A primeira entrada se refere operao normal e a segunda a um caso de alerta. O nvel mximo de quadros por segundo para uma situao de alerta deve ser mais alto do que para as operaes normais; assim, voc pode acompanhar a ao mais de perto no caso de haver um evento, alm de gravar com mais detalhes. Se seu computador for robusto e voc tiver espao de disco suficiente, faz sentido usar valores de at 30 fps aqui. Depois de preencher todos esses detalhes, clique em Save. Agora a cmera est pronta para funcionar. O ZoneMinder tem um grande nmero de dispositivos que tem boas opes para cmeras profissionais IP ou PTZ e placas de video suportadas por ele. Clique em Presets no canto direito no alto da janela de configurao para encontr-las. No menu em cascata Preset (gura 5), selecione o modelo da cmera e as opes bsicas e clique em Save. O ZoneMinder usar essas configuraes, porm preciso especificar o endereo IP para a cmera e o modo de operao no campo Function. Normalmente, no h outras mudanas a serem feitas.

Figura 7 O ZoneMinder fornece uma


lista de eventos com cenas capturadas pela cmera.

Fontes e alvos
Na janela do navegador, o ZoneMinder mostra as fontes das imagens em uma lista. Note as entradas na coluna Source (gura 6): os dispositivos em verde esto funcionando corretamente. Se vir uma cmera vermelha, h um problema normalmente um erro de configurao. Nesse caso, clique em Name para este campo e a imagem da cmera deve aparecer na janela do monitor. Se a janela estiver preta, ou se aparecer apenas um frame vazio, preciso reconfigurar a cmera. Para modelos menos potentes, em geral funciona fazer testes de resoluo e velocidade de frame. O janela do monitor (gura 7) mostra tanto a imagem da cmera atual como a lista de eventos com durao e nmero de frames. Quando voc clica em um evento na coluna Name, ele comea de novo. A seo acima na janela (gura 8) fornece informaes gerais para a sequncia especfica de imagens e um menu no qual se processam as imagens se necessrio. Uma vez que o ZoneMinder, inicialmente, armazena os eventos como

Figura 8 Janela de menu de execuo.

Linux Magazine #84 | Novembro de 2011

57

TUTORIAL | Videomonitoramento

Figura 9 Dilogo criado a partir da sequncia de imagens


do vdeo.

Figura 10 Zonas de alarme permitem denir as reas


de monitoramento.

uma sequncia de imagens em diretrio temporrio, preciso executar um segundo passo se voc quiser gerar um video com eles. Para faz-lo, clique em Video no menu. Na janela que aparece (gura 9), escolha as opes de que precisa. O ZoneMinder suporta diversas extenses populares de video e permite que se escolha o tamanho do video (no campo Video Size) e a velocidade do frame. Para propsitos documentais, escolha a opo Real para o campo Frame Rate, que corresponde gravao em tempo real. Depois de fazer as mudanas necessrias, clique em Generate Video. Depois de criar o vdeo, ser aberta uma tabela com as informaes da sequncia. Na coluna da direita selecione Action para definir o que acontece na sequncia de vdeo. O video foi criado, mas no salvo: preciso selecionar o comando Download no campo Action. O ZoneMinder nomeia e guarda o video na pasta de downloads do usurio no disco rgido.

uma janela com uma tabela que informa as coordenadas nos eixos X e Y abaixo da imagem atual da cmera. O ZoneMinder sobrepe uma faixa verde na imagem da cmera definida pelas coordenadas na tabela. Para modificar a rea na qual os alarmes esto ativados, apenas arraste os pontos, e para modificar o formato da imagem, adicione mais pontos (gura 10). A tabela esquerda da cmera serve para vrias outras configuraes relacionadas programao de eventos ou alarmes. Ajustar a sensibilidade do software impede qualquer movimento insignificante de disparar um evento. O ZoneMinder mostra alertas em sequncia na lista de eventos para que se possa identificar os eventos crticos num relance. Novamente, preciso clicar em Save para manter as alteraes.

O nico lado ruim do software ZoneMinder a falta de traduo para aqueles que precisam de uma lngua estrangeira e de configuraes para algumas cmeras USB menos desenvolvidas. Mas pelo fato de o ZoneMinder ser um software livre e em constante desenvolvimento, pode-se esperar dos mantenedores que as fraquezas do produto sejam melhoradas para uma verso futura.

Mais informaes:
[1] ZoneMinder: http:// www.zoneminder.com/ [2] Lista de compatibilidade ZoneMinder: http://www. zoneminder.com/wiki/ index.php/Hardware_ Compatibility_List [3] Lista de Compatibilidade GSPCA: http://lwn. net/Articles/291036/ [4] Lista de Compatibilidade de video Linux UVC: http://www.ideasonboard. org/uvc/#devices [5] Script de Congurao: http://www.zoneminder. com/forums/viewtopic. php?t=16628

Concluso
O ZoneMinder permite que se faa uma configurao profissional de sistema de monitoramento de video que difcil superar nos quesitos suporte amplo e opes de configurao flexveis. O programa oferece um desempenho bastante til em projetos grandes com vrias cmeras. Ele funciona em discos rgidos antigos graas ao seus recursos de fontes econmicas, apesar de todos os requisitos tpicos de processamento de vdeo.

Zonas de alarme
Para evitar disparar eventos no limite da rea de vigilncia por exemplo, uma rua vizinha com trfego intenso em uma rea de vigilncia em larga escala pode-se definir zonas de alarme baseadas na imagem da cmera. Para faz-lo, clique na coluna Zones para a cmera na janela principal do ZoneMinder. Isso mostra

Gostou do artigo? go?


Queremos ouvir sua opinio. inio. Fale conosco em cartas@linuxmagazine.com.br ine.com.b Este artigo no nosso site: so sit http://lnm.com.br/article/6024 article 024

58

www.linuxmagazine.com.br

Videomonitoramento | TUTORIAL

Linux Magazine #84 | Novembro de 2011

59

TUTORIAL | Comunicador instantneo profissional

Comunicador instantneo para uso prossional

TUTORIAL

Se no pode venc-los...
Para a maioria das empresas, o comunicador instantneo inimigo da produtividade, mas podemos torn-lo um aliado. por Adriano Matos Meier

entre as diferentes formas de se comunicar na Internet, passamos por aplicativos que marcaram geraes, como o IRC (Internet Relay Chat) e o ICQ (acrnimo de I Seek You, em portugus eu te procuro). Na atualidade, os programas MSN Messenger, Google Talk e Skype esto entre os mais utilizados (alm, claro, das pginas de redes sociais). Normalmente as empresas e instituies de ensino no permitem a utilizao desses programas. De um lado esto os administradores da rede, configurando firewalls e proxies (e outras ferramentas do seu arsenal) para bloquear as tentativas de utilizao. De outro esto os incansveis usurios, em busca de formas de burlar os bloqueios da rede para bater um papo com os amigos em pleno expediente. Porm h um terceiro grupo, que v no IM uma oportunidade de aumentar a flexibilidade e o dinamismo, e ainda reduzir custos operacionais.

adeso s tende a crescer, visto que a comunidade continua a definir vrias extenses para o protocolo.

apt-get install ejabberd. Existe

O ejabberd
O ejabberd [2] um servidor de IM baseado no protocolo XMPP. escrito em Erlang/OTP, distribudo sob a licena GPLv2. Possui verses para os sistemas GNU/Linux, *BSD, Mac OS X e Microsoft Windows. Possui ainda uma interface web para a administrao, o que tambm pode ser feito via linha de comando. Tem suporte ao balanceamento de carga e armazenamento de dados distribudo (tolerncia a falhas), criptografia dos dados trafegados (SSL/ TLS), suporte a chat multiusurio e suporte ao IPv6, alm de outros recursos.

tambm um dispositivo virtual que fornece um servidor ejabberd, disponvel no site TurnKey Linux [3]. Primeiro deve-se editar o seu principal arquivo de configurao com vi /etc/ejabberd/ejabberd.cfg. preciso informar o nome do servidor (no caso de domnios adicionais, deve-se separ-los por vrgula):
{hosts, ["ejabberd.empresa.com.br"]}.

Nativamente o ejabberd utiliza uma base de dados Mnesia, mas tambm tem suporte ao MySQL e ao PostgreSQL. Se for utilizar o PostgreSQL, necessrio instalar o pacote odbc-postgresql. Para que o ejabberd utilize uma base MySQL, a configurao seria:
{auth_method, odbc}. {odbc_server, {mysql, "server", "porta", "database", "username", "password"}}.

Instalao e congurao
Os binrios do ejabberd podem ser obtidos na pgina oficial do projeto [2], mas tambm so encontrados nos repositrios das principais distribuies. Para uma instalao no Debian (e derivados) basta um

O protocolo XMPP
Em 1998, Jeremie Miller iniciou o projeto Jabber, um protocolo aberto para troca de mensagens instantneas baseado em XML. O principal fruto do projeto foi o servidor Jabberd. Em 2002 o projeto foi formalizado pelo IETF com o nome de XMPP [1]. Atualmente outros servios utilizam o protocolo XMPP, como o Google Talk e o Facebook, e essa

A base de dados pode ser utilizada, por exemplo, para registrar os dilogos e para armazenar as contas dos usurios (autenticao); porm, configuraremos o ejabberd para autenticar os usurios em uma base LDAP.

Figura 1 Interface do servidor de IM.

60

www.linuxmagazine.com.br

Comunicador instantneo profissional | TUTORIAL

Primeiro, preciso desativar o modo de autenticao interno (padro), adicionando dois sinais de porcentagem para comentar a linha, que deve ficar da seguinte forma:
%%{auth_method, internal}.

autenticar os usurios, ser preciso registr-los. Para cadastrar um usurio o comando :


ejabberdctl register usurio ejabberd.empresa.com.br senha

Para verificar o status do servidor:


ejabberdctl status

Posteriormente, deve-se retirar o comentrio das linhas referentes autenticao no LDAP, alm de informar os parmetros de acesso a ele:
{auth_method, ldap}. {ldap_servers, ["ldap.empresa.com.br"]}. {ldap_encrypt, none}. {ldap_port, 389}. {ldap_rootdn, "cn=jabber, dc=empresa,dc=com,dc=br"}. {ldap_password, "senha123"}. {ldap_base, "ou=users,dc=empresa, dc=com,dc=br"}. {ldap_filter, "(Services=jabber)"}.

Para verificar os usurios conectados:


ejabberdctl connected-users

Para alterar a senha de um usurio:


ejabberdctl set-password usurio ejabberd.empresa.com.br senha

Deve-se definir pelo menos um usurio administrador do servidor. Este usurio ter acesso interface web de administrao. Deve-se tambm informar o login do usurio (no LDAP) e o servidor:
{acl, admin, {user, "administrador", "ejabberd. empresa.com.br"}}.

As portas padro utilizadas pelo servidor ejabberd so a 5222/tcp (cliente-servidor), 5269/tcp (servidor-servidor) e a 5280/tcp (interface web). Na ocorrncia de problemas, os logs do servio so registrados em /var/ log/ejabberd/ejabberd.log.

Figura 2 O cliente Pidgin uma das


opes para redes XMPP

Mais informaes
[1] XMPP: http://xmpp.org/ [2] ejabberd: http://www. ejabberd.im/ [3] Appliance ejabberd: http://www.turnkeylinux. org/ejabberd/ [4] Pidgin: http://pidgin.im/ [5] Livros sobre o protocolo XMPP: http://xmpp.org/ about/books.shtml [6] OpenFire: http://www. igniterealtime.org/ projects/openfire/ [7] Prosody: http://prosody.im/

Cliente
Com o servidor pronto preciso instalar e configurar os clientes. Muitas so as possibilidades de clientes que suportam o protocolo XMPP. Dentre os mais utilizados est o Pidgin [4], disponvel tambm para o Microsoft Windows e com suporte a outras redes, como MSN, Google Talk, Yahoo, ICQ, IRC, entre outras. Por isso o Pidgin considerado um comunicador universal. A sua interface extremamente amigvel (gura 2) e possui uma srie de recursos interessantes, como uso de temas, suporte a mltiplas contas de acesso e diversas conversas em uma nica janela, conversao com udio e vdeo, entre outros.

Agora o servio deve ser reinicializado para que as configuraes entrem em vigor, com /etc/init.d/ ejabberd restart. Para acessar a interface de administrao basta acessar a URL http://ejabberd.empresa. com.br:5280/admin em seu navegador, informar o login e senha do administrador, que neste caso ser
administrador@ejabberd.empresa.com. br e a senha desse usurio. Atravs

O autor
Adriano Matos Meier (matos@sc.senai.br) Tecnlogo em Redes de Computadores e Ps-Graduando em Gesto de Segurana da Informao. Atualmente analista de redes no SENAI de Santa Catarina. Tambm atua como instrutor de treinamento GNU/Linux.

da interface (gura 1) possvel configurar e verificar o funcionamento do servidor, como os usurios que esto online e demais estatsticas.

Consideraes nais
Aos que quiserem se aprofundar no protocolo XMPP, no site oficial sobre o protocolo encontram-se bons livros sobre o assunto [5]. Existem outros projetos de servidores de mensagem instantnea baseados no protocolo XMPP, como o OpenFire [6] e o Prosody [7], so dois bons exemplos.

Comandos de console
Para verificar os comandos de administrao disponveis, digite ejabberdctl. Por exemplo, se voc no for utilizar uma base LDAP para

Gostou do artigo? igo?


Queremos ouvir sua opinio. o nio. Fale conosco em m cartas@linuxmagazine.com.br ne.com Este artigo no nosso site: osso s http://lnm.com.br/article/5960 r/arti 596

Linux Magazine #84 | Novembro de 2011

61

REDES | Personalizao de software

Nagios prossional

Um passo alm do Nagios OSS


A OpService uma empresa brasileira que mostra como possvel criar um negcio a partir de um conhecido software de cdigo aberto, atravs da prestao de servios, personalizao e desenvolvimento de software. por Dario Bestetti

REDES

ue o Nagios a plataforma de monitoramento de redes e sistemas mais popular do mundo open source, todo mundo j sabe. Mesmo com o surgimento de vrias outras solues, to completas quanto ou mais ele, ainda assim o Nagios possui mais de 50% do mercado de instalaes desse tipo de plataforma nas infraestruturas de TI. A OpServices [1] trabalha com o fornecimento de servios baseados na plataforma Nagios [2] desde 2003 e, desde ento, temos percebido uma srie de reas onde o Nagios OSS (a verso em cdigo aberto) no atende plenamente s necessidades dos clientes. No que isso seja um grande problema para a plataforma pois essa nunca foi a proposta do Nagios. Seu foco principal est no desenvolvimento de um ncleo (core) de monitoramento de alto desempenho, flexvel e escalonvel. Ainda que o software em sua verso padro seja funcional para a grande maioria dos ambientes de TI, e que suas necessidades bsicas de monito-

ramento (quando ele aplicado a um ambiente comercial onde exista um maior nvel de maturidade na questo de governana de TI), o Nagios deixa a desejar. Percebe-se isso especialmente em algumas reas, como: falta de aderncia s melhores prticas de gesto de TI, como o ITIL; falta de relatrios mais complexos sobre disponibilidade, planejamento de capacidades e SLAs; interface grfica bastante tcnica e simplificada; falta de uma ferramenta grfica para configurao da plataforma; falta de suporte interface multilinguagem. Depois de vrios anos instalando o Nagios OSS em clientes, muitos dos clientes da OpServices passaram a demandar recursos mais avanados na plataforma, s quais a comunidade de software livre no poderia atender na velocidade necessria. Dessa forma, iniciamos um projeto de customizao da plataforma bsica que resultou no OpMon, uma plataforma de gerenciamento de redes e sistemas basea-

da no core do Nagios OSS, mas que endereava as demandas dos clientes nas reas no atendidas. Uma das primeiras questes que abordamos foi a da multilinguagem. Porm, como no bastava apenas traduzir o Nagios para o portugus (o que fizemos na primeira implantao do OpMon), seria importante tambm criar uma nova interface grfica para ele, baseada no PHP e no mais em CGIs. Para isso, contratamos uma consultoria para trabalharmos a usabilidade do software. O objetivo seria no somente ter uma interface menos tcnica, mas tambm torn-la mais intuitiva no seu uso e conferir-lhe suporte a mltiplas linguagens. Assim, o OpMon criou uma camada de interface absolutamente independente e agregou diversos recursos modernos de usabilidade, como a capacidade de criao de filtros de pesquisa, favoritos, atalhos e simplificao da navegao (gura 1). Outro ponto muito importante foi a criao de mdulos de relatrios avanados e de gerenciamento de nveis de servios (SLA/SLM). Um dos itens

62

www.linuxmagazine.com.br

Personalizao de software | REDES

mais importantes endereados nessa fase foi a criao de cortes de tempo na gerao de relatrios. Por exemplo, se voc desejar um relatrio sobre a taxa de utilizao da sua Internet no ltimo ms, talvez se surpreenda ao saber que esta esteja em torno de 60%, pois o Nagios contabiliza o tempo em perodos de 24 horas, ou seja: durante a madrugada e nos finais de semana a taxa de utilizao de sua rede possivelmente seja muito menor, podendo assim apresentar, na mdia mensal, um nmero que no traduz a realidade de uso em horrio comercial. Na hora de justificar um investimento para o upgrade de seu link de Internet, talvez lhe faltem dados para justific-lo. Pode ser, porm, que durante o horrio comercial a utilizao esteja sempre perto de 100%. Assim, o OpMon estabeleceu a possibilidade da criao de cortes de tempo customizados, permitindo que o usurio, ao emitir um relatrio, estabelea qual o corte de tempo que deseja, por exemplo, apenas durante o horrio comercial (das 8h s 18h, de segunda a sexta-feira), facilitando a justificativa de investimentos de acordo com a realidade de sua empresa (gura 2). Com o armazenamento de informaes de desempenho dos itens coletados em uma base dados MySQL, o OpMon permite a gerao de relatrios de capacidades complexas, incluindo a gerao da previso futura do esgotamento de recursos (future projection), o monitoramento de linhas de tendncias (trend lines) e a capacidade de prover a gerao do monitoramento atravs de linhas de base (baseline). Este modelo permite que o monitoramento seja feito de forma adaptvel e no somente baseado em thresholds fixos. Explico: em um monitoramento tradicional, o envio de alarmes baseado em limites estabelecidos de forma esttica. Por exemplo, ao se chegar a uma utilizao de 80% de CPU, um alarme gerado automaticamente; no monitoramento adaptvel, porm, podem-se utilizar dados

Figura 1 A interface do Nagios foi toda recriada, e pode ser iutilizada mesmo
sem o OpMon.

histricos para estabelecer o limite de forma dinmica. Pode ser que todas as sextas-feiras, das 18h s 22h, a utilizao de CPU esteja realmente acima de 80% em funo de algum processamento habitual e absolutamente normal. No monitoramento tradicional, portanto, os alarmes seriam gerados todas as sextas-feiras, entre 18h e 22h. J no monitoramento adaptvel, baseada nos dados histricos, esse comportamento seria considerado normal e nenhum falso alarme seria gerado. claro que nenhuma das abordagens perfeita, mas ambas podem ser combinadas com o objetivo de reduzir drasticamente a gerao de falsos positivos. Ainda no terreno do monitoramento inteligente, o OpMon possui um mdulo auxiliar para a correlao de

eventos. Este um tpico at mais avanado do que o monitoramento adaptvel, pois permite a criao de regras complexas para correlacionar os eventos que so centralizados na plataforma e gerar alarmes para eles. Partindo do pressuposto que o OpMon um grande repositrio de eventos, o EventGuard permite a criao de regras complexas para a correlao de eventos atravs de uma interface grfica intuitiva. Talvez uma de suas maiores aplicaes seja na correlao de eventos de segurana, nos quais acessos aparentemente desconexos podem na verdade ser correlacionados com um ataque externo de hackers em sua rede (gura 3). Talvez o mdulo mais interessante do OpMon visualmente seja o editor

Figura 2 O OpMon exibe anlises segundo cortes de tempo.

Linux Magazine #84 | Novembro de 2011

63

REDES | Personalizao de software

Figura 3 O EventGuard permite criar novas regras avanadas de maneira fcil.

de dashboards (painis de controle), o OpServices DaVINCI. Este foi criado com o intuito de permitir ao usurio da plataforma OpMon criar, de forma grfica e interativa, dashboards (painis) representativos dos itens monitorados. Com a ferramenta de edio do DaVINCI possvel elaborar dashboards complexos que exibem em tempo real o status de seus elementos de infraestrutura e, principalmente, de processos de negcios, o que representa um passo alm do monitoramento de itens bsicos de infraestrutura de TI. O DaVINCI perfeito para dar visibilidade a seu ambiente de TI e de negcios em grandes monitores de LCD. Ele

permite criar estes dashboards sem a necessidade de escrever nenhuma linha de cdigo, apenas utilizando sua interface grfica avanada. Esse aplicativo pode ainda ser baixado, adquirido e utilizado em qualquer ambiente Nagios, sem a necessidade de se possuir o OpMon (gura 4). Um dos pontos fracos do Nagios sua configurao complexa, toda ela baseada em diversos arquivos de texto. Ainda que bastante abrangente, o Nagios requer um profundo conhecimento de seus arquivos de configurao. Existem vrios projetos de software livre que abordam, de uma forma ou outra, essa fraqueza da plataforma. A OpServices desenvol-

Figura 4 A interface DaVINCI pode ser baixada e usada sem o uso do OpMon.

veu uma ferramenta de configurao 100% web para viabilizar a configurao do OpMon sem a necessidade de se conhecer os vrios arquivos de configurao do Nagios, alm de armazenar estas configuraes em bases de dados, o que confere maior facilidade ao armazenamento e recuperao das configuraes (gura 5). Outro ponto importante do OpMon em relao ao Nagios sua aderncia s melhores prticas de gesto especificadas pela ITIL (Information Technology Infrastructure Library). Ele possui ferramentas que permitem criar Catlogos de Servio, alm da gerao e monitoramento de acordos de nveis de servio (SLA/SLM) de forma nativa, representveis no DaVINCI, exibindo o impacto em um determinado Servio de TI quando da falha de um dos elementos que compem aquele servio no catlogo. O OpMon possui ainda uma forte integrao com plataformas de Service Desk e CMDB, agregando melhores prticas de gerncias de do ITIL, tais como Cumprimento de Requisio de Servio, Gerenciamento de Problemas, Gerenciamento de Incidentes, Gerenciamento de Configurao e Ativos, Gerenciamento de Mudanas e Gerenciamento do Conhecimento. Um servidor de rede descoberto pelos mtodos de discovery do OpMon, por exemplo, pode ser importado para o monitoramento, tornando-se um item de configurao gerenciado e includo no CMDB, e mantendo um vnculo de integrao entre os dados coletados no monitoramento, as informaes de hardware e software provindas do processo ativo de inventrio e as aes efetuadas no Service Desk durante todo o ciclo de vida dos itens de configuraes e servios do OpMon. A qualquer momento possvel consultar no CMDB o histrico de verses deste e de outros itens de configurao que esto ou foram gerenciados pelo OpMon, obtendo conhecimento de informaes vinculadas, tais como:

REDES
64

www.linuxmagazine.com.br

Personalizao de software | REDES

Figura 5 A interface grca permite alterar as conguraes do Nagios sem


lidar com arquivos de texto.

dependncias entre os prprios itens de configurao e servios, requisies atendidas, resoluo de incidentes, mudanas efetuadas, resoluo de problemas, entre outras informaes disponveis na base de conhecimento. Isto possvel porque todos esses insumos continuam registrados no CMDB mesmo que os itens de configurao tenham sido removidos do OpMon, provendo informaes importantes que auxiliaro o desenho de novos servios. O OpMon implementou, ao longo dos anos, diversas melhorias na questo da escalonabilidade e desempenho do Nagios, sendo que vrias delas foram enviadas como contribuies para a equipe que mantm o core do Nagios. Algumas dessas melhorias foram incorporadas ao cdigo final do Nagios OSS; outras ficaram restritas plataforma OpMon. Talvez a maior delas, em termos de escalonabilidade e desempenho do OpMon, resida na utilizao do Gearman [3] como plataforma de distribuio do processamento do Nagios. Com a incorporao do Gearman na plataforma OpMon foi possvel obter ganhos de at 73% na capacidade de gerenciamento de itens de configurao da plataforma, alm de garantir uma escalonabilidade muito alm do que seria possvel com a utilizao da plataforma padro.

Resumindo, o Nagios OSS uma excelente plataforma para gerenciar redes e sistemas, mas como todo software, no a panacia para todas as necessidades das empresas, mesmo com uma imensa variedade de projetos aderentes ao Nagios. Com as estruturas de TI cada vez mais enxutas, a necessidade de facilitar as tarefas dos CIOs e administradores de redes fez com que o OpMon evolusse no sentido de oferecer facilidades de uso, implementao e recursos avanados e integrados, ainda assim mantendo a compatibilidade com o core do Nagios e sendo 100% compatvel com a imensa biblioteca de plugins disponveis livremente no Nagios Exchange.

Mais informaes
[1] OpServices: http:// www.opservices.org/ [2] Nagios: http://www. nagios.org/ [3] Gearman: http:// gearman.org/

PROTEJA SUA REDE CONTRA ATAQUES INTERNOS, EXTERNOS E OUTRAS AMEAAS QUE COLOCAM EM RISCO OS SEUS DADOS.

Gostou do artigo? igo?


Queremos ouvir sua opinio. Fale conosco em m cartas@linuxmagazine.com.br zine.com r Este artigo no nosso site: osso s : http://lnm.com.br/article/5973 r/artic 597

ADQUIRA O SEU NAS MELHORES BANCAS OU EM NOSSA LOJA VIRTUAL LNM.COM.BR/SHOPPING


65

Linux Magazine #84 | Novembro de 2011

Parties GUID | ANLISE

Substituio do MBR pela tabela de partio GUID

Dana dos discos


Discos de alta capacidade usam a tabela de partio GUID ao invs do antigo master boot record, mas os aplicativos fdisk usuais do Linux no conseguem trabalhar com o novo esquema de particionamento. Veja como contornar isso usando as ferramentas certas. por Hans-Peter Merkel

ANLISE

sbarrar em um limite. Esse um tema constante na histria dos discos rgidos. Primeiro foi a BIOS, depois as controladoras [1] e at os sistemas operacionais. Nmero mximo de setores e cabeas, limites no particionamento e no nmero de parties, reas de boot... a lista no tem fim. Nos anos 1980, o MS DOS 3.2 forou os usurios a dividir seus caros discos em parties de 32 MB. Naquela poca, um disco rgido de 85 MB precisaria de pelo menos trs parties (gura 1). Dois discos modernos Seagate ST 33000651 AS, gentilmente cedidos Linux Magazine pelo fornecedor para os testes deste artigo, contam com 3 TB cada, o que ultrapassa o atual limite da tabela de partio do tipo master boot record (MBR) para PCs (gura 2) [2]. O antigo esquema usado no particionamento MBR CHS (cilindros, cabeas e setores; na sigla em ingls) chegou ao fim da estrada h muitas primaveras, aos 8 GB (mximo de 1.024

cilindros x 255 cabeas x 63 setores). Desde ento, a BIOS e o sistema operacional tm usado o padro de 254 cabeas, 63 setores e 1.023 cilindros, usando 4 bytes na tabela de partio para definir posio e tamanho dos setores (endereamento de bloco lgico, ou LBA, na sigla em ingls). O mundo dos PCs vinha seguindo tranquilo com esse truque, mas os tempos esto mudando (ou j mudaram), pois um tamanho de (232-1 setores) X 512 bytes resulta em um mximo de 2,2 TB para uma partio e 4 TB para um disco [3] [4]. Em outras palavras, se voc quiser usar todo o espao de um disco de ltima gerao com 3 TB, precisar realizar algumas mudanas grandes. Bem-vindo ao mundo da tabela de partio GUID! A tabela de partio GUID (GPT, na sigla em ingls) a sucessora da tabela MBR, sendo parte da EFI (Extensible Firmware Interface) [5]. A especificao EFI a verso independente de fornecedores conhecida como Unified EFI (UEFI) substitui e padroniza as partes

da BIOS responsveis por inicializar e processar programas pr-boot. A GPT usa tabelas MBR do tipo LBA, mas com valores de 64-bits, permitindo assim at 8 ZB (1 zettabyte = 1 bilho de terabytes) para um disco com setores de 512 bytes. Alm disso, a GPT pode gerenciar at 128 parties (gura 3) [6].

Quadro 1: Inicializao a partir de discos GPT


Os servidores-padro, mainframes e computadores Apple mais recentes cumprem a especicao EFI e inicializam a partir de um disco particionado com GPT. Diferentemente disso, as placas-me de desktops para CPUs Intel ou AMD atualmente inicializam quase que exclusivamente atravs das rotinas MBR da BIOS. Felizmente, os usurios Linux contam com uma soluo no GRUB 2 para resolver esse problema. O carregador de boot fornece um ambiente EFI para o computador, e o Linux pode assim inicializar a partir de um disco GPT sem problemas. Mas tenha cuidado: verses anteriores do GRUB no contam com esse recurso.

Linux Magazine #84 | Novembro de 2011

73

ANLISE | Parties GUID

Mo na massa
O kernel Linux compatvel com a atual gerao de discos de alta capacidade e GPTs a partir da verso 2.6.25, embora Linus Torvalds tenha depreciado a EFI como sendo uma leso cerebral da Intel [7]. Nosso sistema de testes enderea o disco Seagate como /dev/sdh; a listagem 1 mostra a sada do comando dmesg. Se tentar particionar uma GPT com as populares ferramentas fdisk ou cfdisk, voc no chegar muito longe, mas o aplicativo grfico GParted trabalha com GPTs (gura 4). Aqui, usarei esse aplicativo para criar uma nica grande partio no primeiro disco. No GParted, voc primeiro seleciona Dispositivo / Criar Tabela de Partio. Isso leva a uma janela com um grande aviso de que todos os dados sero perdidos. Na mesma janela, clique no tringulo ao lado de Advanado, e no menu drop-down ao lado de Selecione o tipo da nova tabela de partio, e escolha GPT. A opo Partio / Nova abre caminho para a criao de uma partio primria com sistema de arquivos ext4. Depois de clicar em Adicionar, uma mensagem avisa que isso pode

levar algum tempo, dependendo do nmero e do tamanho das operaes. Em nosso laboratrio, isso foi uma pausa para o caf de 10 minutos. No final, fiquei com 3 TB de espao, menos um overhead de gerenciamento significativo, de 44,05 GB (listagem 2). A listagem 3 mostra o MBR 512-bytes, que a GPT usa e corretamente preenche por questes de compatibilidade. O 0x55AA na linha 5 indica o fim do MBR. O segundo setor da GPT contm os dados de cabealho para o particionamento GUID (linhas 7 a 12). As entradas de partio aparecem na posio 0x400, contendo: Tipo de partio (16 bytes) Partio GUID (16 bytes) Incio da partio (8 bytes) Fim da partio (8 bytes) Atributos (8 bytes) Nome da partio (72 bytes) O GUID (Globally Unique Identifier) cuida dos nomes na GPT, sendo uma codificao 16-bytes, de tipo nico, do tipo de partio. O sistema de testes agora tem uma partio de dados graas ao GParted. O GUID correspondente EBD0A0A2-B9E5-4433-87C0-68B6B72699C7. A implementao na linha 14 alterna alguns itens no ID (isso lembra um pouco a arquitetura do tipo Big Endian-

Figura 1 Velho e novo lado a lado: um


disco rgido grande no tamanho mas com apenas 85 MB, e um HD SATA 3 TB de ltima gerao da Seagate.

Little Endian). Consequentemente, a EFI armazena uma cpia da GPT no final da mdia de dados como backup. Assim, voc pode restaurar uma GPT primria danificada a partir dessa cpia. Se voc precisar converter um disco de GPT para MBR, tambm precisar apagar a GPT secundria, seno o sistema vai continuar a identificar o disco como uma partio GPT.

Figura 2 Estrutura do master boot record. A tabela de partio com quatro entradas tem apenas 4 bytes por nmero de setor.

74

www.linuxmagazine.com.br

Parties GUID | ANLISE

Listagem 1: O kernel detecta discos de 3 TB


01 [782663.410960] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300) 02 [782663.445923] ata6.00: ATA-8: ST33000651AS, CC44, max UDMA/133 03 [782663.445931] ata6.00: 5860533168 sectors, multi 0: LBA48 NCQ (depth 31/32) 04 [782663.446811] ata6.00: configured for UDMA/133 05 [782663.446830] ata6: EH complete 06 [782663.447076] scsi 7:0:0:0: Direct-AccessATAST33000651ASCC44 PQ: 0 ANSI: 5 07 [782663.447507] sd 7:0:0:0: Attached scsi generic sg9 type 0 08 [782663.447585] sd 7:0:0:0: [sdh] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB) 09 [782663.447780] sd 7:0:0:0: [sdh] Write Protect is off 10 [782663.447788] sd 7:0:0:0: [sdh] Mode Sense: 00 3a 00 00 11 [782663.447928] sd 7:0:0:0: [sdh] Write cache: enabled, read cache: enabled, doesnt support DPO or FUA 12 [782663.448846] sdh: unknown partition table 13 [782663.474623] sd 7:0:0:0: [sdh] Attached SCSI disk

Outras ferramentas
Os administradores de servidores que dependem da linha de comando no acharo o GParted muito til. Atualmente h poucos substitutos do fdisk que aceitam GPT. O mais interessante o GPT fdisk project [8], que depende dos programas gdisk, sgdisk e fixparts. A verso atual do Ubuntu tem apenas o gdisk em seu repositrio, ento faz mais sentido pegar todos os pacotes diretamente do openSUSE Build Service [9]. Depois de instalar esse conjunto de ferramentas, voc pode verificar e modificar o disco. O comando
gdisk /dev/sdh

Listagem 2: fdisk -lu depois do particionamento


01 02 03 04 05 06 07 Disk /dev/sdh: 3000 GB, 3000590369280 bytes 255 heads, 63 sectors/track, 364801 cylinders, total 5860528065 sectors Units = sectors of 1 * 512 = 512 bytes Device Boot Start End Blocks Id System /dev/sdh1 2048 5860532223 2930272033 83 Linux Warning: Partition 1 does not end on cylinder boundary.

retorna o seguinte em relao a um novo disco:


Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present

Listagem 3: dd if=/dev/sdh | xxd (trecho)


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 [...] 00001c0: 00001d0: 00001e0: 00001f0: [...] 0000200: 0000210: 0000220: 0000230: 0000240: 0000250: [...] 0000400: 0000410: 0000420: 0100 0000 0000 0000 4546 0e0f afa3 8ea3 a7c2 8000 eefe 0000 0000 0000 4920 49ee 505d 505d 70a1 0000 ffff 0000 0000 0000 5041 0000 0100 0100 3db8 8000 0100 0000 0000 0000 5254 0000 0000 0000 25c4 0000 0000 0000 0000 0000 0000 0100 2200 cbb9 0200 6afb ffff 0000 0000 0000 0100 0000 0000 6e3f 0000 3a17 ffff 0000 0000 0000 5c00 0000 0000 0765 0000 0000 0000 0000 0000 55aa 0000 0000 0000 a746 0000 0000 ................ ................ ................ ..............U. EFI PART....\... ..I............. ..P]........... ..P]......n?.e.F ..p.=.%......... ........j.:.....

a2a0 d0eb e5b9 3344 87c0 68b6 b726 99c7 ......3D..h..&.. 6903 b666 b91c 7646 a8dd e9d1 d7c6 bc5a i..f..vF.......Z 0008 0000 0000 0000 ff9f 505d 0100 0000 ..........P]....

Listagem 4: Informaes de parties do gdisk


01 02 03 04 05 06 07 08 Disk /dev/sdh: 5860533168 sectors, 2.7 TiB Logical sector size: 512 bytes Disk identifier (GUID): 0AE667A2-818F-4670-A328-500021C76A73 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 5860533134 Partitions will be aligned on 2048-sector boundaries Use l on the experts menu to adjust alignment Last sector (2048-5860533134, default =5860533134) or {+-}size{KMGTP}: 09 Current type is Linux/Windows data 10 Hex code or GUID (L to show codes, Enter =0700):

No menu de texto, a opo p retorna a tabela de partio (listagem 4), enquanto a opo o primeiro exibe um alerta de segurana, depois cria uma tabela GPT. A opo n permite que voc crie uma nova partio do tamanho do disco, como fiz com o GParted antes. O Gdisk tambm d acesso a algumas opes GUID que o GParted no tem. Usei o valor-padro de 0700 para dados Linux/Windows e teclei w ("Write table to disk and exit"). No nosso laboratrio, usei o mkfs.ext4 para formatar a partio. Na linha de comando, todo o processo levou trs minutos menos do que com o GParted. A GPT criada ficou idntica do GParted, como revelou um teste com dd e xxd.

MBR para GPT


O Gdisk pode converter discos particionados com MBR para GPT, o que acaba com a necessidade de copiar e restaurar o contedo. A opo r leva ao menu de recuperao e converso. Neste teste, usei um disco antigo de 200 GB com uma partio MBR.

Linux Magazine #84 | Novembro de 2011

75

ANLISE | Parties GUID

Depois da converso, o comando gdisk /dev/sde retornou o seguinte:


Partition table scan: [...] Found valid GPT with protective MBR; using GPT.

A listagem 5 mostra a sada da ferramenta forense mmls do pacote sleuthkit [10]. A linha 2 confirma que a converso foi bem sucedida. A entrada de partio da listagem 6 interessante: o tipo de dados est disponvel tanto no GUID quanto em entrada de texto, entre as linhas 4 e 6.

Se esse no for o caso, os resultados podem ser desastrosos: se voc tiver uma poro de 2.048 bytes e o sistema operacional quiser gravar um cluster no disco, o disco precisa gravar dois clusters pela metade fisicamente, ocupando assim dois clusters inteiros. Os discos SSD so mais afetados por esse problema de alinhamento, pois os ciclos de gravao sobrepostos vo disparar um ciclo de leitura-modificao-gravao no drive flash.

Incio da partio
Esse problema de desalinhamento de unidades de medida entre disco e sistema operacional mais uma exceo do que a regra. A Microsoft a responsvel por essa situao, j que as ferramentas de particionamento desde o MS DOS at o Windows XP comeam o particionamento imediatamente depois do MBR, no setor 63. Os discos particionados com esse mtodo estaro sempre desalinhados. Se a primeira partio comear no setor 64, ser possvel obter grupos completos de 4.096 blocos. Assim, o Fdisk no Linux imita esse comportamento por questes de compatibilidade. A Microsoft finalmente colocou um fim no problema com o Windows Vista e agora permite que a primeira partio comece no setor 2.048 em vez do 63. Dependendo da verso do fdisk que voc usa no Linux, ser

GPT para MBR


O Gdisk tambm pode converter de GPT para MBR. Como, em alguns casos, isso no vai funcionar, bom ser cuidadoso. Aps reconverter o disco que tinha transformado em GPT, o gdisk retornou a sada da listagem 7. Neste ponto, o programa sgdisk do pacote GPT fdisk til para reparos de baixo nvel.

Figura 3 Estrutura GPT. Um cabealho de 100 bytes segue o padro MBR para compatibilidade com sistemas operacionais anteriores. A tabela de partio usa 32 blocos para armazenar os dados de um mximo de 128 parties de 128 bytes.

Clusters
Os discos rgidos convencionais armazenam dados em setores de 512 bytes. Os sistemas operacionais e seus sistemas de arquivos agrupam mltipos setores para formar um cluster. Normalmente, sero agrupados oito setores, resultando em 4.096 bytes. Para um desempenho melhor, os discos de alta capacidade agora usam setores de cluster de 4.096 bytes internamente (os fornecedores geralmente se referem a eles como discos "4k"). Os discos Seagate usados em nossos testes eram desse tipo. Para manter a compatibilidade externa com a BIOS, a lgica interna do disco converte os clusters de volta para setores de 512-bytes. Para evitar lentido devido a essa adaptao de unidades de medida entre o sistema operacional e o disco os clusters de 4 KB do disco e do sistema de arquivos precisam coincidir perfeitamente, tanto para parties MBR quanto para GPT.

preciso desabilitar a compatibilidade DOS atravs de uma opo de linha de comando. Felizmente, as ferramentas que podem criar uma GPT usam todas o padro de 2.048 como setor inicial. Esse comportamento exatamente o que percebi durante os testes para este artigo: a linha 6 da listagem 2 mostra 2048 como setor inicial, o

Figura 4 O GParted detecta um disco no particionado


de 3 TB sem problemas.

76

www.linuxmagazine.com.br

Parties GUID | ANLISE

que indica que o alinhamento est perfeito para o primeiro disco de 3 TB. Mas preciso ter cuidado com discos que tenham sido usados antes. A linha 10 da listagem 5 revela que uma GPT tambm pode comear no setor 63 em vez de 2.048. Deve-se ter em mente que converti o segundo disco a partir de um esquema MBR para GPT; isso no alterou os limites da partio no setor 63. H muita discusso sobre se esse problema to ruim na prtica quanto parece em teoria, j que os discos modernos usam tcnicas de mapeamento secretas e especficas e tambm porque os sistemas operacionais e seus sistemas de arquivos usam diversos buffers e otimizaes. Dito isso, definir setores de 4 KB na partio uma coisa boa. Os administradores devem habilitar o recurso.

Listagem 5: mmls /e3v/sde


01 02 03 04 05 06 07 08 09 10 11 GUID Partition Table (EFI) Offset Sector: 0 Units are in 512-byte sectors 00: 01: 02: 03: 04: 05: Slot Meta -Meta Meta 00 -Start 0000000000 0000000000 0000000001 0000000002 0000000063 0390716865 End Length 0000000000 0000000001 0000000062 0000000063 0000000001 0000000001 0000000033 0000000032 0390716864 0390716802 0390721967 0000005103 Description Safety Table Unallocated GPT Header Partition Table Linux/Windows data Unallocated

Listagem 6: dd if=/dev/sde | xxd (trecho)


01 02 03 04 05 06 0000400: 0000410: 0000420: 0000430: 0000440: 0000450: a2a0 42c4 3f00 0000 7800 7300 d0eb 6d88 0000 0000 2f00 2000 e5b9 c9f9 0000 0000 5700 6400 3344 c84c 0000 0000 6900 6100 87c0 a33d c0dd 4c00 6e00 7400 68b6 a0a6 4917 6900 6400 6100 b726 ceb3 0000 6e00 6f00 0000 99c7 2bf3 0000 7500 7700 0000 ......3D..h..&.. B.m....L.=....+. ?.........I..... ........L.i.n.u. x./.W.i.n.d.o.w. s. .d.a.t.a.....

Listagem 7: gdisk /dev/sde


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 GPT fdisk (gdisk) version 0.7.1 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present ************************************************************ Found invalid GPT and valid MBR; converting MBR to GPT format. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing q if you dont want to convert your MBR partitions to GPT format! ************************************************************ Exact type match not found for type code A400; assigning type code for Linux/Windows data

Concluso
A era da GPT definitivamente comeou. Os discos modernos precisam dessas novas tabelas para ir alm dos 2,2 TB. Assim, os administradores devem manter distncia do fdisk por ora, enquanto ferramentas como o GParted ajudam a tapar o buraco. As placas-me de desktops no tm problema para inicializar o Linux a partir de um disco GPT, com o carregador de boot GRUB 2. Em termos de desempenho, preciso manter os olhos abertos: a maioria dos discos de ltima gerao usa clusters de 4 KB internamente em vez de setores de 512 bytes, sendo algo que voc no vai notar com o esquema LBA; contudo, isso pode afetar a velocidade da partio no pior das hipteses.

Mais informaes:
[1] Interface ST506 de 1982: http://en.wikipedia.org/wiki/ST506 [2] MBR: http://en.wikipedia.org/wiki/Master_Boot_Record [3] Tabela de partio MBR: http://en.wikipedia. org/wiki/Partition_table [4] FAQ: Drive Partition Limits: http://www.uefi.org/ learning_center/UEFI_MBR_Limits_v2.pdf [5] EFI e UEFI: http://developer.intel.com/technology/ efi/; http://www.uefi.org/home/ [6] GPT: http://en.wikipedia.org/wiki/GUID_Partition_Table [7] Linus e o Extensible Firmware Interface: http:// kerneltrap.org/node/6884 [8] GPT fdisk: http://www.rodsbooks.com/gdisk/ [9] GPT fdisk do openSUSE Build Service: https://build.opensuse. org/package/show?package=gptfdisk&project=home%3Asrs5694 [10] Sleuthkit: http://sleuthkit.org/

Gostou do artigo? o?
Queremos ouvir sua opinio. a Fale conosco em cartas@linuxmagazine.com.br zine.com. Este artigo no nosso site: o sit http://lnm.com.br/article/5992 article 992

Linux Magazine #84 | Novembro de 2011

77

Você também pode gostar