Issuu on Google+


Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br Editores Flávia 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 Alessandro de Oliveira Faria, Alexandre Borges, Alexandre Santos, Augusto Campos, Axel Beckert, Cezar Taurion, Charly Kühnast, Gavin W. Burris, Jon ‘maddog’ Hall, Kenneth Geisshirt, Klaus Knopper, Kurt Seifried, Marcel Hilzinger, Tim Schürmann, Udo Seidel, Zack Brown. Tradução Laura Loenert Lopes, Sebastião Luiz da Silva Guerra. Revisão Amauri Dantas de Oliveira, Ana Carolina Hunger. Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eßer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kißling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jörg Luther, Nils Magnus. Anúncios: 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 (América do Norte) aphalen@linuxpromagazine.com Hubert Wiest (Outros países) hwiest@linuxnewmedia.de Diretor de operações 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 – Austrália www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linuxpromagazine.com – América do Norte Apesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais imprecisões nela contidas ou por consequências que advenham de seu uso. A utilização 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 permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, sejam fornecidos para publicação ou licenciamento a terceiros de forma mundial não-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 São Bento, 500 Conj. 802 – Sé 01010-001 – São Paulo – SP – Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas © 2004 - 2012: Linux New Media do Brasil Editora Ltda. Impressão e Acabamento: Log & Print Gráfica e Logística S.A. Atendimento Assinante www.linuxnewmedia.com.br/atendimento São 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

Linux Magazine #96 | Novembro de 2012

EDITORIAL

Melhor que grátis

Expediente editorial

A indústria fonográfica, capitaneada nos Estados Unidos pela Recording Industry Association of America – RIAA (Associação da Indústria de Gravação da América), e a indústria cinematográfica americana, representada pela Motion Picture Association of America – MPAA (Associação Cinematográfica da América), estão perdendo a oportunidade de rechear os bolsos de seus associados devido a uma patente atitude anticapitalista: sua incessante luta contra a prática de downloads gratuitos de músicas e filmes. Há mais de 10 anos, diversos estudos vêm comprovando: quem baixa música ou filme da Internet gasta mais dinheiro comprando o mesmo tipo de mídia que consome “gratuitamente”. Próximo da virada do milênio, estatísticas levantadas por institutos de pesquisa confiáveis (SoundScan, Nielsen etc.) comprovaram que o aumento do uso do Napster àquela época contribuiu para um crescimento acentuado na venda de CDs, num efeito que ficou conhecido como “Napster Boomerang”. De acordo com esses estudos, o Napster não seria uma ameaça para o negócio das gravadoras, mas um veículo de propaganda, da mesma forma que, historicamente, nem o rádio nem a fita cassete prejudicaram o negócio da indústria fonográfica, acabando por impulsionar seu crescimento. Como comprovação disso, podemos citar ainda a expressiva queda no faturamento proveniente da venda de CDs que se seguiu à derrocada do Napster, segundo números de outro estudo da Nielsen publicado em agosto de 2001. Na era da computação em nuvem, mais de uma década depois, a realidade continua a mesma. Pelo menos é o que constatou uma enquete do The American Assembly, realizada como parte de um estudo conduzido pela Universidade de Colúmbia, que indicou que usuários de redes de compartilhamento de arquivos, além de disporem de uma coleção de música em média 57% maior do que a daqueles que não utilizavam essa alternativa para download de arquivos, haviam gastado 31% mais dinheiro comprando música na Internet! Assim, as indústrias fonográfica e a cinematográfica estão perdendo a oportunidade de abraçar de vez as novas tecnologias de distribuição online de mídia e de fornecer serviços de download de qualidade a preços módicos, deixando novos fornecedores ocuparem esse espaço e devorarem uma parcela expressiva da sua margem. Como se não bastasse, ao tentar evitar a todo custo o que caracterizam como downloads ilegais, na prática estão acabando com o “efeito rádio” gerado pelas redes P2P, reduzindo ainda mais seus lucros ao não reconhecer que o compartilhamento é da natureza do ser humano. Se o serviço de download e o conteúdo forem de qualidade a um preço adequado, essa solução será melhor do que baixar o conteúdo de forma gratuita. Os mais de 16 bilhões de músicas adquiridas através do iTunes até início de outubro do ano passado são a prova viva da viabilidade dessa abordagem. ■ Rafael Peregrino da Silva Diretor de Redação

3


ÍNDICE

CAPA Dados: a era do crescimento

33

Armazenar e quantificar o grande volume de informações que geramos todos os dias é um desafio que agora bate à nossa porta. O que nos reserva o futuro da Big Data?

Armazenamento flexível

34

Com o GlusterFS é possível tomar um espaço disponível no data center e criar um grande sistema de armazenamento rápido e eficiente.

Cluster na nuvem

40

Neste artigo, discutimos o caso de uso do HPC baseado em nuvem, introduzimos o kit de ferramentas StarCluster e mostramos como construir uma imagem de máquina personalizada para nós de computação.

Grandes escavações

46

Experimente o poder da supercomputação e da revolução da Big Data com o Apache Hadoop.

4

www.linuxmagazine.com.br


Linux Magazine 96 | ÍNDICE

TUTORIAL

COLUNAS Klaus Knopper

08

Charly Kühnast

10

Augusto Campos

12

Alexandre Borges

14

Kurt Seifried

16

Zack Brown

20

FirefoxOS

58

NOTÍCIAS Geral

22

➧ Criptografia insuficiente em aplicativos Android A Mozilla disponibilizará seu sistema para tablets e smartphones no Brasil em 2013, gerando oportunidades para desenvolvedores. Neste artigo veremos os primeiros passos para criação de novos aplicativos.

➧ Segundo alpha do Apache Hadoop 2.0

CORPORATE Notícias

24

Persistência

64

➧ Secure Boot da Linux Foundation Entrevista com Arun Oberoi

26

Coluna: Jon “maddog” Hall

28

Coluna: Cezar Taurion

30

Coluna: Alexandre Santos

32

ANDROID Jujubas coloridas

54 Conheça alguns recursos oferecidos pelo autoSSH e pelo Mosh não disponíveis no SSH comum.

PROGRAMAÇÃO Momento terminal

73

Apresentamos as principais características da nova versão do sistema Android e revelamos quando e quais dispositivos receberão a atualização para o Jelly Bean.

ANÁLISE Bem temperado

68

PHP em linha de comando está no pedaço há mais de 10 anos, o que torna a linguagem e suas completas bibliotecas eminentemente adequadas para a caixa de ferramentas de qualquer administrador que gerencia servidores online.

SERVIÇOS A Red Hat confere ânimo ao desempenho de aplicativos multimídia em desktops remotos com o SPICE, protocolo simples para ambientes de computação independentes

Linux Magazine #96 | Novembro de 2012

Editorial

03

Emails

06

Linux.local

78

Preview

82

5


Coluna do Augusto

COLUNA

O Linux invade a terra de ninguém Exemplos de como o Linux é capaz de suportar variadas arquiteturas e oferecer alternativas de desktop capazes de operar com poucos recursos de hardware.

V

ários conceitos já tentaram preencher o espaço que há entre o mercado dos smartphones e o dos notebooks, alguns deles com sucesso, e outros nem tanto. Um deles é o DMZ (Demilitarized Zone ou “zona desmilitarizada”), familiar a muitos usuários que algum dia já fizeram a configuração avançada de um roteador doméstico, correspondendo a uma área que não é nem externa (ou seja, a Internet), nem interna (a rede local); é a chamada “terra de ninguém”, em que muitas vezes computadores ou outros recursos ficam “expostos” à Internet, sem as proteções e salvaguardas reservadas à rede interna. Em sua origem, o termo se refere a regiões como o trecho de 4 km de largura (e 250 km de extensão) onde separa as duas Coreias desde o fim da guerra lá ocorrida na década de 1950, repleto de armadilhas e campos minados, no qual nenhuma atividade é viável, e que quem se aventura a cruzar o faz por sua conta e risco.  É assim que vejo o espaço entre os smartphones e os notebooks. A mais recente tentativa interrompida de ocupá-lo foi pela dupla Google/Motorola, que no começo de 2011 lançou seu aparelho Atrix acompanhado de dois elementos que o colocaram com um pé na terra de ninguém: o software Webtop e o acessório Lapdock.  O Webtop era um ambiente desktop completo baseado no Ubuntu, que inclui o navegador Firefox, clientes de bate-papo, vários componentes do GNOME e mais. Ele aparecia quando o Atrix era plugado ao acessório Lapdock, que essencialmente o dotava de componentes de hardware que faltavam para transformá-lo em um netbook, incluindo tela e teclado. Se a ideia parecia boa, a implementação não foi tanto: era caro, o desempenho ficava devendo e o recurso era limitado. Culpa do produto, e não do conceito, naturalmente, e a própria fabricante pare-

12

ce reconhecer que não houve sucesso: descontinuou o produto em outubro, discretamente. Vale lembrar que o Google, que recentemente adquiriu a Motorola, possui outra iniciativa com um pé na DMZ: o Chromebook, seu aparelho que oferece recursos de computação móvel conectada. Não sabemos o que mais virá pelas mãos da própria Motorola, mas o conceito de um acessório para dotar o smartphone de uma tela e um teclado parece já estar superado pelo cada vez mais comum suporte a periféricos Bluetooth (incluindo teclados, claro) e saída de vídeo HDMI ou via rede sem fio, que permite conexão ao monitor à escolha do usuário. Neste sentido, a mesma Canonical que forneceu o Ubuntu para o Webtop da Motorola tem sua própria iniciativa: o Ubuntu for Android, que oferece uma forma de executar nativamente o Ubuntu em paralelo ao Android em smartphones, exibindo e permitindo operar um desktop Ubuntu completo quando o aparelho está conectado a um monitor, teclado e mouse. O produto foi demonstrado recentemente no FISL, mas devido à necessidade de integração profunda com o hardware de cada aparelho, não é algo que possa ser instalado diretamente por cada usuário, mas sim pelos fabricantes, com quem a Canonical tem expectativa de fechar acordos de adoção do seu sistema, o que caracterizaria sua própria incursão na terra de ninguém. Tratam-se de exemplos interessantes, onde brilha a capacidade do Linux de suportar arquiteturas variadas e oferecer alternativas de desktop capazes de operar com poucos recursos de hardware. Vamos acompanhar! ■ Augusto César Campos é administrador de TI e, desde 1996, mantém o site BR-linux.org, que cobre a cena do Software Livre no Brasil e no mundo.

