Anda di halaman 1dari 30

Expediente editorial

EDITORIAL

Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br Editores Flvia Jobstraibizer fjobs@linuxmagazine.com.br Laura Loenert Lopes llopes@linuxmagazine.com.br Editora de Arte Larissa Lima Zanini llima@linuxmagazine.com.br Editor Online Felipe Brumatti Sentelhas fsentelhas@linuxmagazine.com.br Colaboradores Alexandre Borges, Alexandre Santos, Augusto Campos, Ben Martin, Brian Proftt, Cezar Taurion, Charly Khnast, David J. Dodd, Jon maddog Hall, Klaus Knopper, Kurt Seifried, Marcin Teodorczyk, Markus Junginger, Michael Messner, Thomas Drilling, Tim Schrmann, Zack Brown. Traduo Laura Loenert Lopes, Rodrigo Garcia, Sebastio Luiz da Silva Guerra. Reviso Ana Carolina Hunger. 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 - 2012: Linux New Media do Brasil Editora Ltda. Impresso e Acabamento: IBEP Grca. 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

frente do seu tempo


Eric Hobsbawm (1917 2012), historiador marxista britnico de renome internacional falecido recentemente, declarou em 2011 por ocasio do lanamento de seu ltimo livro que no podemos confrontar os problemas do sculo XXI com solues e sistemas oriundos do sculo XX. Apesar de essa afirmao fazer aluso a matrias poltico-sociais e a sistemas econmicos, sou pessoalmente da opinio de que questes de mesma ordem provenientes das cincias do conhecimento, aplicadas tambm ao desenvolvimento de software, criao e distribuio do saber e da arte, bem como s prprias atividades sociais, figuram como principais precursoras dos avanos de todo tipo que devero ocorrer nos anos que viro. O que caracteriza todas essas solues so os esforos colaborativos que embasam o seu desenvolvimento --- algo que o mtodo cientfico vem exercitando h mais de meio milnio, conforme publiquei anteriormente neste espao. Assim, a pesquisa cientfica, o conceito de Open Source, diversas iniciativas de Crowdsourcing (Wikipdia, OpenStreetMap etc.) e Crowdfunding (financiamento coletivo), a instituio de padres abertos, a criao de empresas sociais e de cooperativas, alm das prprias redes sociais etc., so alternativas colaborativas para um sem-nmero de atividades atravs das quais o Homem j apreendeu que, quando se pensa simultaneamente no bem pessoal e no bem comum, as solues produzidas so evolutivamente imbatveis. Estive recentemente no evento de lanamento do Samsung Galaxy Note 10.1 no Brasil, trazido ao mercado nacional com pompa e circunstncia. Durante toda a apresentao do produto, no conseguia me furtar de imaginar que toda a tecnologia que equipava aquela maquininha advinha de dcadas de esforo colaborativo hercleo, na grande maioria das vezes voluntrio, o mesmo acontecendo do lado da infraestrutura responsvel pelo fornecimento dos dados necessrios ao funcionamento satisfatrio de seus aplicativos. Enquanto produto de massa, pouco importa ao consumidor final o arcabouo tecnolgico que faz essa soluo primordial de computao pervasiva funcionar, mas o fato que, sem os avanos oriundos do desenvolvimento colaborativo, muitssimo provvel que a criao desse tipo de dispositivo demandasse muito mais tempo para acontecer. O mesmo vale para praticamente todas as iniciativas de tecnologia de consumo existentes no mercado atual: elas assentam sobre atividades colaborativas, que tm o poder de democratizar o acesso informao e de efetivar a incluso digital nas sociedades. Essas iniciativas barateiam processos de produo, transformam a informao em bem coletivo, pavimentam o caminho para o DIY Do It Yourself (do ingls, Faa voc mesmo), o que resulta em uma civilizao mais empreendedora, produzindo cultura e conhecimento, e realimentando um crculo virtuoso capaz de reduzir desigualdades e de criar oportunidades a todos. Isso o futuro, hoje, a frente do seu tempo, e os sistemas polticos e econmicos devero, pouco a pouco, assimilar esses princpios, de modo a permitir que o Homem se ocupe to somente da sua evoluo intelectual e moral, razo precpua para a qual vivemos, no final das contas.
Rafael Peregrino da Silva Diretor de Redao
www.linuxmagazine.com.br

NDICE

CAPA
Sempre alerta! Rpidos e silenciosos, invasores podem atacar uma rede, danicla e sair sem deixar rastros antes que voc perceba. Saiba como evitar estes e outros problemas de segurana. 33

Rede de segurana No est interessado em depender da consultoria de um hacker prossional? Pode ser interessante conar um rastreador de vulnerabilidade a um software especializado neste tipo de tarefa, como o OpenVAS.

34

Agulha no palheiro A beleza do Wireshark no est somente em seu funcionamento em tempo real. Ao salvar um histrico de atividades de rede em um arquivo pcap usando uma ferramenta como a tcdump, podemos ltrar os dados com o Wireshark para localizar evidncias de invaso.

40

Anlise de vulnerabilidades Nesse artigo, demonstramos um ataque bem-sucedido a um servidor via IPv6 e explicamos como as principais ferramentas de segurana lidam com o protocolo.

44

www.linuxmagazine.com.br

Linux Magazine 95 | NDICE

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

SEGURANA
Segurana da informao Pioneiro em detectar vulnerabilidades em sistemas antivrus, vice-presidente da Sourcere detalha soluo de segurana ideal e comenta sobre o cenrio brasileiro, inovador em malwares. Olhar penetrante 60 57

NOTCIAS
Geral HTML5 deve estar completo at 2014 A verso beta do RHEL 5.9 inclui drivers para o Hyper-V SUSE Manager 1.7 suporta PostgreSQL e IPv6 Xen 4.2 traz nova coleo de ferramentas Tire proveito do baixo consumo de energia oferecido por dispositivos NAS modernos para monitorar suas cmeras. 24

CORPORATE
Notcias Red Hat com maior faturamento e menor lucro Rackspace entrega OpenStack para fundao independente Foxconn investir R$1 bilho no Estado de So Paulo Coluna: Jon maddog Hall Coluna: Cezar Taurion Coluna: Alexandre Santos 28 30 32 26

TUTORIAL
Crptico 66

ANDROID
Toque perfeito 50

A criptograa uma parte importante da segurana em TI, e o OpenSSL uma conhecida ferramenta de criptograa para o Linux. Especialistas conam no OpenSSL porque livre, possui muitos recursos e fcil de usar em scripts Bash. Computao pioneira A sbita popularidade de computadores miniboard como o Raspberry Pi trouxe de volta o esprito pioneiro dos primeiros dias do Linux. Repentinamente, o faa voc mesmo na comunidade de cdigo aberto est de volta. 70

PROGRAMAO
Centro do alvo? Com a verso 2.0 do Android, os desenvolvedores passaram a ter acesso a recursos multitoque anteriormente reservados a aplicativos do sistema. Mas ateno: preciso ter cuidado ao manusear a API. 72

REDES
Squid no meio 54 A linguagem de programao Dart a atual alternativa do Google ao JavaScript. Executada principalmente em navegadores, tambm pode ser utilizada em linha de comando e em servidores como substituta para o PHP.

SERVIOS
Editorial Como monitorar a rede quando os sistemas-clientes se conectam a servidores seguros atravs do protocolo HTTPS? Mantenha o monitoramento em dia com o servidor proxy Squid. Emails Linux.local Preview 06 10 78 82

Linux Magazine #95 | Outubro de 2012

Coluna do Alexandre Santos

CORPORATE

Inteligncia coletiva
Conhecimento na era digital existe para ser compartilhado. E o volume de dados armazenados na rede tende a crescer assustadoramente. Cabe a ns, usurios, saber ltrar aquilo que realmente nos interessa.

ivemos hoje um consenso de que a tecnologia da informao pode expandir nossa capacidade de comunicao, colaborao, compartilhamento de conhecimento e, por extenso, a nossa capacidade de descoberta e inovao. At a chegada da era digital, a maioria das pessoas aceitou um sistema padro de conhecimento. Os alunos estudavam temas, ganhavam credenciais para provar sua proficincia e tornavam-se especialistas. Parte destes especialistas conduziam pesquisas e transmitiam conhecimento escrevendo livros e artigos para compartilhar suas descobertas e concluses com o meio acadmico e profissional. Outros, ao aplicar o conhecimento na prtica, comprovavam a teoria ou a derrubavam. Conforme essas novas descobertas iam ganhando aceitao, juntavam-se ao corpo de conhecimento estabelecido onde forneciam a base de conhecimento para o prximo nvel de aprendizagem num ciclo seguro e lento. Mas, desde 1961, quando o MIT demonstrou o primeiro sistema mundial de compartilhamento [1], o embrio dasmdias digitais passou a impulsionar o desenvolvimento e a adoo de tecnologias colaborativas cada vez mais sofisticadas. Hoje usamos email, mdias sociais, mensagens instantneas, fazemos conferncias pela Internet e compartilhamos espaos de trabalho atravs de servios online. A abundncia de informaes na rede tornou ainda mais difcil discernir o que verdadeiro daquilo que falso. O co-fundador da Wired, Kevin Kelly, recentemente escreveu que os seres humanos publicaram pelo menos 32 milhes de livros, 750 milhes de artigos e ensaios, 25 milhes de msicas, 500 milhes de imagens, 500 mil filmes, 3 milhes de vdeos, programas de TV e curtas-metragens, alm

de 100 bilhes de pginas pblicas na Internet, e a maior parte desta exploso de conhecimento aconteceu nos ltimos 50 anos. Mesmo com o temor de que nossas mentes possam estar sendo modificadas pela natureza superficial da Internet [2], o conhecimento avana a um ritmo sem precedentes, alavancado por esta Inteligncia Darwiniana Coletiva que surge dessa gororoba digital. Pessoas comuns oferecem abordagens e solues inovadoras para problemas que antes s uns poucos privilegiados tinham acesso. Agora e cada vez mais, a pessoa mais inteligente da sala a sala em si. Uma rede digital que une pessoas e ideias na sala e se conecta aos que esto fora dela. Por mais que reclamemos do excesso de lixo digital, prefiro parafrasear o terico organizacional Russell Ackoff que, em 1988, j dizia: no o excesso de informao; falha nos nossos filtros. Que venha a Web Semntica [3] para nos salvar.

Mais informaes:
[1] Compatible Time-Sharing System: http://en.wikipedia.org/wiki/ Compatible_Time-Sharing_System [2] What the Internet Is Doing to Our Brains, by Nicholas Carr: http://www.theshallowsbook.com/ nicholascarr/Nicholas_Carrs_The_Shallows.html [3] W3C Web Semntica: http:// www.w3.org/2001/sw/

Alexandre Santos (alexos@br.ibm.com) gerente de estratgia e marketing de System z da IBM Brasil.

32

www.linuxmagazine.com.br

Preveno contra invaso

Sempre alerta!
Rpidos e silenciosos, invasores podem atacar uma rede, danic-la e sair sem deixar rastros antes que voc perceba. Saiba como evitar estes e outros problemas de segurana. por Flvia Jobstraibizer

CAPA

segurana de redes e sistemas e seu contnuo monitoramento um assunto vasto e por vezes complicado no mundo da tecnologia da informao. No entanto, existe no arsenal do profissional de TI, diversas ferramentas teis para o monitoramento, busca e preveno de potenciais ataques ou problemas relacionados a segurana. Entre tantas tarefas que um administrador de sistemas precisa desempenhar durante sua jornada de trabalho, a segurana da rede e dos sistemas sob sua responsabilidade acaba sendo relegada para segundo plano. Isso se deve ao fato de que os profissionais delegam a tarefa do monitoramento para determinadas ferramentas que, embora eficientes, precisam de uma mozinha para realizar seu trabalho com excelncia. Nesta edio da Linux Magazine vamos falar sobre o preocupante assunto da invaso de redes e sistemas. Os invasores modernos so muito mais efetivos do que antigamente. So rpidos, silenciosos e depois de atingirem seu objetivo seja roubar informaes, seja danificar um sistema vo embora sem deixar rastros, na maioria das vezes. E o problema mesmo, acaba ficando na mo do profissional que agora ter uma grande dor de cabea para resolver. Um dos mais eficientes monitores de rede, o Wireshark, ser abordado nesta edio, em conjunto com algumas ferramentas menos conhecidas e que fazem parte da soluo. Aprenda como ler e interpretar informaes em busca de potenciais evidncias de invaso. O profissional que estiver engajado em encontrar vulnerabilidades que potencialmente podem ser utilizadas por invasores, deve conhecer a ferramenta OpenVAS. Indispensvel no arsenal do analista de segurana, o OpenVAS uma soluo completa para busca de vulnerabilidades em locais especficos como softwares, portas do servidor e servios locais como os protocolos de email e web. Realizamos tambm, uma variedade de testes de invaso em redes que j esto funcionando sob o novo protocolo IP, o IPv6. Descubra quais so as vulnerabilidades que o

novo protocolo IP esconde e prepare-se para, juntamente com a adoo do protocolo, manter sua rede segura! A nova gerao da tecnologia traz diversos benefcios como o IPv6, o HTML5, BIG DATA, HPC, novos sistemas de arquivos, novos kernels e toda uma sorte de ferramentas de segurana para manter os invasores longe dos seus dados. No entanto, nem toda essa avanada tecnologia far com que voc durma tranquilo. preciso estar sempre alerta!

Matrias de capa
Rede de segurana Agulha no palheiro Anlise de vulnerabilidades 34 40 44

Linux Magazine #XX | Ms de 200X

33 3

ANDROID | Multitoque

Android multitoque

ANDROID

Toque perfeito
Com a verso 2.0 do Android, os desenvolvedores passaram a ter acesso a recursos multitoque anteriormente reservados a aplicativos do sistema. Mas ateno: preciso ter cuidado ao manusear a API. por Markus Junginger

sucesso do iPhone demonstra que os controles multitoque oferecem muitos benefcios prticos. No de se admirar que concorrentes do iPhone trabalhem duro no desenvolvimento de suas prprias tecnologias multitoque. O Google estendeu a verso 2.0 do Android API para que desenvolvedores e usurios pudessem se beneficiar de recursos que envolvem toques e gestos.

Uma innidade de touchpads


Ao contrrio do iOS, o Android precisa lidar com uma variedade de combinaes de hardware e software. Primeiro, preciso trabalhar com uma API que suporte mltiplas entradas por toque. No caso do An-

Listagem 1: onTouchListener
01 public boolean onTouch(View v, MotionEvent event) { 02 if (event.getAction() == MotionEvent.ACTION_DOWN) { 03 int x = event.getX(); 04 int y = event.getX(); 05 doSomething(x,y); 06 } 07 }

droid, isto o equivalente a uma API nvel 5 (Android 2.0 ou mais recente). O hardware tambm influencia no nvel de suporte multitoque, e a verdadeira extenso deste suporte nem sempre transparente. Por exemplo, embora o HTC originalmente suportasse Android 1.0 em seu modelo G1 (antes mesmo do recurso multitoque ter sido anunciado), o hardware j era capaz de identificar diversos tipos de gestos. No entanto, o reconhecimento de gestos no necessariamente o mesmo que suporta multitoque. Dispositivos com telas resistentes ao toque, em particular, frequentemente detectam apenas um nico toque isto se aplica, por exemplo, ao HTC Tattoo. Outros dispositivos retornam apenas uma caixa delimitadora: embora estes dispositivos possam identificar uma caixa entre dois dedos, no so capazes de identificar toques individuais. A gura 1 ilustra estas restries de hardware: o desenho mostra dois dedos posicionados de forma distinta em uma caixa delimitadora. Se os dedos do usurio se moverem de uma posio a outra, o dispositivo frequentemente confunde as posi-

es dos dedos e s identificar a caixa com segurana. Muitos aparelhos HTC, como o Desire, usam esta tecnologia. O primeiro smartphone com Android 2.0, o Motorola Droid, detectava as posies dos dois dedos individualmente. O Galaxy S capaz de identificar e processar at quatro toques simultneos. Os desenvolvedores no devem assumir que a tecnologia multitoque estar disponvel onde quer que Android esteja presente. Para aplicativos que dependem de mltiplas entradas por toque para recursos crticos, o desenvolvedor deve adicionar uma nota ao manifesto para garantir que somente os dispositivos multitoque sejam capazes de instalar o aplicativo no Google Play:
<uses-feature android:name = \ "android.hardware.touchscreen. multitouch" />

Descoberta das entradas multitoque


A API multitoque do Android baseada no recurso de toque, introduzido no Android 1.0. A extenso principal para multitoque est relacionada

50

www.linuxmagazine.com.br

Multitoque | ANDROID

com a classe MotionEvent, que inclui recursos adicionais suportados pelo Android 2.0 [1]. Para comear, aceite objetos MotionEvent. Um desenvolvedor normalmente instala um recurso listener para uma visualizao usando setOnTouchListener() ou substitui as classes Activity ou View em onTouchEvent(). A listagem 1 mostra um esqueleto para o onTouchListener. Como possvel notar na listagem 1, o desenvolvedor acessa todos os dados relevantes, tais como a ao realizada ou coordenadas x e y, atravs dos mtodos de acesso a objetos MotionEvent. Na sequncia de um evento ACTION_DOWN, desencadeado pelo Android quando o usurio toca na tela pela primeira vez, o sistema operacional envia eventos ACTION_MOVE para movimentao de dedos. Os eventos continuam at que o usurio pare de tocar na tela. O Android ento informa ao aplicativo que o dedo deixou a tela, e envia um ACTION_UP. Como indica o mtodo

de assinatura onTouch(), possvel registrar um OnTouchListener com mltiplas visualizaes. Na base desta curta atualizao MotionEvent, o desenvolvedor poder criar extenses de mltiplas entradas por toque. Se atualizarmos um aplicativo Android existente, no h necessidade de modificar a estrutura do aplicativo pois os dados das entradas multitoque utilizam o mesmo caminho. Isto fornece um significado adicional ao cdigo do mtodo getAction(): o nmero inteiro de 32-bit codifica dois valores. Podemos isolar esses valores usando bitmasks apropriadas e deslocamentos de bits:
int action = event.getAction() & MotionEvent.ACTION_MASK; int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_ MASK) >> MotionEvent.ACTION_ POINTER_ID_SHIFT;

ndice para o indicador responsvel pelo evento.

Liberdade para os dedos


Se precisar manter cada dedo na tela por um perodo de tempo, ser necessrio utilizar indicadores de ID. O getPointerId(), que pressupe o indicador de index como parmetro, cuida desta tarefa. O exemplo a seguir demonstra o uso de IDs: o indicador e o dedo mdio tocam na tela, um aps o outro. Se o usurio manter um dedo da tela, o programa no consegue identificar o dedo sem conhecer o ID do indicador. No exemplo, o dedo indicador fornece um indicador ID de 0 por ser o primeiro a tocar na tela, e ao dedo mdio atribudo o prximo indicador ID de 1. Com base nos IDs, o programa pode identificar cada dedo individualmente e, assim, sabe qual dedo ainda est tocando a tela. A utilizao de indicadores mltiplos introduz dois novos cdi-

A action , portanto, equivalente e familiar ao cdigo premultitoque. A varivel pointerIndex contm um

Listagem 2: onTouchListener recebendo Motion Events


01 02 03 04 public boolean onTouch(View v, MotionEvent e) { int action = e.getAction() & MotionEvent.ACTION_MASK; int pointerIndex = (e.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; 05 int actionId = e.getPointerId(pointerIndex); 06 pointerCount = e.getPointerCount(); 07 if (actionId < MAX_POINTERS) { 08 lastActions[actionId] = action; 09 } 10 for (int i = 0; i < pointerCount; i++) { 11 int pointerId = e.getPointerId(i); 12 if (pointerId < MAX_POINTERS) { 13 points[pointerId] = new PointF(e.getX(i), 14 e.getY(i)); 15 if (action == MotionEvent.ACTION_MOVE) { 16 lastActions[pointerId] = action; 17 } 18 } 19 } 20 touchView.invalidate(); 21 return true; 22 }

Listagem 3: View mostra os valores


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class TouchView extends View { public TouchView(Context context) { super(context); setBackgroundColor(Color.WHITE); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i = 0; i < MAX_POINTERS; i++) { PointF point = points[i]; if (point != null) { paint.setColor(getColor(i)); canvas.drawCircle(point.x, point.y, radius, paint); String text = getActionText(i); float width = paint.measureText(text); canvas.drawText(text, point.x - width / 2, point.y - radius - calcDevicePixels(8), paint); } } canvas.drawText(Pointer: + pointerCount, 10, calcDevicePixels(30), paintInfoText); } }

Linux Magazine #95 | Outubro de 2012

51

ANDROID | Multitoque

Figura 1 Dedos cruzados causam problemas, a caixa de vnculo para as posies dos dedos a mesma para ambas as variantes, o que signica que o dispositivo no pode identicar precisamente as posies.

gos de ao: ACTION_POINTER_DOWN e ACTION_POINTER_UP correspondem a ACTION_DOWN e ACTION_UP; a diferena que o Android no os utiliza at que um segundo dedo toque na tela. O exemplo demonstra a sequncia de aes. Primeiro o dedo 1 toca a tela, desencadeando assim uma ACTION_DOWN. Quando o dedo 2 toca a tela, disparado um evento ACTION_POINTER_DOWN. Se os dedos se moverem em seguida, o Android registrar um ACTION_MOVE. Se o dedo 1 ento se erguer para fora da tela, o cdigo fornecer um ACTION_POINTER_ UP, considerando que este se trata de um evento ACTION_UP para o dedo 2.

O aplicativo Multitouch Test, disposto na gura 2, resume os principais aspectos relacionados s mltiplas entradas por toque no Android. O aplicativo, disponvel no Google Play, serve para visualizar os eventos multitoque e til como ponto de partida para experimentao de extenses prprias.

Teste de mltiplos toques


O recurso oferecido pelo aplicativo de teste limitado: ajuda a visualizar cada indicador a partir de um crculo, que assume diferentes cores dependen-

Quadro 1: Indicadores
Nos crculos multitoque do Android, um indicador representado por um dedo que interage com a tela. Em outras palavras, um indicador pode ser alguma outra fonte de entrada, como um cursor do mouse. Os desenvolvedores enumeram indicadores usando o getPointerCount(). Ao invs de mtodos de acesso sem parmetros do MotionEvent, temos agora mtodos sobrecarregados, cada um com o indicador de ndice, como o getX(int pointerIndex). Dependendo do aplicativo, o desenvolvedor pode no precisar de mais nada alm de informaes para projetar um aplicativo que suporte mltiplas entradas por toque.

Quadro 2: Mscaras e deslocamentos


O Google adicionou recursos que facilitam a estimativa do cdigo de chamada de ao e indicadores de ndice. Os desenvolvedores no precisam mais de bitmasks e deslocamentos de bits. Em vez disso, o getActionMasked() e o getActionIndex() retornam os valores exigidos pelo MotionEvent. Incidentalmente, o Android 2.2 modica as constantes ACTION_POINTER_ID_MASK e ACTION_POINTER_ID_SHIFTque ocorrem nos exemplos mostrados neste artigo. Porque eles se relacionam com o indicador de ndice mais do que com o ID, so agora mais corretamente entitulados de ACTION_POINTER_INDEX_MASK e ACTION_POINTER_INDEX_SHIFT.

do do cdigo utilizado para chamar a ao. O crculo fica azul quando o usurio toca a tela, verde quando o usurio move um dedo, ou cinza quando acionado o cdigo para um dedo sendo levantado fora da tela. O aplicativo mostra tambm nos crculos o ID do indicador e o ltimo cdigo utilizado para chamar a ao. preciso implementar o cdigo do aplicativo no contexto de uma atividade. A listagem 2 mostra a implementao do OnTouchListener, que vincula-se exibio usando o setOnTouchListener(), conforme ilustrado na listagem 3. Para economizar espao, deixamos de fora as definies de membros, tais como as arrays points[] e lastActions[]. O cdigo-fonte completo est disponvel online [2]. As primeiras linhas da listagem 2 resumem o cdigo da ao e o ndice do indicador. Aps este passo, o cdigo da ao e da posio do indicador esto descritos para as arrays lastActions[] ou points[]. O ndice de ambas as arrays corresponde identificao do indicador, em cada caso. O nmero de indicadores limitado pelas constantes MAX_POINTERS: o aplicativo gerencia um nmero mximo de 20 indicadores. Um caso especial ocorre quando so definidos os cdigos para uma determinada ao. O MotionEvent para o ACTION_POINTER_DOWN retorna mltiplos valores, desde que o ACTION_POINTER_DOWN refira-se apenas a um nico indicador ID. O nico caso em que possvel usar os valores lastActions() para todos os indicadores no MotionEvent o ACTION_MOVE. Por fim, o touchView.invalidate() na linha 20 dispara uma atualizao de status e mostra os novos valores. A visualizao neste aplicativo uma classe separada, diretamente derivada da View, como mostra a listagem 3. O objeto Canvas fornece um mtodo simples de desenhar crculos em um loop. Os cdigos para