www.linuxmagazine.com.br


Coluna do Alexandre Borges

COLUNA

NMAP – quarta parte Avance em seus conhecimentos sobre a poderosa ferramenta NMAP.

N

este mês vamos comentar a respeito de outros detalhes do fantástico NMAP, tendo agora a oportunidade de explorar algumas opções muito interessantes, complementando as técnicas que abordamos nas primeiras colunas. Retomando os textos anteriores, quando iniciamos o assunto do NMAP e mostramos como é simples realizar um levantamento de quais máquinas estão funcionando na rede de destino (ping scanning), trataremos de algumas possibilidades adicionais para agregar valor na execução deste tipo de escaneamento. Acompanhe os exemplos: # nmap -sP -g 53 --data-length 32 192.168.1.0/24

Neste caso, estamos realizando um levantamento de quais máquinas estão funcionando na rede 192.168.1.0/24 através de um ping scanning (-sP), fixando a porta de origem do escaneamento (é possível enganar alguns firewalls que justamente deixam passar qualquer pacote vindo da porta de serviço do DNS) e, ainda, atribuindo um tamanho ao pacote usado pelo NMAP. Por quê? Porque alguns IDS produzem um alerta quando possuem pacotes com tamanho zero, porém quando fixamos um tamanho, estamos fugindo deste controle. O número 32 é o tamanho convencional de um ping proveniente de sistemas Windows e o número 56 é o respectivo tamanho de ping para sistemas Linux. # nmap -sP -PS80 192.168.1.0/24

Este é um exemplo curioso pois é o mesmo exercício do comando anterior – um escaneamento para descobrir quais máquinas estão funcionando – contudo, estão sendo utilizados pacotes TCP e os mesmos são então enviados para a porta 80. O tamanho é zero e isto é uma desvantagem, mas o leitor pode usar a opção --datalength <comprimento do pacote> como demonstramos acima. Qual é a vantagem disto? É que muitos sites bloqueiam pacotes ICMP e, neste caso, estão sendo usados pacotes TCP

14

destinados à porta 80 que, costumeiramente, está aberta no firewall. Aliás, aqui a conexão não chega a ser estabelecida pois o NMAP envia um RST na terceira parte do three-handshake, assim como também ele não está interessado se a porta 80 está ou não aberta na máquina de destino, pois vindo uma resposta (SYN+ACK ou RST) é um sinal que a máquina alvo está em funcionamento. É evidente que máquinas que não estiverem com a porta 80 aberta ou com algo sendo executado não apresentarão resposta. # nmap --packet-trace -sP -PA80 192.168.1.0/24

Esta é outra combinação curiosa. Neste exemplo estamos realizando um TCP ACK scan para descobrir quais máquinas estão up na rede, ou seja, ao invés de enviar um pacote SYN para depois esperar um SYN+ACK (como no exemplo anterior), o NMAP está enviando um pacote com o parâmetro ACK em 1. É claro que se a máquina de destino estiver no ar, ela responderá com um pacote RST, mas isto não importa e sim que a máquina esteja funcionando. É incrível notar que muitos firewalls estão preparados com regras para bloquear pacotes SYN entrantes, todavia esquecem de fazer o mesmo com estes pacotes ACK iniciais. É claro que tais pacotes seriam facilmente bloqueados com uma regra stateful. A opção --packet-trace foi incluída por caráter educacional pois ela mostra todos os pacotes e flags enviados pelo NMAP. É muito instrutivo. Agora que completamos de vez a etapa do levantamento de quais máquinas estão respondendo ou não em nossa rede alvo, já é possível apresentar outras possibilidades adicionais de scaneamentos de portas que são muito interessantes e que certamente o leitor vai apreciar. Na edição passada, comentei a respeito da opção -sS (escaneamento invisível); alguns complementos também serão úteis aqui: # nmap -sS <opção> 192.168.1.0/24

www.linuxmagazine.com.br


Onde <opção> pode ser: ➧ --host-timeout: tempo máximo que o NMAP se dedica ao escaneamento de uma máquina. Este tempo é medido em milissegundos. ➧ --min-rtt-timeout,--max-rtt-timeout: respectivamente tempos mínimos e máximos que o NMAP aguarda pela resposta de uma porta. Este tempo é em milissegundos e isto é útil para impedir que o NMAP sofra com atrasos da rede e, eventualmente, pule uma porta que poderia estar aberta apenas porque a resposta demorou para chegar. ➧ -d# : coloca o NMAP em modo de debug, onde # define o nível (de 1 a 9). O leitor pode esperar por uma saída muito detalhada com esta opção. ➧ -D <decoy1,decoy2,decoy3,...>: esta opção é muito interessante pois além dos pacotes normais que saem com o IP da máquina que está realizando o escaneamento, também envia diversas “iscas” (ou engodos) com o IP de origem que for escolhido na linha de comando do NMAP. A intenção é confundir o administrador da rede sendo atacada para que o mesmo tenha dúvidas sobre qual endereço IP realiza a invasão. Segue um exemplo: # nmap -n -PN -D187.145.23.99,10.10.10.1,90. 90.10.2 -sS 192.168.1.100

Linux Magazine #90 | Maio de 2012

Neste caso estamos executando um escaneamento invisível (-sS) na máquina 192.168.1.100, entretanto, enviamos diversos pacotes que servem meramente como engodo para confundir o IDS ou mesmo o administrador da máquina alvo relatando IPs de origem que não são os nossos (187.145.23.99, 10.10.10.1 e 90.90.10.2). A opção -n elimina a necessidade da resolução de nomes através do DNS, permitindo que o escaneamento seja bem mais rápido. A opção -PN também contribui, pois está isentando o NMAP de ter que executar um ping antes do escaneamento e varrer as portas assim mesmo. Lembre-se de que, se permitirmos que o NMAP realize um ping e não houver resposta, ele simplesmente para por ali e não faz qualquer escaneamento de portas! No mês que vem volto com outras técnicas de escaneamento diferentes do -sS e que serão muito úteis em diversas situações. Até mais. ■ Alexandre Borges (alex_sun@terra.com.br) é instrutor independente e ministra regularmente treinamentos de tecnologia Oracle (áreas de Solaris, LDAP, Cluster, Containers/OracleVM, MySQL, e Hardware), Symantec (Netbackup, Veritas Cluster,Backup Exec, Storage Foundation e SEP) e EC-Council (CEH e CHFI), além de estar sempre envolvido com assuntos relacionados ao kernel Linux.

15


Big Data

Armazenar e quantificar o grande volume de informações que geramos todos os dias é um desafio que agora bate à nossa porta. O que nos reserva o futuro da Big Data? por Cezar Taurion e Flávia Jobstraibizer

O

termo Big Data está se tornando cada vez mais popular, embora ainda seja um tanto quanto mal compreendido. Atualmente não existe consenso quanto ao que é realmente a Big Data e quais as tecnologias fundamentais que sustentam esta vertente da tecnologia. E mais ainda, existem muitas dúvidas sobre como tangibilizar o conceito, ou seja, como sair do conceitual e criar soluções de negócio que agreguem valor para as empresas. Eliminar estas dúvidas é essencial e o primeiro passo para as empresas se aventurarem em projetos Big Data. Para colocarmos o termo em contexto, a Big Data vem chamando a atenção pela acelerada escala em que volumes cada vez maiores de dados são criados pela sociedade. Já falamos comumente em petabytes de dados gerados a cada dia, e os zetabytes começam agora a ser uma escala real e não mais imaginária e futurista. O que era futuro há uma década, os terabytes, hoje nós já temos em nossas próprias casas. Hoje já é consenso que dados são os recursos naturais da nova revolução industrial. Na atual sociedade industrial, ter apenas recursos naturais como minério e exportá-los de forma bruta, importando em troca produtos manufaturados com eles, não garante a competitividade de um país a longo prazo. O importante é a tecnologia e o conhecimento que cria produtos manufaturados. Afinal um quilo de satélite vale imensamente mais que um quilo de minério de ferro.

Linux Magazine #96 | Novembro de 2012

Fazendo um paralelo, na sociedade da informação é crucial saber tratar os dados na velocidade adequada. Dados não tratados e analisados em tempo hábil são dados inúteis, pois não geram informação. Dados passam a ser ativos corporativos importantes e como tal podem e devem ser quantificados economicamente. Big Data representa um desafio tecnológico, pois demanda atenção à infraestrutura e tecnologias analíticas. O processamento de massivos volumes de dados pode ser facilitado pelo modelo de computação em nuvem, desde, é claro, que este imenso volume não seja transmitido repetidamente via Internet. Só para lembrar, os modelos de cobrança pelo uso de nuvens públicas tendem a gerar processamentos muito baratos, mas tornam caro massivas transmissões de dados. Big Data pode ser resumido como: volume + variedade + velocidade. O grande e variado volume de dados gerados a cada dia, com uma velocidade incrível, fazem da Big Data um dos principais alvos dos profissionais de TI em futuro muito breve. Nesta edição da Linux Magazine, vamos falar sobre algumas tecnologias fundamentais para Big Data. Uma delas é o popular Apache Hadoop, plataforma voltada para clusters e processamento de grandes volumes de dados. Também vamos falar sobre StarCluster, uma forma poderosa de manter seu cluster de dados na nuvem. Fique de olho nas oportunidades profissionais que a Big Data irá trazer e para isso conte conosco! Boa leitura! ■

Matérias de capa Armazenamento flexível

34

Cluster na nuvem

40

Grandes escavações

46

33

CAPA

Dados: a era do crescimento


ANDROID

ANDROID | Android 4.1 “Jelly Bean”

Novidades do Android 4.1 Jelly Bean

Jujubas coloridas Apresentamos as principais características da nova versão do sistema Android e revelamos quando e quais dispositivos receberão a atualização para o Jelly Bean. por Marcel Hilzinger

Q