52

www.linuxmagazine.com.br

Multitoque | ANDROID

coordenadas e chamadas de ao necessrios para desenhar crculos so coletados pelo onTouchListener da listagem 2 nas arrays points[] e lastActions[]. A cor e o texto de um crculo so definidos pelos mtodos getColor() e getActionText(). A mltipla escolha determina o valor de retorno, que depende do cdigo da ltima ao atribuda ao indicador. Finalmente, o aplicativo tambm desenha o nmero de indicadores contidos no MotionEvent em formato texto. O mtodo calcDevicePixels() auxiliar e verifica o nmero especfico de pixels do dispositivo, que por sua vez depende da profundidade de pixels dispostos na tela.

multiplicar a propriedade ScaleFactor pelo ScaleGestureDetector. Com os mtodos getFocusX() e getFocusY() possvel verificar o foco do dimensionamento.

Concluso
Hardware e software em dispositivos Android possuem uma enorme influncia no suporte multitoque. Telas que suportam mltiplas entradas

por toque dependem do Android 2.0 ou mais recente e muitas vezes apresentam capacidades limitadas um fato que os desenvolvedores precisam ter em mente na construo de seus aplicativos. A API multitoque, com suas MotionEvents e diversos indicadores, asseguram um lugar no pdio para o Android no que se refere a dispositivos dotados deste recurso.

Pinch e zoom
Possivelmente, a novidade mais interessante o ScaleGestureDetector, que detecta e amplia gestos. Trs etapas so necessrias para utiliz-lo: primeiro, preciso instanciar um ScaleGestureDetector; em seguida, passar cada MotionEvent para o ScaleGesture-Detector; por ltimo, necessrio um listener especial para coletar os novos dados. A listagem 4 mostra estas trs etapas nos mtodos init() e onTouchEvent(), e na classe MyScaleListener. O mtodo onScale() escalona a visualizao ao

Figura 2 O aplicativo Multitouch Test permite que programadores depurem


eventos e os exibam em cores.

Mais informaes
[1] API multitoque para Android: http://developer.android. com/reference/android/ view/MotionEvent.html [2] Cdigo-fonte para este artigo: http://smart-developer.com/ Resources/Article-Code

Listagem 4: Pinch e Zoom


01 // called in constructor, for example 02 private void init(Context context) { 03 scaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); 04 } 05 06 public boolean onTouchEvent(MotionEvent ev) { 07 scaleDetector.onTouchEvent(ev); 08 // ... 09 } 10 private class MyScaleListener 11 extends ScaleGestureDetector.SimpleOnScaleGestureListener { 12 public boolean 13 onScale(ScaleGestureDetector detector) { 14 skalierung *= detector.getScaleFactor(); 15 invalidate(); 16 return true; 17 } 18 }

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

Linux Magazine #95 | Outubro de 2012

53

SSEGURANA | Monitoramento com NAS

Monitoramento com NAS

SEGURANA

Olhar penetrante
Tire proveito do baixo consumo de energia oferecido por dispositivos NAS modernos para monitorar suas cmeras. por Ben Martin

moderno hardware NAS possui a CPU embutida que muitas vezes oferece grande desempenho com baixo consumo de energia. Muitas destas unidades necessitam de menos de 10 watts para operar com uma conexo de rede gigabit e a CPU a 100% de uso. Um NAS com baixo consumo de energia pode consumir de 10% a 20% da eletricidade que um hardware desktop precisa para funcionar. A principal questo passa a ser ento: seria a CPU do NAS rpida o suficiente para monitorar e detectar o movimento de uma ou mais cmeras? Neste artigo, examinaremos se o QNAP TS-219P II [1], com uma CPU ARM Marvell de 2 GHz e 512MB de RAM, est pronto para o desafio de deteco de movimento em tempo real (gura 1). Note que grande parte do artigo tambm deve ser diretamente aplicvel ao seu primo mais barato

de carcaa nica, o QNAP TS-119p II, que ostenta a mesma CPU/RAM. Uma soluo popular para monitoramento com cmera e deteco de movimento a suite ZoneMinder [2]. As cmeras podem ser tanto de rede IP como cmeras USB conectadas diretamente ao servidor ou em outra mquina na rede. O ZoneMinder pode monitorar todas as suas cmeras, detectar movimento em reas-chave ou zonas, e notific-lo sobre a atividade em reas de interesse. As zonas limitam a rea de monitoramento, de modo que o ZoneMinder pode ver quando algum caminha at sua garagem sem que o vento nas rvores acione um alarme falso. Duas empresas que fazem hardware NAS usando CPU ARM de alto nvel so a Synology e a QNAP. Produtos de baixa capacidade com CPUs de 1.2GHz e 256MB de RAM tambm esto disponveis, assim como modelos

mais sofisticados com CPUs de 2GHz e 512MB de RAM. No intervalo dos 1,2 GHzz esto o Synology DS212j e o QNAP TS-212; no intervalo dos 2 GHz esto o Synology DS212+ e o QNAP TS-219P II, juntamente com o de carcaa nica QNAP TS-119p II. Tanto o produto da QNAP quanto o da Synology vem com sua prpria distribuio Linux. Ambas as unidades NAS permitem usar o gerenciador de pacotes ipkg para instalar aplicativos de cdigo aberto adicionais e complementar o software embarcado. Por exemplo, o leitor pode instalar o padro CoreUtils ao invs dos binrios-padro BusyBox.

Instalao
Se o usurio no possuir um dispositivo NAS instalado, a configurao inicial para este aparelho exige que seja feita a remoo de uma (ou mais) bandejas individuais de disco rgido, um parafuso do disco da bandeja, e o deslizamento de volta para a unidade. Uma vez que os cabos de energia e rede estiverem conectados, teremos completado a configurao de hardware. Por outro lado, o Synology DS212j desliza em duas partes separadas, e fixamos o disco rgido diretamente em um gabinete de disco rgido interno antes de fazermos o mesmo com a capa exterior do Synology NAS. Quando ligamos o TS-219P II, o dispositivo tentar obter um endereo

Listagem 1: Instalao do Debian Wheezy


01 02 03 04 05 06 # for if in `seq 1 6`; do cat /dev/mtdblock$if > mtd$if done # cp mtd* /share/external/sdi1/ # sync # export DIST=ftp://ftp.debian.org/debian/dists/wheezy/main/ installer-armel/current/images/kirkwood/network-console/qnap/ts-219/ 07 # wget $DIST/flash-debian $DIST/initrd.gz $DIST/kernel $DIST/model 08 # sh flash-debian 09 Your MAC address is 00:08:9B:C8:D7:11 10 # reboot 11 # exit

60

www.linuxmagazine.com.br

Monitoramento com NAS | SEGURANA

IP via DHCP, aps o qual podemos efetuar login em uma interface online do dispositivo NAS e concluir a instalao. A configurao inicial do TS-219P II envolve o upload de um arquivo de imagem firmware de 140 MB (gura 2). Aps o NAS reinicializar e cair na distribuio Linux que acabamos de carregar, preciso responder algumas perguntas sobre localidade, senhas e preferncias do aplicativo (gura 3). Para muitos fins, a combinao de pacotes nativos do fornecedor NAS complementada com pacotes disponveis atravs do ipkg suficiente. Se o aplicativo que o usurio necessita no est incluso no ipkg, possvel compil-lo e instal-lo. Este processo geralmente envolve a criao de um ambiente em mquina virtual para a CPU ARM em uma mquina desktop, bem como a compilao do software. Normalmente, os cabealhos de desenvolvimento de software no NAS no esto disponveis facilmente sob a forma de pacotes para instalao no prprio equipamento.

Figura 1 Equipamentos: QNAP TS-219P II NAS, uma cmera


TP-Link TL-SC3171G, e um disco de 2TB WD Green.

Como instalar o Debian no ARM


Para uma personalizao mais avanada, temos a opo de instalar o Debian ao invs de utilizar o firmware de fbrica. Instalar o Debian permite acessar o ZoneMinder atravs do gerenciador de pacotes e compilar o software mais facilmente na mquina NAS. A instalao do Debian em uma mquina ARM personalizada [3] pode parecer assustadora pela primeira vez. Histrias de pessoas com instalao pela metade que viram apenas tijolos caros so folclore comum; para tornar as coisas mais intrigantes, no temos qualquer tela ligada ao dispositivo que permita descobrir o que deu errado. Alm disso, teremos que configurar o suporte de opes personalizadas para o hardware fornecido, como alto-falantes, LEDs e fans. Dito isto, o processo de instalao do Debian bastante simples e

provavelmente mais at que a configurao do ambiente de compilao necessrio para ampliar o nmero de softwares se continuarmos a usar o firmware fornecido [4]. Para prosseguir, siga os seguintes passos: 1. Opcionalmente, faa uma cpia de segurana do firmware do carto de memria no NAS. 2. Baixe o Debian flasher, kernel, metadados, e arquivos de instalao initrd. 3. Instale os arquivos na memria flash do NAS. 4. Reinicie. 5. Conecte-se via SSH no NAS e conclua o processo com a interface

de instalao do Debian, que baseada em console. Uma vez que o passo 5 tenha sido concludo, o programa ir reinstalar a memria do NAS para iniciar em um novo sistema Debian. Alm do kernel e o initrd residente na memria flash do NAS, as etapas restantes para instalar o Debian so exatamente as mesmas que existem em uma mquina desktop. Como veremos mais adiante, o primeiro passo para fazer uma cpia de segurana do firmware existente opcional. O instalador Debian convenientemente pega as configuraes de hosts e de rede que havamos feito

Figura 2 Enviando a imagem mais recente do rmware do site da QNAP.

Linux Magazine #95 | Outubro de 2012

61

SSEGURANA | Monitoramento com NAS

reinicializao, devemos ser capazes de fazer um ssh como root e encontrar uma tima mquina Debian nos aguardando. Com um disco WD Green de 2TB executando, o NAS ocioso deve consumir cerca de 10 watts de energia (tabela 1).

Fora das cinzas


Uma desvantagem de usar firmware personalizado em um hardware especializado descobrir o que fazer quando as coisas do errado. Tnhamos um drive Green de 2TB sobrando e, enquanto este artigo estava sendo escrito, descobrimos por que ele no estava em uso ativo. Depois que substitumos o kernel na memria flash do NAS com o kernel e a imagem initrd do Debian, o sistema queria encontrar uma instalao Debian para inicializar a partir do disco rgido. O problema era que o disco no queria mais funcionar e, para os objetivos desta anlise, no tnhamos nos dado ao trabalho de criar um RAID espelhado agradvel para o caso de uma simples falha de disco. Esta situao parece ser um cenrio do pior caso: um disco rgido danificado; o firmware na memria flash sobrescrito com software que espera que o disco esteja por ali; sem inicializao; sem visor. Felizmente, mesmo quando sobrescrevemos a memria flash do equipamento QNAP, podemos coloc-lo em um modo que tentar recuperar a partir da rede a informao que deve estar na memria flash [5]. Melhor ainda, o QNAP oferece uma imagem de boot do Linux que contm um servidor TFTP para transmitir a imagem flash para o NAS. Ao ligar o laptop diretamente no NAS, iniciar a partir do disco de recuperao no laptop e segurar o boto reset enquanto liga o NAS, o usurio poder ativar esse modo de recuperao. Uma vez que o NAS ligar, sero ouvidos bipes e diferentes cores LEDs piscaro para que esteja ciente de que algo est acontecendo; no final, ter o NAS com o mesmo

Figura 3 Uma vez que o rmware gravado em disco, congure seu login,
localizao, IP, e servios de informao.

com o firmware QNAP normal e as reutiliza para a instalao do Debian. A maioria das perguntas so sobre localizao e como desejamos que discos e parties sejam configurados. Em nossa instalao do Debian Wheezy (listagem 1), os primeiros cinco comandos criam uma cpia de segurana da memria flash existente em um pendrive. Na linha 6, os quatro arquivos de instalao do Debian mencionados no passo 2 so baixados, enquanto um comando flash-debian na linha 8 nos coloca na memria flash do QNAP, pronto para ser carregado quando o NAS for reiniciado. Aps o NAS ser reiniciado, devemos ser capazes de fazer ssh nele como installer@NAS usando a senha install. Provavelmente teremos que remover a chave do host do arquivo ~/.ssh/known_hosts para o SSH no considere que o host mudou sua chave de forma inespera-

da desde a ltima conexo. Em seguida, o usurio dever ver um menu de boas-vindas como o da gura 4. Perto do final da instalao, teremos a chance de alterar a seleo de aplicativos. muito importante que o usurio no se esquea de instalar a opo de servidor SSH, para que possa conectar-se facilmente no NAS quando o Debian instalado for executado. Alm disso, precisaremos de um servidor online, um banco de dados SQL, e um servidor de arquivos enquanto estivermos neste menu. Apesar de um servidor de arquivos no ser realmente necessrio para o ZoneMinder, se o usurio possuir algum espao sobrando no seu disco rgido, pode desejar acess-lo atravs da rede para outros fins. Quando a instalao estiver concluda, o instalador pede que sejam removidos todos os discos CD-ROM ou de instalao (que no temos). Na

Figura 4 Iniciando a instalao do Debian via SSH.

62

www.linuxmagazine.com.br

Monitoramento com NAS | SEGURANA

software no firmware de quando o comprou, poupando-o de um NAS personalizado que no iria inicializar. Em seguida, podemos colocar o instalador do Debian de volta na memria flash do NAS e escolher com mais sabedoria na pilha de discos rgidos disponveis. claro que, em produo, todo mundo usa um RAID espelhado ou tem um slido, automatizado e testado sistema de backup incremental em funcionamento, no mesmo?

ZoneMinder
As principais dependncias do ZoneMinder so Perl, MySQL, OpenSSL, a biblioteca JPEG, alguns mdulos Perl, e (opcionalmente) FFmpeg. O ZoneMinder inclui cdigo PHP, C++ e Perl. Depois de instalar o Debian no sistema, podemos tirar proveito dos repositrios de pacotes para instalar o ZoneMinder sem ter que compil-lo. A instalao simples como chamar um:
apt-get install zoneminder

resultando em cerca de 170 MB de espao adicional usado no NAS. Para iniciar a interface online do ZoneMinder, temos que criar um link do arquivo de configurao do site no diretrio conf.d do Apache:
# ln -s /etc/zm/apache.conf /etc/ apache2/conf.d/zoneminder.conf # /etc/init.d/apache2 restart

soluo da imagem, largura e altura em pixels coincide com a sada da cmera (gura 6). Alm disso, precisamos saber o endereo IP e a porta da cmera e, via HTTP, pode ser necessrio entrar com o URL para comear a usar os dados da cmera. Para uma cmera de 640x480, espere utilizar cerca de 10% da CPU somente do ZoneMinder para transmitir dados a uma baixa taxa de quadros [6]. Adicionar zonas para detectar movimento em reas crticas da imagem ir adicionar mais uso de CPU neste valor. Nossa configurao NAS teve que usar at 25% da CPU para atender ao streaming de vdeo a partir de uma webcam com 640x480 para o Firefox (gura 7). Com a cmera TP-Link apontada para uma cena escura ao ar livre noite, a deteco de movimento manteve-se em cerca de 15% da CPU para quadro cheio (full frame 640x480) de deteco em uma taxa de quadros baixa (tabela 2).

Figura 5 Incluso de uma nova


cmera no ZoneMinder.

640x480. Para calcular a quantidade de memria necessria para o armazenamento de imagens da cmera, encontre a memria (bytes) para um nico quadro: largura(px) x altura(px) x 3(RGB). Estas imagens so armazenadas numa rea de buffer na memria. O padro que utilizamos foi de 40 imagens no buffer para uma cmera. O comando:
mount -o remount,size=256m /dev/shm

Memria compartilhada
O ZoneMinder precisa manter as imagens recentes que recebe das cmeras em algum lugar na memria. Nas verses anteriores, o ZoneMinder usava memria compartilhada para armazen-las. Agora, ele cria e usa arquivos de memria mapeados em /dev/shm. Independentemente de qual sistema esteja em uso, pode ser necessrio adequar o NAS para fazer o armazenamento correto de memria disponvel para estas imagens. O ZoneMinder 1.25.0 do Debian Wheezy utilizado neste artigo usa o dospositivo /dev/shm para as imagens. A instalao padro criou um sistema de arquivos tmpfs com um tamanho limite de 100MB. O ZoneMinder precisa de cerca de 100MB para uma nica cmera de 1280x720, e cerca de 35MB para uma nica cmera de

vai dedicar mais memria para imagens do ZoneMinder. Para fazer isso funcionar aps uma reinicializao, edite o arquivo /etc/default/tmpfs e defina shm_size para o tamanho que desejar. Para economizar memria para cmeras maiores, ajuste o tamanho de buffer para quadros de imagem mostrado na guia Buffers das confi-

Com este link no lugar e o Apache reiniciado, devemos ver a interface online do ZoneMinder em http://NAS/zm/, supondo que NAS o endereo IP da unidade NAS. O boto Add New Monitor na parte inferior da interface do ZoneMinder permite que adicionemos uma nova cmera no sistema (gura 5). Para este exemplo, usaremos duas cmeras: a TP-Link TLSC3171G 640x480 IP e a Logitech C910 USB 1080p. A parte complicada na configurao de cmeras saber o que o caminho do host remoto (Remote Host Path) deve ser e ter a certeza de que a re-

Figura 6 Congurao de uma cmera


de rede no ZoneMinder.

Linux Magazine #95 | Outubro de 2012

63

SSEGURANA | Monitoramento com NAS

guraes da cmera. Descobrimos que para usar menos quadros tivemos que excluir, por exemplo, zm.mmap.2 de /dev/shm e fazer o ZoneMinder recriar um novo arquivo menor quando aceitamos a configurao da cmera. Usar 20 quadros para uma cmera de 720p requer apenas 53MB de RAM.

Como detectar eventos


O que faz o ZoneMinder interessante a sua capacidade de detectar movimento em reas crticas de um quadro da cmera e gravar o vdeo automaticamente quando o movimento ocorre. Depois de colocar a cmera no modo de deteco de movimento clicando no link Funo da cmera na pgina inicial de instalao do ZoneMinder, podemos mascarar partes do quadro de vdeo clicando no link Zonas da cmera. Desta forma, o ZoneMinder ignora movimento fora da sua rea de interesse. Muitos fatores determinam a quantidade de CPU que necessria para a deteco de movimentos: o tamanho da imagem da cmera, imagens em cores ou imagens em escala de cinza, o nmero de quadros por segundo de um processo, a dimenso das zonas de deteco, e os parmetros utilizados no algoritmo de deteco.
Watts 1 7 8 10 13 Ao

Quando clicamos no nome de uma cmera no ZoneMinder, mostrada uma visualizao ao vivo do que a cmera est captando, junto com uma lista dos eventos que foram detectados recentemente e a capacidade de forar o disparo de um alarme. O disparo de um alarme tem o mesmo efeito que forar o ZoneMinder a pensar que um movimento significativo ocorreu na cmera. Em nosso primeiro teste, usamos uma cmera TPLink com 640x480 a 5fps. O monitoramento usou 15% da CPU, e forar um estado de alarme causou um salto de at 26% da CPU. Aps a confirmao de um alarme disparado pelo ZoneMinder indicando movimento real na cmera, foi confirmado o mesmo salto para 26% de uso de CPU no NAS. Monitoramento com uma C910 Logitech atravs da rede com resoluo de 1280x720 a 10fps consumiu 72% de CPU do NAS. Baixando para 2fps com a mesma cmera usou at 22% da CPU. A visualizao ao vivo a 2fps consumiu um adicional de 40% de CPU. Claramente, cmeras de monitoramento de 720p a 30fps esto alm do que a CPU no NAS pode segurar, e deteco de movimento a 10fps provavelmente no possvel, mas se voltarmos alguns quadros por segundo com a mesma cmera, pode ser bom a 720p se o usurio desejar utilizar apenas uma cmera.

Uma cmera USB ultrabarata com 640x480 que s pode produzir vdeo YUYV conectada porta USB2 do NAS sendo usada a 5fps precisa de cerca de 15% da CPU para monitorar e 50% para transmitir. A deteco de movimento em quadro cheio nesta cmara requer um adicional de 40% de CPU, que tem picos de at 80% se um estado de alarme disparado. O uso da CPU no mudou muito entre as predefinies rpida e melhor com baixa, mdia e altas sensibilidades. Reduzir para uma rea de alarme de 100x100 diminuiu o uso da CPU a 35%. Mudar a cmera ligada localmente para a C910 da Logitech e tentar a resoluo de 1280x720 a 5fps dividiu o uso de CPU 50-50 entre monitorar a cmera e verificar movimentos nos quadros. Tal diviso de 50-50 parecia suspeita, j que a deteco de movimento deve ser mais custosa do que o simples monitoramento. Depois de voltar para 3fps, o monitoramento usou apenas 30% da CPU e a deteco de movimento usou 68%. Depois de voltar para 640x480 a 4 fps, o monitoramento consumiu 12% de CPU e a deteco de movimento, 28%. Logo, se o usurio quiser usar este processador, qualquer coisa acima de 640x480 susceptvel a causar problemas de desempenho.

Mergulho no cdigo
Pelo fato de no vermos muita diferena no uso de CPU para cada um dos algoritmos de deteco de movimento que o ZoneMinder oferece, decidimos dissecar um pouco o cdigo. O cdigo chama Monitor::DetectMotion() a cada quadro para trabalhar a pontuao (quantidade de movimento) e se um alarme foi acionado. Tendo esse mtodo retornar sem alarme de imediato ao invs de deteco de movimento real resultou em cerca de 8% da CPU a ser utilizada para uma cmera de 640x480 executando a 6fps.

NAS desligado, mas com cabo plugado Disco com giro baixo e nenhum cabo de rede Disco com giro baixo Em execuo com o disco girando Discos girando e executando o OpenSSL

Tabela 1 Uso de energia com o rmware de fbrica.


% CPU RAM (MB) Tarefa (Processo) 6-12 15-25 15 43 41 42 Monitorar apenas noite (zmc) Visualizar no Firefox (nph-zms) Deteco de movimento, quadro completo, noite (zma)

Tabela 2 Uso de CPU e RAM da TP-Link (5fps).

64

www.linuxmagazine.com.br

Monitoramento com NAS | SEGURANA

Uma das primeiras coisas que DetectMotion() faz criar uma imagem delta, medindo o quanto o quadro atual difere de um quadro de referncia. A imagem delta apenas registra a intensidade da diferena para cada pixel em vez da diferena de cada vermelho, verde e azul. Para fazer a imagem delta e exclu-la novamente antes de retornar nenhum alarme, 15% da CPU foi necessria antes de qualquer deteco de movimento ter ocorrido. O ncleo do mtodo Imagem::Delta() cria uma imagem delta e registra quanto cada pixel diferente de uma imagem de referncia:
... red = y_r_table[*psrc++ - *pref++]; green = y_g_table[*psrc++ - *pref++]; blue = y_b_table[*psrc++ - *pref++]; *pdiff++ = abs_tablered + green +; ...

do com o comando /proc/cpuinfo, a CPU neste equipamento QNAP s tinha disponvel as extenses swp half thumb fastmult edsp. Pelo fato de os valores de referncia apresentados na tabela 2 variarem mais com a resoluo de imagem e taxa de quadros, apenas preparar e produzir todos os quadros estava consumindo uma quantidade substancial da CPU.

Consideraes nais
Os chips ARM top de linha que equipam alguns hardwares NAS modernos fornecem uma plataforma para computao em tempo real bastante interessante, com consumo de energia reduzido. A CPU de 2GHz Kirkwood do NAS testada aqui poderia realmente apenas lidar com deteco de movimento em uma taxa de quadros baixa em duas cmeras IP com 640x480 ao mesmo tempo. Tenha em mente que o dispositivo pode fazer isso com menos de 15 watts, incluindo o disco rgido. Quando no h eventos acontecen-