ue a nova versão do Android seria a 4.1 e se chamaria “Jelly Bean” já era sabido com 99% de certeza há algum tempo. Mas ainda não havia praticamente nenhuma informação concreta sobre seus novos recursos até a conferência para desenvolvedores Google I/O 2012. Portanto, ficamos muito satisfeitos em saber que o Android 4.1 “Jelly Bean” não seria só uma pequena atualização da versão anterior 4.0, mas traria uma série de novos recursos úteis e interessantes. Este artigo fornece uma visão geral das principais características novas. Uma lista detalhada dos novos recursos do Android 4.1 (também) do ponto de vista do desenvolvedor pode ser encontrada no site [1].

Pão com manteiga Uma das principais críticas por parte dos usuários Android em comparação com o iOS sempre foi as animações meio quebradas, não tão suaves como no sistema operacional da Apple. Com

54

o “Butter Project”, os desenvolvedores do Android 4.1 dedicaram-se a resolver estes problemas de uma vez por todas. Para isso, eles realizaram três mudanças importantes:

➧ A taxa de quadros do Vsync-Timing foi aumentada no geral para 60 FPS (que é a taxa máxima de quadros em praticamente todos os monitores atuais). Assim, não há diferença visível

Quadro 1: Quando poderemos comer essa jujuba? A questão principal para essa nova versão do Android, naturalmente, também é: quando poderemos obtê-lo? E a resposta no Google I/O 2012 não decepciona: o Google tem trabalhado estreitamente com alguns fabricantes de hardware que começaram a trabalhar, cerca de dois a três meses antes do lançamento, em uma nova versão do PDK (Platform Development Kit). Isto permite que o fabricante teste o seu equipamento com esta versão do Android e relate problemas. Se o lançamento do código de uma nova versão para um dispositivo durava até agora pelo menos seis a oito semanas, é suscetível a redução deste período de tempo a partir de agora para apenas algumas semanas. O Google anunciou a entrega do Android 4.1 em julho para o Nexus Galaxy, o Nexus S e o Motorola Xoom. O tablet Xoom trará o novo sistema apenas na versão dos EUA, já que a versão europeia não é oficialmente considerada como um dispositivo da família Nexus. Portanto, pelo menos teoricamente, as condições estão favoráveis para garantir que os grandes fabricantes de telefones e tablets liberem atualizações para o Android 4.1 em agosto. No entanto, contamos com uma primeira onda de atualização somente no final do outono europeu, já que alguns dispositivos não contam nem com o Android 4.0 instalado ainda e fabricantes como a Motorola, HTC e Samsung sempre tem que portar suas próprias interfaces gráficas de usuário e funções adicionais. Não houve informações durante a palestra sobre os requisitos de hardware do Android 4.1, mas não supomos que eles sejam idênticos aos do Android 4.0 (e até mesmo da versão 2.3).

www.linuxmagazine.com.br


Android 4.1 “Jelly Bean” | ANDROID

Figura 1 À primeira vista quase não há diferenças entre o Android 4.0 e o 4.1.

entre a animação e o sistema normal, tudo parece igualmente fluido. ➧ O Android 4.1 tem o chamado triple-buffering na fila de operações gráficas. Isto também assegura que não haja engasgos em gráficos com efeitos complexos como rolagem ou animação. ➧ Uma técnica especial foi usada para ser capaz de prever onde o utilizador irá encostar o dedo. Isso também pode evitar atrasos. O Google não revelou durante a I/O, no entanto, como isto funciona exatamente. Um impulso adicional de entrada na CPU faz com que o sistema responda de imediato após longos períodos de inatividade. Nossos testes iniciais com o Nexus Galaxy mostraram que o Google não exagerou no falatório. O sistema realmente está macio como uma manteiga, os aplicativos iniciam visivelmente mais rápido e sem atrasos. Mesmo nos programas de comparativos habituais, o Nexus Galaxy com “Jelly Bean” novamente se sai significativamente melhor que o “Ice Cream Sandwich”. No navegador para comparativos Vellamo

Linux Magazine #96 | Novembro de 2012

Figura 2 O Jelly Bean exibe muito mais informações e economiza mudanças desnecessárias de aplicativos.

é onde o aumento é mais relevante. Aqui o Nexus Galaxy com Android 4.0 atingiu apenas 1.200 pontos; com Android 4.1, no entanto, chegou a 1.600. Esta diferença pode ser sentida pelo usuário durante a navegação. Naturalmente, as mudanças não trarão muitos benefícios se os desenvolvedores de aplicativos não se prepararem adequadamente. Por isso o SDK fornece agora uma ferramenta que revela onde estão as fraquezas no desempenho e as mostra graficamente – assim como já faz há algum tempo no conhecido ambiente de desenvolvimento Systrace, para Linux. Isto permite aos programadores verificar bloqueadores e problemas de desempenho de seus aplicativos antes do lançamento.

Novas notificações As notificações sempre estiveram entre os pontos fortes do Android em comparação com outros sistemas. O Google conseguiu melhorá-las significativamente e traz com o

Figura 3 É possível bloquear completamente as notificações de aplicativos individuais.

Jelly Bean não apenas uma interface mais bonita, como também notificações muito mais úteis. Quando uma chamada é perdida, o usuário pode retornar para o número diretamente a partir da notificação ou enviar um SMS. O desvio para o aplicativo de telefone não é mais necessário. Uma série de outros aplicativos podem ser acionados diretamente da barra de notificações e realizar ações, como por exemplo responder a um comentário no Google Plus ou ler no assunto as primeiras linhas de uma mensagem de email.

Reconhecimento de fala desconectado Falar ao invés de digitar, em muitos casos, pode ser uma solução melhor e mais rápida. Mas até agora o software de reconhecimento de voz do Google funcionava apenas quando houvesse uma conexão ativa com a Internet. Com o Jelly Bean, o Android já trará o software necessário embutido no sistema, permitindo a entrada

55


ANDROID | Android 4.1 “Jelly Bean”

Figura 4 O software de reconhecimento de voz não só ficou mais bonito, como também reconhece mais conceitos e perguntas.

de voz em modo offline. O Google também realizou uma atualização em várias das vozes TTS, que agora soam muito melhores em outros idiomas. Seguindo adiante, o Google melhorou a função do reconhecimento de voz, que agora fornece respostas muito melhores para pedidos de busca ou questões comuns. O Siri pode até dizer “olá”, mas atualmente nos parece ser o Google, com o Android 4.1, quem pode oferecer mais do que apenas “blablabla”. Por último, mas não menos importante, o Android 4.1 vem de fábrica com suporte a 18 idiomas.

Pré-visualização na câmera Com o Android 4.0, o Google melhorou o aplicativo da câmera de forma significativa, de modo que o usuário pudesse registrar cada foto de forma mais ágil. A alternância entre a visualização da imagem e o aplicativo

56

Figura 5 Imagens capturadas podem ser avaliadas e apagadas direto do aplicativo da câmera.

da câmera, entretanto, ainda não era ideal. Com o Jelly Bean isto mudou. Basta um gesto de deslizar para a direita a partir da pré-visualização da câmera para ver a galeria de fotos tiradas recentemente. Com o gesto de deslizar para cima o usuário também pode excluir fotos individuais direitamente. E todos os recursos funcionam sem que haja a necessidade de iniciar o aplicativo “galeria”.

Tela inicial simplificada Os widgets estão entre os aplicativos favoritos de todos os usuários do Android. Mas onde colocá-los quando não há espaço na tela inicial? No Android 4.1 o Google novamente melhorou de forma significativa o modo de mover e organizar os widgets. Os grandes demais para caber na tela inicial movem-se automaticamente para a próxima tela e existem agora num modo paisagem e retrato separados. O manuseio de

Figura 6 A nova tela de bloqueio chama a atenção com linhas anulares.

papéis de parede animado também foi melhorado pelos desenvolvedores. Para usar um novo papel de parede animado, o usuário não precisa mais percorrer complicadas configurações; basta selecioná-lo diretamente do aplicativo Live Wallpaper. Para isto, o desenvolvedor deve inserir o recurso de pré-visualização em seu aplicativo. A tela de bloqueio do Android também passou por uma revisão por parte dos programadores do Google. Agora passa a ostentar um padrão que faz com que o processo de desbloqueio seja mais intuitivo.

Atualização inteligente Usuários e desenvolvedores ficarão igualmente satisfeitos com o novo recurso Smart Update. Ele reduz o tamanho dos arquivos de atualização, em média, a um terço do APK original. Com isso, é possível economizar em banda e o usuário também pode fazer uma ou duas atualizações via rede 3G, antes disponível apenas por WiFi. Esta inovação deve beneficiar inclusive as operadoras, já que me-

www.linuxmagazine.com.br


Android 4.1 “Jelly Bean” | ANDROID

Figura 7 O Google Now executa com um gesto deslizante de baixo para cima.

nos dados precisam ser transferidos através da rede. Até que o Jelly Bean esteja amplamente disponível, no entanto, é mais provável que os volumes de download aumentem, de modo que o recurso esteja na lista de prioridades tanto para os usuários como para os desenvolvedores. O código dos aplicativos não precisa ser ajustado com nada em especial, já que as atualizações inteligentes no Google Play serão fornecidas pelo Google automaticamente.

Google Now Com o Google Now, o Android 4.1 oferece uma forma de pesquisa totalmente nova, que vai além da busca padrão do Google. O Google Now é chamado com um gesto deslizante partindo de baixo e mostra, na configuração básica, a localização atual e os compromissos. Se o Google Now realmente funcionar tão bem como foi demonstrado durante o Google I/O, então podemos esperar um prático assistente que reconhece nossos hábitos e trabalha com dicas cotidia-

Linux Magazine #96 | Novembro de 2012

Figura 8 O conteúdo do Google Now ainda é escasso, mas a empresa deseja expandir a oferta gradualmente.

nas e informações sobre os serviços de transporte público, a situação atual do trânsito, eventos esportivos e ajuda na navegação via GPS.

Outros recursos Além destes recursos principais, o Android “Jelly Bean” traz ainda uma série de outras novidades. Ao usuário já é permitido transferir vídeos e fotos via NFC, embora a transferência real ocorra depois via Bluetooth, mas não é mais necessário o emparelhamento. As fotos de perfil da agenda de endereços finalmente não estão mais pixelizadas, mas sim disponíveis em tamanhos de até 720 x 720 pixels. No Android 4.1 é também muito mais fácil lidar com dispositivos de entrada e os desenvolvedores melhoraram significativamente o suporte a audio, de modo que o aplicativo de som cause menos dor de cabeça aos programadores. Aplicativos pagos podem agora ser criptografados no 4.1 para que os piratas de plantão tenham sua vida um pouco mais dificultada. Além disso,