do, o equipamento pode cair para menos de 10 watts enquanto ainda monitora ativamente as cmeras em busca de movimentos interessantes. Monitoramento de cmera normalmente uma proposta de trs turnos. A prxima vez que o leitor considerar realocar um PC com consumo de 75 watts a 100 watts para este propsito, poder considerar a alternativa NAS, j que a mesma poderia muito bem pagar-se nos primeiros 12-18 meses se levarmos em conta a economia de energia. Com uma instalao Debian, o NAS tem acesso a uma quantidade enorme de pacotes de software que permitem a personalizao do dispositivo para lidar com uma tarefa especfica.

Mais informaes
[1] Pgina do QNAP TS219P II: http://web. qnap.com/pro_detail_ feature.asp?p_id=211/ [2] ZoneMinder: http:// www.zoneminder.com/ [3] Debian no QNAP NAS: http:// www.cyrius.com/debian/ kirkwood/qnap/ts-219/ [4] Documentao do instalador do Debian ARM: http://www. debian.org/releases/lenny/ arm/install.pdf.pt_BR [5] Recuperao de rmware do QNAP: http://wiki.qnap. com/wiki/Firmware_Recovery/ [6] Discusso sobre uso de CPU pelo ZoneMinder: http://www. zoneminder.com/wiki/index. php/FAQ#Why_is_ZoneMinder_ using_so_much_CPU.3F [7] Arquitetura ARM: http:// en.wikipedia.org/wiki/ ARM_architecture

As variveis so pref, a imagem de referncia; psrc, o quadro atual e pdiff, a imagem delta. Este cdigo pode ser modificado e executado mais rapidamente em CPUs ARM com a extenso NEON [7]. De acor-

Gostou do artigo? igo?


Queremos ouvir sua opinio. nio. m Fale conosco em cartas@linuxmagazine.com.br ne.com Este artigo no nosso osso site: s e: r/artic 693 http://lnm.com.br/article/6938

Figura 7 Monitoramento de uma pea de madeira com o ZoneMinder no NAS.

Linux Magazine #95 | Outubro de 2012

65

TUTORIAL | OpenSSL com Bash

Como usar OpenSSL com Bash

TUTORIAL

Crptico
A criptograa uma parte importante da segurana em TI, e o OpenSSL uma conhecida ferramenta de criptograa para o Linux. Especialistas conam no OpenSSL porque livre, possui muitos recursos e fcil de usar em scripts Bash. por Marcin Teodorczyk

OpenSSL [1] faz uso da entrada e sada padres, e suporta uma ampla gama de parmetros, tais como opes de linha de comando, variveis de ambiente, pipes, arquivos e descritores de arquivos. Podemos aproveitar estes recursos para escrever rapidamente scripts Bash [2] que automatizam tarefas, tais como teste de conexes SSL/TLS, converses massivas entre diferentes formatos de chaves criptogrficas e certificados, assinatura/ criptografia em lote de arquivos, auditoria de arquivos protegidos por senha, e implementar ou testar uma infraestrutura de chaves pblicas PKI (Public Key Infrastructure). As ferramentas do OpenSSL fornecem muitos mdulos que executam tarefas especficas. Cada mdulo no um executvel separado mas, ao invs disso, selecionado com o primeiro parmetro do executvel openssl. Por outro lado, cada mdulo tem uma pgina de manual separada. Por exemplo, um mdulo chamado x509 gerencia certificados digitais X.509 e um mdulo chamado pkcs12 gerencia pacotes PKCS12.

Para usar o x509, devemos executar o seguinte comando:


openssl x509 -param1 param1value

mas, para ver sua pgina de manual, devemos digitar man x509.

Como testar conexes SSL/TLS


O OpenSSL fornece trs mdulos que permitem testar as conexes SSL: s_client, s_server e s_time. Os dois primeiros, como os nomes sugerem, so para simular um cliente e um servidor em uma conexo SSL. O terceiro para os testes de tempo de conexo. Vamos comear com uma anlise detalhada no mdulo s_client. O s_client particularmente til para verificar quais protocolos e cifras o servidor aceita utilizar. Esta informao til em auditorias de segurana e recursos. Por exemplo, podemos usar esta informao de protocolo para encontrar servidores que no aceitam um protocolo ou cifra legtimo, evitando assim que um cliente legtimo se conecte. Tam-

bm podemos localizar servidores que aceitam protocolos ou cifras fracos e poderiam assim permitir um ataque malicioso. Com uma pequena ajuda do Bash, possvel automatizar esse processo. Suponha que os nomes do cliente e do servidor so cliente e servidor, e que o servidor escuta conexes SSL/ TLS na porta 443. Para verificar quais protocolos o servidor aceita, podemos usar os seguintes parmetros: -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, ou -no_tls1. Pelo fato de o SSL2 ser conhecido por ter falhas de segurana, podemos tentar nos conectar ao servidor usando o seguinte comando:
openssl s_client -connect server:443 -no_ssl3 -no_tls1

Se o servidor aceita qualquer outro protocolo exceto SSL3 ou TLS1, o comando anterior abre uma conexo e espera por dados claro, esta abordagem no a ideal se o usurio pretende inserir o comando em um script Bash). Para fechar a conexo imediatamente depois de estabelec-la, escreva na entrada padro do s_client:

66

www.linuxmagazine.com.br

OpenSSL com Bash | TUTORIAL

echo "x" | openssl s_client -connect server:443 -no_ssl3 -no_tls1

Da mesma forma, podemos verificar cifras permitidas com o parmetro -cipher. Para comodidade do utilizador, o OpenSSL permite especificar conjuntos de cifras especficas (por exemplo, DES-CBC3-SHA) ou grupos de cifras (por exemplo, LOW, MEDIUM, HIGH, NULL, ALL). Descubra nomes de grupo e cifras com man ciphers. Para verificar se o servidor aceita conexes usando cifras do grupo NULL ou LOW, use o seguinte:
echo "x" | openssl s_client -connect $server:443 -cipher NULL,LOW

que permitem tais conexes so gravados no arquivo bad_protocol.txt. Da mesma forma, os hosts que permitem conexes com cifras NULL ou LOW so listados em bad_cipher.txt.

Como manipular formatos PEM/ DER e PKCS12


Alguns formatos e containers so usados para pares de chaves de criptografia pblicas e certificados digitais. Sem entrar em detalhes, os formatos mais comuns da nossa rede so PEM, DER, PKCS12, ou JKS. Destes, apenas o formato JKS no suportado pelo aplicativo OpenSSL. O PEM e o DER so formatos codificados o PEM um formato codificado em Base64. O DER binrio. O PKCS12 um container que pode armazenar chaves privadas e pblicas, bem como certificados assinados e cadeias de certificados. Para converter entre os formatos de arquivo PEM e DER, podemos usar os parmetros -inform e -outform. Por exemplo, para converter todos os certificados X.509 de PEM para DER, usamos o seguinte loop:
for file in * pem; do openssl x509 -inform PEM -in $file -outform DER -out $file.der; done

Em scripts Bash, uma boa ideia executar mdulos OpenSSL com um tempo limite especificado. Caso contrrio, quando uma mquina no puder ser resolvida, o script ficar esperando por um longo tempo. Um utilitrio Linux especial permite executar qualquer comando com um tempo limite. Surpreendentemente, o utilitrio se chama timeout. Por exemplo, para verificar se uma conexo SSL2 pode ser estabelecida, mas no esperar por ela mais de 10 segundos, use:
echo "x" | timeout 10 openssl s_client -connect server:443 -ssl2

tal operao no Bash com a opo passin do OpenSSL. Esta opo nos permite especificar senhas para acessar dados em arquivos protegidos por senhas de cinco maneiras. Ela til no s para o PKCS12, mas para toda ao que requer uma senha; por exemplo, chaves privadas ou dados criptografados. Primeiro, especificamos uma senha como pass:password_text e, neste caso, password_text a senha atual. Este no um mtodo seguro, porque a senha armazenada no histrico do Bash e pode ser vista com um comando ps durante a execuo. Segundo, especificamos a senha com env:var. Este mtodo mais seguro, porque a senha manipulada na varivel de ambiente var. Outra abordagem a de armazenar a senha como file:pathname, que diz ao OpenSSL para ler a senha da primeira linha de um arquivo localizado em pathname. Ou ainda poderamos usar fd:number, o que faz o OpenSSL ler a senha do descritor de arquivo number. Finalmente, podemos simplesmente usar stdin para ler senhas da entrada padro. Em seguida, extrairemos todos os certificados de arquivos PKCS12 protegidos por senha em um diretrio de trabalho e tratamos de armazen-los sem senha. Isto pode ser feito da seguinte forma:
for file in *.p12; do openssl pkcs12 -in $file -passin file:$file.pass -nokeys -nodes -out $file.nokeys done

Finalmente, para tornar o comando mais automtico, podemos usar a varivel $? para verificar o cdigo de retorno do ltimo comando executado pelo Bash. Se a conexo for estabelecida, o OpenSSL retorna 0. A listagem 1 mostra um exemplo de script simples, com tudo que fizemos at agora. O script l nomes de hosts da entrada padro e verifica se uma conexo diferente de SSL3 ou TLS1 pode ser estabelecida com a porta 443. Ele espera no mais do que trs segundos. Nomes de hosts

Outra tarefa comum a extrao de chaves/certificados de um pacote PKCS12, que geralmente protegido com uma senha. possvel lidar com

Listagem 1: Como vericar protocolos permitidos


01 #!/bin/bash 02 while read server ; do 03 timeout 3 openssl s_client -connect $server:443 -no_ssl3 -no_tls1 04 if [ $? -eq 0 ] ; then 05 echo $server >> bad_protocol.txt 06 fi 07 timeout 3 openssl s_client -connect $server:443 -cipher NULL,LOW 08 if [ $? -eq 0 ] ; then 09 echo $server >> bad_cipher.txt 10 fi 11 done

Linux Magazine #95 | Outubro de 2012

67

TUTORIAL | OpenSSL com Bash

Supomos que temos uma senha para cada arquivo PKCS12 escrita em um arquivo com a extenso .pass.

Criptografar e descriptografar em massa


Tarefas comuns de criptografia de arquivos incluem encriptao e decriptao. A criptografia simtrica utiliza uma chave para criptografar e descriptografar. A criptografia assimtrica usa uma chave pblica para criptografar e uma chave privada para descriptografar (normalmente implementada com PKI e certificados X.509). Criptografia simtrica mais rpida que a criptografia assimtrica, e uma escolha melhor quando no h necessidade de acesso pblico para a chave. Para criptografar o arquivo plain. txt com criptografia simtrica e escrever o arquivo de sada cipher.enc, usamos o seguinte comando:
openssl [ciphername] -a -salt -in plain.txt -out cipher.enc

for file in *.txt; do openssl aes-256-cbc -d -a -salt -in "$file" -out "../dec/$file" -passin file:pass done

Verificamos cada arquivo protegido por senha no diretrio atual com


while read pass; do for file in *.p12; do openssl pkcs12 -in $file -noout -passin pass:$pass 2>/dev/null if [ $? -eq 0 ] ; then echo "Senha adivinhada para $file: $pass" fi done done < passwords.txt

novamente supondo que tenhamos uma senha no arquivo pass.

OpenSSL e a entrada/ sada padro


De acordo com a filosofia Unix, cada argumento que passado com o parmetro in pode ser passado tambm usando a entrada padro. Se no especificarmos a sada com o parmetro -out, o resultado ser mostrado na sada padro. Assim, podemos usar o OpenSSL para processar sadas de outros comandos e gerar entradas para outros programas com um pipe. Para verificar se um certificado com o nmero de srie 44A2FC741D8C1755 foi revogado, usamos o seguinte comando:
curl -s http://localhost/crl.pem | openssl crl -text -noout | grep "Serial Number: 44A2FC741D8C1755"

utilizando cada senha do arquivo passwords.txt.

Teste do PKI
O ltimo grande recurso do OpenSSL o de implementar uma infraestrutura de chave pblica (PKI). Uma PKI muitas vezes tem um papel crucial na segurana, e o OpenSSL pode ser usado para implementar e testar uma PKI. Primeiro, podemos usar o OpenSSL para gerar pares de chaves e pedidos de assinatura de certificado correspondentes (da sigla CSRs, de Certificate Signing Request). Segundo, podemos assinar CSRs, criando assim certificados vlidos. Terceiro, podemos revogar e gerar CRLs. Quarto, podemos assinar/ criptografar e verificar/descriptografar. E finalmente, podemos alterar os parmetros em tempo real e manipular valores, tais como algoritmos, comprimentos de chave ou contedo DN. possvel usar estes dados como entrada para outros aplicativos. A listagem 2 mostra alguns exemplos de recursos que usamos para testar vrios elementos de uma PKI. A funo create_config foi cortada para melhor legibilidade. Utilize o contedo de seu arquivo de configurao padro do OpenSSL para configuraes adicionais. O arquivo de configurao normalmente se chama openssl.cnf e fica em /etc. Por padro, o OpenSSL l o arquivo de configurao de um local especificado (normalmente /etc/ openssl.cnf); mas, para nossos testes, foi mais fcil criar um arquivo