Figura 9 Imagens pixelizadas são algo do passado com o novo Jelly Bean.

os desenvolvedores podem acessar o serviço Google Cloud Messaging para enviar mensagens aos usuários de seus aplicativos. Finalmente, o Google oferece com o Jelly Bean atualizações para todos os seus aplicativos padrão, incluindo Gmail, Google Maps, Google Plus, Google Currents e muitos outros. As vantagens destas atualizações o usuário já pode sentir hoje no smartphone, pois estão disponíveis também para as versões 2.3 e 4.0 do Android. A lista completa de recursos do Android 4.1 Jelly Bean podem ser encontradas no site para desenvolvedores do Android. ■

Mais informações [1] Android Developers: http:// developer.android.com/

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

57


TUTORIAL | FirefoxOS

Aplicativos móveis

TUTORIAL

FirefoxOS A Mozilla disponibilizará seu sistema para tablets e smartphones no Brasil em 2013, gerando oportunidades para desenvolvedores. Neste artigo veremos os primeiros passos para criação de novos aplicativos. por Alessandro de Oliveira Faria (Cabelo)

A

Mozilla entrará no mercado de sistema móveis e competirá diretamente com Android, iOS e Windows Phone. O FirefoxOS, também conhecido pelo codinome B2G (Boot to Gecko), é totalmente baseado na Internet, então podemos deduzir que o esforço para portar aplicativos não exigirá “magia negra” em programação. O conceito é muito similar ao Chrome OS para celulares, sendo mais preciso – o sistema trabalha exatamente a partir de aplicativos online. Um ponto muito importante é que o Brasil será o primeiro país a receber esta tecnologia de código aberto e totalmente isenta de royalties em rede móvel Telefonica Digital (operadora Vivo). A plataforma da B2G da Mozilla é baseada na tecnologia HTML5, ou seja, comprovadamente online. Não precisamos de grandes estudos para entender que smartphones com esta tecnologia serão mais baratos e deverão levar a uma difusão mercadológica na América Latina. “De acordo com Carlos Domingo, diretor de desenvolvimento de produtos e inovação da Telefonica Digital, o potencial de um aparelho B2G seria o de custar dez vezes menos que um iPhone. Ou seja: no Brasil, sairia por volta de R$ 180” [1].

58

O FirefoxOS é uma plataforma online de padrão aberto que proporciona o controle completo dos aplicativos, muito similar ao funcionamento de um navegador. Conta também com todos os recursos do aparelho, como mensagens, chamadas, buscas online e jogos que serão desenvolvidos em HTML5 e executados por meio do navegador. E claro, de acordo com a Mozilla, alguns recursos irão funcionar mesmo sem acesso à Internet. Acredito que esta tecnologia mudará conceitos, pois atualmente a melhor maneira de navegar na Internet com um dispositivo móvel é através de aplicativos, portanto, teremos Internet no bolso de todos. O B2G é baseado no kernel Linux, com modificações do Android para suportar os dispositivos móveis baseados na arquitetura ARM. No lugar dos daemons/serviços entram em ação um runtime do Gecko. Este runtime nada mais é do que um componente de renderização de HTML do Firefox (ou seja, nada de aplicativos nativos). A utilização da Mozilla Web APIs garante a inclusão de padrões de APIs JavaScript para o acesso a recursos dos dispositivos móveis, como GPS, acelerômetro, SMS e câmera, suporte a multitoque e a tecnologia NFC (WebNFC).

Mão na massa, ao código fonte Um fator muito importante é que diferentemente de qualquer SDK móvel (Android, iOS, Windows Phone e outros), todo o ambiente de desenvolvimento foi construído a partir do código-fonte. Isto demonstra que o projeto é todo em código aberto, conforme mencionado em diversas notícias espalhadas pela Internet. Como no Android, precisamos de um emulador para executar a interface gráfica (no FirefoxOS denominado GAIA) e testar os aplicativos, uma vez que ainda não possuímos celulares disponíveis no mercado. Embora seja possível compilar o FirefoxOS para alguns modelos de celulares com Android, decidi embasar este artigo somente no emulador para atender a todos os leitores, independentemente do aparelho adquirido.

GAIA, Emulador e Desktop client Para efeito de sincronismo e nomenclatura, GAIA é a interface do FirefoxOS, ou seja, toda a interface visual é desenhada pela GAIA, desde o bloqueio de tela até

www.linuxmagazine.com.br


FirefoxOS | TUTORIAL

discador e aplicativos. A interface é toda escrita em HTML5, CSS e JavaScript, projetada para executar sobre o FirefoxOS através do padrão WebAPI. O B2G desktop client é um aplicativo que permite a execução e testes de aplicativos na interface GAIA e online no ambiente B2G. Não devemos entender este aplicativo como um emulador, por consequência não é um substituto para testes em hardware real. O B2G emulador é, na verdade, a principal ferramenta para desenvolvedores que desejam testar o ambiente desta nova tecnologia. Podemos praticamente gerar dois modelos de binários, o emulador x86 e o ARM. Tanto a versão desktop quanto a versão emulador são baseadas no qemu.

Requisitos Para compilar o ambiente de desenvolvimento ou desktop, além de muito café, também precisamos instalar “algumas” dependências, ou seja, os pacotes necessários para a compilação. Esta tarefa envolve

desde a instalação do gcc até as bibliotecas básicas para compilação e execução do B2G. As listagens de 1 a 5 contêm as instruções de instalação de dependências nas principais distribuições. Após a instalação de todos os requisitos, o próximo passo é a compilação e instalação do B2G desktop client ou emulator.

Compilação e instalação do B2G desktop client Antes de iniciar o download, crie a pasta b2g e efetue o download dos respectivos códigos-fontes utilizando as ferramentas de controle de versão Github e Mercurial. $ mkdir b2g $ cd b2g $ hg clone http://hg.mozilla.org/ mozilla-central src $ git clone https://github.com/ mozilla-b2g/gaia gaia

Após o download, entre na pasta src recém-criada, edite o arquivo .mozconfig e o modifique com o con-

teúdo a seguir:

mk_add_options MOZ_OBJDIR=../build mk_add_options MOZ_MAKE_FLAGS=" -j9 -s" ac_add_options --enable-application=b2g ac_add_options --disable-libjpeg-turbo # This option is required if you want to be able to run Gaia's tests ac_add_options --enable-tests # turn on mozTelephony/mozSms interfaces # Only turn this line on if you actually have a dev phone # you want to forward to. If you get crashes at startup, # make sure this line is commented. # ac_add_options –enable-b2g-ril

Em seguida, inciaremos a compilação com o tradicional comando make, conforme o exemplo abaixo. Durante esta operação, sugiro ao leitor uma pausa para um café... $ make -f client.mk build

Ao término da compilação, basta entrar na pasta GAIA, compilá-la com

Listagem 1: Requisitos para o Ubuntu 01 sudo apt-get install mercurial g++ make autoconf2.13 yasm libgtk2.0-dev libglib2.0-dev libdbus-1-dev libdbus-glib-1-dev libasound2-dev libcurl4-openssl-dev libiw-dev libxt-dev mesa-common-dev

Listagem 2: Requisitos para o Debian 02 sudo aptitude install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libxt-dev libiw-dev libidl-dev mesa-common-dev autoconf2.13 yasm libgtk2.0-dev libdbus-1-dev libdbus-glib-1-dev

Listagem 3: Requisitos para o RedHat Enterprise/CentOS/Fedora 01 sudo yum groupinstall ‘Development Tools’ ‘Development Libraries’ ‘GNOME Software Development’ 02 sudo yum install mercurial autoconf213 glibc-static libstdc++-static yasm wireless-tools-devel mesa-libGL-devel alsa-lib-devel libXt-devel

Listagem 4: Requisitos para o openSUSE/SUSE 01 sudo zypper install make cvs mercurial zip gcc-c++ gtk2-devel xorg-x11-libXt-devel libidl-devel freetype2-devel fontconfig-devel pkg-config dbus-1-glib-devel mesa-devel libcurl-devel libnotify-devel alsa-devel autoconf213 libiw-devel yasm

Listagem 5: Requisitos para o Arch Linux 01 sudo pacman -Syu base-devel zip unzip freetype2 fontconfig pkg-config gtk2 dbus-glib iw libidl2 python2 mercurial alsa-lib curl libnotify libxt mesa autoconf2.13 yasm wireless_tools

Linux Magazine #96 | Novembro de 2012

59


TUTORIAL | FirefoxOS

o comando make e logo em seguida executar o binário b2g, conforme as instruções: $ cd ../gaia/ $ make $ ../build/dist/bin/b2g -profile profile

Dicas para o B2G desktop client

seja pelo motivo da não instalação do B2G desktop client, seja por outro motivo qualquer, crie então uma pasta e efetue o download do código-fonte utilizando o comando a seguir da ferramenta Git; logo após, execute o comando ./config.sh emulator-x86 para efetuar a compilação para a plataforma x86; para finalizar, execute o comando ./build.sh (o usuário deve responder

a algumas perguntas como nome e email). $ mkdir firefoxOS $ cd firefoxOS/ $ git clone https://github.com/ mozilla-b2g/B2G.git $ cd B2G $ ./config.sh emulator-x86 $ ./build.sh

Depois de algumas horas de download e compilação, e se tudo

Caso ocorra algum problema de renderização, basta inserir o conteúdo abaixo no arquivo: [PATH]Gaia/ profile/prefs.js user_pref("layers.acceleration. disabled", true);

A resolução do emulador pode ser definida com parâmetros –-screen, e deve ser informada a resolução no formato <largura>x<altura>@ <dpi> exemplo: $ ../build/dist/bin/b2g -profile profile --screen=320x240@160

Se tudo estiver funcionando corretamente, teremos a seguinte tela do B2G desktop client. Com este módulo é possível testar a loja de aplicativos e recursos de software desenvolvidos (figura 1).

Figura 1 Na tela do B2G desktop client é possível testar a loja de aplicativos e recursos desenvolvidos.

Instalação do B2G emulator a partir do código-fonte A principal diferença entre o B2G emulator e o desktop client é a capacidade de interagir com o dispositivos virtual. O emulador pode ser compilado para x86 ou ARM. Claro, se optarmos pela primeira opção, o desempenho será superior em computadores pessoais. O emulador permite conexão e acesso ao Shell, assim como configuração de ambientes e tudo que um desenvolvedor precisa para criar aplicativos nesta plataforma. Se uma pasta não foi criada conforme as instruções anteriores,

60

Figura 2 Imagem de instalação do B2G emulator a partir do código-fonte funcionando corretamente.

www.linuxmagazine.com.br


FirefoxOS | TUTORIAL

funcionou corretamente, basta executar o comando ./run-emulator.sh para visualizar algo como a figura 2. Se algum erro ocorreu, sem sombra de dúvida foi por conta de alguma dependência do pacote de desenvolvimento que não foi atendida. Ressalto que o ambiente utilizado foi a plataforma openSUSE 12.1 64 bits. A memória do emulador pode ser alterada com o parâmetro -memory, assim como a visualização – por padrão, o emulador utiliza a resolução 320x480, porém, se desejarmos modificá-la, basta editar o script run-emulator.sh e adicionar o parâmetro --skin seguido do layout desejado (conforme relação abaixo). ➧ HVGA (320x480) ➧ QVGA (240x320) ➧ WQVGA (240x400) ➧ WQVGA432 (240x432) ➧ WSVGA (1024x600)

➧ WVGA800 (480x800) ➧ WVGA854 (480x854) ➧ WXGA720 (1280x720) ➧ WXGA800 (1280x800) Insira na variável PATH a localização do binário adb (Android Debug

Bridge) pois, conforme mencionado no início do texto, parte do FirefoxOS foi extraída do Android (camada de kernel). Em seguida, teste a comunicação com o emulador utilizando o aplicativo adb, conforme o exemplo: $ adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully * $ adb devices List of devices attached emulator-5554 device $ PATH=$PATH:[SUA PASTA]/b2g/B2G/ out/host/linux-x86/bin

Se por algum motivo a conectividade do dispositivo virtual não estiver funcionando (sem acesso à

Internet), basta executar o comando no Shell: $ adb shell setprop net.dns1 10.0.2.3

Desenvolva aplicativos para FirefoxOS Agora que o seu ambiente está instalado e configurado com sucesso, o próximo passo é entender como desenvolver um aplicativo para esta plataforma de software. Mas, antes, vamos conhecer um pouco a ferramenta Marionette. Baseado no protocolo JSON, o Marionette é um módulo que trabalha como um servidor no dispositivo virtual. Seu principal objetivo é obter acesso à chamada WebAPI, tornando possível acessar o estado de diversos recursos do sistema operacional. Em outras palavras, podemos testar o framework do sistema FirefoxOS apenas digitando as chamadas desejadas. Para acessar este recurso, utilize o comando conforme o exemplo abaixo: $ adb forward tcp:2828 tcp:2828

Agora devemos instalar o Marionette client a partir do código-fonte, e em seguida entrar na pasta marionette_client para configurar a localização do Python e depois ativar o Marionette client na pasta marionette_venv, conforme o exemplo: Figura 3 Aviso de instalação do aplicativo MozillaBall.

$ git clone https://github.com/ mozilla/marionette_client/ cd marionette_client/marionette/ sh venv_test.sh /usr/bin/python2.7 cd ../marionette_venv $. bin/activate (marionette_venv)$

Agora executaremos o interpretador Python e invocaremos uma seção Marionette interativa: Figura 4 Para remover o MozillaBall, pressione o ícone por alguns segundos.

Linux Magazine #96 | Novembro de 2012

(marionette_venv)$ python Python 2.7.2 (default, Aug 19

61


TUTORIAL | FirefoxOS

2011, 20:41:43) [GCC] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from marionette import Marionette >>> marionette = Marionette('localhost', 2828) >>> marionette.start_session() u'5-b2g'