O sistema solicitar uma senha criptogrfica, que tambm tem de ser digitada quando for descriptografada mais tarde. No a melhor opo para operaes em massa, mas j descrevemos vrios mtodos para especificar uma senha para o OpenSSL. Assim, para criptografar todos os arquivos .txt no diretrio atual e grav-los no diretrio ../enc com a cifra aes-256-cbc, possvel usar o seguinte loop (supondo que a senha est escrita no arquivo de pass):
for file in *.txt; do openssl aes-256-cbc -a -salt -in "$file" -out "../enc/$file" -passin file:pass done

Este comando ir recuperar uma lista de certificados revogados (da sigla CRL, de Certificate Revocation List) e decodific-la com o OpenSSL. Em seguida, pesquisar por um nmero de srie. Da mesma forma, como com os scripts Bash anteriores, podemos adicionar um timeout e verificar a sada do comando grep com a varivel $?.

Como auditar senhas criptografadas


A chave privada quase sempre deve ser protegida com uma senha. Muitas vezes, arquivos PKCS12 tambm so protegidos com senhas. Com o OpenSSL e o Bash, fazemos uma rpida verificao das senhas usadas para proteger os arquivos. Vamos supor que temos um arquivo de texto com as senhas mais comuns, uma em cada linha, chamado passwords.txt.

Podemos descriptografar todos os arquivos .txt no diretrio atual e grav-los no diretrio ../dec com:

68

www.linuxmagazine.com.br

OpenSSL com Bash | TUTORIAL

de configurao na hora. A funo de script create_config cuida disso escrevendo a configurao no arquivo ./config. Mais tarde, o arquivo criado por esta funo apontado no OpenSSL com o parmetro -config. Em seguida, temos funes create_ root_ca, create_crl, create_client_req, sign_client_req, e revoke_client_cert; os nomes delas so auto-explicativos. Todas estas funes recebem parmetros que especificam tarefas como uma string DN (de nome exclusivo ou distinguished name), prazo de validade, tamanho de chave etc. A parte principal do script (no mostrada na listagem) pode utilizar as funes para gerar um nmero especfico de certificados de autori-

dade certificadora (da sigla CA, de Certification Authority) e um determinado nmero de certificados de cliente para cada CA. Alm disso, poderamos revogar certificados de algum cliente logo aps a gerao. Desta forma, a sada do script possuiria vrios certificados CA, certificados de cliente revogado, e CRLs.

te que esta apenas a ponta de um iceberg. Encorajamos nosso leitor a olhar o manual e fazer experimentos com suas prprias ideias. Apenas no confunda a chave privada de outra pessoa com a sua prpria.

Mais informaes
[1] OpenSSL: http:// www.openssl.org/ [2] Bash: http://www.gnu. org/software/bash/

Concluso
O OpenSSL uma ferramenta muito flexvel. Pelo fato de podermos especificar todos os parmetros necessrios usando a linha de comando, arquivos, pipes e variveis de ambiente, perfeitamente adequado para os scripts Bash. Este artigo descreveu alguns usos para o OpenSSL, mas tenha em men-

Gostou do artigo? igo?


Queremos ouvir sua opinio. o nio. m Fale conosco em cartas@linuxmagazine.com.br ne.com Este artigo no nosso sso site: s e: r/artic 763 http://lnm.com.br/article/7639

Listagem 2: Como testar uma PKI


01 function create_config { 02 { 03 echo HOME= . 04 echo RANDFILE= $ENV::HOME/.rnd 05 06 ... 07 cortado para melhor legibilidade 08 ... 09 10 echo oid_section = new_oids 11 echo subjectKeyIdentifier=hash 12 echo authorityKeyIdentifier=keyid,issuer 13 echo proxyCertInfo=critical,language: id-ppl-anyLanguage,pathlen:3,policy:foo 14 } > $config 15 } 16 17 function create_root_ca { 18 local keysize=$1 19 local country=$2 20 local org=$3 21 local name=$4 22 local days=$5 23 local certfile=$6 24 local keyfile=$7 25 openssl req -newkey rsa:$keysize -x509 -days $days -keyout $keyfile -nodes -out $certfile -config $config -subj /C=$country/O=$org/CN=$name 26 return $? 27 } 28 29 function create_crl { 30 local cakey=$1 31 local cacert=$2 32 local crlfile=$3 33 openssl ca -gencrl -config $config -keyfile $cakey -cert $cacert -out $crlfile 34 } 35 36 function create_client_req {

Listagem 2: Como testar uma PKI (continuao)


37 38 39 40 41 42 43 local keysize=$1 local country=$2 local org=$3 local name=$4 local keyfile=$5 local reqfile=$6 openssl req -new -newkey rsa:$keysize -nodes -keyout $keyfile -out $reqfile -config $config -subj /C=$country/O=$org/CN=$name 44 } 45 46 function sign_client_req { 47 local clientreq=$1 48 local days=$2 49 local cacert=$3 50 local cakey=$4 51 local clientcert=$5 52 openssl x509 -req -days $days -CA $cacert -CAkey $cakey -CAcreateserial -in $clientreq -out $clientcert 53 } 54 55 function revoke_client_cert { 56 local clientcert=$1 57 local cakey=$2 58 local cacert=$3 59 openssl ca -revoke $clientcert -keyfile $cakey -cert $cacert -config $config 60 } 61 62 function get_cacountry { 63 cacountry=DC 64 } 65 66 function get_caorg { 67 caorg=Dummy org 68 } 69 70 function get_caname { 72 }

Linux Magazine #95 | Outubro de 2012

69

TUTORIAL | Raspberry Pi

Raspberry Pi

TUTORIAL

Computao pioneira
A sbita popularidade de computadores miniboard como o Raspberry Pi trouxe de volta o esprito pioneiro dos primeiros dias do Linux. Repentinamente, o faa voc mesmo na comunidade de cdigo aberto est de volta. por Brian Proftt

t agora, a maioria dos nerds j ouviu falar do Raspberry Pi [1], mas caso o leitor ainda no tenha ouvido falar a respeito, oferecemos um panorama sobre o assunto. O projeto Raspberry Pi comeou em 2006, quando um grupo de pesquisadores do laboratrio de computao da Universidade de Cambridge, no Reino Unido, observava os conhecimentos de informtica em declnio para estudantes de Nvel A que acessavam seus programas. O que viam no era nada positivo, e era uma tendncia que se repetia tambm em outras naes, alm do Reino Unido. Apesar da proliferao dos computadores pessoais, ou talvez por causa dela, as crianas j no experimentavam massivamente os PCs. Em vez disso, elas utilizavam aplicativos como eles eram apresentados ou apenas compravam e baixavam novos para fazer o que queriam; hackear, ao que parecia, estava saindo de moda.

Os primrdios
A equipe de Cambridge, liderada pelo designer Eben Upton, comeou a montar um dispositivo pequeno, porttil, e muito barato que iria inicializar diretamente em um ambiente de programao. A partir da, estudantes de qualquer idade poderiam comear a programar para o que lhes fosse mais interessante.

Nos EUA, a carncia de conhecimentos em informtica no ensino para jovens significa que o pas dever enfrentar uma sria lacuna de talentos para o desenvolvimento de aplicativos no futuro. Os EUA j possuem uma falta de talentos no que se refere anlise de dados massivos, logo no nada improvvel que essa lacuna na programao surja um pouco mais adiante. Esta no uma coisa boa, e no pelos habituais argumentos geopolticos que condenam os EUA ou o Reino Unido de ficar para trs de uma nao ou de outra. Como sociedades autossuficientes, so naes que desejam a gesto de informaes e contedos puramente nas mos de poucos e seletos magos da programao? Dadas as devidas propores, o declnio da alfabetizao na programao se espelha no declnio da alfabetizao aps a queda do Imprio Romano, e todos ns sabemos o que aconteceu depois. A centralizao do controle dos nossos dados pode ser um pouco diferente para a nossa sociedade de como foi a centralizao da palavra escrita pelo clero e pela aristrocracia na Idade Mdia. Tal a viso que engloba o contexto no qual se insere o projeto do Raspberry Pi. Em 2008, o dispositivo conhecido como Raspberry Pi tinha concludo

a fase de projeto e estava pronto para ser produzido. A fundao Raspberry Pi foi criada naquele ano e, aps trs anos de captao de recursos e produo, os dispositivos Pi foram saindo da linha de montagem.

O presente
Existem dois modelos do Raspberry Pi disponveis: o modelo A por 25 dlares em modelo B por 35 dlares. Ambos possuem um processador ARM de 700 MHz em uma placa monoltica da Broadcom, com 256 MB de RAM e um slot de carto SD/MMC/SDIO para armazenamento. A nica grande diferena entre os dois modelos que com mais 10 dlares possvel obter um conector Ethernet 10/100 e uma segunda porta USB no modelo B. Esse pequeno diferencial de preo e a popularidade de um dispositivo conectado rede poderia explicar por que o tempo de espera em qualquer lugar , em mdia, de 5 a 12 semanas para adquirir um modelo B, de acordo com o fornecedor. E ele no est mais sozinho: novos dispositivos, como o Cotton Candy, o Mele A1000, o MK802 e o Oval Elephant fazem parte desta crescente famlia de mini-PCs. claro que possvel fazer muitas coisas alm de simples programao com um Raspberry Pi nas mos. Exis-

70

www.linuxmagazine.com.br

Raspberry Pi | TUTORIAL

tem pessoas que descobriram que o dispositivo, por exemplo, pode ser um vivel media streamer [2] e um reprodutor de rdio Internet [3]. Para este artigo, no entanto, cobriremos o objetivo geral do dispositivo: executar um sistema operacional Linux no qual o leitor possa programar. H um sem nmero de distribuies que podem ser executadas no Raspberry Pi. Basicamente tudo que precisamos de uma distribuio compilada para um processador ARM11 em uma imagem de disco que vai caber em pelo menos um carto SD de 2GB. No entanto, a equipe do Raspberry Pi atualmente recomenda uma das trs distribuies listadas em sua pgina de downloads [4]: Raspbian wheezy, Arch Linux ARM, e QtonPi. Para os iniciantes, a Raspberry Pi recomenda a variante do Debian, Raspbian, que consideravelmente otimizada para o dispositivo Pi e tem o LXDE, o Midori, e outras ferramentas de desenvolvimento. A Raspbian a que instalamos para este artigo, mas para as outras imagens o procedimento ser o mesmo; apenas mudam os nomes dos arquivos. Nota: os nomes de arquivos so os disponveis no momento em que escrevemos esta matria. Eles podem variar um pouco aps a publicao desta edio. Para comear, visite a pgina de downloads do Raspberry Pi e baixe a ltima edio do arquivo ZIP do Raspbian wheezy. No diretrio em que baixar o arquivo, extraia a imagem com
unzip 2012-07-15-wheezy-raspbian.zip

Este comando ir listar os dispositivos que esto montados. Veremos um nome do dispositivo que no corresponde configurao atual de unidades do seu sistema. Esse dispositivo extra seu carto SD. Se o carto possuir um nome como /dev/sdd1, ignore o 1 (ou qualquer outro nmero ao final do nome). Os nmeros indicam parties, e quando gravarmos a imagem de disco do Raspbian no carto, precisaremos do nome do dispositivo, que neste exemplo ser /dev/sdd. Tambm necessrio desmontar todas as parties que esto no carto. A maioria dos cartes SD ter apenas uma partio, mas para o caso de haver mais de uma, desmontar todas elas limpar o caminho para a nova imagem de disco. Presumindo que o nome do dispositivo /dev/sdd, digite
umount /dev/sdd1

o prompt de comando retornar o resultado da operao, digite


sudo sync

para limpar o cache de gravao. Agora podemos remover o carto SD e us-lo em nosso dispositivo Raspberry Pi. Com a porta HDMI gerenciando vdeo e duas portas USB cuidando dos controles do mouse e do teclado, o leitor poder indagar se o tamanho do carto SD estar limitado ao armazenamento. Atravs de um hub USB, porm, tambm possvel expandir as portas e comear a usar drives USB externos para armazenamento.

O futuro
Uma das maiores atraes para o dispositivo Raspberry no apenas o dispositivo em si; a comunidade em volta deste pequeno dispositivo muito forte e est crescendo rpido. Quem no teve a felicidade de viver os primeiros dias do Linux, quando as coisas eram rpidas e livres e a informao muito mais complicada de se obter ento esta ser uma experincia nova que remeter a esses dias. Veteranos do Linux se sentiro em casa com a comunidade Raspberry. A convergncia de dispositivos baratos e poderosos como este deve abrir caminho para uma srie de projetos inovadores e o Raspberry Pi j desperta ateno na produo de robs terrestres [5] e dispositivos de realidade extraterrestre [6]. As possibilidades, como aconteceu com o velho Linux, so infinitas.

Repita o comando umount para todas as parties com sdd no nome. Em seguida, escreva a imagem do Raspbian no carto SD com o comando dd. Cuidados devem ser tomados aqui para que no sejam utilizados como destino o disco rgido ao invs do carto SD. Ainda no terminal, navegue at o diretrio /2012-07-15-wheezy-raspbian e digite
sudo dd bs=1M if=2012-07-15wheezy-raspbian.img of=/dev/sdd

Esta etapa pode levar algum tempo, portanto seja paciente e no pense que o processo est travado. Quando

Mais informaes
[1] Raspberry Pi: http://www.raspberrypi.org/ [2] Media streamer: http://wiki.xbmc.org/index.php?title=Raspberry_Pi [3] Rdio Internet: http://www.raspberrypi.org/ phpBB3/viewtopic.php?f=9&t=4031 [4] Downloads: http://www.raspberrypi.org/downloads [5] Robs: http://www.raspberrypi.org/forum/ projects-and-collaboration-general/starwars-r5-d4-astromech [6] Balo Meteorolgico: http://www.raspberrypi. org/phpBB3/viewtopic.php?f=9&t=2059

Insira um carto SD no leitor do computador e digite:


df -h

Gostou do artigo? igo?


Queremos ouvir sua opinio. o nio. Fale conosco em m cartas@linuxmagazine.com.br e.com Este artigo no nosso osso site: s e: http://lnm.com.br/article/7652 r/artic 765

Linux Magazine #95 | Outubro de 2012

71

PROGRAMAO | Dart

PROGRAMAO

Dart, a alternativa do Google ao JavaScript

Centro do alvo?
A linguagem de programao Dart a atual alternativa do Google ao JavaScript. Executada principalmente em navegadores, tambm pode ser utilizada em linha de comando e em servidores como substituta para o PHP. por Tim Schrmann

cdigo escrito na linguagem de programao Dart do Google se parece muito com uma mistura de JavaScript e Java com uma pitada de Scala. Essa semelhana intencional: a linguagem de programao [1] foi projetada com base no desejo de eliminar alguns problemas e o lastro legado do JavaScript. A premissa que os programas Dart possam ser

executados mais rapidamente e com melhor segurana, que trabalhem em qualquer dispositivo compatvel com Internet e que sejam adequados para projetos ainda maiores [2]. Se uma pessoa tem experincia com linguagens de programao e essa descrio encaixa-se para quase qualquer programador web ir tambm rapidamente sentir-se vontade com o Dart.

Programas escritos em Dart sero executados em uma mquina virtual especial no navegador. O projeto fornece uma implementao de referncia em um site, que ainda capaz de executar programas Dart em linha de comando ou em um servidor de Internet. O Dart , sobretudo, um substituto adequado do PHP. Alm da mquina virtual, o projeto oferece um par de bibliotecas cujas funes entre outras coisas oferecem suporte manipulao conveniente da rvore de um site DOM (sigla para Document Object Model ou modelo de objeto de documentos). Um par de outras ferramentas tambm facilita a vida de programadores, como o editor Dart baseado no Eclipse (gura 1).

Trabalho em andamento
Tudo isso soa muito atraente, com uma desvantagem pequena: o Dart est atualmente em um estgio muito inicial de desenvolvimento e, portanto, no adequado para uso em produo. Os inventores do Dart intencionalmente lanaram a sua

Figura 1 O Editor Dart um ambiente de desenvolvimento baseado no


Eclipse, fornecendo acesso direto aos exemplos de cdigo.

72

www.linuxmagazine.com.br

Dart | PROGRAMAO

especificao em um estgio inicial para coletar tantas sugestes de melhorias quanto fosse possvel, bem como para melhorar a aceitao. tambm precisamente por isso que a especificao da linguagem tem sido colocada sob a licena Creative Commons Atribution 3.0 e o cdigo do programa publicado pelo projeto sob a licena BSD Google [3]. Quando este artigo foi escrito, a verso mais recente do Dart era a 0.08, e esta a verso na qual a viso geral a seguir se baseia.