Em seguida podemos executar diversos comandos para testar o framework de telefonia, SMS, bateria, GPS e outros. >>> marionette.execute_script ("return navigator.mozTelephony;") {u'oncallschanged': None, u'calls': [], u'muted': False, u'onincoming': None, u'speakerEnabled': False, u'active': None} >>> marionette.execute_script ("return navigator.battery;") {u'onlevelchange': None, u'level': 0.5, u'dischargingTime': None, u'onchargingchange': None, u'ondischargingtimechange': None, u'onchargingtimechange': None, u'chargingTime': None

>>> marionette.execute_script ("return navigator.battery. level;") 0.5 >>> marionette.execute_ script("return navigator. geolocation;") {} >>> marionette.execute_ script("return navigator.mozSms;") {u'onreceived': None, u'ondelivered': None, u'onsent': None}

Para finalizar a seção do Marionete, utilize a função quit() seguida do comando deactivate. >>> quit() $ deactivate

Como executar um HelloWord Para desenvolver um programa para o FirefoxOS, basta obter sólidos conhecimentos sobre HTML5 e CSS JavaScript (ou seja, Internet). Então não pretendo escrever como utilizar o HTML5 neste texto, partiremos

O autor Alessandro de Oliveira Faria (Cabelo) é sócio-proprietário da NETi TECNOLOGIA, fundada em Junho de 1996 (http://www.netitec.com.br) e especializada em desenvolvimento de software e soluções biométricas. Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986. Leva o Linux a sério desde 1998 com desenvolvimento de soluções open-source, é membro colaborador da comunidade Viva O Linux e mantenedor da biblioteca open-source de vídeo captura, entre outros projetos.

Mais informações [1] Potencial do B2G http://reviews.cnet.com/8301-13970_7-57385616-78/ telefonica-mozillaphone-is-ten-times-cheaper-than-an-iphone/ [2] Aplicativo Mozilla Ball: https://github.com/mozilla/ openwebapps/tree/develop/examples/mozillaball

Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/7783

62

direto para a ação. Pegaremos como exemplo o aplicativo MozillaBall, que tem como finalidade exibir uma bola “ricocheteando” na tela [2]. Primeiramente, faça o download do aplicativo e separe o projeto em uma pasta visível ao seu Apache: # cp -r /home/cabelo/mozillaopenwebapps-0c6856f/examples/ mozillaball /srv/www/htdocs/

Agora criaremos o arquivo install.html, que será responsável pela instalação do aplicativo em nosso device virtual. O segredo desta operação está no arquivo com estrutura JSON com o nome manifest.webapp que apresenta as informações necessárias para o FirefoxOS efetuar a instalação com sucesso. <html> <head> <title></title> <meta content=""> <style></style> </head> <script> var manifest_url = "http:// MINHA-MAQUINA/mozillaball/ manifest.webapp"; </script> <body> <a onclick="navigator.mozApps. install(manifest_url); return false;" href="#">Install</a> </body> </html>

Agora entre no emulador, execute o Firefox e teremos a nossa primeira página de instalação de aplicativos. Se tudo estiver funcionando corretamente, clique no link Install e receberá uma mensagem de aviso referente à instalação do aplicativo MozillaBall (figura 3). Então clique no botão YES e o ícone do aplicativo aparecerá na tela. Agora basta clicar no ícone e o programa entrará em execução. Pronto! Para removê-lo, basta pressionar o ícone por alguns segundos e um “X” aparecerá sobre o aplicativo (figura 4). ■

www.linuxmagazine.com.br


ANÁLISE | Red Hat para desktops virtuais

Red Hat para desktops virtuais

ANÁLISE

Bem temperado A Red Hat confere ânimo ao desempenho de aplicativos multimídia em desktops remotos com o SPICE, protocolo simples para ambientes de computação independentes. por Udo Seidel

O

Linux oferece muitos protocolos e implementações que permitem o acesso remoto às interfaces gráficas de outros computadores. O recurso de rede do X Window, por exemplo, é fabuloso e transforma cada máquina Linux ou Unix em um potencial terminal de servidor. Ele costumava ser o bastante em solução de desktop remoto para transferência de interface gráfica através da rede, mas os usuários e administradores de hoje têm necessidades muito mais sofisticadas. Cenários modernos exigem o acesso ao hardware, e todas as transferências de dados entre o servidor e o cliente devem ser seguras. Cada vez mais, usuários de celulares desejam interromper sessões para retomá-las posteriormente em um computador ou outro dispositivo. Protocolos e aplicativos, como o protocolo de desktop remoto da Microsoft (RDP, Remote Desktop

68

Protocol) ou o NoMachine, da NX, dominam todos estes desafios sem problemas; no entanto, quando se trata de multimídia, eles estão muito aquém do desempenho de um desktop instalado localmente.

Hardware delicado Feliz é aquele cujas placas de som, impressora ou unidade Flash USB locais funcionam corretamente em rede. No entanto, quando se trata de 3D, efeitos transparentes cativantes, ou reprodução de vídeos HD sem solavancos, o trigo é separado do joio. Apenas dois produtos prometem bom resultado: A Citrix está apostando em seu produto comercial HDX (High-Definition User Experience) [1], e a Red Hat aposta no protocolo, servidor e cliente SPICE [2]. O SPICE (protocolo simples para ambientes de computação independentes) promete ao usuário da nuvem acessar diretamente os

componentes de hardware instalados no servidor, bem como um transparente “repasse” de desempenho para o cliente.

Era uma vez De acordo com o site do projeto, o SPICE “...tem como objetivo fornecer uma solução completa em código aberto para a interação com dispositivos de desktop virtualizados”. O SPICE foi desenvolvido pela Qumranet e, como tantos softwares desenvolvidos em Israel, não era inicialmente um produto de código aberto. A Qumranet causou polêmica na comunidade Linux com o desenvolvimento do KVM. O trabalho anterior com virtualização KVM obrigou a empresa a enfrentar problemas como a transmissão de vídeo de elevado desempenho e encaminhamento de USB e, em 2007, publicou a primeira versão do SPICE. A Red Hat assumiu a Qumranet em 2008 e prescreveu a estratégia

www.linuxmagazine.com.br


Red Hat para desktops virtuais | ANÁLISE

de código aberto que continua até hoje. Por sua vez, o protocolo SPICE é distribuído sob a licença BSD, e a maior parte da implementação está sob a GPL. Desde 2010, o projeto SPICE é um membro do projeto Freedesktop. org [3]. Até poucos anos atrás, os usuários só podiam usar o protocolo de acesso para convidados virtuais, mas um aplicativo para o servidor X ( Xspice [4]) foi disponibilizado em 2010.

Tijolo por tijolo O SPICE inclui uma miscelânea de componentes que se enquadram em quatro categorias: ➧ Protocolo ➧ Servidor ➧ Cliente ➧ Componentes mediadores Dependendo da tarefa, vários intermediários entram em uso – por exemplo, placas gráficas vir- Figura 1 A interação dos vários componentes do SPICE. tuais QXL [5] e interfaces VDI (desktop virtual/interface do dis- faz a comunicação através de dis- do sistema operacional do convipositivo) [6]. A interação entre os positivos de porta VDI ou drivers dado estão envolvidos. O protocolo SPICE rege a comuvários componentes, com um foco com o servidor SPICE. nos convidados virtuais, é mostrada A comunicação entre o servi- nicação entre o servidor e o cliente. na figura 1. O aplicativo primeiro se dor e o cliente SPICE é dividida Ele define os tipos de mensagens comunica com o vídeo da máqui- em canais que trabalham em pa- para acessar, controlar e receber na local – por exemplo, o servidor ralelo, cada um responsável por a entrada de dispositivos remotos. X. Este envia a solicitação para o uma classe específica de dados. O Não importa se o dispositivo reside dispositivo QXL com a ajuda do canal principal é uma espécie de localmente no servidor SPICE ou driver. A partir daí, o servidor SPI- instância de gerenciamento que no cliente SPICE. Os canais mosCE pega o pedido, processa e envia cria, configura, controla e fecha trados na tabela 1 fazem parte das para o cliente SPICE. Se os agen- os outros canais. A tabela 1 mostra especificações de protocolo SPICE. tes SPICE estiverem envolvidos, os canais do SPICE, sua utilização O ambiente SPICE inclui um o sistema operacional convidado pretendida, e quais componentes mecanismo de autenticação com Canal

Responsável por

Dispositivo do SO Convidado Aplicativo do SO Convidado

Principal

Gestão dos outros canais

Virtio serial

VDI Agent

Vídeo

Comandos gráficos, imagens e vídeo

Dispositivos QXL

Drivers QXL

Entradas

Entradas de teclado e mouse

Teclado, mouse, tablet

Drivers Padrão do SO

Cursor

(Mouse) posição e forma do ponteiro

Dispositivos QXL

Drivers QXL

Reprodução

Processamento de áudio do servidor para o cliente

Placa de som

Drivers Padrão do SO

Gravação

Processamento de áudio do servidor para o cliente

Placa de som

Drivers Padrão do SO

Tabela 1 Canais de comunicação do SPICE.

Linux Magazine #96 | Novembro de 2012

69


ANÁLISE | Red Hat para desktops virtuais

base em ingressos no formato X.509 com uma chave RSA de 1024 bits. As implementações atuais do SPICE também suportam a camada de segurança e autenticação simples (da sigla SASL, de Simple Authentication and Security Layer) para acesso seguro. As mensagens definidas pelo protocolo ou são de natureza geral, específicas para o servidor ou cliente, ou válidas para um determinado canal. Mais detalhes são encontrados nas especificações do protocolo no site do projeto. O SPICE utiliza a segurança da camada de transporte (TLS, Transport Layer Security, RFC 2246) para criptografia de dados e, consequentemente, o servidor precisa de seu próprio certificado. Cada certificado X.509 (RFC 5280) deve ser assinado por uma CA (Unidade Certificadora) raiz. Para o servidor SPICE poder verificar esta assinatura, os usuários devem especificar seu caminho na inicialização – tanto no servidor como no cliente.

Na prática Para implementar o SPICE, o melhor é começar com o cliente. O cliente spice-gtk [7] já vem integrado com o virt-viewer. O usuário só precisa mudar o tipo de visualização na caixa de diálogo de preferências do virt-manager de VNC para SPICE. Os desenvolvedores implementaram o cliente spice-gtk como bibliotecas nas quais o virt-viewer está vinculado. Pelo fato de o virt-manager ser programado em Python, ele usa um módulo correspondente para controlar o cliente spice-gtk. O spicy e o spicec (figura 2) são verdadeiros clientes independentes. Como com um cliente VNC, o usuário especifica os detalhes da conexão com o servidor SPICE na inicialização. No entanto, o cliente SPICE HTML5 [8], ainda

70

Figura 2 Os programas clientes spicy (esquerda) e spicec (direita) são semelhantes aos clientes VNC comuns.

é muito novo. Além do HTML5, ele também requer JavaScript e um proxy WebSockets [9]; os desenvolvedores prometem tornar os desktops remotos disponíveis para qualquer navegador em algum momento no futuro. O servidor SPICE também é implementado como uma biblioteca. Desde 2010, o QEMU/KVM é vinculado ao libspice-server.so e pode portanto fornecer o recurso do SPICE. Embora o VNC ainda seja o padrão para acessar a interface gráfica de um convidado, a mudança para o SPICE é bem simples. Porém, se quiser tirar o máximo de seus recursos, o usuário precisará usar uma placa de vídeo diferente e trocar para os drivers QXL. Para os amantes da linha de comando, isto pode ser feito com a opção -vga qxl do KVM. No entanto, o ajuste correspondente no virt-manager está a apenas alguns cliques de distância no menu hardware.

Temperos para o X11 O driver SPICE para o servidor X vem com um script chamado Xspice, escrito em Python. No entanto, no momento da publicação deste artigo, o script na melhor das hipóteses só pode ser considerado experimental: o desempenho da rede é pior do que com o VNC, e

a sincronização da posição do cursor tem erros. A implementação do servidor SPICE no QEMU/KVM é muito mais avançada e atualmente a mais utilizável. Ela constitui a base para as descrições e testes a seguir. O encaminhamento de vídeo e a segurança através de SSL/TLS não são características realmente notá-

Listagem 1: ich9-ehciuhci.cfg 01 # cat /etc/qemu/ ich9-ehci-uhci.cfg 02 [device "ehci"] 03 driver = "ich9-usb-ehci1" 04 addr = "1d.7" 05 multifunction = "on" 06 07 [device "uhci-1"] 08 driver = "ich9-usb-uhci1" 09 addr = "1d.0" 10 multifunction = "on" 11 masterbus = "ehci.0" 12 firstport = "0" 13 14 [device "uhci-2"] 15 driver = "ich9-usb-uhci2" 16 addr = "1d.1" 17 multifunction = "on" 18 masterbus = "ehci.0" 19 firstport = "2" 20 21 [device "uhci-3"] 22 driver = "ich9-usb-uhci3" 23 addr = "1d.2" 24 multifunction = "on" 25 masterbus = "ehci.0" 26 firstport = "4" 27 # 28 #

www.linuxmagazine.com.br


Red Hat para desktops virtuais | ANÁLISE

veis, pois os ancestrais de desktops remotos, como o X e o VNC, já podiam fazer isso. Outros recursos, no entanto, tornam o SPICE realmente interessante. O primeiro seria o seu suporte a áudio. Embora o QEMU (em conjunto com o VNC) já tivesse um complemento que permitia o encaminhamento de som, infelizmente quase nenhum dos clientes VNC suporta isso. O SPICE, por outro lado, já é bem preparado para esta tarefa e inclui uma implementação que funciona para servidor e cliente. Com uma pequena preparação, o usuário pode reproduzir um arquivo de áudio no KVM convidado e ouvi-lo no cliente SPICE. Para que isso aconteça, os recursos correspondentes devem ser primeiro ativadas no servidor QEMU/KVM. O comando qemu -audio-help revela uma grande variedade de opções de configuração mas, no caso mais simples, é suficiente para configurar a variável QEMU_AUDIO_DRV para o backend de áudio desejado (tabela 2). No entanto, isto não é o suficiente, pois o cliente deve possuir uma placa de som virtual também. Os modelos AC97 e ICH6 provaram ser eficientes, mas no teste para este artigo, uma Creative Soundblaster16 e uma ENSONIQ AudioPCI ES1370 emuladas também funcionaram. No lado cliente do SPICE, não importa se usamos o virt-viewer, virt-manager, spicec ou spicy – nos

Figura 3 O spicy permite que o usuário escolha o dispositivo USB a ser encaminhado.

testes, todos reproduziram o som sem problemas.

Repasse de dispositivos USB Outro deleite picante do SPICE é o redirecionamento de USB, que permite ao usuário acessar um dispositivo USB local no convidado virtual (no servidor). Assim como acontece com o canal de áudio, tanto o servidor como o cliente dão o suporte necessário. No teste para este artigo, isso só foi verdade no caso do spicy. O QEMU/KVM suporta USB 2.0 através de um con-

trolador EHCI virtual (Enhanced Host Controller Interface). Para que isto funcione, o usuário deve primeiro dar ao QEMU uma configuração especial (listagem 1) e induzir que ela seja aplicada quando a instância virtual iniciar (listagem 2). Com o argumento -readconfig /etc/qemu/ich9-ehci-uhci.cfg, o administrador liga o suporte para USB 2.0. As portas USB associadas são definidas pelas opções -chardev e -device do QEMU. Isso prepara o terreno necessário para o servidor SPICE, e o usuário pode iniciar o convidado virtual. O cliente spicy do SPICE for-

Backend de audio no QEMU

Valor QEMU_AUDIO_DRV

Site do Projeto

PulseAudio

pa

http://www.pulseaudio.org/

SDL

sdl

http://www.libsdl.org/

ALSA

alsa

http://www.alsa-project.org/

OSS

oss

http://www.opensound.com/

Tabela 2 Configuração de som.

Listagem 2: Iniciando o Qemu/KVM 01 qe mu -readconfig /etc/qemu/ich9-ehci-uhci.cfg -chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=0

Linux Magazine #96 | Novembro de 2012

71


ANÁLISE | Red Hat para desktops virtuais

nece agora um menu para selecionar os dispositivos a serem encaminhados (figura 3). Posteriormente, o dispositivo fica disponível no convidado como um hardware local estaria. Se a rede tiver um servidor USB sobre IP [10], este também estará acessível para o usuário. Nesse caso, o dispositivo USB não está integrado ao servidor através do SPICE, mas por encapsulamento USB em TCP. O melhor é apenas colocar todos os parâmetros (muitas vezes numerosos) do QEMU em um único arquivo de configuração XML no convidado – com a instrução qemu:commandline.

Tempo para poupar É um verdadeiro desafio obter transmissão de alto desempenho de interfaces gráficas modernas com toda sua riqueza de detalhes e grandes fluxos de vídeo via bandas mais estreitas. Como o NX, o SPICE baseia-se em um cache local e procura evitar qualquer tipo de tráfego desnecessário. Ele armazena imagens, paletas de cores e informações de cursor no cache. Mas quando não pode se basear em transferência de uma imagem, o SPICE coloca vários métodos de compressão para funcionar: o QUIC (baseado no SFALIC, Simple Fast and Adaptive Lossless ImageCompression) [11], o LZ (Lempel-Ziv), ou o GLZ (generalized Lempel-Ziv) [12]. Para transmissão de vídeo, o M-JPEG

O autor Udo Seidel já trabalhou como instrutor Linux, administrador de sistemas e engenheiro sênior de soluções. Hoje, ele é chefe da equipe Linux/Unix na empresa alemã Amadeus Data Processing.

Gostou do artigo? o? Queremos ouvir sua opinião. nião. Fale conosco em cartas@linuxmagazine.com.br .com.b Este artigo no nosso o site: site http://lnm.com.br/article/7771 ticle 71

72

(Motion JPEG) é utilizado. É possível configurar tanto o algoritmo de compressão como o reconhecimento de transmissão de vídeo com as opções fornecidas pelo QEMU.

Perspectivas Embora nem tudo funcione, o SPICE parece ter um futuro promissor pela frente. Por um lado, mais e mais clientes estão sendo desenvolvidos – e não apenas para o Windows e o Linux [13], mas também para Mac OS X [14], o Android [15] e o N900. Até mesmo os fabricantes de hardware, como a IGEL, especialista em thin client [16], tem demonstrado interesse. Visitantes da CeBIT experimentaram o estado atual do desenvolvimento do SPICE, notando uma enorme

diferença de desempenho entre os clientes Windows e Linux. Os vídeos em HD foram renderizados aos solavancos no cliente Linux, mas não nas máquinas com Windows. A Red Hat integrou as características que faltam em clientes existentes e está trabalhando em recursos completamente novos. Entre estes novos recursos estão o suporte a gráficos 3D e acesso a diretórios locais da máquina do cliente. As funções disponíveis na área de virtualização já são bastante úteis e, particularmente em convidados baseados em Linux, vale muito à pena a mudança para o SPICE. Mas o Xspice deve ser significativamente melhorado antes de o SPICE tornar-se uma alternativa real para o VNC, RDP e NX. ■

Mais informações [1] Citrix HDX: http://hdx.citrix.com/ [2] Red Hat SPICE: http://spice-space.org/ [3] Projeto Freedesktop.org: http://www.freedesktop.org/ [4] SPICE para X11: http://spice-space.org/page/Features/XSpice/ [5] Red Hat, “Spice para Iniciantes,” Capítulo 2.6: http:// spice-space.org/wiki/images/1/17/Spice_for_newbies.odt [6] VDI (Virtual Desktop/Device Interface): http:// spice-space.org/vdi.html [7] Cliente GTK para SPICE: http://cgit. freedesktop.org/spice/spice-gtk/ [8] Cliente HTML5: http://cgit.freedesktop.org/spice/spice-html5/ [9] WebSockets: https://developer.mozilla.org/en-US/docs/WebSockets/ [10] USB sobre IP: http://usbip.sourceforge.net [11] Algoritmo SFALIC: http://sun.aei.polsl. pl/~rstaros/sfalic/index.html [12] Algoritmo LZ: http://en.wikipedia.org/wiki/LZ78 [13] Clientes SPICE: http://spice-space.org/download.html [14] SPICE para Apple: http://cfergeau.blogspot. com.br/2011/06/spicy-apples.html [15] SPICE para Android: http://code.google. com/p/spice-client-android/ [16] Clientes VDI: http://www.igel.com/us/company/pressmedia/press-releases/single-view/article/igel-addsvdi-clientsfor-open-source-spice-and-vmwareviewTM45-to-its-linux-thin-clientrange.html

www.linuxmagazine.com.br


PHP em linha de comando | PROGRAMAÇÃO

PHP em linha de comando

PROGRAMAÇÃO

Momento terminal PHP em linha de comando está no pedaço há mais de 10 anos, o que torna a linguagem e suas completas bibliotecas eminentemente adequadas para a caixa de ferramentas de qualquer administrador que gerencia servidores online. por Tim Schürmann

A

linguagem PHP está quase inseparavelmente associada a aplicativos online, também pode processar tarefas recorrentes, complexas ou simplesmente chatas na linha de comando. Um componente que tornou isso possível foi introduzido na versão 4.3, que remonta ao ano de 2002. O interpretador de linha de comando [1] fica escondido em um pacote à parte na maioria das distribuições. Normalmente, usa o mesmo nome do interpretador – por exemplo, no Debian 6 (Squeeze) e no Ubuntu, é php5-cli – mas, para o openSUSE 12.1, só precisamos do pacote php5 completo.

Diga de uma vez! A interface em linha de comando aceitará qualquer script PHP normal. Como poderíamos esperar, a saída não termina em um navegador, mas é enviada para a saída-padrão. Um simples programa “Olá Mundo” se parece com: #!/usr/bin/php <?php echo "Olá mundo\n"; exit(0); ?>

Linux Magazine #96 | Novembro de 2012

A primeira linha (shebang, que contém o #!) permite aos usuários marcarem o arquivo como executável e chamá-lo como fariam com um script Shell normal. No entanto, também é possível iniciá-lo ao digitar: php olamundo.php

O \n junto ao Olá mundo insere uma quebra de linha na saída, e o exit(0) gera um código de saída correspondente. Como primeiro passo, é necessário certificar-se de que realmente é chamada a versão em linha de comando do PHP, pois o código CGI-PHP, por exemplo, executa scripts em um servidor online. Para maiores detalhes, consulte o quadro 1. Antes de iniciar um script pela primeira vez, é possível validá-lo, usando: php -l Script.php

que identificará a digitação e erros de sintaxe. Claro, podemos enviar comandos PHP para o interpretador através da entrada-padrão, o que significa que é possível conectar o script a outros programas com pipes:

echo "<?php echo 'Olá'; ?>" | php> cumprimento.txt

No contexto da linha de comando orientado para texto, os administradores frequentemente operam malabarismos com strings, e concatenar várias sequências é algo bastante simples de se fazer com o PHP: $arquivo = "ferias"; $sufixo = "png"; echo "/home/tim/" . $arquivo . ".$sufixo \n";

O PHP sempre usa um sinal de dólar para designar variáveis – programadores Bash estarão familiarizados com essa abordagem. Os pontos fora das aspas concatenam as strings; O PHP substitui automaticamente as variáveis dentro das aspas com seu conteúdo.

Emprestado do C Para operações mais complexas, o PHP possui funções que se assemelham às suas contrapartes na linguagem de programação C. Por exemplo, o strlen($name) retorna o comprimento da string em $name, ao passo que printf() retorna uma string com a ajuda dos marcadores também usados em C:

73


PROGRAMAÇÃO | PHP em linha de comando

Figura 1 O nome do arquivo também pode ser avaliado como argumento. $conta=5; printf("Existem %d mensagens \n",$conta);

O PHP oferece muitas maneiras de dissecar strings. Por exemplo, o script explode() divide uma string de acordo com um delimitador definido – um espaço, neste caso – e coloca as partes em um array: <?php $texto = "Olá Senhor Miller"; $parte = explode(" ", $texto); foreach ($dividido as $numero => $parte) { echo "$parte\n"; } ?>\ echo $dividido[0];

Este script disseca o texto Olá Senhor Miller nos espaços e salva as partes individuais em um array. O loop foreach() itera então contra o array e exibe o conteúdo linha por linha.

Os arrays no PHP são o que as outras linguagens chamam de dicionários ou tabelas de hash. Estas estruturas de dados armazenam um valor sob um índice; neste exemplo, o índice 0 refere-se à primeira palavra. Os programadores também podem procurar por sequências usando expressões regulares em um estilo que lembra o Perl: preg_condiz ("/Senhor/", "Olá Senhor Miller", $condiz); echo $condiz[0];

A função preg_match() armazena todos os condizentes em $condiz; neste exemplo, $condiz[0] contém a string Senhor.

Argumentos sólidos É aconselhável ter cautela ao alimentar scripts PHP projetados para a Internet com a interface em linha

de comando; ele simplesmente exibe qualquer texto do script que esteja fora do <?... php?>. Na pior das hipóteses, veremos apenas uma parte muito longa de HTML aparecendo na tela. Além disso, o PHP-CLI não tem os arrays $_GET, $_ POST e $_COOKIE, que é onde os dados devolvidos pelo navegador normalmente acabam. Ao invés disso, todos os argumentos entregues na linha de comando acabam no array $_SERVER['argv'], que indica quantos argumentos foram passados. A listagem 1 mostra um exemplo de todos os argumentos passados. Note a partir dos resultados da figura 1, o primeiro argumento é sempre o nome do arquivo de script que foi executado. Se usarmos o php para chamar um script e também quisermos passar argumentos que comecem com um traço (-), como em: php exemplo.php -h

a interface interpretará o argumento e, neste caso, mostrará seu próprio texto de ajuda. O separador de argumentos (--) ajudará aqui: php exemplo.php -- -h

Este problema não ocorre se adicionarmos um shebang (linha com #!/usr/bin/php) no script – como em “Olá Mundo” – e em seguida tornarmos o script executável e o invocarmos diretamente.

Abridor de latas Como muitas outras linguagens de programação, o PHP usa a função fopen() para abrir e retornar um manipulador de arquivo. Todas as outras rotinas de entrada e saída precisam então deste ponteiro para o arquivo. Uma dessas rotinas é fgets(), que lê uma linha de texto do arquivo: $manipular = fopen("teste.txt", "r"); $linha = trim(fgets($manipular)); fclose($manipular);

Figura 2 O posix_getpwuid() retorna informações sobre a conta de usuário utilizada para executar o script.

74

A função trim() remove todos os espaços em branco (ou seja, espa-

www.linuxmagazine.com.br


PHP em linha de comando | PROGRAMAÇÃO

ços e tabulações) no início e final de cada linha, e fclose() fecha o arquivo. Uma série de constantes predefinidas existe para facilitar a vida dos desenvolvedores. Ao invés de primeiro abrir a entrada-padrão com o comando:

e depois lendo uma linha, os programadores PHP podem usar a entrada STDIN diretamente: $linha = fgets(STDIN);

A STDOUT e a STDERR, saída-padrão e erro-padrão, seguem o exemplo. Analisar um arquivo linha por linha também é brincadeira de criança

com o PHP (listagem 2). Na linha 4, file() abre um arquivo e retorna todas as suas linhas como um array. Um loop foreach itera contra o array e exibe cada linha na tela.

Aplicação prática

Aliás, é possível usar este teste para verificar se o script não executa em um servidor online por engano. Outra maneira de determinarmos se estamos chamando a versão em linha de comando é emitir o comando php -v. A saída deve conter uma observação para o efeito que estamos usando (CLI).

O PHP tem uma função correspondente que permite analisar um arquivo CSV: fgetcsv(); a listagem 3 mostra o código de exemplo. Na linha 2, fopen() abre o arquivo lista. csv, então fgetcsv() pega a primeira linha do arquivo, extrai os campos de dados individualmente, e logo os coloca no array $dado. O loop foreach() subsequente gera todos os elementos do array na ordem correta. O loop while() repete este procedimento até que o fgetcvs() atinja o fim do arquivo CSV e já não possa retornar nenhuma linha. É difícil imaginar uma forma mais conveniente ou um caminho mais curto de se fazer isso. O terceiro parâmetro em fgetcsv() especifica o delimitador; na listagem 3, as entradas estão separadas por vírgulas. Se estas vírgulas forem substituídas por dois pontos, poderemos facilmente analisar o arquivo de sistema /etc/passwd:

Listagem 1: Avaliação de argumentos

$arquivo = fopen("/etc/passwd", "r"); $dado = fgetcsv($file, 0, ":");

fopen("php://stdin", "r");

Quadro 1: PHP como um CLI e um CGI Interpretadores PHP estão disponíveis não apenas para a linha de comando, mas também para a interface CGI, que utiliza servidores online para iniciar programas externos. A versão em linha de comando difere da versão CGI principalmente em termos de saída. Por exemplo, o interpretador CGI sempre retorna um cabeçalho HTTP; a saída do script “Olá Mundo” seria, então, parecida com esta: X-Powered-By: PHP/5.3.6-13ubuntu3.6 Content-type: text/html Olá Mundo! Obviamente, não precisamos deste cabeçalho na linha de comando. Um simples condicional if testa o script para ver se está sendo executado na variante de linha de comando, conforme desejado: if (PHP_SAPI === 'cli') { [...] }

01 02 03 04 05 06 07 08 09 10

<?php echo "Número de argumentos: " . $_SERVER['argc'] . "\n"; $argumentos = $_SERVER['argv']; foreach ($argumentos as $nr => $argumento) { echo "argumentos[$nr] = $argumento\n"; } exit(0); ?>

Listagem 2: Análise de um arquivo de texto 01 02 03 04 05 06 07 08 09 10 11 12

<?php $nomedoarquivo ="teste.txt"; $linhas = file($nomedoarquivo); foreach ( $linhas as $numero => $linha ) { $linha = trim($linha); echo "$numero : $linha\n"; } exit(0); ?>

Linux Magazine #96 | Novembro de 2012

A contraparte ao fgetcsv() é o fputcsv(), que armazena quase automaticamente uma linha correspondente em um arquivo CSV. Para que isso aconteça, ele simplesmente precisa passar o caractere separador desejado e um array contendo todos os dados para a linha: $registro = array("tims", "Tim","Schürmann"); $arquivo = fopen("teste.csv", "w"); fputcsv($arquivo, $registro, ",");

Na linha de comando, inúmeras funções POSIX são muito úteis. Por exemplo, posix_geteuid() retorna a ID do usuário sob a qual o script está sendo executado. Podemos então fornecer esta ID para o posix_getpwuid() (listagem 4)

75


PROGRAMAÇÃO | PHP em linha de comando

para exibir um array de informações para a conta do usuário (figura 2). A função posix_access() (listagem 5) descobre as permissões de um arquivo (figura 3).

de um arquivo – este exemplo usa a abordagem de hash MD5: echo hash_file("md5", "teste.txt");

As funções que introduzi neste artigo são apenas um pequeno trecho a partir do enorme conjunto de recursos que satisfarão até os desejos

Manipulação de arquivos O PHP tem uma função correspondente para mais ou menos qualquer operação de sistema de arquivos. Por exemplo, chmod() muda as permissões de arquivos, ls_dir() certifica-se de que o nome passado é um diretório, copy() copia um arquivo, e mkdir() cria um novo diretório:

Figura 3 O script da listagem 5 executado como uma conta de usuário normal e como root.

mkdir("/home/tim/novo", 0700);

O segundo argumento define as permissões. Neste exemplo, somente o usuário que criou o script tem permissão para acessar um diretório. A função scandir() também fornece uma maneira fácil de manipular os arquivos em um diretório: <?php $arquivos = scandir('Imagens'); foreach ($arquivos as $arquivo) { echo "$arquivo\n"; }; ?>

Esse código usa o scandir() para exibir todos os arquivos no subdiretório Imagens. A figura 4 mostra a função getcwd(), que avalia o diretório de trabalho atual. A função exec executa programas externos, por exemplo. Os administradores podem usar praticamente qualquer extensão PHP na linha de comando, o que pode ser um recurso muito útil. Por exemplo, é possível acessar um arquivo Gzip que foi criado com as correspondentes funções Zlib e direcionar seu conteúdo para o console: readgzfile("teste.txt.gz");

Outras funções semelhantes abrem e manipulam arquivos ZIP e RAR. As funções de criptografia dão aos programadores uma maneira rápida de gerar uma impressão digital única

76

Listagem 3: Análise de um arquivo CSV 01 02 03 04 05 06 07 08 09 10 11 12 13 14

<?php $arquivo = fopen("lista.csv", "r"); while (($dado = fgetcsv($arquivo, 0, ",")) !== FALSE) { echo "Conteúdo da linha:\n"; foreach ( $dado as $nr => $entrada ) { $entrada = trim($entrada); echo "$entrada\n"; } } fclose($arquivo); exit(0); ?>

Listagem 4: Propriedades do processo 01 02 03 04 05 06 07 08

<?php $uid = posix_geteuid(); $usuario = posix_getpwuid($uid); echo "Usuário do processo: $usuario[name] \n"; echo "ID do usuário: $usuario[uid] \n"; echo "ID do grupo: $usuario[gid] \n"; echo "Pasta pessoal: $userario[dir] \n"; ?>

Listagem 5: Permissões de arquivo 01 02 03 04 05 06 07 08 09 10 11 12 13

<?php $existir = posix_access("/etc/passwd", POSIX_F_OK); if($existir) echo "o arquivo existe\n"; $ler = posix_access("/etc/passwd", POSIX_R_OK); if($ler) echo "o arquivo pode ser lido\n"; $escrever = posix_access("/etc/passwd", POSIX_W_OK); if($escrever) echo "o arquivo pode ser escrito\n"; $executar = posix_access("/etc/passwd", POSIX_X_OK); if($executar) echo "o arquivo é executável\n"; ?>

www.linuxmagazine.com.br


PHP em linha de comando | PROGRAMAÇÃO

mais exóticos [2]. Por exemplo, ainda há a opção de se criar uma pequena interface para o usuário baseada em texto com o uso de funções Ncurses.

Conclusão Embora o PHP possa não ser a linguagem de programação que imediatamente vem à mente quando buscamos uma linguagem de linha

de comando, verificamos que este executa esta tarefa quase que perfeitamente. Graças a uma enorme biblioteca de funções, até mesmo a tarefa mais exigente irá normalmente se resumir a um par de linhas bem definidas, e um código fácil de ler. A ferramenta em linha de comando também oferece um modo interativo que podemos habilitar di-

gitando php -a. Este modo também suporta o serviço de autocompletar: pressionar a tecla [Tab] automaticamente completa os comandos que começamos a digitar. Caso tenhamos uma máquina com o PHP instalado, podemos facilmente dar um descanso ao Bash e nos voltarmos para o PHP-CLI como alternativa. ■

Mais informações [1] PHP-CLI: http://php. net/manual/en/features. commandline.php [2] Referência de funções PHP: http://php.net/ manual/en/funcref.php

Gostou do artigo? o? Queremos ouvir sua opinião. nião. Fale conosco em cartas@linuxmagazine.com.br com.b

Figura 4 O script getcwd() mostra que o diretório atual é aquele em que o usuário invocou o interpretador de linha de comando.

Tem novidade na Coleção Academy!

Este artigo no nosso so site: sit http://lnm.com.br/article/7422 rtic 422

Instalação e congifuração de servidores VoIP com Asterisk. Configuração de ramais, extensões, secretária eletrônica, monitoramento e espionagem de chamadas, planos de discagem, URA e muitos outros aspectos que abordam o uso de centrais telefônicas IP PBX. Disponível no site www.LinuxMagazine.com.br

Linux Magazine #96 | Novembro de 2012

77


PREVIEW

Linux Magazine #97 Ultrabooks e Smartphones Cada vez mais leves, menores e mais compactos, os atuais ultrabooks e smartphones não perdem nada se comparados aos mais potentes e robustos notebooks (e porque não desktops) disponíveis no mercado. Na próxima edição da Linux Magazine você vai conhecer um pouco mais sobre estas poderosas máquinas portáteis, que ganharam a simpatia dos mais exigentes usuários. Seja para games ou trabalho, escolha seu dispositivo e mãos à obra! ■

Admin Magazine #08 Controle de tráfego Melhore o desempenho da sua rede com versões do kernel apropriadas para o controle de tráfego. Comparamos 6 diferentes sistemas de arquivos, saiba qual é o mais adequado para as suas necessidades. Realize backups dos dados de toda a sua rede através 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 também é um dos destaques da próxima edição da Admin Magazine, não perca!

82

www.linuxmagazine.com.br


Lm 96 ce