Listagem 1: Uma classe simples


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 class Carro { var cor; Carro() { this.cor = "azul"; } Carro.pintura(this.cor); } main() { Carro ferrari = new Carro.pintura("vermelho"); Carro bmw = new Carro(); print(ferrari.cor); // sada vermelha print(bmw.cor); // sada azul }

main() e Classes
O ponto de partida para um programa Dart, como em Java, o main(). Para os programadores de JavaScript, especialmente, isso pode parecer novo:
main() { // Um pequeno comentrio print("Ol Mundo!"); }

Listagem 2: Interface e extends


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 interface Superficie { int superficie_conteudo(); } class Quadrado implements Superficie { int largura; Quadrado(int this.largura); int superficie_conteudo() => largura*largura; } class Retangulo extends Quadrado { int _altura; Retangulo( int this._altura, int br) : super(br); int superficie_conteudo() => largura * _altura; } main() { Quadrado q = new Quadrado(3); Retangulo r = new Retangulo(2,3); print(q.superficie_conteudo()); print(r. superficie_conteudo()); }

Os programadores de JavaScript iro tossir novamente: Dart uma linguagem orientada a objetos em todos os sentidos. A listagem 1 mostra a declarao de uma classe chamada Carro. A classe comea por definir uma nova varivel cor. Como a palavra-chave var sugere, as variveis podem assumir valores arbitrrios a qualquer momento como no JavaScript, Dart uma linguagem sem tipos. Esta seguida pelo construtor Carro(), que deve usar o mesmo nome de classe. O this representa o objeto atual, como em Java; em outras palavras, this.cor garante que o valor no acabe em uma varivel global ou em uma nova varivel. A linha 8 mostra duas caractersticas do Dart. Em linguagens como Java, o desenvolvedor pode definir vrios construtores com parmetros diferentes (sobrecarga). Quando um objeto criado, a linguagem, ento, automaticamente chama o construtor correspondente. Em linguagens como Dart, tal escolha no to simples. Para resolver o problema, a linguagem utiliza construtores co-

Listagem 3: Padro factory


01 class Carro { 02 String fabricadopor; 03 static Map garagem; 04 05 factory Carro(String fabricante){ 06 if (Carro.garagem == null) Carro.garagem=new Map(); 07 if (Carro.garagem.containsKey(fabricante)!=null) return 08 Carro.garagem[fabricante]; 09 else { 10 Carro newcarro = new Carro.compra(fabricante); 11 Carro.garagem[fabricante] = newcarro; 12 return newcarro; 13 } 14 } 15 16 Carro.compra(this.fabricadopor); 17 } 18 19 main() { 20 var umcarro = new Carro("Ferrari"); 21 var outrocarro = new Carro("Ferrari"); 22 }

Linux Magazine #95 | Outubro de 2012

73

PROGRAMAO | Dart

nhecidos. Na listagem 1, o segundo construtor chamado de pintura, e caso se queira chamar precisamente esse construtor ao criar uma instncia Carro na funo main(), preciso especificar o nome l:
Carro ferrari = new Carro.pintura("vermelho");

Em contraste, new Carro() iria apenas chamar o construtor normal. Como um segundo recurso especial, o construtor Carro.pintura() usa uma abreviao: o Dart atribui o valor passado para ele diretamente para a varivel cor. Claro, se preferir, use a verso longa:
Carro.pintura(var umacor) { this.color = umacor; }

foi dito, este apenas um aviso e no um erro o programa continuar a funcionar com um nmero em cor. Esse comportamento chama a ateno do programador para erros de atribuio e torna o cdigo mais legvel, e os usurios no precisam temer uma falha sbita do programa. Alm do tipo String, o Dart tambm suporta os tipos listados na tabela 1. Alis, todos estes so objetos internos. possvel at criar listas e mapas com um new:
var autos = new List();

(por exemplo, => e significa {return e;}). No Dart, possvel passar uma funo para outra, o que muito til em loops:
digaOla(String nome) => print("Ola ${nome}"); List nomes = ["Tim", "Joe", "Henry"]; nomes.forEach(digaOla);

As variveis que podem assumir valores arbitrrios podem ser muito convenientes, mas esta abordagem tende a causar alguma negligncia por parte dos programadores no mundo real, o que leva a erros que podem ser difceis de resolver. Por este motivo, os programadores podem, opcionalmente, especificar um tipo de uma varivel:
class Carro { String cor; [...]

As variveis que ainda no tiveram um valor atribudo automaticamente tm o valor especial null. Como no PHP, o Dart pode inserir o contedo de variveis em strings. O cdigo:
String nome = "John Doe"; print ("Ol ${nome}");

A funo digaOla escreve a string passada para ela aps Ol e exibe os resultados na tela. A segunda linha cria uma lista com trs nomes que, por sua vez, so empurrados um aps o outro e entregues para a funo pelo forEach neste caso, a funo digaOla(). Em outras palavras, este trecho de trs linhas de cdigo exibe Ol Tim, Ol Joe e Ol Henry. Pelo fato de o digaOla s ocorrer em nomes.forEach(), podemos declarar a funo de l diretamente e exibir seus nomes da mesma forma:
List nomes = ["Tim", "Joe", "Henry"]; nomes.forEach( (String nome) => print("Ol ${nome}") );

geraria um Ol John Doe. Dentro dos colchetes {} pode at haver expresses completas ou chamadas de funo.

Verso em linha
Usurios Dart podem abreviar uma definio de funo individual como a seguir:
int quadrado(int numero) { return numero*numero; }

Se o programa Dart tenta armazenar um nmero em cor em algum estgio posterior do programa, a mquina virtual cria um aviso. Como
Tipo String int double num bool List Map Contedo String (32-bit Unicode) Inteiro

com =>
int quadrado(int numero) => numero*numero;

Esta forma compacta de codificao funciona bem aqui mas, em funes mais complexas, pode-se facilmente perder de vista o que se est fazendo. Os suspeitos de costume esto disponveis para controle de fluxo: for, if, switch e while, e agem exatamente como seus homlogos em Java ou JavaScript. Alm disso, possvel usar excees para detectar erros.

Exemplo String nome = Joe; int numero = 12; double numero = 1.3456; num y = mx + b bool pegacookies = true; List nomes = [Tim, Joe, Henry]; Map traducao = {house : casa, car : carro, chair : cadeira};

Nmeros de ponto utuante de 64 bits (em conformidade com o padro IEEE 754) Nmeros inteiros, nmeros de ponto utuante, ou ambos verdadeiro/falso Uma lista de valores, tambm conhecida como array Array associativo, tambm conhecido como um mapa hash ou dicionrio de dados

Tabela 1 Tipos suportados pelo Dart.

74

www.linuxmagazine.com.br

Dart | PROGRAMAO

Clssico
O Dart herdou interfaces do Java. Quando uma classe implementa uma interface, ela garante que a funo especificada na interface seja fornecida. A listagem 2 fornece um exemplo de herana. Uma classe pode implementar vrias interfaces, mas apenas herda exatamente uma classe (ou seja, usa extends para estender a classe). Na listagem 2, todas as variveis e funes so pblicas, com uma exceo, _altura. Se o nome da varivel ou uma funo comea com um sublinhado, ela privada, e s possvel acessar a varivel ou funo dentro da prpria classe. Na listagem 2, isso significa que no se pode retroativamente modificar a altura de um retngulo.

Figura 2 O SDK Dart inclui uma mquina virtual para linha de comando.

Oferta de Factory
Padres de projeto [4] tm sido parte do repertrio do desenvolvedor profissional por muitos anos. Assim, no h nenhuma surpresa em que o Dart tambm suporte este recurso. Por exemplo, o padro Factory j faz parte da linguagem: se o construtor for prefixado com a palavra-chave factory, o Dart no cria automaticamente um objeto desta classe, mas deixa para o construtor. O programador pode ento olhar em um cache para ver se um objeto correspondente j existe, como pode ser visto na listagem 3. A varivel outrocarro neste exemplo aponta para o mesmo objeto como umcarro. A palavra-chave static garante que garagem s existe uma vez; todos os objetos Carro acessam a mesma varivel. O padro Factory pode tambm ser combinado com interfaces. Para fazer isso, atribui-se a classe padro factory a uma interface, e a classe factory retorna objetos para coincidir com a interface. A listagem 4 mostra um exemplo disso. A interface define a assinatura do construtor, que em seguida gera objetos para coincidir com a interface. O Carro-

Figura 3 A ferramenta online Dartboard permite aos desenvolvedores testarem


pequenos programas Dart diretamente no navegador. Factory na listagem 4 ir retornar um objeto Carrodecorrida ou Conversvel dependendo do fabricante que lhe

for passado. Durante a instncia em main(), parece que se est criando um Carro diretamente. Alm disso, a palavra-chave is testa para ver se um objeto um tipo especfico. Alis, a palavra-chave final na frente do fabricante garante que varivel s possa ser atribudo um valor exato e somente uma vez durante sua inicializao.

svel us-los para criar rapidamente recipientes para objetos arbitrrios. As listas de funes embutidas e mapas so genricos. Por exemplo, List<Car> cria uma lista de objetos Carro:
main() { List<Carro> listadecarros = new List<Carro>(); listadecarros.add(new Carro("Ferrari")); Carro umcarro = listadecarros[0]; }

Servio de Continer
O Dart contm os tipos genricos, tambm conhecidos como generics, com os quais provavelmente estamos familiarizados por causa do Java. Programadores C++ tambm conhecem esse conceito como templates. pos-

Como as variveis podem assumir contedo arbitrrio, o Dart no impedir isso:


List<Carro> listadecarros = new List<Carro>(); List<LKW> listadecaminhoes = listadecarros;

Essa experincia pode explodir mais tarde, se o desenvolvedor ten-

Linux Magazine #95 | Outubro de 2012

75

PROGRAMAO | Dart

tar fazer algo com o que assumiu ser um caminho da listadecaminhoes.

Paralelismo
Programadores normalmente mudam as tarefas que precisam ser executadas em processos paralelos separados e, em seguida, trabalham duro para unir os resultados intermedirios. O Dart remove as dores de cabea desse processo: um objeto derivado

da classe Isolate bsica, se assim se deseja, executado separadamente do programa principal em seu prprio processo. Para ser capaz de trocar resultados intermedirios, os Isolates podem enviar mensagens uns para os outros. Essas mensagens so primeiro enfileiradas at que o receptor Isolate pegue o que conhecido como uma porta. Este modelo lembra

Listagem 4: Combinando interface e factory


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 interface Carro default CarroFactory { Carro(fabricante); final fabricante; } class CarroFactory { factory Carro(fabricante) { if (fabricante == "Ferrari") { return new Carrodecorrida(fabricante); } return new Conversivel(fabricante); } } class Carrodecorrida implements Carro { Carrodecorrida(this.fabricante); String fabricante; } class Conversivel implements Carro { Conversivel(this.fabricante); String fabricante; } main() { print( new Carro("Ferrari") CarrodeCorrida); print( new Carro("VW") is Carrodecorrida); }

muito o modelo atual do Erlang ou Scala. A listagem 5 mostra um exemplo completo. O programa de exemplo primeiro recebe um novo objeto Receiver, que despejado em um processo separado com spawn(). Depois disso, ele envia o objeto de quatro palavras em sucesso. Assim que o objeto recebe uma palavra, escreve-a na tela. O Isolate sempre d uma porta para o objeto que enviou a mensagem na forma de replyTo. Isso significa que ele pode responder diretamente para o seu solicitante. Os Isolates executam em um espao de memria separado. Um efeito colateral positivo disto que a coleta de lixo pode lidar com cada Isolate individualmente. No retorno, a mquina virtual precisa copiar as mensagens entre o Isolate. No futuro, os Isolates sero inclusive capazes de usar as diferentes bibliotecas Dart com diferentes verses.

Acesso DOM
Pelo fato de o Dart ser projetado para substituir o JavaScript, os programadores devem ser capazes de usar a linguagem para acessar a rvore DOM de um site. Para que isso acontea, o Dart inclui a sua prpria biblioteca, que pode ser importada como a seguir:
#import("dart:html");

Listagem 5: Comunicando com um Isolate


01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 class Receiver extends Isolate { main() { port.receive((mensagem, replyTo) { if (mensagem == null) port.close(); else print("Recebend: ${mensagem}"); }); } } main() { new Receiver().spawn().then((port) { for (var mensagem in ['Esse', '', 'um', 'teste']) { port.send(mensagem); } port.send(null); }); }

Depois, pode-se usar a seguinte expresso para acessar uma <div> com a ID menu:
document.query("#menu");

Os elementos podem assim ser localizados atravs de seletores CSS em um estilo muito semelhante ao jQuery. O Dart pode usar programas de outras classes e funes para configurar conexes HTTP (Ajax keyword), dados de processo JSON, e at mesmo acessar o sistema de arquivos, entre outras coisas. Para

76

www.linuxmagazine.com.br

Dart | PROGRAMAO

obter uma lista completa, leia a Referncia da API [5].

Executado
Como os navegadores de hoje atualmente no compreendem programas Dart, o projeto desenvolveu o compilador Dartc, que converte programas Dart em cdigo JavaScript. No entanto, o Dartc tinha a reputao de criar programas JavaScript muito grandes, que executam muito lentamente. Para resolver este problema, um compilador GNU chamado Frog foi criado (e inclusive escrito em Dart), que gera cdigo JavaScript muito mais compacto. O Frog uma mquina virtual para a linha de comando (gura 2) includa no SDK Dart, que est disponvel gratuitamente na pgina do projeto [6]. Tudo que necessrio fazer baixar o arquivo ZIP correspondente, descompactar, e ento compilar o seu prprio programa Dart (por exemplo, test.dart) usando o Frog a partir do diretrio bin,
./frogc --enable_type_checks test.dart

cas embutidas da linguagem (com exceo da dart:html), para quando os programadores precisarem usar a declarao de importao se eles trabalharem com a mquina virtual de linha de comando. Finalmente, tambm possvel usar o Dartium, uma verso especial do navegador Chromium com uma mquina virtual Dart embutida [8]. possvel verificar a especificao completa da linguagem Dart [9] e o cdigo fonte de vrios dos maiores programas de exemplo Dart [10] no site do dartlang.org.

Concluso
Com exceo do Dartium, todos os atuais navegadores ignoram o Dart, e no se pode culp-los; afinal, a linguagem de programao no est totalmente completa. Ao mesmo tempo, o Dart est enfrentando fortes crticas: a maioria dos observadores acredita que o apoio a outra linguagem web suprfluo e contraproducente. O futuro do Dart depender em grande parte da seriedade que o Google vem demonstrando no mercado; a empresa tem o poder

ou executar o programa diretamente na mquina virtual:


./dart --enable_type_checks test.dart

de fazer valer essa linguagem, e se o faz no que se refere a dispositivos Android e navegador Chrome outros fabricantes de navegadores sero incapazes de desviar o olhar. No entanto, o perigo que uma comunidade de adversrios do Dart possa vir a existir, o que significaria mais uma vez a fragmentao da Internet. Dito isto, at mesmo os crticos devem reconhecer que os programas Dart so mais fceis de ler e compreender do que suas contrapartidas em JavaScript. Graas orientao a objetos genuna, aplicativos maiores e de mais fcil manuteno tambm so possveis. A perspectiva de uma linguagem nica para o cliente e o servidor tambm atraente programadores web no precisariam mais alternar entre JavaScript e, digamos, PHP. Mas mesmo quem no vem do mundo Java deve ser capaz de encontrar seu espao em um tempo muito curto. Por fim, a linguagem organizada de forma aberta, em contraste com o Java, e qualquer usurio pode apresentar propostas de melhorias. Pelo menos, assim tem sido o processo at agora.

Mais informaes
[1] Projeto Dart: http://www.dartlang.org/ [2] Objetivos do projeto Dart: http://www.dartlang. org/docs/technical-overview/#goals [3] Licena BSD Google: http://code.google.com/ intl/de-DE/google_bsd_license.html [4] Padres de Projeto: http://en.wikipedia. org/wiki/Software_design_pattern [5] Referncia da API Dart: http://api.dartlang.org/ [6] SDK Dart: http://www.dartlang.org/docs/getting-started/sdk/ [7] Dartboard: http://try.dartlang.org/ [8] Navegador Dartium: http://www.dartlang.org/dartium/ [9] Sintaxe da linguagem Dart: http://www.dartlang.org/docs/spec/ [10] Programas Dart de exemplo: http://www.dartlang.org/samples/ [11] Listagens deste artigo: http://www.lnm.com.br/issues/95/dart.zip

O parmetro --enable_type_checks garante que o compilador, ou a mquina virtual, possibilite a verificao do tipo. Caso prefira no usar o SDK agora, possvel executar seus prprios programas diretamente no site do projeto Dart, que conhecido como Dartboard [7] (gura 3). O Dartboard integra a maioria das bibliote-

Gostou do artigo? igo?


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

Linux Magazine #95 | Outubro de 2012

77

Conhea a coleo Academy da Linux New Media


Os livros da Coleo Academy so roteiros prticos e objetivos, com didtica adequada tanto ao profissional quanto ao estudante da rea de TI.

Paulo Henrique Alkmin da Costa


Luciano Antonio Siqueira

Luciano Antonio Siqueira

Infraestrutura de Redes
Passo a passo da montagem de uma rede de computadores, desde o cabeamento e roteadores at a congurao das mquinas clientes. Congurao e manuteno de servios essenciais como DNS, compartilhamento de arquivos e acesso remoto.

com Windows e Linux


Como permitir a comunicao de diferentes sistemas operacionais em rede: Windows, Linux, Mac OS X etc. Denio de compartilhamentos de arquivos, impressoras incluindo a instalao automtica de drivers e utilizao do Samba como controlador de domnio (PDC) tambm para clientes Windows Vista e Windows 7.

Samba:

Mquinas virtuais com VirtualBox


Administrao de infraestrutura de mquinas virtuais com Sun VirtualBox. Como trabalhar com sistemas operacionais Windows, Linux etc na mesma mquina e simultaneamente. Criao de diferentes modalidades de conexes virtuais, exportao/importao de mquinas virtuais e criao de pontos de recuperao (snapshots).

O contedo e o formato dos livros foram desenvolvidos a partir da experincia prtica e educacional de seus autores, com foco principal no desenvolvimento de competncias, atravs de conceitos, exemplos detalhados e dicas de quem realmente entende do assunto. O material indicado tanto para autodidatas que desejam se aperfeioar quanto para utilizao em escolas. O professor ir se sentir confortvel para desenvolver as atividades a partir do livro, que procura atender tanto expectativa do aprendiz quanto demanda profissional do mercado de TI.

Disponvel no site www.LinuxMagazine.com.br

PREVIEW

Linux Magazine #96


BIG DATA
Estamos em um momento tecnolgico onde tudo gira em torno da gerao e consumo de grandes volumes de dados. Na prxima edio da Linux Magazine voc vai conhecer mais sobre o conceito de Big Data e formas de armazenamento de informaes em larga escala, de forma que seja possvel acess-las e analis-las sempre que necessrio com desempenho e praticidade. Entre os temas que sero abordados na prxima edio esto o Apache Hadoop e construo de clusters. No perca!

Admin Magazine #08


Controle de trfego
Melhore o desempenho da sua rede com verses do kernel apropriadas para o controle de trfego. Comparamos 6 diferentes sistemas de arquivos, saiba qual o mais adequado para as suas necessidades. Realize backups dos dados de toda a sua rede atravs de ferramentas como Burp, Obnam e Backshift. Voc conhece o mais novo modelo de fornecimento de sistemas de bancos de dados para a nuvem? O modelo database-as-a-service tambm um dos destaques da prxima edio da Admin Magazine, no perca!

82

www.linuxmagazine.com.br

Anda mungkin juga menyukai