27 - Desempenho_fev_2007

Page 1

HOMENAGEM NO RIO p.22 Câmara dos Vereadores carioca homenageia a Linux Magazine

AO GOSTO DO CLIENTE p.24 Unisys reconhece a importância corporativa do Linux

CEZAR TAURION p.27 As vantagens do desenvolvimento aberto

Fevereiro 2007

#27 02/07

A REVISTA DO PROFISSIONAL DE TI

DESEMPENHO

ven d a p ro i b i d a 9 771806 942009

# 27

00027 exemplar de

Assinante

R$ 13,90 € 7,50

p.28

MAIOR PRODUTIVIDADE, MENOS PROBLEMAS, MESMO HARDWARE

» Servidores: Os 44 mandamentos p.29 » Benchmarks de vídeo e sistemas p.34 » Programas mais velozes com Intel VTune p.42

GOOGLE WEB TOOLKIT p.75 De Java para Ajax em poucos cliques

MONITORAMENTO GRÁFICO DE REDES p.67 Use o Nagios para assegurar a estabilidade dos serviços

VEJA TAMBÉM NESTA EDIÇÃO: » Curso LPI, Aula 2 p.51 » Otimização de scripts Python p.37 » Hotplug: backups móveis em seu laptop p.61 » Slackware 11: a melhor versão até hoje p.47

http://supertuxbr.blogspot.com

WWW.LINUXMAGAZINE.COM.BR


http://supertuxbr.blogspot.com


Expediente editorial

Centro de Competência em Redes e Segurança: Achim Leitner: aleitner@linuxnewmedia.de Jens-Christoph B.: jbrendel@linuxnewmedia.de Hans-Georg Eßer: hgesser@linuxnewmedia.de Thomas L.: tleichtenstern@linuxnewmedia.de Max Werner: mwerner@linuxnewmedia.de Correspondentes & Colaboradores Achim Leitner, André Vilela, Augusto Campos, Badran Farwati, Carsten Schnober, Cezar Taurion, Charly Kühnast, Jens-Christoph Brendel, Jörg Fritsch, Klaus Knopper,Luciano Siqueira, Marcel Hilzinger, Michael Hebenstreit, Mirko Dölle, Peer Heinlein, Piter Punk, Ralf Hildebrandt, Ramon Wartala, Stefan Schwarzer, Tim Schürmann, Volker Lendecke e Zack Brown. Anúncios: Rafael Peregrino da Silva (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Osmund Schmidt (Alemanha, Áustria e Suíça) anzeigen@linux-magazine.com Brian Osborn (Outros países) ads@linux-magazine.com Assinaturas: www.linuxnewmedia.com.br assinaturas@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.ca – Canadá www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linux-magazin.ro – Romênia 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 conseqüê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, são 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. Av. Fagundes Filho, 134 Conj. 53 – Saúde 04304-010 – São Paulo – SP – Brasil Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Direitos Autorais e Marcas Registradas © 2004 - 2006: Linux New Media do Brasil Editora Ltda. Distribuição: Distmag Impressão e Acabamento: Parma ISSN 1806-9428 Impresso no Brasil

INSTITUTO VERIFICADOR DE CIRCULAÇÃO

em processo de filiação

Eficiência

EDITORIAL

Diretor Geral Rafael Peregrino da Silva peregrino@linuxmagazine.com.br Coordenador Editorial e Diretor de Arte Luciano Hagge Dias lhagge@linuxmagazine.com.br Editores Tadeu Carmona tcarmona@linuxmagazine.com.br Pablo Hess phess@linuxmagazine.com.br Tradução e Revisão Livea Marchiori lmarchiori@linuxnewmedia.com.br Assistente de Arte Renan Herrera rherrera@linuxmagazine.com.br Centros de Competência Centro de Competência em Software: Oliver Frommel: ofrommel@linuxnewmedia.de Kristian Kißling: kkissling@linuxnewmedia.de Peter Kreussel: pkreussel@linuxnewmedia.de Marcel Hilzinger: hilzinger@linuxnewmedia.de Andrea Müller: amueller@linuxnewmedia.de

Prezados leitores da Linux Magazine,

Produzir mais gastando menos. Esse é um dos objetivos comuns a qualquer empresa, e também a muitas pessoas. Na realidade, ser eficiente é uma exigência natural; seres vivos devem ser capazes de maximizar suas atividades ingerindo um mínimo de alimento. Na computação corporativa não poderia ser diferente. É extremamente desejável, para as empresas, que seu gasto com hardware seja minimizado, sem afetar o desempenho das máquinas. A virtualização, examinada em profundidade na edição 24 da Linux Magazine, contribui de forma marcante para o uso eficiente dos recursos computacionais no ambiente corporativo. A possibilidade de se utilizar o mesmo hardware, que antes via raros picos de utilização, para abrigar diversos servidores é altamente atraente. No outro lado da moeda encontra-se a otimização de processos. Se um programa puder realizar a mesma tarefa de duas formas diferentes, uma delas consumindo um menor tempo, memória, enfim, menos recursos, então é obrigatório que essa solução seja preferida em lugar das alternativas mais “caras”. Da mesma forma, um servidor que efetue buscas semelhantes de forma repetitiva se beneficia fortemente do uso de um cache para essa tarefa. Aplicações configuradas de forma otimizada tendem a realizar suas tarefas com menor consumo. Mas as empresas possuem recursos além dos computacionais. O gasto de energia elétrica, por exemplo, também deve sempre ser minimizado. Não é surpreendente ver os últimos lançamentos e campanhas publicitárias dos principais fabricantes de microprocessadores enfatizarem a produtividade por watt consumido. O emprego corporativo cada vez maior de thin clients, associados a servidores mais poderosos, se justifica pela redução dos custos computacionais e energéticos, e já há diversos relatos de importantes economias desfrutadas por empresas que adotaram esse tipo de arquitetura. A flexibilidade do Software Livre e de Código Aberto transparece também nesse ponto; nenhuma outra tecnologia permite tamanho nível de ajuste nas variáveis, programas e configurações de uma máquina ou sistema. Todavia, todo esse poder é inútil se o administrador não souber utilizá-lo apropriadamente. Nesse ponto, sabemos que infelizmente ainda é raro encontrarmos a humildade esperada nesses profissionais, que dificilmente admitem não saber realizar uma tarefa - afinal, todas as informações estão on-line. Você pode até não acreditar no aquecimento global, ou na sua contribuição individual para esse fenômeno profundamente desagradável, mas decerto sua empresa saberá apreciar as reduções de custo e o aumento de desempenho. Assim como na natureza, somente os mais eficientes sobrevivem à ferrenha competição do mercado.

Pablo Hess Editor P.S.: Seguindo nossa recente mudança de foco e projetos gráfico e editorial, Rafael Peregrino da Silva afasta-se do processo de produção da Linux Magazine, dedicando-se agora ao setor comercial e de relacionamento. Espero substituí-lo à altura nessa nobre tarefa. Boa leitura!

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

3


ÍNDICE

CAPA Economia através da eficiência

28

A otimização de velocidade de softwares para Linux é econômica e ecologicamente correta. Em vez de lançar mão de novos hardwares indiscriminadamente, o melhor é descobrir os travamentos nos condutores do sistema. Os 44 mandamentos do servidor

29

A homepage da empresa está conectada ao Slashdot desde as 11:20h; a nova massa de emails deve sair e o banco de dados tem que retornar os dados solicitados em tempo recorde. Este artigo mostra quais técnicas o servidor pode utilizar para vencer a sobrecarga. O que dizem os números

34

A melhor referência para uma decisão de compra são testes e benchmarks de fontes confiáveis. Quem não acredita em propagandas, mas prefere testar por si próprio e publicar os resultados, acaba caindo em um campo minado de licenças, proibições de teste e trapaças dos fabricantes. Bem no alvo

37

Todos querem programas com os quais se possa trabalhar de forma prática. Softwares não são acelerados por otimizações globais, e sim por pequenas otimizações nos locais certos. Este artigo mostra como acertar o alvo em programas Python.

http://supertuxbr.blogspot.com 4

http://www.linuxmagazine.com.br


Linux Magazine 27 | ÍNDICE

COLUNAS Augusto Campos Charly Kühnast Klaus Knopper Zack Brown

10 12 14 16

TUTORIAL

NOTÍCIAS Segurança ➧ Firefox, Thunderbird e Seamonkey

Melhor com o tempo 47 Na versão mais recente do Slackware, somos presenteados com uma seleção de pacotes ainda maior que a de costume. A grande novidade fica por conta do kernel 2.6, que ainda não é padrão, porém vem em duas versões. O Slackware envelhece mantendo sua saúde e disposição.

18

LPI nível 1: Aula 2 A aula de hoje trata do importantíssimo ambiente de linha de comando, além de sistemas de arquivos e outros assuntos.

51

Conexão pessoal Um conhecimento mais profundo do sistema de hotplug do Linux abre as portas da inovação e automação. Veja como criar uma solução personalizada de backup para laptops.

61

➧ Bind ➧ kdelibs ➧ Mono ➧ OpenSSL ➧ Asterisk ➧ PHP ➧ Qt ➧ ClamAV ➧ Screen Geral ➧ Homenagem na Câmara dos Vereadores do Rio

20

Avaliação postal Se o servidor de email está muito lento, os usuários ficam revoltados. Mas quem quer otimizar o servidor precisa de medições confiáveis da velocidade do MTA. Para produzir a carga necessária e compilar os resultados, contamos com a ajuda do programa de benchmark Postal.

➧ Second Life abre o código ➧ Desenvolvimento de SL na USP ➧ Documentação do Ubuntu em vídeo ➧ Firefox mais seguro e mais usado em 2006

63

Sempre Alerta 67 O crescimento do número de servidores e serviços em uma rede pode levar o administrador à loucura. O Nagios é o software mais conhecido para monitoramento de redes, mas possui uma configuração complexa. Veja como instalá-lo e configurá-lo apropriadamente.

➧ Linux no PS3

CORPORATE Notícias ➧ Motorola adota Linux amplamente

SYSADMIN

22

PROGRAMAÇÃO Árvores coloridas 69 O que os esquilos e o kernel Linux têm em comum? Ambos percorrem árvores para armazenar coisas e depois reencontrá-las. Mas nessa comparação o kernel Linux trabalha melhor – por exemplo ao lidar de maneira bem peculiar com árvores pintadas de duas cores.

➧ Segundo UE, SL é mais econômico ➧ Nokia N800 roda Linux ➧ Red Hat firma parceria com VMware ➧ Economia de 50% com Linux

Ferramentas do Google O Google Web Toolkit permite o desenvolvimento de aplicativos Web complexos completamente em Java, e converte-os automaticamente para AJAX.

➧ Servidores de virtualização da Unisys ➧ Lançado o Java SE 6

75

➧ Mandriva no Classmate PC Entrevista: Unisys Coluna: André Vilela Coluna: Cezar Taurion

24 26 27

ANÁLISE Sob a lupa 42 Os processadores de hoje em dia reúnem diversas informações sobre como executar comandos de máquina; o que permite diversos níveis de customização no hardware: Veja como fazer isso com o VTune.

SERVIÇOS Editorial Emails Linux.local Eventos Índice de anunciantes Preview

03 06 78 80 80 82

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

5


Emails para o editor

✎ Alvorada do Linux?

Tomando conhecimento do sucesso crescente, através da Internet, das versões Linux Kurumin e Ubuntu, no Brasil e no exterior, obtive por download CDs do Kurumin 6.1 e do Ubuntu 6.10. Testando-os, com sucesso, na modalidade Live CD ROM, entusiasmei-me e passei a procurar suporte técnico, em revistas e até com pessoas, para ajuda nas configurações da Internet, as quais não consegui efetuar. A revista Linux Magazine número 25 adquirida decepcionou-me, visto que não cita nada acerca de Kurumin, Ubuntu e até de outras versões antigas que ainda estão sendo usadas nos PCs da Positivo (Mandriva e Conectiva 10). A única utilidade na revista, então, foi a seção Linux.local, na página 78, onde encontrei o telefone de duas empresas, uma delas a Mandriva Conectiva, no Paraná. Contactando-a, fui informado de que apenas estão atendendo o Linux Mandriva, visto que o Conetiva 10 já “morreu”, e ainda não conhecem Kurumin nem Ubuntu! No meu entender, face minha grande experiência, por idade e conhecimento na área de Informática, por ser exAnalista de Sistemas formado pela IBM, onde trabalhei 20 anos, sugiro: 1: Reduzir as inúmeras versões de Linux, para obter uma ou duas que concentrem boa qualidade e abrangência para funcionar com hardwares e softwares atuais. 2: Bom suporte, atualizações e otimização periódica dos drivers para novos hardwares. É melhor concentrar os esforços globais para utilizar o S.O. Linux do que ter inúmeras versões que acabam “morrendo” e decepcionando os usuários que desejam abandonar os sistemas da Microsoft; não adianta ser grátis e complicado de usar! Seria melhor ser cobrado um valor razoável, por um produto eficiente e fácil de usar!

u c.h ww . sx –w ro ne g je nja

Se você tem dúvidas sobre o mundo Linux, críticas ou sugestões que possam ajudar a melhorar a nossa revista, escreva para o seguinte endereço: cartas@linuxmagazine.com.br. Devido ao volume de correspondência, é impossível responder a todas as dúvidas sobre aplicativos, configurações e problemas de hardware que chegam à Redação, mas garantimos que elas são lidas e analisadas. As mais interessantes são publicadas nesta seção.

sa

EMAILS

Permissão de Escrita

Espero um dia ver uma boa “Alvorada” e não “Crepúsculos” para o Linux R. Alves Prezado R. Alves, A Linux Magazine se caracteriza como uma “revista para o profissional de TI”, como diz seu slogan, na capa. De fato, a instalação e configuração de distribuições Linux não é coberta pela publicação, pois isso compreenderia um afastamento de nosso público alvo. Na Linux Magazine, abordamos assuntos pertinentes à administração de sistemas e redes, além de técnicas de programação para os iniciados e tutoriais para resolver questões avançadas do sistema operacional. No entanto, é importante ressaltar que a revista EasyLinux é destinada justamente ao público a que você se refere, ou seja, os usuários iniciantes e os entusiastas não profissionais de Linux. Nela há sempre tutoriais de configuração de seções do sistema muito úteis à maioria dos usuários, até mesmo aos já experientes, às vezes. Quanto ao número de distribuições de Linux, infelizmente a Linux Magazine não pode fazer qualquer coisa para ajudá-lo. O melhor que podemos fazer é explicar que essa diversidade é inerente ao processo de desenvolvimento aberto que caracteriza o Software Livre. Da diversidade surgem novas idéias, que, dependendo de seus méritos, são executadas ou abandonadas. Em relação ao suporte a hardware, o melhor a fazer é utilizar uma distribuição com boa detecção automática, exatamente como as que você experimentou, além de algumas outras. As distribuições voltadas aos usuários inexperientes costumam ser bastante eficientes nessa área. É importante que você veja a multiplicidade de distribuições como um fato positivo: se houvesse apenas uma distribuição, seria impossível que

http://supertuxbr.blogspot.com 6

http://www.linuxmagazine.com.br


SEJA LIBRIX NA RUA, SEJA LIBRIX EM CASA, SEJA LIBRIX NO TRABALHO. Agora, além do Librix (Linux da Itautec), a sua empresa pode contar com o melhor e mais estável pacote de hardware e software do mercado, testado e homologado pela Itautec.

DPZ

Toda a liberdade que você precisa para trabalhar com mais mobilidade, usando a internet sem fio, e ainda operar com software livre. É mais segurança, porque a Itautec oferece suporte técnico especializado via internet ou pelo telefone, serviços de tuning e configuração e ainda atendimento nacional on site. Tem alta tecnologia para os aplicativos como editor de textos, planilha eletrônica, editor de imagens e apresentações. É mais facilidade e maior flexibilidade no seu dia-a-dia. Na hora de trabalhar, não se sinta preso. Seja Librix.

Foto ilustrativa.

• Librix • Tela widescreen de 15,4” • Combo (grava CD e toca DVD)

Foto ilustrativa.

• Librix • Monitor de 15” • Gravador de CD

Itautec Minitorre

Itautec InfoWay Note W7630

IDEAL PARA TRABALHO E ENTRETENIMENTO.

IDEAL PARA QUEM PRECISA DE MOBILIDADE, MAS NÃO ABRE MÃO DE ECONOMIA.

Código da oferta: IN-554

• Processador Intel® Celeron® D 315 (256 KB L2 cache, 2.26 GHz, 533 MHz) • Sistema Operacional Librix - Distribuição Linux Itautec • 256 MB de memória • HD SATA 80 GB • Gravador de CD • Monitor de 15”• Floppy • Mouse óptico • Teclado em português • Placa de rede integrada • Placa de áudio e vídeo integrada • Microfone e caixas acústicas • Fax/Modem 56 Kbps • 1 ano de garantia balcão*

Financiamento pelo cartão BNDES ou R$

999,00 à vista

Código da oferta: IN-553

• Processador Intel® Celeron® M 380 (1 MB L2 cache, 1.60 GHz, 400 MHz) • Sistema Operacional Librix - Distribuição Linux Itautec • 512 MB de memória • Tela widescreen de 15,4” • Placa de rede wireless • HD 40 GB • Combo (DVD + CD-RW) • Placa de vídeo integrada • Maleta inclusa • 1 ano de garantia balcão*

Financiamento pelo cartão BNDES ou R$

2.199,00 à vista

www.itautecshop.com.br CO M P R E D I R E TA M E N T E D O FA B R I C A N T E

PRESENTE EM MAIS DE 2.700 CIDADES.

0800 121 444 De 2ª a 6ª, das 8h às 20h. Sábado, das 9h às 18h.

Ofertas válidas até 28/2/2007 ou enquanto durarem os estoques. Celeron, Celeron Inside, Centrino, o logotipo Centrino, Core Inside, Intel, o logotipo Intel, Intel Core, Intel Inside, o logotipo Intel Inside, Intel Viiv, Intel vPro, Itanium, Itanium Inside, Pentium, Pentium Inside, Xeon e Xeon Inside são marcas comerciais ou marcas registradas da Intel Corporation ou de suas subsidiárias nos Estados Unidos ou em outros países. *Garantia balcão de um ano para partes, peças e serviços. Para possibilitar o acesso à internet são necessários uma linha telefônica ou banda larga e um provedor à sua escolha. A velocidade de comunicação de 56 Kbps depende e pode variar de acordo com o tipo e a qualidade da linha telefônica utilizada. Preços com impostos inclusos para São Paulo. Frete não incluso. Demais características técnicas e de comercialização estão disponíveis em nosso site e no Televendas. Fica ressalvada eventual retificação das ofertas aqui veiculadas. Quantidade: 10 unidades de cada. Empresa/produto beneficiado pela Lei de Informática. Fotos meramente ilustrativas.

http://supertuxbr.blogspot.com


EMAILS | cartas@linuxmagazine.com.br

���������������

���������������������������

���������������

�������������������������������

����������������������������

����������������������

�������������

��� ���� �� �� ��������� ���������

���

���������������������

�������������������������

����������������������������� ��������������������������� ���������������������������

����� ������������������������������������� ����� ��������������������������������������������� ����� ������������������������������������������� ����� ������������������������������������� ����� ����������������������������������������� ���� ���������������������������������� �����

����� � ������ � � ������ � ������� € �����

��������� ������� �� ���������

� � �� � � � �� � � ��� � ���� � � � � � � � �

todos os usuários gostassem dela por completo – afinal, seres humanos sempre discordam uns dos outros. Com distribuições variadas, o usuário tem a possibilidade de experimentar quantas quiser, até encontrar aquela mais adequada a suas expectativas e necessidades. Em relação às atualizações periódicas do sistema operacional e dos drivers, ultimamente temos tido uma nova versão do kernel Linux a cada poucos meses. Como é nele que os drivers se incluem, podemos dizer que o Linux é um sistema bastante atualizado, senão o mais atualizado de todos. Também em relação ao suporte a hardware, Linux é o campeão atual nesse quesito, entre todos os sistemas operacionais existentes. Infelizmente, alguns fabricantes de hardware para PCs ainda não perceberam a importância de criar drivers para Linux, ou simplesmente de mostrar publicamente as especificações de seus produtos, o que resulta em uma certa deficiência de suporte a alguns itens de hardware. Se você deseja, como afirma em seu email, pagar uma pequena quantia em troca de suporte técnico (respondendo a “eficiente e fácil de usar”), então fique satisfeito em saber que a maioria das distribuições possui algum tipo de suporte cobrado de altíssima qualidade. Aliás, essa é mais uma das vantagens do Software Livre, e conseqüentemente também do Linux: o fabricante do sistema não é o único capaz de prestar suporte a ele, pois o código-fonte é aberto a todos. E a diversidade de distribuições também se mostra positiva mais uma vez, neste ponto, pois é possível escolher uma distribuição de acordo com o suporte técnico oferecido a ela por seu fabricante ou qualquer outra empresa. Fico feliz também em informar que o Linux já está vivendo sua Alvorada. Como você informa no início de seu email, o Linux está presenciando um “sucesso crescente” já há alguns anos, e ainda há bastante terreno a conquistar. Ou seja, o cenário é altamente positivo. ■

✎ Howto

Antes de começar, quero dizer que sempre fui e continuarei sendo assinante da revista, pois a Linux Magazine é a melhor revista de Linux que eu conheço. Minha única crítica é em relação aos tutoriais. Eles estão bem distantes de tutoriais. Entendo que haja diferentes “sabores” de Linux, mas vários artigos são escritos sob o pressuposto de um nível de conhecimento que, se a pessoa já soubesse tudo o que se pressupõe, dificilmente precisaria do artigo. Por exemplo, em relação a configurar um filtro em uma bridge com o proxy Squid, as instruções dizem que “O próximo passo é modificar os arquivos de configuração do Squid de acordo com suas necessidades.” Mas que arquivos são esses? Quais configurações do Squid? Somente as ACLs? Isso também me chateia porque dentro do mesmo artigo há o outro extremo, como especificar o comando brctrl addif br0 eth0, totalmente satisfatório. Minha opinião é essa. Normalmente eu uso seus artigos como ponto de partida, mas nunca consigo usá-los como um verdadeiro guia. Sou obrigado a buscar instruções mais específicas na Internet. Seria interessante conseguir usar sua revista como um verdadeiro tutorial. Se o foco é o usuário corporativo, use Red Hat, CentOS, Suse, White Hat ou Fedora Core. Obrigado pela atenção. Jose Hernandez Caro Jose, obrigado por sua opinião. Concordamos que, em alguns casos, nossos artigos talvez não sejam tudo que se precisa para realizar uma tarefa por completo, especialmente no caso de configurações complexas de servidores, com necessidade de vários componentes. Nós entendemos que a Linux Magazine tem o papel importantíssimo de publicar informações sobre Linux e Software Livre, mas não pretendemos substituir os tutoriais e Howtos, páginas de manual e outras formas de documentação. Nossos artigos são lidos por uma ampla gama de usuários, desde iniciantes até especialistas, e nosso objetivo é sempre oferecer alguma informação útil e que valha a pena para cada leitor. Nossa missão é auxiliar os leitores a ampliar e, ao mesmo tempo, aprofundar seu conhecimento sobre Linux. Ajudamos a ampliar informando sobre novas ferramentas que eles talvez não conheçam, novas atualizações, e novas técnicas baseadas em ferramentas que eles já utilizam; e aprofundamos seus conhecimentos examinando em profundidade os sistemas, componentes e protocolos que operam por trás das interfaces gráficas e linhas de comando. Esses objetivos freqüentemente nos fazem descrever etapas de configuração bastante específicas, mas às vezes há possibilidades demais a serem abordadas na discussão, o que impediria a publicação em um artigo único. Nós tentamos sempre listar fontes de informação no quadro “Mais informações”, ao final dos artigos. ■

Errata Na edição 26 da Linux Magazine, o quadro “O autor” da matéria sobre Port Knocking foi omitido: Flávio do Carmo Júnior (carmo.flavio@gmail.com), 23, cursa atualmente o 3º ano de Sistemas de Informações na UNOESTE, possui certificação LPIC-1, é responsável pelo setor de TI da empresa Bebidas Asteca Ltda. e consultor em software básico e aplicações em redes pelo grupo “Kemi – Soluções para empresas em Tecnologia de Informação”. É também integrante da equipe de suporte em Linux e softwares livres do canal #LinuxAjuda, situado na rede Brasnet de IRC.

http://supertuxbr.blogspot.com 8

http://www.linuxmagazine.com.br


������������� ���������������������

��������������������������������������������������������������������������������� ��������������������������������������������������������������������������������� ����������������������������������������������������������� ��������������������������������������������������������

���������������������������

http://supertuxbr.blogspot.com ����������������������������������������� ��������������������������������


Seguindo o plano

COLUNA

Augusto Campos Prever e registrar as rotinas ajuda o administrador de sistemas a dormir mais tranqüilo.

C

umprir os compromissos e obrigações é importante para todos nós, mas é especialmente importante para os administradores de sistemas, porque muitos dos seus compromissos são com máquinas e equipamentos que, por mais bem projetados que sejam, não têm flexibilidade ou inteligência para lidar com problemas causados por esses descumprimentos – em especial nos casos de ausência das manutenções obrigatórias. Existem muitas ferramentas para ajudar o administrador a se lembrar das suas pendências, mas poucas delas são eficazes quando você deixa para pensar nisso no último dia antes das férias, ou às 19 horas de uma sexta-feira antes de um feriado prolongado. Muitas vezes a paz de espírito depende mais do planejamento do que da tecnologia, e

Não espere a próxima vez, comece cada uma de suas checklists antes de chegar a próxima situação em que ela venha a ser necessária. feliz o administrador de sistemas que consegue ter a disciplina de usar a ferramenta mais adequada à sua realidade – mesmo que seja um bloco e uma caneta – para capturar e registrar seus compromissos, e depois consegue dar o passo além – muito mais raro – de consultar essa ferramenta na hora certa para não deixar nada sem resolver, nem nada atrasado. Já escrevi aqui nesta coluna sobre ferramentas para gerenciar listas de pendências e atividades, que constituem um dos horizontes do registro e controle de compromissos. Mas hoje quero dedicar este espaço a outro horizonte, possivelmente ainda mais essencial: a checklist. Nas minhas atividades, há muito adotei a checklist como ferramenta básica para garantir escopo e qualidade de projetos, e a cada nova checklist volto a comprovar a eficácia dessa medida. Uma checklist não é nada além de uma lista de condições ou passos necessários para concluir uma determinada atividade. Você já deve ter visto em filmes aquela rotina básica – e obrigatória – de verificação pré-vôo, em que o

piloto e o co-piloto de uma aeronave se alternam entre ler e confirmar uma série de condições necessárias para iniciar seus procedimentos: combustível, alimentação elétrica, calibragem dos instrumentos e assim por diante. Esse é o exemplo mais completo de checklist, incluindo até mesmo um procedimento formal de verificação. É claro que os itens da checklist acima não foram agrupados aleatoriamente, e nem são os mesmos para qualquer avião, ou para qualquer situação. Vôos transatlânticos, vôos noturnos, vôos de carga e vôos para lançamento de pára-quedistas têm suas próprias exigências, e a lista de um Cessna monomotor não inclui os mesmos itens da checklist de um Boeing 747. Este exemplo serve para ilustrar o papel que as checklists podem assumir nas suas rotinas do datacenter: pode-se ter checklists para substituição de servidores, para ativação de novos uplinks, para verificações de início e final de turno, para faltas de energia prolongadas e para outras situações que exijam operações complexas, porém repetitivas, no que diz respeito a seus detalhes essenciais. É difícil encontrar uma checklist pronta que possa ser adotada imediatamente no seu ambiente. E aposto que você já deve ter pensado, após terminar um desligamento de emergência do CPD, que da próxima vez você vai anotar tudo o que fez, para não ter que pensar tanto nem se estressar nas vezes futuras. E é aí que está o segredo: não espere a próxima vez, comece cada uma de suas checklists antes de chegar a próxima situação em que ela venha a ser necessária. Anote antes, e aproveite a próxima ocorrência para validá-la. Mais importante ainda, não tente transformar suas checklists em documentos formais, estáticos, gravados em bronze. Faça com que elas sejam facilmente editáveis, expansíveis, adequáveis e flexíveis. Providencie para que elas estejam à mão de todas as pessoas que possam vir a necessitar delas, e cuidado com a disponibilidade: não adianta ter a checklist em um servidor inacessível; documentos sobre manutenção precisam ter cópias impressas atualizadas. Para completar, crie uma checklist especial para o final de expediente em feriados prolongados, e nunca mais fique na dúvida. ;-) ■

O autor 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.

http://supertuxbr.blogspot.com 10

http://www.linuxmagazine.com.br


��������������������������������������� ��������������������������������������� ����� ����� ������ ������ ������� ������� ���������� �������� ���������� ������ ���������������������������������������� ���������������������������������������� ������������������������������������� �������������������������������������� ������� �������� ���������� ������� ���������� ������� ���������� ������ ��������������������������������������� ��������������������������������������� ��������������������������������������� ����� ����� ������ ������ ������� ������� ���������� �������� ���������� ������ ���������������������������������������� ���������������������������������������� ������������������������������������� �������������������������������������� ������� �������� ���������� ������� ���������� ������� ���������� ������ ��������������������������������������� ��������������������������������������� ��������������������������������������� ����� ����� ������ ������ ������� ������� ���������� �������� ���������� ������ ���������������������������������������� ���������������������������������������� ������������������������������������� ��������������������������������������

http://supertuxbr.blogspot.com


OCR no combate ao spam

COLUNA

Charly Kühnast A última moda é ocultar o spam em imagens. A resposta do administrador: uma ferramenta de reconhecimento óptico de caracteres (OCR) que extrai os textos e utiliza-os no filtro de spam.

S

e você utiliza o Spamassassin, o plugin FuzzyOCR é uma boa ferramenta para avaliação de imagens. O FuzzyOCR não é difícil de instalar, exceto por suas dependências. Certifique-se de que sua versão do Spamassassin seja a mais atual possível; é claro que ela sempre deve estar atualizada, mas a versão 3.1.4 é fundamental. Também são necessárias a ferramentas NetPBM, do binário convert do Imagemagick, a Giflib, dois módulos de Perl e o gocr para reconhecimento óptico de caracteres. Essas exigências podem parecer exageradas, mas a maioria das distribuições as oferece normalmente, e o comando a seguir baixa os módulos de Perl automaticamente:

cpan -i Digest::MD5 String::Approx

Imagem e ação

Apesar de o FuzzyOCR vir com alguns arquivos de spam de exemplo, para fins de teste, é muito mais divertido testá-lo na sua pasta de lixo. A Web é um local estranho e maravilhoso: o spam pode vir em qualquer formato de imagem comum, e os tipos MIME freqüentemente são declarados de forma incorreta para causar ainda mais confusão – GIFs fingindo ser JPEGs, por exemplo. O FuzzyOCR reage a estratégias de ofuscamento conferindo pontos negativos adicionais. Os spammers muitas vezes se utilizam de GIFs animados, principalmente os que mostram pixels desorganizados antes de revelar sua mensagem. Aparentemente, muitos spammers esperam que os mecanismos de OCR analisem somente a primeira fase da animação; felizmente, o FuzzyOCR não pára aí.

Com um pouco mais, já é possível avaliarmos imagens: só precisamos do FuzzyOcr.cf, além do FuzzyOcr.pm no diretório do Spamassassin, /etc/mail/spamassassin. O FuzzyO- É hora de ajustar o FuzzyOcr.cf. Se você possuir uma versão do CR fornece um dicionário de exemplo, FuzzyOcr.words, que Spamassassin superior à 3.1.4, precisará especificar a entrada contém os termos que se deseja que o FuzzyOCR busque focr_pre314 = 1. Configurar as pontuações que o FuzzyOCR confere quando encontra algo suspeito é ainda mais importante. O programa é bastante draconiano por padrão. Por exemplo, uma mensagem com uma imagem anexa que coincida com duas entradas do dicionário recebe quatro pontos, e mais um ponto e meio são adicionados caso o tipo MIME esteja incorretamente declarado. Dois pontos e meio ainda serão acrescentados no caso de imagens corrompidas, e cinco se o erro for incorrigível. Os pontos são somados para chegar a um total final, como mostrado na figura 1. Configurações estritas aumentam o risco de falsos positivos: não esqueça que o Spamassassin provavelmente notará mais alguns problemas em mensagens de spam, o que pode levar a pontuações incrivelmente altas. Minha recomendação é reduzir as pontuações para a metade dos valores encontrados em FuzzyOcr.cf. nas imagens. É possível modificar a lista para adequá-la às E depois? Apenas sente e relaxe, esperando para ver o necessidades do usuário. Mais uma vez, é necessário criar que os spammers inventarão a seguir. ■ esse arquivo para o diretório do Spamassassin. O próximo passo é definir o caminho para os arquivos de registro e de dicionário em FuzzyOcr.cf. Depois disso, Mais Informações o FuzzyOCR já deve estar pronto para entrar na briga, [1] FuzzyOCR: http://users.own-hero.net/ pois o Spamassassin verá o módulo em seu caminho de ~decoder/fuzzyocr/ inicialização, integrando-o automaticamente.

Crime e castigo

Aparentemente, muitos spammers esperam que os mecanismos de OCR analisem somente a primeira fase da animação; felizmente, o FuzzyOCR não pára por aí.

O autor Figura 1: O FuzzyOCR detecta textos em arquivos de imagem, e confere pontos de penalidade ao encontrar palavras indesejáveis.

Charly Kühnast é administrador de sistemas Unix no datacenter Moers, perto do famoso rio Reno, na Alemanha. Lá ele cuida, principalmente, dos firewalls.

http://supertuxbr.blogspot.com 12

http://www.linuxmagazine.com.br


http://supertuxbr.blogspot.com


Pergunte ao Klaus!

COLUNA

Klaus Knopper Esta coluna é baseada na seção “Ask Klaus!”, publicada na Linux Magazine International.

Migração de configurações

Tenho o seguinte problema: meu antigo servidor Web rodava também servidores SQL e de email, numa máquina Pentium II. Agora atualizei o hardware para um Pentium 4 de núcleo duplo e uma placa-mãe com controladora RAID integrada. Minha pergunta é: como faço para migrar meus dados e configurações para a máquina nova? Tenha em mente que meu kernel atual é 2.4, e agora terei que migrar para o 2.6.16, que é o único que reconhece minha controladora RAID.

Esse é o método que eu recomendo para se ter uma inicialização limpa. Resposta: Mover o sistema operacional, as aplicações e os dados para uma máquina nova é uma tarefa comum, embora nem sempre seja fácil encontrar a melhor estratégia para isso. A estratégia rápida (mover todos os dados, incluindo o sistema e as bibliotecas), só é possível se a arquitetura de hardware não tiver mudado de forma a impedir os aplicativos de funcionarem. Ao mudar de um Pentium II, em seu exemplo, para um Pentium 4, isso não deve ser um problema. A única coisa que se precisa fazer é configurar e compilar o novo kernel de acordo com seu novo hardware. Ao mudar do kernel 2.4 para o 2.6, será necessário atualizar pelo menos seus modutils (modprobe, insmod, rmmod). É claro que você poderia usar um kernel estático com tudo que é necessário compilado dentro dele, em vez de carregar módulos sob demanda. A abordagem que eu recomendo é compilar estaticamente tudo que for necessário para montar o sistema de arquivos raiz, eliminando a necessidade de um ramdisk inicial (initrd). Um Live CD com o kernel 2.6 pode ser muito útil para colocar em funcionamento o sistema recém-copiado caso você tenha esquecido alguma parte (veja abaixo). Então, a seqüência seria: ➧ Copiar tudo para a nova máquina, seja com uma cópia exata (1:1) de seu disco rígido, ou remotamente para partições recém-formatadas e montadas em seu novo servidor. Recomendo o comando:

como root em ambos os casos, naturalmente. ➧ Compilar um novo kernel na nova máquina, e atualizar ao menos os modutils. Pode ser útil fazer um chroot para a nova partição da nova máquina, para então já trabalhar “dentro” do sistema copiado, caso você não consiga iniciar diretamente com o kernel antigo, ou se o novo ainda não estiver funcionando direito por você ter esquecido algo na configuração. A “forma correta”, que eu recomendo, consiste da reinstalação de um sistema operacional, seguida da migração dos arquivos de configuração e dos dados. Esse método oferece uma inicialização limpa e permite livrar-se de programas obsoletos (com potenciais falhas de segurança) e obter um sistema atualizado, que é mais fácil de manter. No entanto, é necessário mais trabalho, principalmente quando os arquivos de configurção tiverem tido sua localização e sintaxe alteradas. Além disso, descobrir quais arquivos devem ser transferidos e quais sofreram mudanças em relação à configuração padrão nem sempre é fácil, caso você não tenha feito um registro das alterações ocorridas nos últimos anos. Usando essa estratégia, você primeiro particionaria o novo sistema e instalaria o sistema a partir do zero, incluindo todos os programas e serviços de que você necessita. Use dpkg -l ou rpm -qa em sua máquina antiga para ver o que está instalado, e anote todos os pacotes que serão necessários. Normalmente essa lista é longa. Depois que seu novo sistema estiver funcionando direito, você deverá transferir e provavelmente reescrever os arquivos de configuração dos serviços. Recomendo que você faça isso, opção por opção, em cada arquivo de configuração, pois, se você também mudou do Apache 1.3 para o 2.x, por exemplo, a sintaxe e a localização dos arquivos de configuração deverá ser alterada. Arquivos como certificados SSL, assim como chaves de autenticação, não podem ser esquecidos. Após terminar os arquivos de configuração, você já pode copiar os dados dos usuários, como bancos de dados, caixas de email e diretórios home. Certifique-se de que os usuários e grupos na nova máquina estão como na antiga. Ao final, teste exaustivamente cada um dos serviços, examinando todos os seus arquivos de log. Apesar de esse método ser mais trabalhoso que a “forma rápida”, é o que oferece a maior flexibilidade e segurança, e pode economizar muitas preocupações durante atualizações. ■

O autor Klaus Knopper é o criador do Knoppix e co-fundador do evento LinuxTag. Atualmente ele trabalha como professor, programador e consultor.

rsync -Hav antigo_dir_raiz [root@máquina_remota:] novo_dir_raiz

http://supertuxbr.blogspot.com 14

http://www.linuxmagazine.com.br


http://supertuxbr.blogspot.com


Crônicas do kernel

COLUNA

Zack Brown

Esta coluna é baseada na seção “Zack’s Kernel News”, publicada na Linux Magazine International, e sintetiza o imenso tráfego da lista de discussão do kernel.

Benchmarks de sistemas de arquivos Testes iniciais indicaram que o Ext4 é mais rápido ao gravar dados no disco do que o Ext3 e o Reiser4. Houve grande interesse geral por esses resultados, embora os testes tenham tido alguns problemas (o responsável pelos testes acreditava que a alocação atrasada – delayed allocation – era parte do Ext4, quando na realidade esse recurso nem foi incorporado à árvore de Andrew Morton). Vários desenvolvedores pediram que os testes fossem expandidos para incluir outros sistemas de arquivos; e

Linus disse que, na realidade, nenhum programa utiliza o sysctl, o que significa que essa ferramenta poderia ser eliminada sem se quebrar o espaço do usúario. Theodore Ts’o sugeriu que eles fossem transformados em algum teste automatizado, para futuras comparações entre recursos de sistemas de arquivos individuais. Porém, reconheceu que isso pode exigir bastante trabalho. O autor dos testes confirmou que a tarefa de automatizá-los parecia grande demais, e por isso mesmo ele só realizou aqueles poucos que foram mostrados.

Confusão do ReiserFS

Após os eventos recentes a respeito de Hans Reiser, a questão da continuação do desenvolvimento surgiu na lista de discussão do kernel. Alexander Lyamin, da Namesys, empresa de Hans Reiser, se ofereceu para resolver o impasse. Ele afirmou que o código do ReiserFS 3 já está bastante estável, podendo entrar em modo de correção de falhas, embora os desenvolvedores do Suse tenham acrescentado novos recursos, como o suporte a ACLs. Portanto, o ReiserFS continuaria como antes. A respeito do Reiser4, no entanto, Alexander e outros desenvolvedores disseram estar cuidando de aspectos técnicos e continuando o trabalho no sistema, principalmente com Andrew Morton, em sua árvore do kernel 2.6. O plano de desenvolvimento do ReiserFS para os próximos seis meses é continuar nesse ritmo, buscando, ao mesmo tempo, oportunidades de negócios para obter financiamento para o projeto.

A longo prazo, diz Alexander, o plano depende do que ocorrer com Hans. Se ele for solto, os desenvolvedores pretendem continuar como antes. Caso contrário, Alexandre imagina que os desenvolvedores tentarão escolher um líder interino.

Status do sysctl

Seguindo as afirmações de Linus Torvalds de que nunca é aceitável quebrar o espaço do usuário, Albert Cahalan se ofereceu para manter o código do sysctl caso ele não fosse eliminado. Mas Linus disse que, na realidade, nenhum programa utiliza o sysctl, o que significa que essa ferramenta poderia ser eliminada sem se quebrar o espaço do usuário. Andrew Morton concordou, lembrando que o melhor momento para eliminar o sysctl seria agora, justamente por não se quebrar nada. Então, a menos que surja algo como uma importante aplicação do espaço do usuário que dependa profundamente do sysctl, parece que seu código será eliminado do kernel. Enquanto isso, podemos esperar um lento processo de obsolescência, juntamente com uma busca por aplicativos que dependam do sysctl. Um resultado interessante e irônico advindo dessa atenção dada ao sysctl é que seu código está melhorando, justamente agora que ele está mais próximo de ser inteiramente removido do kernel.

Mantenedores

Pierre Ossman enviou um patch que o especificava como mantenedor do subsistema de Multimedia Card, já que Russell King deixou o cargo e marcou o driver como órfão. Pierre também tomou a liberdade de renomear o driver para “multimedia card and secure digital subsystem”. Jiri Slaby acrescentou uma entrada ao arquivo MAINTAINERS para o driver de placas seriais Moxa SmartIO/IndustIO, nomeando-se mantenedor. Ele também acrescentou uma entrada para o driver da placa Multitech Multiport, novamente se dizendo mantenedor. Jiri já submeteu diversos patches para esses drivers, portanto faz sentido que ele os mantenha, caso deseje. Nenhum outro desenvolvedor do kernel jamais se ofereceu para ocupar esse cargo. ■

O autor A lista de discussão Linux-Kernel é o núcleo das atividades de desenvolvimento do kernel. Zack Brown consegue se perder nesse oceano de mensagens e extrair significado! Sua newsletter Kernel Traffic já está completando 5 anos.

http://supertuxbr.blogspot.com 16

http://www.linuxmagazine.com.br


Gabarito

Plano Standard

R$

25,

Plano SQL

R$

36,10

Transferência: 50GB • Espaço: 500MB

Transferência: 100GB • Espaço: 1GB

E-mail 1GB

A partir de

Plano Terabyte

Transferência: 1TB • Espaço: 3GB

Plano Ilimitado

Transferência: ilimitada • Espaço: 5GB

70

ILIMITADA É A VANTAGEM DE CONTAR COM A PLUG IN. Somente uma empresa como a PLUG IN, uma das líderes do mercado de webhosting no Brasil, pode oferecer aos profissionais de internet as melhores opções para hospedagem de sites com preços e franquias imbatíveis. Oferece ainda Data Centers de última geração e uma equipe 100% focada em atender as demandas do mercado digital.

0,

R$ 90 R$

135,00

R$

250,00

Internet para Profissionais de Internet Capitais e Regiões Metropolitanas: 4003 1001 Outras Regiões: 0800 881 1001

www.plugin.com.br

http://supertuxbr.blogspot.com


➧ Firefox, Thunderbird e Seamonkey SEGURANÇA

Mozilla Firefox é um navegador web de Código Aberto. Esses problemas também afetam o cliente de email Mozilla Thunderbird e o conjunto de aplicativos de Internet Mozilla Seamonkey. Diversas falhas foram encontradas na forma como o Firefox processa certos códigos Javascript mal formados. Uma página web maliciosa poderia causar a execução de Javascript de forma a fazer o Firefox travar ou executar código arbitrário como o usuário rodando o Firefox (CVE-2006-5463, CVE-2006-5747, CVE-2006-5748). Várias falhas foram encontradas na maneira como o Firefox renderiza páginas web. Uma página maliciosa poderia fazer o navegador travar ou possivelmente executar código arbitrário como o usuário executando o Firefox (CVE-2006-5464). Outra falha foi encontrada no método de verificação de assinaturas RSA do Firefox. Para chaves com expoente 3, é possível a um

➧ Bind

Bind é um aplicativo servidor DNS de Código Aberto. O servidor DNS Bind é vulnerável ao problema recentemente descoberto de verificação de assinatura RSA do OpenSSL (CVE-2006-4339). O Bind utiliza criptografia RSA como parte de sua implementação do DNSSEC. Portanto, para resolver essa falha de segurança, esses pacotes devem ser atualizados. Além disso, os registros de tipos KEY e DNSKEY, caso as chaves atualmente em uso tenham sido geradas com o expoente padrão de 3, novas chaves RSASHA1 e RSAMD5 precisam ser geradas com a opção -e do dnssec-keygen. Pode-se verificar se suas chaves são vulneráveis conferindo o algoritmo (1 ou 5) e os três primeiros caracteres da chave RSA codificada em Base64. As chaves RSAMD5 (1) e RSASHA1 (5) que se iniciam com AQM, AQN, AQO ou AQP são vulneráveis. ■ Referência no Mandriva: MDKSA-2006:207 Referência no Slackware: SSA:2006-310-01 Referência no Suse: SUSE-SR:2006:026

➧ kdelibs

O pacote kdelibs fornece bibliotecas para o ambiente gráfico KDE. A biblioteca khtml do KDE utiliza a Qt de uma forma que permite que parâmetros não confiáveis sejam passados para a Qt, acionando o estouro. Um agressor poderia, por exemplo, criar uma página web maliciosa que, ao ser visualizada por uma vítima com o navegador Konqueror, faria o navegador travar ou executar código arbitrário com os privilégios da vítima (CVE-2006-4811). ■ Referência

no

Mandriva:

MDKSA-

2006:186 Referência no Red Hat: RHSA-2006:0720-5

agressor forjar uma assinatura que seria incorretamente verificada pela biblioteca NSS. O Firefox, da forma como é disponibilizado, confia em diversas autoridades certificadoras que utilizam expoente 3. Um agressor poderia criar um certificado SSL que seria incorretamente confiável quando um site fosse visitado por uma vítima desavisada. Pensou-se que esta falha houvesse sido corrigida no Firefox 1.5.0.7, no entanto Ulrich Kuehn descobriu que a correção estava incompleta (CVE-2006-5462). ■ Referência no Debian: DSA-1225-1 Referência no Mandriva: MDKSA-2006:205 Referência no Red Hat: RHSA-2006:0733-4 Referência no Slackware: SSA:2006-313-01 Referência no Suse: SUSE-SA:2006:068 Referência no Ubuntu: USN-381-1

➧ OpenSSL

OpenSSL é um sistema de protocolos seguros de rede. O Doutor S. N. Henson, da equipe central do OpenSSL e também do Open Network Security, recentemente desenvolveu um conjunto de testes ASN1 para a NISCC (www.niscc.gov.uk). Quando o conjunto de testes foi executado com o OpenSSL, duas vulnerabilidades de negação de serviço foram reveladas. Durante o processamento de certas estruturas ASN1 inválidas, uma condição de erro recebe tratamento incorreto. Isso pode resultar em um laço infinito, o que consome a memória do sistema (CVE-2006-2937). Alguns tipos de chaves públicas podem levar um tempo desproporcional para ser processadas. Isso poderia ser usado por um agressor em um ataque de negação de serviço (CVE-2006-2940). Tavis Ormandy e Will Drewry, da equipe de segurança do Google, descobriram um estouro de buffer na função utilitária SSL_get_shared_ciphers, que é utilizada por aplicativos como o Exim e o MySQL. Um agressor poderia enviar uma lista de cifras que seria capaz de estourar um buffer (CVE-2006-3738). Tavis Ormandy e Will Drewry revelaram também uma possível vulnerabilidade a ataques de negação de serviço no código do cliente sslv2. Se um aplicativo cliente utilizar OpenSSL para estabelecer uma conexão SSLv2 com um servidor malicioso, isso poderia causar o travamento do cliente (CVE-2006-4343). ■ Referência no Debian: DSA-1195-1 Referência no Ubuntu: USN-353-2

➧ Asterisk

Asterisk é uma implementação em Código Aberto de um private branch exchange (PBX).

O Asterisk contém estouros de buffer em channels/chan_mgcp.c, do driver MGCP, e em channels/chan_skinny.c, do driver de canal Skinny para telefones SCCP. Ele também processa de forma perigosa as variáveis controladas pelo cliente para determinar os nomes de arquivos na função Record(). Finalmente, o driver de canal SIP em channels/chan_sip.c pode utilizar mais recursos do que o necessário, em situações não especificadas. Um agressor remoto seria capaz de executar código arbitrário enviando uma resposta audit endpoint (AUEP) maliciosamente criada, enviando um pacote Skinny excessivamente grande antes mesmo da autenticação, ou utilizando especificadores de nomes de formato através das variáveis controladas pelo cliente. Um agressor também seria capaz de causar uma negação de serviço por consumo de recursos, através do driver de canal SIP. ■ Referência no Gentoo: GLSA 200610-15

➧ ClamAV

ClamAV é uma ferramenta antivírus de Código Aberto. Foi encontrado um estouro de inteiros em uma versão antiga do ClamAV. Essa falha poderia permitir que um agressor remoto causasse uma negação de serviço e executar um código arbitrário através de um arquivo PE (Portable Executable) (CVE-2006-4182). Outra vulnerabilidade poderia permitir que um agressor causasse uma negação de serviço através de um arquivo HTML compactado (CHM) malicioso, que faria o ClamAV ler uma localização inválida de memória (CVE-2006-5295). ■ Referência no Debian: DSA-1196-1 Referência no Gentoo: GLSA 200610-10 Referência no Mandriva: MDKSA-2006:184 Referência no Suse: SUSE-SA:2006:060

http://supertuxbr.blogspot.com 18

http://www.linuxmagazine.com.br


Segurança | NOTÍCIAS

Postura das principais distribuições Linux quanto à segurança Distribuição

Referência de Segurança

Comentários

Conectiva

Info: distro2.conectiva.com.br/ Lista: seguranca-admin@distro.conectiva.com.br e distro2.conectiva.com.br/lista Referência: CLSA-... 1

Possui uma página específica; não há link para ela na página principal. Os alertas são sobre segurança, mas distribuídos através de emails assinados com a chave PGP da empresa para assegurar sua autenticidade. Contém também links para os pacotes atualizados e para fontes de referência sobre o problema sendo corrigido.

Debian

Info: www.debian.org/security Lista: lists.debian.org/debian-security-announce Referência: DSA-… 1

Alertas de segurança recentes são colocados na homepage e distribuídos como arquivos HTML com links para os patches. O anúncio também contém uma referência à lista de discussão.

Gentoo

Info: www.gentoo.org/security/en/glsa Fórum: forums.gentoo.org Lista: www.gentoo.org/main/en/lists.xml Referência: GLSA: … 1

Os alertas de segurança são listados no site de segurança da distribuição, com link na homepage. São distribuídos como páginas HTML e mostram os comandos necessários para baixar versões corrigidas dos softwares afetados.

Mandriva

A Mandriva tem seu próprio site sobre segurança. Entre outras Info: www.mandriva.com/security Lista: www1.mandrdrivalinux.com/en/flists.php3#2security coisas, inclui alertas e referência a listas de discussão. Os alertas são arquivos HTML, mas não há links para os patches. Referência: MDKSA-… 1

Red Hat

Info: www.redhat.com/errata Lista: www.redhat.com/mailing-lists Referência: RHSA-… 1

A Red Hat classifica os alertas de segurança como “Erratas”. Problemas com cada versão do Red Hat Linux são agrupados. Os alertas são distribuídos na forma de páginas HTML com links para os patches.

Slackware

Info: www.slackware.com/security Lista: www.slackware.com/lists (slackware-security) Referência: [slackware-security] … 1

A página principal contém links para os arquivos da lista de discussão sobre segurança. Nenhuma informação adicional sobre segurança no Slackware está disponível.

Suse

Info: www.novell.com/linux/security Lista: www.novell.com/linux/download/updates Referência: suse-security-announce Referência: SUSE-SA … 1

Após mudanças no site, não há mais um link para a página sobre segurança, que contém informações sobre a lista de discussão e os alertas. Patches de segurança para cada versão do Suse são mostrados em vermelho na página de atualizações. Uma curta descrição da vulnerabilidade corrigida pelo patch é fornecida.

1 Todas as distribuições indicam, no assunto da mensagem, que o tema é segurança.

�����

������ ������������� ���������

http://supertuxbr.blogspot.com


NOTÍCIAS

➧ Homenagem na Câmara dos Vereadores do Rio N

o dia 14 de dezembro, às 18:30, foi realizada na Câmara dos Vereadores da Cidade do Rio de Janeiro uma cerimônia de premiação inédita no mundo. Os vereadores, em conjunto

Figura 1: A vereadora Aspásia Camargo (à esquerda) coordenou o início da cerimônia de premiação, acompanhada de Ana Miranda (centro) e Jayme Alvares (direita).

com a ABRASOL (Associação Brasileira de Software Livre), agraciaram com belas placas de aço inox alguns personagens julgados importantíssimos quanto à utilização e disseminação do Software Livre e de Código Aberto (SL/CA). Na solenidade de entrega dos prêmios, estavam presentes, além dos premiados e organizadores, representantes de instituições nem sempre lembradas como apoiadoras do Software Livre, como a Fundação de Amparo à Pesquisa do Estado do Rio de Janeiro (FAPERJ). A vereadora Aspásia Camargo, autora da lei que propõe o uso preferencial de SL/CA

Figura 2: O público presente à cerimônia era composto principalmente por pessoas envolvidas com Linux e Software Livre.

pelo poder público municipal, comandou o início da solenidade (figura 1). Antes de iniciar seu discurso, a vereadora afirmou que diversos outros vereadores manifestaram solidariedade à causa e à premiação. Em seguida, explicou à platéia (figura 2) a definição de Software Livre, de acordo com a FSF (Free Software Foundation), citando as quatro liberdades defendidas por Richard Stallman. Prosseguiu relatando o processo pelo qual passa a referida lei, que, após ser aprovada pela Câmara e vetada pelo prefeito, foi novamente aprovada pela Câmara, o que seria suficiente para que entrasse em vigor, mas foi considerada inconstitucional pelo prefeito, impedindo sua efetivação. Logo após, o Presidente da ABRASOL, Jayme Alvares, prestou uma homenagem à vereadora em nome da ABRASOL, por seu empenho em disseminar o uso e os

Figura 3: Djalma Valois representou Renato Martini, presidente do ITI, ao receber o prêmio de destaque na área de Governo.

valores do SL/CA. Ana Batista, secretária da Agenda 21 e terceira componente da mesa (figura 1), falou ainda a respeito da democratização da informação, lembrando a importância do SL/CA nesse aspecto. O prêmio de destaque na área de Governo foi entregue a Djalma Valois (figura 3), do ITI (Instituto Nacional de Tecnologia da Informação), que representava Renato Martini, presidente do órgão. O prêmio foi em reconhecimento ao importante trabalho realizado pelo ITI na ampliação da adoção de SL/CA no país. Djalma lem-

Figura 4: O líder dos Rio Perl Mongers, grupo de usuários e desenvolvedores dessa linguagem, Breno Guimarães, foi premiado na categoria de comunidades.

brou a história da FSF e do próprio Linux, e relatou brevemente as atividades do ITI, com especial ênfase no CDTC (Centro de Difusão de Tecnologia e Conhecimento), um modelo de curso idealizado e efetivado pelo órgão para levar à população, gratuitamente, a educação em TI, pelo qual já passaram mais de 40 mil alunos. Djalma fechou seu discurso de agradecimento reafirmando ainda o compromisso do ITI com o SL/CA: “Tudo o que o ITI faz tem licença pública”. Breno Guimarães (figura 4) foi homenageado na categoria de Comunidades, devido a seu envolvimento com os Rio Perl Mongers, o grupo carioca de usuários e desenvolvedores dessa linguagem que é reconhecida justamente por sua vibrante comunidade. Breno explicou aos presen-

Figura 5: Rafael Peregrino, Diretor editorial da Linux New Media do Brasil, foi representado pelo editor da Linux Magazine, Pablo Hess, na entrega do prêmio na categoria de revista técnica.

http://supertuxbr.blogspot.com 20

http://www.linuxmagazine.com.br


Gerais | NOTÍCIAS

tes o que é a linguagem Perl, além dos motivos para esta ser apelidade de “cola da Internet”, e agradeceu bem-humorado a todos por usarem a linguagem, mesmo aos que não sabiam que a utilizavam. O prêmio de melhor Figura 6: Júlio Neves recebeu o prêmio revista técnica foi destinade destaque acadêmico, e do a Rafael Peregrino da ressaltou a importância de se Silva, Diretor Editorial da transmitir informação de alta Linux New Media do Braqualidade aos tomadores de sil. Rafael recebeu ainda decisão e gestores públicos. uma moção em virtude de sua marcante atuação em prol do SL/CA e do desenvolvimento tecnológico do Brasil, e também em reconhecimento à importância e à qualidade da Linux Magazine. Em seu lugar, o editor da Linux Magazine, Pablo Hess, recebeu os prêmios (figura 5). No seu discurso, Pablo explicou as atividades da editora, ressaltando a importância de levar a informação de qualidade a tantas pessoas quantas forem possíveis, “desde aquelas que acabaram de adquirir seus primeiros computadores até os executivos de TI de grandes corporações”, sempre “com o objetivo de fomentar a inovação”. Sérgio Amadeu, ex-presidente do ITI e personagem importante na difusão das idéias do SL/CA na esfera federal, embora ausente, foi homenageado com o prêmio por contribuição altamente relevante. Júlio Cesar Neves, professor da Uni-Rio e articulador do SL/CA na Dataprev, recebeu o quinto e último prêmio (figura 6), como destaque acadêmico, por sua inestimável contribuição com o SL/CA dentro desse ambiente. Em seus agradecimentos, complementou as afirmações de Pablo Hess, lembrando que a categoria dos prefeitos e políticos em geral também compõe um público importante a ser informado sobre os ideais da liberdade do software. O fechamento da solenidade ficou por conta de Ana Batista, que relembrou a importância da democratização da informação e também da mobilização da comunidade, responsável pela aprovação da lei de incentivo ao uso de SL/CA após o veto por parte do prefeito do Rio. Após o evento, homenageados e organizadores juntaram-se em uma calorosa confraternização (figura 7). As animadas conversas enfatizavam principalmente a importância do evento, o primeiro no mundo em que personagens do cenário do SL/CA receberam honras oficiais de representantes da administração pública. A mobilização foi levantada como um fator imprescindível para que o SL/CA receba uma maior atenção por parte de todos. Ao final, o evento foi marcado pelo sentimento de reconhecimento por parte dos homenageados, e de incentivo e recompensa por parte dos organizadores. A Linux New Media do Brasil manifesta sua enorme satisfação em receber o prêmio de melhor revista técnica especializada, e mais uma vez agradece à Câ- Figura 7: Após a cerimônia, os organizadores juntaram-se aos homenageados e à mara dos Vereadores do platéia para uma confraternização. Rio de Janeiro. ■

➧ Second Life abre o código

O mundo virtual Second Life é um dos mais famosos e freqüentados. A empresa Liden Lab, criadora do mundo virtual, anunciou a abertura do código-fonte do programa cliente que faz a ligação dos habitantes desse mundo virtual (os jogadores) ao mundo virtual propriamente dito. A abertura será aplicada aos clientes do jogo para sistemas Windows®, Mac e Linux. Com essa medida, os criadores pretendem acelerar o desenvolvimento dos clientes, utilizando a consagrada metodologia de desenvolvimento colaborativo inerente aos projetos de código aberto. ■

➧ Desenvolvimento de SL na USP

Com o objetivo maior de propiciar a redução do déficit da balança comercial brasileira em relação a softwares, a USP liberou, em dezembro último, verbas para a construção do Centro de Competência em Software Livre (CCSL). O novo centro será ligado ao Instituto de Matemática e Estatística (IME) da Universidade, e será abrigado em um novo prédio a ser construído. Por ano, o instituto forma 50 alunos de graduação e 25 de pós-graduação, mas o professor Fabio Kon (foto) diz que pretende fazer mais pela indústria nacional de software, que, na opinião do professor, ainda sofre de má qualidade. O CCSL promoverá a interação de graduandos e pós-graduandos em Ciência da Computação, abrigando os laboratórios que estejam envolvidos com Software Livre. Além de local de pesquisa e ensino, o centro também prestará assessoria a qualquer interessado que deseje obter informações, de todos os níveis, sobre Software Livre. ■

Notas Documentação do Ubuntu em vídeo A equipe de documentação do Ubuntu iniciou um movimento de fomento à produção de documentação em vídeos do tipo screencast. Usuários são incentivados a gravar suas ações na tela de forma a demonstrar como realizar tarefas específicas no Ubuntu. Por ser mais rápida, prática e dinâmica que a leitura de tutoriais escritos, a documentação em vídeo é altamente valorizada e eficiente, especialmente entre os usuários iniciantes. Firefox mais seguro e mais usado em 2006 O jornal americano Washington Post publicou uma análise de diversos relatórios de segurança de navegadores web em 2006, e concluiu que o Firefox foi o mais seguro do ano, apresentando falhas sem correção durante apenas nove dias, enquanto o concorrente Internet Explorer, da Microsoft, esteve sujeito a falhas críticas durante 284 dias no mesmo período. Como resultado, o navegador de código aberto manteve seu crescimento em número de usuários, atingindo 14% de fatia de mercado, mesmo com o lançamento da versão 7 do navegador da Microsoft. Linux no PS3 A última versão beta do Live CD do Gentoo Linux já funciona adequadamente no Playstation 3. Feito para a arquitetura PowerPC de 64 bits, o CD roda também nos PowerMacs G5, e contém um ambiente Gnome com os principais softwares para Internet e edição multimídia.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

21


CORPORATE | Notícias

CORPORATE

➧ Motorola adota Linux amplamente E

m sua nova linha de telefones celulares, a Motorola confirmou suas promessas de adotar Linux em todas as novas linhas de aparelhos celulares. O Motorizr Z6 substitui o Motorokr E2, e possui grandes capacidades multimídia, porém abandona a antiga arquitetura P2K em troca de um design do tipo slide. As parcerias com a Microsoft e a Warner Music buscam garantir novas funcionalidades para o usuário, como baixar as músicas e tocá-las tanto no telefone quanto no Windows Media Player, o reprodutor multimídia do Windows®. Outras características do aparelho incluem o suporte a troca de dados por Bluetooth, assim como o uso de acessórios com essa tecnologia, como fones de ouvido, por exemplo. Uma câmera de 2 megapixels também está incluída, além de um encaixe para cartões de memória MicroSD. O aparelho é capaz de reproduzir músicas nos formatos WMAv10, MP3, AAC, AAC+, AAC+ enhanced, AMR NB, WAV e XMF, e grava filmes em h.263 e MPEG4. ■

➧ Segundo UE, SL é mais econômico

No estudo intitulado “Economic impact of open source software on innovation and the competitiveness of the Information and Communication Technologies (ICT) sector in the EU”, a União Européia debate sobre a já antiga discussão acerca da comparação dos custos de soluções de software proprietárias e abertas. Analisando a questão em profundidade, o estudo considerou impactos diretos e indiretos da adoção e uso de tecnologias abertas, e de forma pouco chamativa concluiu que os benefícios para os usuários são melhores interoperabilidade, produtividade e economia de custos. O estudo foi realizado por pesquisadores de cinco universidades européias, e analisou seis instituições tanto públicas quanto privadas, que realizaram a transição para Software Livre e de Código Aberto (SL/CA). Verificou-se que, embora os custos de migração sejam elevados, o software proprietário possui um custo de aquisição significativamente maior, enquanto os custos de manutenção são semelhantes, com o SL/CA sendo um pouco mais caro em alguns casos. Em relação ao Custo Total de Propriedade (TCO), o estudo verificou que, em cinco das seis instituições, esse custo é menor com o uso de SL/CA do que com software proprietário. ■

➧ Nokia N800 roda Linux

O sucessor do smartphone N770, da Nokia, foi apresentado no Consumer Electronics Show (CES) 2007, em Las Vegas, EUA. O novo modelo N800 possui os recursos mais desejados em dispositivos da categoria, como Wi-Fi, Bluetooth, email, VoIP e alto-falantes estereofônicos. A grande tela LCD touchscreen de alta resolução abriga os botões, que não existem mais fisicamente em outra parte do dispositivo, e só são mostrados quando necessário. Esse recurso ajudou também a reduzir ainda mais o tamanho do aparelho. Um aspecto curioso é que, embora o Instituto Nokia de Tecnologia, localizado em Recife, Pernambuco, tenha desenvolvido o framework VoIP Tapioca, a empresa finlandesa optou pelo software Skype para a realização de chamadas telefônicas via Internet. ■

Notas MySQL muda licenciamento A MySQL AB, fabricante de um dos bancos de dados livres mais utilizados, o MySQL, alterou os termos de licenciamento da licença desse software. Com o objetivo de tornar a versão da licença GPL também uma opção - já que a GPLv3 será lançada em breve, cercada por controvérsias - a empresa passou a adotar o texto “licenciado sob a GPLv2”, em vez de “licenciado sob a GPLv2 ou posterior”. Audi adota Linux para CAE A montadora de automóveis alemã Audi iniciou a migração de seus servidores de Engenharia Auxiliada por Computadores (Computer-Aided Engineering, ou CAE) para Linux. Os sistemas x86 que a empresa já adotava serão progressivamente substituídos por máquinas x86-64, para agilizar e melhorar a precisão nas tarefas de simulação, visualização 3D, projetos de peças e componentes, entre outras. De acordo com Florian Kienast, relações-públicas da Audi, a montadora está cada vez mais próxima de um parque composto totalmente por máquinas x86-64 rodando Linux, tanto nas estações como nos servidores. Linux no Banco do Brasil O jornal Gazeta Mercantil publicou uma matéria tratando do uso de Software Livre pelo Banco do Brasil. Entre as vantagens advindas desse uso, o artigo relata a economia de R$ 89 milhões nos últimos quatro anos, desde que foi iniciada a migração para SL, simplesmente devido à ausência de pagamentos de licenças de software. Nova versão do Bacula Foi lançada a versão 2.0 do software de backup de redes Bacula, em versões para Linux, Unix, Windows® e MacOS X. Entre as novidades da última versão está a possibilidade de migração de dados entre sistemas de arquivos diferentes. Há a possibilidade de se contratar suporte corporativo a partir do fabricante.

http://supertuxbr.blogspot.com 22

http://www.linuxmagazine.com.br


Notícias | CORPORATE

Notas Mandriva Club no Brasil Até o último mês, para ingressar no Mandriva Club, era necessário que os usuários possuíssem cartão de crédito internacional, pois a inscrição somente era possível através do site internacional do Mandriva Club. Agora a Mandriva Store brasileira, em www.mandrivastore. com.br, já permite a compra através de boleto bancário e cartão de crédito brasileiro. O Mandriva Club oferece acesso ao download antecipado de softwares, como imagens de CDs e DVDs de instalação das últimas versões do Mandriva Linux, além de descontos na Mandriva Store, participação no desenvolvimento da distribuição e acesso a plugins e softwares comerciais. Linux nos caças americanos A Lockheed Martin, fabricante de aeronaves para a Força Aérea Americana, equipará dois de seus caças F-16 com dispositivos avançados de gráficos 3D e geração de imagens. As empresas selecionadas para fornecer a solução de software e hardware, Parallax Capital Partners e Concurrent, essa última especializada em sistemas Linux de tempo real para missão crítica, implementarão a solução com uso do RedHawk Real-time Linux, a distribuição da Concurrent baseada no Red Hat Enterprise Linux 4. Java Application Server no Ubuntu A Sun se aproximou da Canonical, fabricante do Ubuntu, para oferecer oficialmente o Java Enterprise Edition 5 Application Server para essa distribuição. A Sun também está buscando homologar o Ubuntu em seus servidores Opteron, e já o fez na linha Niagara.

➧ Servidores de virtualização da Unisys A Unisys começou a comercializar no Brasil os servidores corporativos ES7000/one. Equipados com processadores Xeon 7100, de núcleo duplo, essas máquinas são especialmente voltadas à implementação de virtualização, o que aumenta a eficiência e reduz custos de operação. De acordo com o fabricante, esta será a primeira geração de máquinas capazes de rodar os sistemas operacionais Linux, Windows®, Unisys OS 2200 e MCP simultaneamente. ■

➧ Lançado o Java SE 6

➧ Red Hat firma parceria com VMware

A Red Hat, fabricante de uma das distribuições comerciais Linux mais utilizadas em ambientes corporativos, fechou uma parceria com a VMware, empresa que desenvolve o sistema de virtualização de mesmo nome. O acordo visa ampliar a parceria que já existia anteriormente, oferecendo agora suporte aos fabricantes e ISVs que desejarem utilizar ambos os softwares em conjunto, de forma a melhorar sua interoperabilidade. É interessante observar a ocorrência desse acordo pouco depois de circularem rumores de que a Novell - principal concorrente da Red Hat no mercado de Linux corporativo - estaria interessada em adquirir uma empresa de softwares de virtualização, com sugestões de que se trataria da XenSource, fabricante do Xen. Esse software de código aberto costumava ser a aposta da Red Hat para a virtualização em Linux. Porém, com a Novell adotando uma estratégia mais agressiva de aquisição da empresa, é possível que a empresa do chapéu vermelho tenha se visto obrigada a buscar alternativas. ■

➧ Economia de 50% com Linux

Os Infocentros Acessa São Paulo, centros comunitários de acesso à Internet no Estado de São Paulo, realizaram a migração de algumas de suas estações de acesso para Linux. A solução anterior, baseada em rich clients com sistema operacional da Microsoft, foi integralmente substituída por thin clients da brasileira Tecnoworld, rodando Linux. Com isso, a Prodesp, coordenadora técnica do projeto Infocentros Acessa São Paulo, relatou uma economia de 85% nos custos da solução. Cada novo aparelho, possui menor custo, pois a necessidade de hardware é menor que a modelo anterior, e a manutenção também foi facilitada, com uma economia de 40% por conta da possibilidade de acesso remoto. ■

Após mais de dois anos de desenvolvimento, a Sun lançou o Java Platform Standard Edition 6, junto com uma nova versão do ambiente de desenvolvimento NetBeans 5.5. O download é gratuito, embora a licença adotada ainda não seja a GPL. A última versão do Java inclui ligações (bindings) para outras linguagens populares, como PHP, Python, Ruby e JavaScript. Essas novidades são decorrentes da adoção de um framework para linguagens de script, sobre o qual é possível implementar os “Scripting Engines”, coleções de classes de APIs para interagir com outras linguagens, liberado sob a licença BSD. Os scripting engines são baseados no “Rhino JavaScript Engine”, que já vem integrado e configurado. O NetBeans também contém diversos avanços importantes, como um novo componente de gerenciamento de layout (apelidado anteriormente de “Matisse”), que facilita o desenvolvimento de interfaces com o usuário. De acordo com a Sun, o suporte ao Windows® Vista também foi melhorado nessa versão. ■

➧ Mandriva no Classmate PC

O computador portátil fabricado pela Intel para auxiliar o processo educacional de estudantes de países em desenvolvimento, Classmate PC, virá com o Mandriva Linux 2007 pré-instalado. As duas empresas já vêm trabalhando na solução conjunta há vários meses, na busca de uma melhor integração de drivers ao hardware das máquinas, entre outros fatores. Os exemplares definitivos do computador deverão estar disponíveis para a comercialização com escolas no segundo semestre de 2007, e serão equipados com processador Celeron-M 900 MHz, 256 MB de memória e até 2 GB de memória flash, pesando ao todo 1,3 kg. Posteriormente, o Classmate PC deverá ser comercializado também na Índia e no México, com o mesmo sistema operacional. ■

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

23


CORPORATE | Entrevista

André Vilela, diretor do Programa de Marketing de Sistemas e Tecnologia da Unisys Brasil

CORPORATE

Ao gosto do cliente

A Unisys é especializada em serviços de TI. Como tal, precisa oferecer suporte aos principais sistemas operacionais para o mercado corporativo. A recente inclusão do Linux entre os sistemas suportados pela empresa confirma as observações de que o pingüim não apenas é importante nesse mercado, como sua presença já se faz sentir entre seus principais players. por Pablo Hess

A

Unisys é uma das empresas de Tecnologia da Informação atuantes há mais tempo no mercado, e também uma das mais importantes mundialmente. Na era da computação em mainframes, até a década de 1980, a empresa se destacou na produção dessas máquinas. Com a mudança do foco movendo-se para os serviços em TI, no início da década de 1990, a Unisys continuou ocupando um lugar de destaque no cenário de TI. Nos últimos anos, com o crescimento dos sistemas de Código Aberto, principalmente o Linux, a empresa americana passou a oferecer também suporte a essa plataforma, percebendo sua importância para o mercado corporativo.

Figura 1

Linux Magazine» Qual a estratégia da Unisys para o Software Livre? André Vilela» Enxergamos o Linux e o Código Aberto como uma plataforma bastante interessante do ponto de vista do mercado, mas não somos uma empresa especificamente de Software Livre. Como não possuímos uma bandeira específica em relação a plataformas abertas ou proprietárias, somos capazes de oferecer nossos produtos, serviços e soluções em qualquer ambiente corporativo. Partindo do princípio de que nossos clientes têm total propriedade para decidir qual plataforma desejam, a Unisys não tenta forçá-los a percorrer algum caminho contra André Vilela é sua vontade. Porém, obdiretor do Programa de Marketing de servamos que o Software Sistemas e Tecnologia Livre é uma boa solução da Unisys Brasil. para diversas empresas e,

justamente por isso, criamos um programa estratégico mundial para oferecer softwares de código aberto em qualquer ambiente corporativo. Oferecemos soluções de TI para que nossos clientes disponham de um ambiente de negócios seguro. LM» Que parcerias a empresa desenvolveu desde que começou a trabalhar com tecnologias de Código Aberto? AV» Nós criamos, em conjunto com diversas outras empresas internacionais, um grupo mundial dedicado ao Código

Hilary Quinn - www.sxc.hu

uma tentativa de suplantar uma empresa já estabelecida. O sistema não era uma plataforma aberta de fato e, exatamente por esse motivo acabou por aprisionar seus clientes, o chamado “vendor lockin”, prestando na realidade um desserviço. As tão propaladas interoperabilidade e compatibilidade jamais foram alcançadas, com o sistema tornando-se refém de uma indústria. Na Unisys, acreditamos que o Linux tenha um grande potencial como catalisador da migração de antigas variantes do

Os consultores de mercado apontam que o principal foco de crescimento do Linux será como substituto do Unix, em suas diversas variações. Aberto, que vai muito além do Linux. Esse grupo tem como objetivo esclarecer ao mercado corporativo as características do Software Livre. As empresas realmente se interessam em conhecer a plataforma de código aberto, estudar e avaliar seus benefícios e desvantagens, e nosso grupo tem justamente o papel de difundir as informações e o conhecimento acerca dessa área. LM» Como você enxerga o futuro do Có-

digo Aberto no ambiente corporativo?

AV» Os consultores de mercado apontam

que o principal foco de crescimento do Linux será como substituto do Unix, em suas diversas variações. Mas aqui cabe uma pequena digressão sobre a história do Unix: o Unix foi introduzido comercialmente sob a chancela de Open Systems, 0 que se mostrou, simplesmente,

Unix para uma nova plataforma moderna, aberta, e independente de fornecedor. Por isso mesmo, nos esforçamos para não prender nossos clientes usuários de Código Aberto a nossos produtos proprietários, pois é importante que eles se sintam confortáveis com suas escolhas. E por isso mesmo percebemos que o maior espaço para o Linux é no ambiente corporativo, e não nos desktops domésticos, onde as necessidades do usuário são diversas demais, como alvos móveis. LM» O que o Linux e o Software Livre agregaram ao modelo de negócios praticados pela Unisys? AV» A empresa traz a experiência corporativa. Isso significa que conhecemos os caminhos a percorrer no mundo corporativo para realizar a adoção de um sistema de forma ampla. Simplesmente ter técnicos

http://supertuxbr.blogspot.com 24

http://www.linuxmagazine.com.br


Entrevista | CORPORATE

desenvolvendo software não é o bastante; o conteúdo do software deve atender a expectativa da indústria. É exatamente sobre esse ponto que se construiu a história de nossa empresa. Nós tivemos o cuidado de não adotar uma única bandeira em relação ao ambiente operacional, e estabelecemos parcerias com Red Hat e Novell. O fator mais importante nesse mercado é termos certeza de que esses sistemas operacionais dispõem de um suporte adequado no ambiente corporativo: é necessário assegurar a oferta de suporte técnico, o cumprimento de prazos, a qualidade dos softwares e soluções, e ainda oferecer interoperabilidade estável e sem conflitos. Acima de tudo, é fundamental que todos esses requisitos sejam respondidos por uma única empresa; caso contrário, a multiplicidade de fontes de informação elimina a praticidade da solução. LM» Que produtos e serviços a Unisys de-

por exemplo, já portamos diversas ferramentas que antes existiam somente em mainframes, e agora rodam também sobre Linux. Escrevemos também o código para o particionamento físico de nossos servidores para que esse recurso seja disponibilizado também em Linux. Como você avalia o uso do Código Aberto em ambientes de missão crítica? AV» Nós possuímos um aplicativo para controlar sistemas de transporte aéreo, chamado Air Core. Essa aplicação foi desenvolvida em um sistema proprietário, e agora foi portada para o Linux pela Unisys. Com esse exemplo, demonstramos a qualidade do Código Aberto para lidar com sistemas de missão crítica. Nossos sistemas para telefonia constituem outro importante exemplo de aplicação de missão crítica que roda sobre Software Livre. LM»

senvolve e disponibiliza com o Linux? AV» Temos parcerias com a Red Hat, e já havíamos firmado também uma com a JBoss antes de sua aquisição pela primeira, com o intuito de garantir que os ambientes de Código Aberto fossem suportados no ambiente corporativo. Na área de bancos de dados, temos parcerias sólidas com a Oracle, para suporte e teste de performance. Se alguém desejar implementar serviços, soluções e aplicações que façam uso desses componentes, ou também com o uso de bancos de dados de Código Aberto, como MySQL e PostgreSQL, nós seremos a empresa a responder por todas as etapas dessa implementação, além da manutenção e suporte, naturalmente. Por exemplo, a Unisys dispõe de consultores especializados na realização de ambientes Websphere para JBoss. Nós buscamos suportar todos os componentes de Código Aberto do âmbito corporativo suportados pela Unisys, e vamos até a adequação do hardware, com a fabricação e comercialização de servidores, nos quais testamos o desempenho em conjunto com Software Livre.

Na sua visão, existem barreiras para a adoção do Linux no ambiente corporativo? AV» Acredito que o fato de o Unix ser fechado é o grande freio na migração, pois dificulta o uso no Linux dos mesmos softwares. Entretanto, ao mesmo tempo, isso também a estimula. O que vejo como empecilho para uma maior adoção do Linux é a percepção, por parte das empresas e gestores de TI, de que o Código Aberto é maduro, seguro, e de que há empresas com as quais se pode contar de forma absolutamente confiável para essa adoção. Especificamente em respeito à segurança, é fato que os ambientes complexos, ou seja, aqueles com diversos tipos de servidores, são mais difíceis de mantermos seguros. Por isso, criamos o Application Defender, um software escrito para ambientes de Código Aberto que protege aplicações Java rodando sobre plataformas abertas, evitando assim o acesso direto de hackers aos servidores.

LM» A Unisys é membro do OSDL. Que contribuição a empresa faz para o desenvolvimento de softwares de Código Aberto? AV» Além dos OSDL, a Unisys faz parte de diversos fóruns e iniciativas relacionados ao Código Aberto. Temos contribuído com código de forma consistente;

Que vantagens o Linux oferece como plataforma de desenvolvimento e de serviços para a Unisys? AV» Essa pergunta é muito importante. No Linux, nós desenvolvemos em Java. Possuímos uma linguagem de quarta geração (ABS – Agile Business Suite), que usamos em nossos mainframes. No

ambiente corporativo, é fundamental gerar código bem documentado e de forma rápida. Originalmente, a ABS gerava somente código em COBOL, mas desenvolvemos módulos para a geração de código em .NET e Java. Hoje conseguimos desenvolver programas de Código Aberto usando o mesmo tipo de tecnologia que é aplicada aos mainframes, e com documentação abrangente e precisa. Com isso podemos desenvolver, por exemplo, um sistema de vendas pela Internet, sem sabermos em que plataforma ele rodará: mainframes, Código Aberto, plataforma Microsoft... Ao final, basta selecionarmos a plataforma desejada, assim como o sistema de banco de dados, e teremos o código gerado para a solução. Se mudarmos a plataforma ou o banco de dados, basta gerarmos novamente o código.

Algumas empresas apóiam Linux para derrubar a Microsoft, mas nós não.

LM»

LM»

Como você encara a competição no segmento corporativo? AV» Nossos principais concorrentes estão comprometidos demais com o Unix, enquanto nós não precisamos, de forma alguma, defendê-lo. Isso nos traz uma profunda independência de plataforma, muito importante nessa competição pelo mercado. Acho importante ressaltar que nossa posição no mercado é absolutamente isenta no que diz respeito à escolha de plataformas abertas ou proprietárias, e acreditamos ser esse o nosso principal diferencial em relação à concorrência. Algumas empresas apóiam Linux pra derrubar a Microsoft, mas nós não. LM»

Que vantagens são oferecidas por sistemas de ponto-de-venda que rodem sobre a plataforma Linux, como é o caso do Calypso? AV» O Calypso é um caso bastante particular em nossos softwares. Embora seja um sistema de missão crítica, ele é completamente diferente do Air Core, por exemplo, e sua plataforma de desenvolvimento e execução, o Linux, foi escolhida por méritos puramente técnicos. ■ LM»

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

25


CORPORATE

Código aberto ou proprietário por André Vilela

V

elocidade, capacidade, agilidade e rendimento são características que definem o desempenho de tarefas, iniciativas, trabalhos e projetos. Na área de Tecnologia da Informação, o exercício de medir desempenho é árduo. Como atividade-meio, destinada a oferecer condições para que uma empresa atinja suas metas, torna-se difícil o cálculo dos seus resultados principais. Afinal, invariavelmente o foco da avaliação centra-se na atividade-fim. Com o surgimento dos sistemas de Código

O Software Livre é a mais significativa inovação tecnológica apresentada nos últimos tempos. Aberto em contraponto ao software proprietário, a medição tornou-se uma prática ainda mais espinhosa. Por outro lado, ampliou-se a importância da gestão tecnológica dentro das organizações. O crescimento dos sistemas de Código Aberto é exponencial e irreversível no mundo. O Software Livre é a mais significativa inovação tecnológica apresentada nos últimos tempos. O fenômeno irá impulsionar ainda mais as empresas desenvolvedoras de software no país, já protagonistas de um crescimento anual de 20%, índice significativamente maior comparado ao de outros segmentos de TI, como hardware e serviços. Por outro lado, o software proprietário chegou a um nível de maturidade muito grande. Os grandes fornecedores de programas no mundo são precursores do desenvolvimento da Tecnologia da Informação, ou melhor, da Informática, como era chamado comumente todo e qualquer conjunto de conhecimento na área.

Nas empresas há uma ferrenha discussão sobre a adoção de software proprietário, em oposição aos benefícios da adoção do software de Código Aberto. Para usar, copiar e redistribuir o software proprietário, é preciso pagar ou solicitar uma permissão ao seu fabricante. Os sistemas de Código Aberto, ao contrário, permitem que o usuário efetue livremente, sem ônus algum, modificações no programa original. O ponto nevrálgico dessa questão está na confiabilidade dos sistemas e redes de computadores. Hoje, este item lidera a preocupação — e os investimentos — das empresas em TI. E na implementação de softwares, o que mais se pergunta é sobre sua vulnerabilidade. E os softwares proprietários levam (ainda) ligeira vantagem neste aspecto. Porém, no debate da questão, é importante analisar que cada corporação tem a sua estratégia e visão de trabalho, de acordo com as suas necessidades e, principalmente, interesse no desenvolvimento dos negócios. Tais referências constroem o modelo de gestão tecnológica da organização. Porém, são itens de princípio, que podem ser alterados a qualquer momento. Aliás, a flexibilidade é uma das maiores virtudes da gestão de qualquer área. No caso do segmento de Tecnologia da Informação, a prática legitima as ações. Assim, com relação ao software proprietário e ao Software Livre, o que se observa é que ambos podem coexistir nos projetos de TI das empresas. Não há mal nisso. Em ambos os casos, o que se deve verificar é a sua performance, aliada ao custo-benefício: ou seja, preço e aproveitamento. E isso só se resolve com lúcido e equilibrado discernimento das iniciativas de TI a serem empreendidas. ■

O autor André Vilela é diretor do Programa de Marketing de Sistemas e Tecnologia da Unisys Brasil.

http://supertuxbr.blogspot.com 26

http://www.linuxmagazine.com.br


Código Aberto: modelo para software de qualidade

O

utro dia, conversando com um CIO, ele se mostrou apreensivo quanto à qualidade do código dos softwares de Código Aberto. Sua dúvida era se esses softwares teriam qualidade adequada às necessidades de um exigente ambiente corporativo. Parodiando a campanha de contrapropaganda de uma conhecida empresa de software, vamos aos fatos. Existem dois métodos básicos de desenvolvimento de software: os princípios catedral e bazar. Esses nomes foram cunhados a partir do célebre trabalho “The Cathedral and the Bazaar” (A Catedral e o Bazar) [1], de Eric Raymond. O método batizado de catedral é baseado no planejamento centralizado, com evolução top-down e rígido relacionamento entre a gerência e os desenvolvedores, quanto a prazos, metodologias adotadas e tarefas, dentro de uma hierarquia organizacional. O desenvolvimento é interno à empresa e apenas nos ciclos de teste alfa e beta que o produto é exposto ao mercado, através de uma restrita e controlada comunidade de usuários (individuais ou empresas clientes) que se prontificam a cooperar nos testes e depurações. Mas todo o código-fonte é proprietário e fechado ao mundo externo, e restrito apenas aos olhos dos desenvolvedores da empresa que produz o software. É o método tradicionalmente adotado pela indústria de software em seus produtos comerciais. Seu nome deriva do processo de construção das catedrais na Idade Média. O princípio bazar, como o nome indica, é baseado em uma forma de desenvolvimento mais livre, sem centralização do seu planejamento e execução. É o modelo típico do Código Aberto. O desenvolvimento é efetuado em rede, por uma comunidade de desenvolvedores voluntários, na maioria das vezes sem vínculos entre si, em uma organização informal. A comunicação é efetuada pela Internet, virtualmente e sem fronteiras geográficas, e apenas existem alguns princípios que regulam o trabalho. A liderança do projeto não é definida de maneira prévia e formal, mas emerge naturalmente pelos méritos de um determinado membro da comunidade de voluntários. Essa é uma característica diferenciadora do movimento de Código Aberto: a sua exploração de forma inteligente do poder da produção colaborativa. O que torna esse poder extraordinário é a capacidade de melhorar com o tempo, curando-se organicamente, como se o enorme exército de colaboradores de um projeto como o Linux fosse um sistema imunológico, sempre vigilante e ágil na reação a qualquer ameaça ao organismo. E apesar dos receios naturais causados por um modelo de desenvolvimento inovador para os padrões tradicionais, os projetos de Código Aberto não descambam para a anarquia; pelo contrário, mantêm uma coesão impressionante.

CORPORATE

Cezar Taurion

Os códigos são revisados pelos próprios pares e geralmente o melhor código é selecionado (meritocracia). Como não existe um departamento de marketing influenciando prazos, o ritmo de desenvolvimento é direcionado pela disponibilidade de tempo e dedicação dos desenvolvedores voluntários. O método bazar gera uma forte tendência à produção de código de alta qualidade. O código é lido e analisado por diversos desenvolvedores, às vezes na escala das centenas, o que acelera o processo de depuração e correção de erros. Além disso, não existe pressão de prazo, o que permite mais ciclos de depuração. A decisão de

Essa é uma característica diferenciadora do movimento de Código Aberto: a sua exploração de forma inteligente do poder da produção colaborativa. liberar o código é fruto de consenso do grupo, e não uma imposição de marketing, como muitas vezes ocorre em um projeto comercial. O resultado é um software de alta qualidade, como inúmeros estudos independentes têm demonstrado. Portanto, a preocupação do CIO, basicamente, decorre principalmente do desconhecimento sobre o que é realmente o Código Aberto, e não de fatos reais. ■

Mais Informações [1] The Cathedral and the Bazaar (em inglês): http://catb. org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ [2] (em português): http://www.geocities.com/CollegePark/Union/3590/pt-cathedral-bazaar.html

O autor Cezar Taurion é Gerente de Novas Tecnologias Aplicadas da IBM.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

27


Ganhe desempenho para seus sistemas e servidores

CAPA

Economia através da eficiência A otimização de velocidade de softwares para Linux é econômica e ecologicamente correta. Em vez de lançar mão de novos hardwares indiscriminadamente, o melhor é descobrir os travamentos nos condutores do sistema. Esta edição será útil tanto para administradores que desejem obter o maior desempenho possível de seus servidores sem alterar seu hardware como para desenvolvedores em busca de técnicas para acelerar seus softwares. por Achim Leitner

A

matéria de capa deste mês mostra como os autores divergem em relação aos meios para se alcançar o aumento do desempenho de um sistema: enquanto um deles aconselha ativar o registro detalhado, o outro discorda, sugerindo justamente o contrário. Ambos têm razão; na realidade, uma análise dos registros revela alguns gargalos. Infelizmente a tarefa de registrar demanda tempo, pois requer a gravação de dados no disco rígido. Se o servidor rodar de maneira estável e não houver qualquer outro freio a ser eliminado, então a desativação do registro é altamente benéfica. Nesse caso, vale a pena ponderar sobre a necessidade do registro. Mas atenção: quem não costuma documentar seus procedimentos fatalmente ficará de mãos vazias no caso de uma falha ou após uma queda, para identificar os culpados. Informações exatas sobre cavalos-vapor ocultos e freios de mão ativados são fornecidos por um padrão de testes virtual. Seus benchmarks são uma faca de dois gumes, pois medições podem facilmente fornecer uma sensação errônea de certeza e precisão. De qualquer forma, avaliações são indispensáveis. As páginas de informações dos fabricantes não servem como alternativa, pois freqüentemente trazem meias-verdades, mentiras, ou omitem detalhes importantes. Algumas dessas curiosidades são listadas pelo artigo à página 34 (artigo de benchmarking), que também sugere que as discrepâncias sejam imediatamente informadas ao público. De uma forma geral, as condições de licenciamento de muitos fabricantes proíbem a publicação de testes incômodos aos fabricantes. O artigo da página 37 (artigo Python) esclarece como programadores Python buscam segmentos de código a serem otimizados para acelerar seus scripts com o menor esforço possível. O processo sistemático apresentado serve para todas as linguagens.

ÍNDICE Os 44 Mandamentos do servidor Cinco especialistas dão dicas e sugestões de como fazer servidores de email, Web, banco de dados e de arquivos funcionarem mais rápido. pág. 29 Exemplos de benchmark Não acredite em relatórios - apenas benchmarks e avaliações confiáveis dizem realmente do que um produto é capaz. pág. 34 Python otimizado Muitos programas são desenvolvidos nessa linguagem interpretada; por isso, a otimização desses softwares é obrigatória. pág. 37

http://supertuxbr.blogspot.com 28

http://www.linuxmagazine.com.br


Ações gerais | CAPA

Otimização de servidores Apache, Postfix, Oracle/MySQL e Samba

CAPA

Os 44 mandamentos do servidor A homepage da empresa está conectada ao Slashdot desde as 11:20h; a nova massa de emails deve sair e o banco de dados tem que retornar os dados solicitados em tempo recorde. Este artigo mostra quais técnicas o servidor pode utilizar para vencer a sobrecarga. por Badran Farwati, Peer Heinlein, Ralf Hildebrandt, Charly Kühnast e Volker Lendecke

Ben

A

otimização de servidores é uma questão de sobrevivência. A partir de uma determinada carga de uso, sua eficiência despenca. Se mais solicitações forem feitas, aumentando ainda mais a pressão sobre ele, todo o sistema também quebra. Mas é possível evitar a queda de um serviço crítico da empresa. A melhor solução nem sempre é empregar hardwares mais rápidos. Uma otimização da configuração do sistema do servidor, assim como dos serviços que rodam nele, pode fazer milagres. Cinco profissionais contam o que os administradores de sistema devem fazer para manter o fluxo de dados em seus servidores web, de email, de banco de dados ou Samba. Independentemente do tipo de servidor, há algumas regras que todo administrador de sistemas deveria observar. Ralf Spenneberg, autor e docente na área de Administração de Sistemas Linux, conta que, para um desempenho otimizado, deve-se levar em consideração o seguinte: ➧ Fique atento às combinações! Para cada serviço há ao menos um fator que define o desempenho: CPU, E/S ou uso da memória. Por isso faz sentido dividir os serviços, que também tenham o mesmo fator determinante de desempenho, de tal maneira que dois serviços não rodem na mesma máquina (figura 1).

jam

Na maioria das vezes, o gargalo do desempenho do servidor de emails localiza-se no disco rígido ou na latência de rede. Caso um antivírus não exija tempo adicional do processador, a CPU de um servidor responsável pela entrega de mensagens tem tempo suficiente para realizar outras tarefas. ➧ Seja observador! Somente com uma observação precisa e duradoura podese determinar quais são os fatores determinantes de performance, e quais as faixas normais de uso de CPU, E/S e memória. Os comandos de diagnóstico vmstat e sar analisam o fluxo de disco; top, htop, uptime e sar ajudam a supervisionar a CPU; ps, top e sar são úteis na determinação do uso de memória. Situações de carga total levam esses valores além dos normais. Uma supervisão através de SNMP (por exemplo, por meio do Zabbix [1] ou do Nagios) avisa, além disso, sobre catástrofes eminentes. Se forem localizadas áreas vulneráveis, registros supérfluos devem ser desativados. ➧ Partições de swap são um perigo para o administrador de sistemas. Muitos servidores permitem determinar o limite para o número máximo de instâncias rodando num mesmo momento. Como a manipulação de memória através da swap torna extremamente demorados outros acessos ao disco,

in E

ar w

icke

reE

sthe

r Gr

oen

- ww

w.sx c

.hu

cada vez mais processos esperam pelo cumprimento de suas ordens de E/S, o que leva a um ciclo horrendo de consumo progressivo de swap. Todos os serviços juntos não devem produzir um número de instâncias superior ao armazenável na memória física do disco da máquina servidor.

RAM ou disco?

➧ Não se deve deixar a memória do servidor ociosa! Em diversos servidores ela também fica menor: vale a pena carregar apenas módulos necessá-

CPU

E/S

RAM

CPU

E/S

RAM

Serviço 1 Serviço 1

Serviço 2 Serviço 2

Figura 1: Elefante no buraco da agulha: diferentes solicitações de dois serviços referentes a tempo de CPU, memória e E/S provavelmente usam melhor a capacidade total do servidor quando executados como solicitações concorrentes.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

29


CAPA | Ações gerais

rios, o que também é válido para a recompilação de pacotes. Com isso, reduz-se o espaço ocupado na RAM. Normalmente o Apache carrega vários módulos desnecessários na configuração padrão. No Postfix, em algumas circunstâncias, não faz sentido gerar binários sem suporte a MySQL, TLS ou LDAP. O espaço de memória ocupado pelo CDB é muito menor que o do Berkeley DB. ➧ As partições de dados, sistema e log devem ficar claramente separadas! Partições distintas permitem escolher o melhor sistema de arquivos para cada tarefa (por exemplo Ext3 para a de sistema e XFS para a partição de dados). Discos próprios ou sistemas RAID evitam que a cabeça de leitura do disco em acessos concorrentes se movimente exageradamente, o que degrada o desempenho. ➧ Use um sistema de log! Sem um log do sistema, nenhum dado para análise ou busca de erros pode ser disponibilizado. Um - diante do nome do arquivo de log em /etc/syslog.conf ativa a escrita assíncrona dos arquivos de log e diminui a carga no sistema de arquivos.

Armazenagem segura

➧ Deve-se sempre proteger a configuração atual de alterações! Pequenas alterações podem deteriorar inesperadamente o desempenho do servidor. Até o motivo ser encontrado, perde-se um tempo precioso. Por isso, o administrador de sistemas deve utilizar um controle de versões Memória

Memória

Espaço de Swap RAM física

RAM física

Processo

Processo

Processamento

Tempo

Processamento

Tempo

Figura 2: Um cenário de queda clássico: o número de processos para a carga sobe tanto que a máquina começa a usar a memória virtual, que cresce ainda mais por causa da diminuição da capacidade de carga. Na pior hipótese, o final da história é um sem memória disponível.

para arquivos de configuração, ou ao menos fazer um backup das alterações. Assim ele pode reagir rapidamente quando os clientes começarem a reclamar de uma repentina queda de velocidade. ➧ Tudo que não sofrer alterações deve ficar no cache! O cache auxilia em muitas situações: proxies reversos (Squid, por exemplo) diante de sistemas CMS reduzem a carga sobre o banco de dados. Servidores DNS com caching (por exemplo Dns-Cache e Bind) economizam solicitações DNS desnecessárias em analisadores de log e servidores de email. O cache integrado ao antivírus Amavisd New evita a repetição de análise do mesmo conteúdo.

Perguntar ao porteiro

➧ Visitas indesejadas devem ser dispensadas o quanto antes. Quem não se aproxima do servidor também não consegue gerar qualquer problema. Um firewall, um controle de acesso com verificações smtpd_*_checks no Postfix excluem hóspedes indesejados antes que estes exijam minimamente do sistema. O Anvill Server no Postfix [2] limita, além disso, o número de emails que o servidor manipula por unidade de tempo, mantendo as filas em tamanhos que ele consiga processar sem prejudicar seu desempenho. O Cband [3] se encarrega de realizar uma limitação inteligente da largura de banda no servidor web Apache. ➧ Bata sem fazer barulho! Port-knocking é uma ótima forma de poupar recursos, pois mantém o firewall completamente fechado e, no entanto, permite o login a usuários confiáveis [4]. Até mesmo senhas de uso único (one-time passwords) e a mudança das portas de serviços como SSH fazem bem à segurança, e além disso evitam que visitas indesejadas danifiquem a máquina.

Servidor web

Se o endereço de uma página Web estiver publicado em um local muito visitado, não deve demorar muito para que sua visitação aumente consideravelmente. Charly Kühnast, o administrador de sistemas responsável pelos firewalls e DMZs em um datacenter do Baixo Reno, aconselha:

➧ Escolha o módulo de multiprocessamento correto! O MPM prefork fornece uma série de processos idênticos do Apache, e é indicado para máquinas com até dois processadores. Quanto mais CPUs um servidor web possuir, melhor será optar pelo MPM worker, que trabalha com várias threads por processo. ➧ Use o cache com responsabilidade! O Apache oferece os módulos mod_disk_cache e mod_mem_cache, que são mecanismos para armazenar em cache os conteúdos chamados com freqüência. Quem possuir bastante RAM deve optar pelo mod_mem_cache [5].

Peso a bordo

➧ Livre-se do peso morto! O mecanismo HTaccess é incontestavelmente útil, mas também um destruidor de desempenho. Então, livre-se dele se você não o utilizar: AllowOverride None economiza o lento processamento do arquivo .htaccess. ➧ Elimine mais peso ainda: o administrador também deve tirar do caminho links simbólicos (Options -followSymlinks) e todos os módulos desnecessários. A melhor solução é compilar o Apache estaticamente com tudo de que precisamos, e não carregar absolutamente nenhum módulo no tempo de execução. ➧ Abdique dos lookups! Lookups de nomes de máquina são terríveis para o desempenho, mesmo no caso de servidores de nome velozes. HostnameLookups off elimina esse entrave. Quem precisar urgentemente da informação pode executar os lookups mais tarde na avaliação dos logs com uma ferramenta como o Webalizer. ➧ Cuide de seus clientes e não os deixe esperar. A diretiva MaxClients tem papel central no desempenho. Se ela receber um número baixo demais, nem todos os clientes serão atendidos em tempo real. Se for muito alta, os clientes aguardarão tempo demasiado na fila de espera TCP. O valor correto só pode ser encontrado através de testes de carga. ➧ Desista de logfiles desnecessários! A atividade de registrar ações custa tempo. Um arquivo de log que ninguém mais usa já é desnecessário. Se o log é armazenado em discos externos, é desejável que seja um SAN

http://supertuxbr.blogspot.com 30

http://www.linuxmagazine.com.br


Ações gerais | CAPA

bem veloz, pois NFS geralmente é demasiadamente ineficiente. ➧ Use o Sendfile. Sendfile é uma chamada de sistema que delega ao kernel o envio de arquivos por soquetes de rede. Isso economiza memória (evita buffers de leitura) e além disso é mais rápido. O Apache utiliza a Sendfile quando se ativa EnableSendfiles. ➧ Preste atenção ao MMAP! O suporte a MMAP através do módulo mod_mmap_static permite ao Apache acessar um arquivo como um campo de memória integrado, o que melhora o desempenho. ➧ Não abuse do monitoramento de seu servidor! A auto-supervisão do Apache (opção SetHandler server-status...) é útil para testes e depuração. Depois de terminados os testes, ela deve ser desativada.

Servidor de email

Quando o servidor de email ameaça ter um colapso devido à carga, devem ser estabelecidas prioridades claras: primeiramente, é importante que o sistema permaneça estável e trabalhe efetivamente mesmo sob forte exigência. Então a velocidade de processamento deve estar no centro dos interesses. Peer Heinlein, instrutor da LPI e autor de artigos sobre Código Aberto, dá as dicas práticas: ➧ Limite o número de instâncias. O valor padrão no arquivo master.cf do Postfix define como 100 o número máximo de instâncias. Dependendo da versão e recursos compilados, uma instância pode custar 3 MB de RAM, de modo que, em servidores com pouca memória, há a ameaça de uma falta de memória, e com isso uma queda do sistema. Mesmo programas anti-spam e antivírus requerem grandes quantidades de memória quando muitas instâncias rodam paralelamente. Muitas instâncias paralelas em um sistema sobrecarregado fazem com que elas se atrapalhem mutuamente, e terminam por levar a uma forte deterioração do fluxo de dados (figura 2). ➧ Use um disco RAM para auxiliar o filtro de spam. Filtros de spam ou vírus como o Amavisd New e o Spamassassin geralmente criam um gargalo no servidor de emails: eles causam uma grande carga sobre a CPU e E/S, e assim definem todo o fluxo do sistema. É interessan-

te, nesse caso, remover o arquivo /var/spool/amavis/tmp para um disco RAM (figura 3). Devido à alta performance, o servidor passa a tolerar aproximadamente 14 em vez das sete instâncias sugeridas como máximo do filtro de spam.

Evitar caminhos confusos ➧ Faça cache das solicitações DNS! Todos os servidores de email necessitam de DNS e precisam administrar incontáveis interrogações: quem são os servidores MX de um domínio? Existe algum domínio de envio? Há algum cliente em uma lista RBL? Um servidor DNS inserido em /etc/ resolv.conf, que se localize na própria rede e que armazene solicitações, economiza valiosos milisegundos em grandes volumes de acesso. ➧ Não desvie do caminho! O procedimento mais comum envia emails do Postfix para o filtro de spam ou vírus. Estes, por sua vez, devolvem os emails para o Postfix. Se forem adicionadas mais aplicações, seguemse mais ciclos como esse. O melhor é não enviar os emails dos filtros de spam ou vírus de volta para o Postfix, mas passá-los diretamente para a próxima aplicação. Se estiver definido claramente que se trata apenas de tráfego de email sendo transferido, a última aplicação do fluxo pode mandar os emails diretamente para um servidor de email, em vez de retorná-los para o Postfix.

Checar competências ➧ Você só deve agir se tiver competência! Quem recebe emails e não consegue organizá-los ou repassá-los acaba jogando seus recursos com as duas mãos pela janela. O emprego de local_recipient_maps e relay_recipient_maps é uma solução, pois o Postfix recebe emails apenas para contas que existem realmente. Isso evita carga desnecessária vinda de spammers que estão apenas testando endereços. Com endereços de remetentes ocorre algo semelhante: caso o domínio especificado não exista, dificilmente se trata de um email desejado. De qualquer forma, é impossível respondê-lo. A opção reject_unknown_sender_domain realiza

Postfix

Postfix

Postfix

Postfix

Disco RAM

Disco RAM

Spamassasin

Spamassasin

Figura 3: Solução lucrativa: como aplicações como filtros de spam ou antivírus no servidor de emails necessitam de muitos acessos de arquivo, em muitos casos vale a pena investir em um disco RAM para o diretório atual dos softwares de filtro que rodam no servidor.

uma requisição DNS para esclarecer isso antes que o servidor receba o email. ➧ Utilize apenas arquivos locais como tabelas Lookup do Postfix! A administração de usuários ou domínios no MySQL e no LDAP pode parecer muito confortável – porém, as requisições do Postfix podem causar um efeito bastante negativo. Uma tabela Lookup no formato hash ou, melhor ainda, btree, é sensivelmente mais rápida. Vale a pena criar um script que escreva em meia hora os dados de usuários atualizados da tabela MySQL ou LDAP em um arquivo local. ➧ Domestique os clientes inconvenientes com a limitação de espaço! Se um único cliente estiver sobrecarregando o servidor de email, ou se ocorrer um ataque, a limitação de espaço, através do parâmetro smtpd_client_connection_rate_limit, evita que o restante do tráfego de emails seja afetado. Até mesmo um firewall pode limitar o número máximo de conexões, e com isso evitar que o retorno de clientes abra centenas de conexões. ➧ Não se detenha com emails problemáticos. Se o tráfego de emails ficar congestionado, também pode ser porque o Postfix está gastando mal os recursos com muitas mensagens que não puderam ser enviadas. O parâmetro maximum_backoff_time determina o maior tempo que o Postfix deve esperar para tentar reenviar o email. Um aumento desse valor oferece mais tempo para uma primeira busca possivelmente bemsucedida, em vez de desperdiçá-lo com repetidas tentativas subseqüentes aparentemente sem resultado. Como opção, o parâmetro fallback_relay oferece a possibilidade de mover esses emails problemáticos

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

31


CAPA | Ações gerais

para outra máquina, que então realiza o trabalho sujo pelo servidor de verdade.

Servidor de banco de dados Qual é a causa quando o banco de dados entrega conjuntos de dados de maneira hesitante e a CPU praticamente não está ocupada? Além da qualidade de cada consulta SQL, o design do banco de dados e a configuração do servidor também contribuem de forma importante para o desempenho de um banco de dados. Badran Farwati, há sete anos administrador de bancos de dados, programador e atualmente sênior da Oracle na Biblioteca Nacional Austríaca, esclarece como aumentar o desempenho de um servidor de banco de dados: ➧ Escolha o índice correto! Um dos elementos mais importantes de um banco de dados são seus índices: tempos de resposta do servidor dependem decisivamente de sua qualidade. Um índice B*TREE (o tipo padrão em muitos bancos de dados) deve ser empregado quando a coluna indexada puder aceitar muitos valores diferentes. A árvore de busca desse tipo de índice cresce mais devagar. Para colunas que recebem poucos valores diferentes (por exemplo, grupos de produtos), RAM

RAM Parser

Parser

E/S

E/S

Local

Data

Tempo

Local

Data

Tempo

Tabela

Tabela

Figura 4: Desde a versão 5.1, o MySQL também suporta tabelas particionadas – que poupam o parser, no caso de perguntas que se referem a uma ou poucas colunas –, de ler a tabela por completo. Isso preserva os recursos do computador.

aconselha-se em vez disso um índice do tipo bitmap para Oracle, ou um tipo correspondente em outros bancos de dados. Para tabelas de poucas linhas, um TABLE ACCESS (FULL) (no MySQL um FULL TABLE SCAN) é mais rápido que o acesso pelo índice. Caso muitas perguntas utilizem uma função como UPPER(coluna xyz)), um índice do resultado dessa função se encarrega de melhorar o desempenho. Pressupõe-se que o sistema de banco de dados empregado suporte índices baseados em funções [6]. ➧ Apague índices desnecessários! O Oracle Optimizer não utiliza índices desnecessários em comandos. Independentemente de eles utilizarem ou não comandos SQL, o sistema SQL carrega em uma tabela todos os índices definidos. ➧ Evite índices fragmentados! Índices B-TREE fragmentam com o tempo através de atualizações ou inserções em uma tabela, o que torna as perguntas consideravelmente mais lentas. O grau de fragmentação pode ser verificado no Oracle com a instrução ANALYSE INDEX Index-name VALIDATE STRUCTURE. Com ALTER INDEX Index-name REBUILD ONLINE, o índice pode ser reconstruído. No MySQL, ANALYSE TABLE e OPTMIZE TABLE reconstroem um índice fragmentado.

A expressão correta

➧ Otimize os comandos SQL. O SQL é uma linguagem flexível. Na maioria das vezes, diversos caminhos levam ao mesmo objetivo. Freqüentemente, as aplicações se diferenciam no uso que fazem de seus recursos de E/S. EXPLAIN PLAN no Oracle, ou EXPLAIN, no MySQL, ajudam na otimização. Esses comandos esclarecem como os sistemas SQL constróem as perguntas, quais índices ela utiliza e quantos resultados intermediários o banco de dados produz. A partir do MySQL 5.1, está disponível o EXPLAIN PARTITIONS, para análise do comportamento de tempo de execução de tabelas particionadas [7]. ➧ Use de maneira correta o soft parsing disponibilizado por seu banco de dados. O sistema do banco de dados processa consultas SQL literalmente, ou seja, em palavras. Mesmo entre perguntas idênticas, que se diferenciam apenas em um único literal (por exemplo SELECT...

WHERE x=100... e SELECT... WHERE x=200...), o sistema não produz

nenhum anexo. Ela deposita uma cópia de cada pergunta na memória compartilhada. Se as perguntas diferentes por apenas um literal se repetirem uma centena de vezes, o banco de dados irá depositá-las cem vezes na memória (Hard Parse). Isso leva a uma fragmentação da memória. Um aumento da RAM ajuda apenas de maneira limitada. Se, no entanto, a pergunta na cláusula WHERE utilizar, em vez de um literal, um termo variável (comando BIND SQL), o sistema depositará as consultas SQL com esse termo na RAM, e não as modificará mais em uma nova chamada (Soft Parse).

Dividir e conquistar

➧ Limite o tamanho de suas tabelas! Tabelas com milhões de conjuntos de dados levam a um alto uso de recursos de E/S. Uma possibilidade de reduzir essa necessidade é desmembrar tabelas grandes em vários blocos. Desde o Oracle 8 e o MySQL 5.1, é possível particionar tabelas. Em comandos SQL que se referem apenas a determinadas colunas na cláusula WHERE, o parser deve fazer uma busca apenas nas partições relevantes (figura 4). O particionamento ajuda especialmente em trabalhos em lote que atualizem partes de uma tabela. ➧ Diferentes tipos de uso de bancos de dados levam a diferentes demandas de recursos da máquina: Decision Support Systems (DSS, [8]) são sistemas de pesquisa e busca, que normalmente executam repetidos SELECT e, com isso, processos de ordenação conjuntos, porém quase nenhuma ação de inserção, atualização ou exclusão. Um Online Transaction Processing System (OLTP, [9]), como por exemplo um sistema de catálogo on-line, ou um sistema de gerenciamento de conteúdo, serve normalmente a centenas de usuários ao mesmo tempo, que também modificam os dados. Com isso, as tabelas de índice também se alteram rapidamente. A escolha correta do índice, portanto, é decisiva para o desempenho. Caso um servidor de banco de dados sirva ambos os cenários de uso, deve-se optar, de acordo com o uso principal, por uma prioridade de CPU adequada aos diferentes tipos de uso. No Oracle isso é feito mais facilmente com o Resource Manager [10].

http://supertuxbr.blogspot.com 32

http://www.linuxmagazine.com.br


Ações gerais | CAPA

➧ Use conexões persistentes e o servidor compartilhado! A formação recorrente de conexões não persistentes custa recursos. Por outro lado, o Oracle, em servidores dedicados, inicia um processo para cada conexão, e o mantém na memória quando o usuário não acessa o banco de dados. Por isso a Oracle oferece uma solução para servidores compartilhados que mantém o número de processos baixo, administrando conexões e consultas em um grande pool. Isso preserva os recursos, especialmente em sistemas OLTP. ➧ Atente às tarefas em lote! Elas devem rodar exclusivamente em horas sem acesso durante a noite. ➧ Controle o número de conexões! O mais eficaz é separar servidores de aplicação e Web do servidor de banco de dados. Em todo caso, o número máximo de processos de ambos os lados deve ser bem definido: se o número máximo de processos no servidor web for maior que o do banco de dados, isso pode levar a uma inundação de conexões ao banco de dados, que será incapaz de reagir ao número excessivo de processos. As diretivas do Apache MaxClients, KeepAlive, MaxSpareServer e MaxRequestsPerChild devem ser ajustadas às configurações do Oracle; os parâmetros SESSION e PROCESS, e a decisão sobre o uso do servidor compartilhado, têm influência no número máximo de conexões possíveis. No MySQL, isso é definido por max_connections e max_user_connections.

Samba

Quando o servidor Samba apenas envia dados timidamente, a abertura e o salvamento de arquivos tornam-se um teste de paciência, e provocam assim um efeito sobre a produtividade de toda a empresa. Volker Lendecke, participante da equipe do Samba e co-fundador do Service Network GmbH, explica como tirar essa pedra do caminho. ➧ Não altere a configuração do seu servidor Samba! A configuração padrão do Samba já possui as configurações para oferecer o melhor desempenho possível aos clientes Windows®. Caso ocorram problemas de desempenho, deve-se primeiro eliminar todas as configurações que não sejam extremamente necessárias no arquivo de configuração smb.conf, e então fazer a reinstalação passo a passo.

➧ Seja generoso com a RAM! Dois a 3 MB de memória real por usuário ativo são o mínimo para o bom desempenho de um servidor Samba. Cada bit a mais pode ser utilizado pelo sistema para fins de cache de alto desempenho. ➧ Teste sua rede! Quando a transferência de arquivos por Samba estiver lenta, aconselha-se um contra-teste com FTP. Esse protocolo simples, que transfere apenas seqüências de dados puros, mostra a taxa de transferência máxima possível através da rede.

Ajudante útil

➧ Ative as travas oportunistas (Oplocks)! Um Opportunistic Lock não serve para reservar determinados arquivos exclusivamente para um usuário. Ele permite ao cliente armazenar no cache o conteúdo do arquivo. Dessa forma, o servidor assegura a um cliente que ninguém mais acesse aquele arquivo ao mesmo tempo. Assim que um segundo usuário o abrir, o servidor avisará o cliente, fechando em seguida o Oplock (figura 5). Logo após, o cliente envia o acesso de escrita para o servidor, o que na prática economiza muita largura de banda de rede. ➧ Inicie o Winbind! Sem Winbind, o daemon Samba é obrigado a construir uma nova conexão própria para cada novo usuário, o que inclusive aumenta desnecessariamente a carga em aproximadamente 40 a 60 pacotes IP. O Winbind diminui isso para três pacotes, mantendo uma conexão com o controlador de domínios permanentemente aberta. ➧ Não diferencie letras maiúsculas e minúsculas! Como o Windows não diferencia letras maiúsculas e minúsculas em nomes de arquivos, mas o Unix sim, o Samba precisa, quando o Windows quer depositar um arquivo test.txt, confirmar que o arquivo Test.txt não existe. Em diretórios com algumas milhares de entradas, essa varredura utiliza muitos recursos. Por isso, se possível, diretórios administrados com Samba devem conter apenas poucos arquivos. Caso não seja possível, faz sentido desativar a varredura com case sensitive = yes, preserve case = no e default case = lower. Com isso, o Samba mostrará todos os nomes de arquivo com letras minúsculas.

Servidor

Cliente

Servidor

Cliente

Dados

Ajuste imediato

Ajuste somente se necessário

Alteração local

Alteração local

Figura 5: No acesso de escrita a um arquivo, as travas operacionais (Operative Locks) tornam a sincronização entre clientes e servidor supérflua, caso apenas um usuário esteja acessando o arquivo. Se outro usuário o acessar, o servidor cancela a trava e o cliente envia de volta o arquivo alterado.

Consciência tranqüila São 7:30 da noite: os tempos de resposta do servidor web nas páginas referidas no Slashdot permanecem sob controle. A massa de emails chegou a seus destinatários e o banco de dados avaliou as consultas eficientemente. Como os servidores foram otimizados conforme as regras, é hora de o estressado administrador de sistemas ir para casa com a consciência tranqüila. ■

Mais Informações [1] Zabbix: Ampla competência: Linux Magazine 24, pg 66, outubro de 2006. [2] Postfix Anvil Server: http://www.postfix.org/anvil.8.html [3] Cband: http://cband.linux.pl [4] Batida secreta: Port Knocking: Linux Magazine 26, pg. 48 [5] Módulo Apache mod_mem_cache: http://httpd.apache.org/ docs/2.0/mod/mod_cache.html [6] Índices baseados em funções com Oracle: http://www.oracle-base.com/articles/ 8i/FunctionBasedIndexes.php [7] EXPLAIN PARTITIONS no MySQL 5.1: http://dev.mysql.com/doc/ refman/5.1/en/explain.html [8] Decision Support Systems (Wikipédia): http://pt.wikipedia.org/wiki/ Sistema_de_suporte_à_decisão [9] Online Transaction Processing (Wikipédia): http://en.wikipedia.org/wiki/ Online_transaction_processing [10] Oracle Resource Manager: http://www.oracle.com/technology/ oramag/oracle/04-nov/o64tuning.html

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

33


CAPA | Benchmarks

Proibições, falhas e trapaças em benchmarks

CAPA

O que dizem os números A melhor referência para uma decisão de compra são testes e benchmarks de fontes confiáveis. Quem não acredita em propagandas, mas prefere testar por si próprio e publicar os resultados, acaba caindo em um campo minado de licenças, proibições de teste e trapaças dos fabricantes. por Mirko Dölle

Jean Scheijen - www.sxc.hu

A

indústria investe muito em propaganda para convencer os consumidores dos benefícios de seus produtos, não se envergonhando de algumas meias-verdades e exageros. No campo da Informática, não basta folhear o prospecto e os dados técnicos de um fabricante para tomar a melhor decisão de compra. Outras fontes também costumam ser úteis, como artigos ou os próprios benchmarks – nos quais os testes requerem uma boa preparação para mais tarde adquirirem significado e confiabilidade. Sem exageros, podemos falar que existe uma relação de amor e ódio dos fabricantes de software e hardware com os bechmarks. Em relação a produtos muito parecidos, como por exemplo impressoras jato de tinta, os fabricantes não conseguem ultrapassar as características de seus concorrentes. Caso exista algum teste comumente conhecido, o fabricante poderá anunciar sua vitória ou boa colocação nos resultados através de um logotipo, e com isso o produto alcança grande reconhecimento com a publicação do teste. O benchmark padrão da Linux Magazine para o teste de placas de vídeo de

workstations é o SPEC Viewperf Suite [1]. Seu ponto forte é utilizar dados reais de usuários para o teste dos populares programas de CAD e renderização: o fabricante SPEC captura os dados gráficos de programas como Catia, Pro/ENGINEER (figura 1) e Maya (figura 2) diretamente dos drivers da placa de vídeo, e salva seus resultados como testes. A Viewperf Suite transfere apenas esses dados, com velocidade máxima, para a placa de vídeo – portanto, a CPU do computador não precisa se ocupar com os complexos cálculos 3D dos programas de CAD. Com a Viewperf Suite também pode ser testado e comparado o desempenho de vídeo em diferentes sistemas operacionais, independentemente de a aplicação base ter sido portada para o respectivo sistema.

Placas diferentes

As taxas de atualização em jogos foram testadas pela Linux Magazine International, no passado, com os Demo-Levels de Quake 3 Arena e Parsec. Dois valores fornecidos com diferentes programas de teste ajudam a conduzir qualquer

manipulação em drivers. Assim, no ano de 2001, a ATI “otimizou” o driver para o processador Radeon 8500: conhecendo a seqüência de demonstração do Quake, o driver diminui a qualidade de imagem, produzindo assim melhores resultados [2]. A Nvidia também não é, de forma alguma, inocente: em 2003 a Futuremark denunciou a fraude ao fabricante de placa de vídeo: o driver descobria seqüências especiais do 3D Mark-Bench e substituia algumas seqüências de comandos, de modo que no fim foi obtida apenas uma parte da imagem com profundidade de cor reduzida, o que aumenta drasticamente a resolução. Para o teste dos demais componentes e serviços de um sistema, são necessários outros bechmarks especializados. A Standard Performance Evaluation Corporation (SPEC [1]) possui uma série de suítes de benchmark prontas; no entanto, algumas rodam apenas no Windows®. Uma das excessões, junto com a Viewperf Suite, é a CPU Suite, claramente melhor indicada para avaliação da capacidade do computador do que o método preferido atualmente, o tempo de compilação do

http://supertuxbr.blogspot.com 34

http://www.linuxmagazine.com.br


Benchmarks | CAPA

Figura 1: A SPEC Viewperf Suite utiliza dados de teste bem próximos da realidade. O fabricante retira comandos gráficos de programas conhecidos como, por exemplo, o programa de construção Pro/ENGINEER...

kernel como medida da velocidade do computador. O tempo que um determinado computador necessita para traduzir o kernel, no entanto, é estável, e quase não sofre influência de circunstâncias como a taxa de transferência de dados do disco rígido ou a fragmentação do sistema de arquivos. Nem mesmo para comparações com testes anteriores ou com diferentes arquiteturas de processadores a compilação do kernel é útil; as diferenças entre o kernel atual e a versão de um ano atrás, por exemplo, são muito grandes. Além disso, o próprio compilador também sofre constante aperfeiçoamento. Por último, a configuração padrão do kernel está em constante mudança, e sempre são adicionados novos módulos. Por isso, os tempos de compilação do kernel só podem ser comparados quando dois computadores compilam o mesmo kernel com as mesmas opções de configuração, o mesmo compilador e a mesma plataforma.

Precisão enganosa

O volume de dados do disco rígido local é informado pelo FS-Bench [3], que se baseia nos valores medidos por ambos os benchmarks de disco rígido Bonnie++ [4] e Iozone [5]. Como muitos outros programas de benchmark, esses dois informam valores de medição com várias posições depois da vírgula. Entretanto, essa suposta precisão é enganosa: serviços que rodam

marks livres, mas até o momento surgiram ao todo apenas quatro benchmarks de banco de dados [7], que cobrem cenários de aplicação variados, desde livrarias on-line a sistemas de mercadorias de um grande atacadista. As especificações dos benchmarks da OSDL se orientam pelos renomados testes comerciais TPCW, TPC-C, TPC-H e TPC-App do Transaction Processing Performance Council (TPC) [8]. Com o benchmark do MySQL, temos um segundo teste independente à disposição. É importante ressaltar, no entanto, que ele tira pouco proveito de sistemas multiprocessados; portanto, é indicado somente para o teste com computadores monoprocessados. Quem fizer testes com o benchmark do MySQL em sistemas multiprocessados estará sujeito a fortes objeções por parte do fabricante do processador e dos outros componentes do sistema.

Testes proibidos

paralelamente em segundo plano sempre causam erros de medição que podem ser Implicações jurídicas ameaçam aqueles detectados através da repetição dos testes. que não observam as condições de licença Na prática, a diferença entre as taxas de para benchmarks e aplicações. Por exemtransferência são de apenas poucos KB plo, a VMware, fabricante do programa por segundo. Isso também deve ser re- de virtualização de mesmo nome, proíbe fletido em uma tabela e um gráfico, nos a publicação de resultados de testes de quais arredondamos os valores relevantes praticamente todos os seus produtos, que para MB inteiros por segundo ou para não tenham sido previamente conduzi1% do valor. dos e liberados pelo fabricante. Para testes com servidores de arquivo, Por um lado, isso equivale a uma o Dbench e o Tbench, da suíte de testes censura de imprensa, constituindo um do Samba, já estão estabelecidos. Ambos potencial para inúmeras controvérsias, são escaláveis para sistemas multiproces- pois até mesmo a declaração de que sados, e por isso foram utilizados pela Linux Magazine International [6] para a comparação do primeiro servidor Dual-Opteron com um Dual-Xeon (figura 3). Assim como em outros benchmarks de rede, na suíte de testes do Samba é obrigatório que o cliente e o servidor trabalhem em uma rede de testes própria, para eliminar as interferências e a perda de largura de banda devido ao tráfego de rede de outros computadores na mesma rede. O Open Source Development Lab (OSDL) Figura 2: ...ou o programa de renderização Maya, diretamente do driver de placa de vídeo. O computador de teste deve transmitir os comandos gráficos ao trabalha há alguns anos driver com máxima velocidade. em uma série de bench-

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

35


CAPA | Benchmarks

Medidas perfeitas

Dbench 1400

Taxa de Transferência [MB/s]

1300 1200 1100 1000 900 800

700

Dual-Opteron 1,3 GHz (32 Bit)

600

Dual-Opteron 1,3 GHz (64 Bit) Quad-Opteron 1,8 GHz (32 Bit)

500 400

Quad-Opteron 1,8 GHz (64 Bit)

300

Dual-Xeon 2,8 GHz

200

Quad-Xeon 2,8 GHz Pentium4 3.0 GHz

100

Athlon XP 3000+

0

0

16

32

48

64

80

Número de clientes

96

112

128

Figura 3: O conjunto de programas de testes do Samba possui o Dbench e o Tbench, dois benchmarks de rede que escalonam bem em sistemas multiprocessados.

um deteminado programa roda mais rápido ou mais lentamente em uma nova versão pode ser o resultado de um benchmark. A SPEC também formulou nas licenças de uso de seus benchmarks gratuitos algumas exigências mínimas que devem ser respeitadas pelos realizadores de testes, em relação à publicação dos resultados. Elas dizem respeito, em sua maioria, à documentação das condições de teste, bem como à obrigatoriedade de disponibilização de alguns arquivos de teste e configuração quando solicitado, para que a SPEC ou uma empresa sem fins lucrativos possa verificar as medições. Para que essa avaliação possa acontecer de maneira independente, a SPEC requer até mesmo que o hardware testado esteja disponível em local público, e no caso de protótipos, deve ser fornecida ao menos a disponibilidade prevista. Na interpretação dos resultados, independentemente de qual benchmark tenha sido utilizado, em geral é necessário prestar atenção; quem tiver, por exemplo, atribuído a responsabilidade por um resultado a algum componente específico da máquina deve se certificar da veracidade dessas informações. Por exemplo, é fundamental garantir que a CPU não esteja trabalhando no modo de economia de energia devido a configurações incorretas do daemon de gerenciamento de energia. O equipamento como um todo também deve estar dimensionado de forma correta: um computador que não consiga disponibilizar nem 60 MB de dados de teste por segundo, por exemplo, não é apropriado para informar a taxa de transferência de dados máxima de sistemas RAID. Esse tipo de engano invalida totalmente qualquer medição efetuada no equipamento.

Verificação

Alguns fabricantes relutam em aceitar resultados ruins, e contestam-nos. Para testes na imprensa e em empresas, quando um importante contrato está em jogo, é necessário que cada fabricante verifique os critérios e procedimentos do teste. A Lexmark, por exemplo, exige, em todas as avaliações de impressoras, os documentos de teste utilizados e a configuração do aparelho. Nesses casos, aqueles que não estiverem aptos a fornecer a documentação detalhada das condições de teste, dos arquivos de configuração e dos dados utilizados, acabam perdendo a possibilidade de confirmar suas suposições. A obrigatoriedade da documentação se aplica também a usuários particulares que publicarem em suas páginas pessoais resultados de benchmarks de seus computadores. Caso atestem que, por exemplo, uma multifuncional tenha um scanner lento, devem poder reproduzir esses resultados com segurança. Do contrário, o fabricante poderia acusá-los de difamação ou solicitar uma retratação. Os limites de toner e tinta informados no teste prático diferem necessariamente em até 50 porcento dos valores do fabricante, mesmo em aparelhos para uso profissional. Em testes realizados pela Linux Magazine alemã [9], duas impressoras laser Lexmark e aparelhos multifuncionais chegaram somente a cerca de 24.000 páginas, contra as 32.000 informadas, com um toner cheio. Nas empresas, entretanto, os custos de operação têm importância decisiva, visto que a longo prazo ele é mais alto que o preço de aquisição dos equipamentos.

Mesmo tomando todos os cuidados necessários, nunca se deve esquecer, ao se realizar um teste, de que os resultados nem sempre contam toda a verdade. No caso de computadores, existem tantas variáveis em uma medição que é praticamente impossível calcular um erro de medição de forma exata. Além disso, é nos detalhes que mora o perigo: mal se percebe, num teste de discos rígidos, a execução de um updatedb por parte de um cronjob. A taxa de transferência de dados medida pelo Bonnie, nesse caso, torna-se inaplicável, e a medição deve ser repetida – o que o realizador do teste deveria notar logo de início. Considerando esse cuidado, a desativação de todos os serviços desnecessários e o monitoramento das tabelas de processos durante o teste são requisitos fundamentais para os testes amadores. Portanto, apenas quem faz testes pode chegar à melhor decisão de compra e não ter aborrecimentos com o fabricante no campo minado dos benchmarks. ■

Mais Informações [1] Benchmarks SPEC: http://www.spec.org [2] Scott Wason, “How ATI’s Radeon 8500 drivers ‘optimize’ Quake III”:

http://techreport.com/ etc/2001q4/radeon-q3/ [3] Benchmark de sistemas de arquivos em Linux:

http://fsbench.netnation.com [4] Bonnie++, benchmark de disco rígido: http://www.coker.com.au/bonnie++ [5] Iozone, benchmark de sistema de arquivos:

http://www.iozone.org [6] Mirko Dölle e Timmo Hönig, ”Linux Sledgehammer” (Comparativo Dual Opteron versus Dual Xeon, em inglês):

http://www.linux-magazine. com/issue/39/AMD_Opteron.pdf [7] Benchmarks de bancos de dados do OSDL:

http://www.osdl.org/lab_ activities/kernel_testing/ osdl_database_test_suite/ [8] Benchmarks comerciais do TPC: http://www.tpc.org [9] Mirko Dölle, ”Bussiness Class”, Linux Magazine Alemanha 10/2006, pg.86 (em alemão)

http://supertuxbr.blogspot.com 36

http://www.linuxmagazine.com.br


Python | CAPA

CAPA

Otimização de programas em Python

Bem no alvo

Todos querem programas com os quais se possa trabalhar de forma prática. Softwares não são acelerados por otimizações globais, e sim por pequenas otimizações nos locais certos. Este artigo mostra como acertar o alvo em programas Python. por Stefan Schwarzer

A

otimização de programas tem como primeiro objetivo economizar tempo de execução. O software deve ser mais eficiente e apresentar seus resultados computacionais mais rapidamente, entre outras coisas. Entretanto, infelizmente a otimização prolonga o tempo de desenvolvimento. O código-fonte originado normalmente é mais complicado que o anterior, o que aumenta o trabalho para a realização de testes e busca de erros. Mas isso não é tudo; com a crescente complexidade do código, até mesmo sua manutenção e posteriores extensões se tornam mais difíceis. Isso acarreta um maior tempo de desenvolvimento, o que normalmente não é um grande problema, pois geralmente o resultado

continua aparecendo por muito tempo após a otimização. No entanto, é errado achar que desde a escrita de uma função ou método se deve pensar sobre como eles podem vir a trabalhar mais rápido. Essa colocação é trazida por C. A. Hoare, embora diversas vezes seja erroneamente atribuída a Donald Knuth: “A otimização prematura é a raiz de todo o mal”. É justamente isso: o programador só deveria iniciar a otimização do tempo de execução quando o programa estiver rodando sem erros.

Onde otimizar?

Do ponto de vista do desenvolvedor, um programa não é unicamente lento ou rápido. Normalmente o responsável

pelo comportamento letárgico é uma pequena parte de código, os chamados gargalos. Antes de se começar a otimizar partes de código por suposições, deve-se descobrir onde isso é realmente necessário. O primeiro passo é determinar se o software é impedido pela CPU ou pelo subsistema de E/S de executar uma determinada função. Assim sendo, não faz sentido tentar trazer um algoritmo a um centésimo do seu tempo de execução original quando na verdade o disco rígido ou a rede estão reduzindo a velocidade do software. Para descobrir se o culpado é o processador lento, o disco rígido ou outro hardware, ferramentas gráficas como o Xosview [1] ou o GKrellm [2] podem ajudar. Além delas, existem ferramen-

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

37


CAPA | Python

Exemplo 1: cProfile 01 02 03 04 05 06 07 08 09 10 11 12

Figura 1: À esquerda, o GKrellm mostra a carga de 100% do processador para um processo limitado pela CPU. À direita, o programa mostra o fluxo de dados na cópia de um CD-ROM.

tas como o Dstat [3], que reflete em números, por exemplo, a transferência de dados saindo e entrando em uma partição específica. Para uma mensuração plausível, nenhum outro software que sobrecarregue o computador deve estar rodando. Como opção, top e ps fornecem dados individuais sobre o desempenho dos processos. As figuras 1 a 3 mostram capturas do GKrellm e do Dstart referentes a dois processos, um limitado pela CPU e outro pela transferência de dados. O segundo caso é mais difícil de reconhecer do que a limitação de CPU, já que ele não dá nenhum limite máximo independente

>>> import cProfile >>> import sys >>> sys.argv.append(“--search”) >>> sys.argv.append(“python”) >>> f = open(“/usr/bin/emerge”) >>> ef = f.read() >>> f.close() >>> cProfile.run(ef, “emerge.stats”) Searching... [ Results for search key : python ] [ Applications found : 48 ] ...

de hardware. Os valores limite podem ser melhor determinados por especificações de hardware ou benchmarks. Lembre-se de que a transferência de dados pode estar relacionada não apenas a uma unidade de CD-ROM, mas também à interface de rede, robô de troca de fita em sistemas de backup, e assim por diante. Se o software travar devido ao esgotamento da capacidade da CPU, então será necessário continuar a localizar as posições lentas no código. Essa tarefa é auxiliada pelo módulo de Python cProfile (até a versão 2.4 do Python, chamava-se simplesmente profile), cujos resultados são avaliados pelo módulo pstats.

Exemplo de profiling: emerge Como exemplo prático de aplicação dos profilers de Python, uma busca no banco de dados de pacotes do Gentoo Linux deve servir. A ferramenta responsável por isso, emerge, é escrita em Python. Uma busca com emerge --search python rodou

no computador do autor em um tempo aceitável de exatos 10 segundos. Uma otimização faria sentido para computadores mais lentos, mas antes devemos proceder à análise. Produzir uma estatística de atividades é algo circunstancial, visto que essa interface de linha de comando não prevê a passagem de parâmetros ao programa chamado. Por isso este artigo utilizará o interpretador interativo (exemplo 1). Depois da importação do módulo de Python e da preparação do parâmetro, o teste é iniciado com cProfile.run(). O módulo pstats fornece então a estatística do tempo de execução em tabelas (exemplo 2). Um gargalo em particular na verdade não chama a atenção, entretanto podemse reconhecer alguns locais onde se poderia aplicar uma otimização. O emerge gasta, de qualquer forma, 1,2 dos 9 segundos totais para atualizar o mostrador de processo (método update_twirl). O tempo acumulado pode ser visto na coluna cumtime, tempo acumulado, na oitava linha da tabela. Na verdade, há uma opção do emerge que desativa essa saída.

Exemplo 2: pstats 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23

>>> import pstats >>> s = pstats.Stats(“emerge.stats”) >>> s.sort_stats(‘time’) <pstats.Stats instance at 0xb7d80eac> >>> s.print_stats(10) Sun Oct 1 23:12:36 2006 emerge.stats 602508 function calls (586701 primitive calls) in 9.052 CPU seconds Ordered by: internal time List reduced from 609 to 10 due to restriction <10> ncalls tottime percall cumtime percall filename:lineno(function) 1240 1.022 0.001 1.022 0.001 {method ‘readlines’ of ‘file’ objects} 11387 0.849 0.000 0.849 0.000 {method ‘flush’ of ‘file’ objects} 1096 0.579 0.001 1.513 0.001 /usr/lib/portage/pym/portage.py:200(cacheddir) 14550/160 0.421 0.000 1.173 0.007 /home/schwa/python2.5/lib/python2.5/copy.py:144(deepcopy) 76352 0.359 0.000 0.359 0.000 {method ‘append’ of ‘list’ objects} 1 0.335 0.335 2.513 2.513 <string>:468(output) 66288/66173 0.316 0.000 0.317 0.000 {len} 11383 0.256 0.000 1.225 0.000 <string>:94(update_twirl) 36953 0.224 0.000 0.224 0.000 {method ‘split’ of ‘str’ objects} 1 0.213 0.213 3.629 3.629 <string>:408(execute)

http://supertuxbr.blogspot.com 38

http://www.linuxmagazine.com.br


Python | CAPA

Em aproximadamente 1,2 segundos são obtidas cópias profundas (deep copies) (coluna cumtime, na quarta linha da tabela). Normalmente os programadores fazem cópias profundas por medida de segurança. Caso a cópia profunda não seja realmente necessária, esse ponto representa um grande potencial de economia. Provavelmente o código pode ser ainda mais acelerado depois de uma reestruturação, já que então ficaria mais simples reconhecer o momento de execução de cada porção do código, e também quais algoritmos de otimização são possíveis. Por fim, a modificação dos algoritmos freqüentemente é a otimização de tempo de execução de maior efeito.

unittest. Com isso, fica mais fácil determinar se a otimização possivelmente conduziu a um erro de programa.

Profiling

O próximo passo é voltar a atenção para o profiling, para encontrar os locais mais importantes do código a serem otimizados. Geralmente são aqueles com maior tempo de execução total, ou seja, locais onde o produto de cada tempo de execução pela freqüência de execução é Figura 2: Saída do dstat para um processo limitado pela CPU. A soma das duas primeiras colunas fica em 100%. Em princípio, existem dois caminhos para muito grande. Portanto acelerar códigos limitados de CPU: reali- faz mais sentido otimia ordem do algoritmo. Expressões zar as tarefas mais rápido ou com menor zar uma função que roda 10.000 vezes, como O(n) ou O(n ln n) representam freqüência. Às vezes, ambos funcionam e para isso necessita respectivamente de a complexidade do algoritmo. As letras ao mesmo tempo, caso se substitua uma um segundo, do que uma função que entre parênteses descrevem como o estrutura de administração de dados de- é executada apenas cinco vezes e gasta tempo de execução se altera quando senvolvida por você mesmo, com arquivos 10 segundos. o volume de dados do algoritmo a ser estruturados linearmente, por um sistema Todavia, deve-se levar em considera- processado sobe, como o número de de banco de dados como o SQLite [4], ção de que forma o usuário do programa valores de uma lista ou o tamanho de sente a lentidão na execução. Pode ser uma cadeia de caracteres. por exemplo. Conforme mencionado, dois critérios também que a primeira situação apenas Por exemplo, um algoritmo O(n) necontam conjuntamente na otimização: faça com que o programa pareça um cessita do dobro de tempo de execução com que rapidez o código é feito e quanto pouco mais lento, enquanto a segunda quando o volume de dados a ser procestempo de desenvolvimento é necessário situação condene o usuário a dez segun- sado dobra; já um algoritmo O(n²), nepara isso. Logicamente se deseja alcançar dos de inatividade. cessitaria do quádruplo do tempo com o maior aumento de velocidade possível A substituição de um algoritmo por esse aumento do volume de dados. É com o mínimo de esforço. Além disso, outro mais eficiente acelera um programa claro que sempre desejamos que o valor também deve ser levada em consideração de maneira pertinente. Enquanto na maio- entre parênteses seja o menor possível, a manutenção do código-fonte. ria das técnicas de otimização o pedaço para que o tempo de execução aumente Antes de iniciar a medição de veloci- de código otimizado fica no máximo 10% menos com o crescimento do volume de dade, o profiling, o código precisa estar mais rápido, a troca do algoritmo pode dados. A tabela 1 mostra o tempo de exeo mais livre de erros possível. Se esse não oferecer até 100% de aceleração. cução de vários algoritmos em Python. De for o caso, existe o risco de se otimizar cima para baixo, a proporção do tempo código que está rodando devagar apenas de execução vai piorando. devido a um erro de programa. Testes Em laços aninhados várias vezes ou automatizados são de grande ajuda para problemas combinatórios específicos, o tempo de execução adota ainda uma proa redução de erros originais, bem como para o controle das modificações do có- A notação em O descreve de maneira porção maior que quadrática. Com isso, digo durante a otimização, por exemplo formal quais algoritmos são mais rá- mesmo pequenos valores de n podem com os módulos de Python doctest e pidos que outros. Aqui, “O” significa produzir tempos de execução extremamente longos. Nesses casos, é importante evitar grandes valores de n. Tabela 1: Tempos de execução Se for utilizado um algoritmo com um de algoritmos em Python pequeno volume de dados, ele pode ser o pior ou o mais rápido. Em alguns algoOrdem Significado Exemplo ritmos, na verdade, o tempo de execução ``chave in dicionario``, ``dicion[chave] O(1) Tempo constante aumenta lentamente com n crescente, = valor``, ``lista.append(valor)`` mas talvez eles requeiram uma etapa de O(ln n) Tempo logarítmico Busca binária preparação mais demorada. Então, um ``valor in lista``, ``string.join(lista)`` O(n) Tempo linear algoritmo mais lento, mas que cumpre O(n ln n) ``lista.sort()`` a mesma finalidade, pode acabar sendo Tempo quadrático Laços aninhados, caso o corpo seja O(1) O(n2) mais rápido. ➧

Como otimizar?

Avaliação de algoritmos

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

39


CAPA | Python

em ambas as listas – e as retorna como uma nova lista. O primeiro algoritmo utilizado apresenta comportamento quadrático quando ambas as listas contêm n elementos (exemplo 3). O laço externo itera através de todos os elementos da primeira lista e mostra um comportamento de tempo linear. Dentro do laço, no entanto, há um outro, que no exemplo está implícito em valor in lista2; como a lista lista2 é pesquisada liFigura 3: Relatório do Dstat para um processo limitado pela transferência de dados nearmente, novamente (cópia de um CD-ROM). São importantes os valores da coluna disk/tosão gerados comportatal/read. mentos lineares. O entrelaçamento dos laços Em princípio, a comparação de algo- explícitos do lado de fora e dos laços ritmos com base em sua ordem é bastante implícitos dentro conduzem ao todo a útil. Porém, raramente isso se mostra tão um algoritmo O(n²). puramente no “campo de batalhas”, com A investigação da chave na instrução algoritmos mais complexos e volumes return tem comportamento linear, mas de dados com tamanhos variáveis. Por confronta o comportamento quadrático exemplo, um algoritmo de ordenação que anterior para grandes valores de n. Geralse comporte com O(n ln n) para valores mente é bom evitar laços entrelaçados. até 100.000 altera consideravelmente seu Mesmo no melhor caso eles mostram tempo de execução quando a lista a ser comportamento de tempo quadrático. ordenada não cabe mais na memória Porém, para pequenos volumes de daprincipal, e o sistema operacional inicia dos, uma otimização provavelmente a remoção de conteúdos da memória não vale a pena. no disco rígido. Tais efeitos também se O algoritmo no exemplo 4 mostra uma mostram desde que o gerenciamento de versão modificada do anterior, agora com memória da bliblioteca C padrão, que comportamento de tempo linear. Esse fica abaixo do interpretador, confirme o código, embora se pareça muito com o tempo de execução de forma visível. anterior, cria um dicionário antes de entrar no laço externo da segunda lista, e o utiliza nesse laço. Entretanto, como valor in dict2 tem comportamento constante, o laço externo abaixo da linha é linear ao longo do tempo. Um outro exemplo deve ilustrar a diferenO último algoritmo também leva a ça de utilização de diferentes algoritmos. um comportamento linear (exemplo 5). Todas as funções em Python observadas A transformação de uma lista em um nele são determinadas pela intersecção conjunto é linear, assim como a criação dos conjuntos de duas listas – ou seja, da intersecção de conjuntos com o mécada elemento de uma lista presente todo intersection, e a subseqüente con-

Cálculo de intersecções

Exemplo 3: intersecção1() 01 def interseccao1(lista1, lista2): 02 “””Realizar interseccao com algoritmo O(n^2)””” 03 resultado = {} 04 for valor in lista1: 05 if valor in lista2: 06 resultado[valor] = True 07 return resultado.keys()

versão desse conjunto de resultados em uma lista. Na realidade, essas operações são entrelaçadas uma na outra desde a sintaxe; no entanto, são executadas uma após a outra. Depois de três passos lineares consecutivos, obtém-se novamente um algoritmo O(n).

Algoritmos melhores

Do exemplo visto acima derivam algumas regras gerais que devem ser consideradas em uma otimização. Assim, operações, cujos resultados não se alteram durante os laços, devem ser retiradas deste, de modo que não sejam executadas a cada iteração do laço. Separe cuidadosamente os dados com os quais você trabalha. Um exemplo famoso é a busca binária, que só é utilizável em dados pré-classificados. Com ela é possível atingirmos o objetivo em O(ln n) em vez de em O(n). Se os conjuntos de dados forem pequenos, é melhor que sejam mantidos em uma busca linear. Coloque os valores em cache, em vez de sempre ter que acessá-los e computá-los novamente. Mas atenção: especialmente em sistemas que trabalham com threads ou transações, é bom pensar bem sobre as conseqüências e considerar possíveis inconsistências de dados. Avalie a viabilidade de limitar o tamanho do cache para que o sistema não desperdice seu espaço de memória no disco e com isso não aniquile seu ganho de velocidade. As situações em que o cache também parece fazer sentido normalmente são aquelas nas quais a utilização de um servidor de banco de dados acelera o programa. Quando um objeto é armazenado no disco rígido ou enviado através de uma rede, o processo pode ser acelerado se apenas forem transferidas as partes dos dados que de fato tenham sido alteradas. A desvantagem é que essa otimização pode influenciar a abstração de uma classe ou até mesmo de um código. Por isso, tente manter as interfaces abstratas, mesmo quando elas forem otimizadas internamente.

Exemplo 4: intersecção2() 01 def interseccao2(lista1, lista2): 02 “””Realizar interseccao com algoritmo O(n)””” 03 resultado = {} 04 dicio2 = dict((valor, True) for valor in lista2) 05 for valor in lista1: 06 if valor in dicio2: 07 resultado[valor] = True 08 return resultado.keys()

http://supertuxbr.blogspot.com 40

http://www.linuxmagazine.com.br


Python | CAPA

Exemplo 5: intersecção3() 01 def interseccao3(lista1, lista2): 02 “””Realizar interseccao com algoritmo O(n)””” 03 return list(set(lista1).intersection(lista2))

No processamento de arquivos texto linha a linha, valem as seguintes regras: se os arquivos a serem processados forem curtos, é mais fácil e rápido lê-los completamente e processar todos os dados. Se os arquivos forem longos – arquivos de log são exemplos típicos –, deve-se então ler cada linha e processá-la imediatamente. Do contrário, os dados carregados na memória podem chegar a esgotá-la, obrigando o sistema a realizar o terrível swap. Um outro fator estreitamente relacionado à seleção de algoritmos é a escolha da estrutura de dados correta. Com ela alteram-se implicitamente os algoritmos para o acesso aos dados. Conforme mostrado acima, é muito mais rápido localizar uma determinada chave em um dicionário do que um valor em uma lista, pois então seria necessário fazer uma busca linear. A arquitetura de um sistema de software tem realmente grande influência no tempo de execução. De acordo com os algoritmos, podemos ver como todo o sistema trabalha. Ao contrário de outras otimizações, deve-se refletir um pouco sobre a arquitetura já no início do desenvolvimento.

Truques de Python

Em otimizações específicas de Python deve-se observar que muitas têm efeitos distintos de acordo com a versão do Python. Em casos extremos um pedaço de código pode até mesmo ficar mais lento em uma nova versão do Python, mas isso é uma exceção. O caminho mais fácil para a otimização de scripts Python é utilizar a opção -O do intérprete para que o bytecode Python produzido seja otimizado por ele. No script, deve-se evitar from module import *. Do contrário, o intérprete Python não conseguirá mais executar algumas otimizações internas. Esse idioma também prejudica a manutenção do código; ou seja, ao desistir dele, matamos dois coelhos com uma cajadada só. Economize operações de lookup através do uso de múltiplos namespaces, ligando objetos a namespaces locais. Por exemplo, depois da linha opj = os.path.join chega-se mais rapi-

damente à função join do que a opj. Obviamente essa otimização dificulta a leitura do código. Não insira exec e eval. Python é muito flexível, então variantes de código que não contenham exec ou eval costumam ser mais acessíveis. Especificamente funções curtas executadas dentro de laços podem ser aceleradas se forem inseridas no corpo do laço (inlining). Mas isso aumenta a redundância em geral. Caso queiramos anexar muitas cadeias de caracteres uma após a outra, o melhor é reuni-las em uma lista e ligar seus elementos em seguida com ““.join(lista). Isso é muito mais rápido que fazer o encadeamento com +. O argumento key em list.sort acelera o código mais do que o argumento cmp. No primeiro caso a função de comparação é calculada apenas uma vez para cada valor da lista; no segundo, para cada comparação os valores são o dobro. É possível utilizar dicionários ou conjuntos (sets) para verificar valores, os quais podem se apresentar em dois conjuntos de valores ou apenas em um de dois conjuntos de valores. Às vezes as List Comprehensions ou Generator Comprehensions são mais rápidas que laços for. Por vezes é melhor deixar uma operação ser executada em C altamente otimizado, mas manter as facilidades do Python. Para isso, transfira seu código ou parte dele de tal forma que ele utilize o máximo possível de funções integradas do Python (por exemplo range em vez de um laço correspondente) ou tipos de dados (listas, tupla, dicionários, conjuntos). Utilize bibliotecas escritas em C para código de tempo crítico. Por exemplo, é possível processar XML com a biblioteca libxml2. Para encapsular bibliotecas C préexistentes, há o SWIG [6] e o Ctypes [7]. O segundo já é parte integrante da distribuição padrão desde o Python 2.5. O Pyinline [8] e o Weave [9] permitem integrar fragmentos C em código Python. O Pyrex [10] segue um caminho um pouco diferente – ele é uma linguagem muito parecida com o Python, que encapsula bibliotecas C pré-existentes, além de produzir suas próprias extensões, recentemente convertidas em C. Mais flexível, po-

rém mais complexa, é a API Python/C. Como opção, igual a programar em C, existe o Psyco [11], um compilador just-in-time para Python que infelizmente só está disponível para sistemas x86 de 32 bits.

Pare e pense

Mesmo em linguagens interpretadas como Python pode-se escrever programas simples. Porém é importante não otimizar de pronto, mas testar primeiro se o software já é rápido o suficiente para a aplicação planejada. Se não for, é necessário determinar os gargalos do código com ferramentas apropriadas e otimizá-los em específico. O maior ganho de velocidade é conseguido com a alteração de algoritmos e estruturas de dados. As otimizações específicas do Python podem mesmo ajudar. Use especialmente as possibilidades de utilizar código C implícito na forma de código Python, por exemplo através de estruturas de dados do Python ou bibliotecas C externas. E pense nisso: em todas as otimizações, fique de olho na manutenção do software. ■

Mais Informações [1] Xosview: http://www.python.org [2] GKrellm: http://www.gkrellm.net [3] Dstat: http://dag.wieers. com/home-made/dstat [4] SQLite: http://www.sqlite.org [5] Libxml2: http://xmlsoft.org [6] SWIG: http://www.swig.org [7] Ctypes: http://starship.python. net/crew/theller/ctypes [8] Pyinline: http://pyinline. sourceforge.net [9] Weave: http://www.scipy.org/Weave [10] Pyrex: http://www.cosc.canterbury. ac.nz/greg.ewing/python/Pyrex [11] Psyco: http://psyco.sourceforge.net

O autor O Engenheiro Dr. Stefan Schwarzer usa Python há sete anos, é desenvolvedor de software independente e publicou pela Addison-Wesley o livro ”Workshop Python”.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

41


ANÁLISE

ANÁLISE | Vtune

Otimização de desempenho com o Intel VTune

Sob a lupa

Os processadores de hoje em dia reúnem diversas informações sobre como executar comandos de máquina. Isso permite que os desenvolvedores adaptem seus programas ao hardware da melhor forma possível, o que contribui de forma importante à aceleração de sua execução. Para realizar essa tarefa em processadores Intel, temos o auxílio do VTune. por Michael Hebenstreit

C

PUs modernas possuem uma série de formas para acelerarmos programas. Isso significa, por outro lado, que o número de armadilhas ocultadas por um desempenho otimizado também é maior. Normalmente podemos demonstrar como um programa reage à carga apresentada de acordo com o tempo. Com isso, a otimização do software tem uma importância cada vez maior. O desenvolvedor precisa sempre, no entanto, adaptar-se aos hardwares disponíveis e suas possibilidades. O Intel Vtune Performance Analyser [1] facilita a localização desses problemas. Antes de um programa ser executado, ele é traduzido do código-fonte para a linguagem da máquina, em várias

etapas. Não há diferença se esse processo foi executado pelo compilador no desenvolvimento do programa ou em tempo de execução pelo interpretador – ao final, a CPU ainda vê apenas o código de montagem binário codificado. Cada instrução consiste de um ou mais códigos de bits, que a CPU entende como uma operação elementar. Por exemplo, baixar o dado do endereço 0x1234 para o registro RAX. Internamente, uma CPU moderna não processa uma instrução desse tipo diretamente, mas dividida em pequenas micro-operações – chamadas µops. Esse procedimento também faz com que o comando percorra, no mínimo, os seguintes níveis:

➧ Baixar um comando; ➧ Decompor o comando em µops; ➧ Executar as µops e calcular os endereços necessários; ➧ (Opcional) Baixar os dados da memória; ➧ Escrever o resultado na memória. Em arquiteturas reais de processador, a subdivisão continua de modo que no final são necessários, normalmente, dez ou mais passos – em alguns sistemas são mais de 30. Em vez de executar um comando de montagem após o outro, assim que um comando passa do primeiro nível, o comando seguinte migra para a “linha de montagem”, chamada de pipeline.

http://supertuxbr.blogspot.com 42

http://www.linuxmagazine.com.br


Vtune | ANÁLISE

Sob condições adequadas, esse processo pode permitir que códigos puramente seriais sejam executados com o máximo de desempenho. Entretanto, na prática isso raramente é possível; sempre ocorrem imprevistos devido a ramificações e laços no programa. Em vez de simplesmente esperar para saber qual será o resultado referente a uma ramificação, o prognóstico da lógica da CPU tenta reconhecer o caminho mais provável. Se ao final da pipeline o sistema reconhecer que a previsão estava errada, ele interrompe todas as funções ativas na pipeline no momento, carregando-a novamente. Esse evento é chamado de branch misprediction, e custa naturalmente muito tempo.

Cache

Outra modalidade de redução de desempenho bastante recorrente é o acesso da CPU à memória principal. CPUs atuais são operadas a freqüências de clock de dois a quatro GHz; ou seja, um clock dura meio nanossegundo. Caso a CPU tenha que acessar a memória principal, existem tempos de espera de 70 a 100 ns, ou seja, de até 600 clocks. Durante esse tempo o processador geralmente é incapaz de desempenhar qualquer trabalho significativo. Essa problemática deve ser combatida pelos caches, que minimizam o tempo de acesso através de um armazenamento mais rápido. Hoje em dia, eles são consideravelmente menores que os programas reais ou registros de dados. O programa também deve estar configurado de tal maneira que o cache seja utilizado da forma mais eficiente. Além desses dois exemplos, existem muitas outras possibilidades de otimização. Felizmente os hardwares modernos ajudam o programador nessa função. Os processadores baseados no Intel Pentium

Figura 1: O primeiro resultado da análise do Call Graph (acima em tabela, abaixo disponibilizada em gráfico). O diagrama mostra os anexos lógicos, sem considerar os números.

ou Core 2 Duo conseguem registrar a ocorrência dos eventos. Em cada processador existem alguns registros de números, cujo valor é incrementado a cada ocorrência do evento mensurado. Caso um numerador ultrapasse um limite prédeterminado – descrito na tecnologia Intel como SAV (Sampling After Value) –, a CPU provoca uma interrupção. Softwares específicos, isto é, drivers do sistema operacional, podem reagir à interrupção e interpretar o evento.

Verificação de problemas na CPU Os conceitos de Event e Counter já foram mencionados várias vezes sem que tenhamos explicado seu significado prático. Exemplos de dois eventos freqüentemente utilizados em sistemas Pentium são Clockticks e Instructions retired. Os primeiros medem o tempo e são incrementados a cada sinal do clock interno (como por exemplo cada nanossegundo). O último representa o número de instruções executadas. A relação entre os clockticks e as Instructions retired (também chamadas de CPI, Clocks per Instruction) mostra quanto tempo uma instrução demorou para ser executada. Como as CPUs modernas executam paralelamente mais de uma instrução, esse número pode ser menor que 1. Na prática, isso raramente é alcançado, como por exemplo na compressão e descompressão de vídeo com comandos SSE. Valores entre 1 e 1,5 são bons, enquanto aqueles superiores a 4 devem ser aperfeiçoados. A medida de clockticks de um programa, uma função ou até mesmo de linhas de código individuais mostra ao desenvolvedor de quanto tempo uma parte do programa necessita para a execução. O valor de CPI informa se a execução foi eficiente do ponto de vista da arquitetura da CPU. Um meio auxiliar para registrar e interpretar esses eventos é o programa desenvolvido para processadores Intel, o Vtune. Ele não pode ser utilizado em outros produtos compatíveis com x86, pois o contador de hardware necessário não faz parte da definição da arquitetura x86, sendo implementado de maneira diferente por outros fabricantes, como a AMD. Cada fabricante de hardware compatível com x86 acaba sendo obrigado a desenvolver sua própria microarquitetura. Como o contador de eventos está profun-

Figura 2: O Vtune permite selecionar os próprios eventos, além dos pré-instalados.

damente vinculado à microarquitetura, a compatibilidade entre os fabricantes não é possível. Apesar da diferença entre arquiteturas, a regra mostra que o Vtune encontra gargalos de desempenho em todos os fabricantes.

Contar eventos

Não faria sentido registrar imediatamente cada ocorrência de evento e determinar em qual seção do código ele se deu. Se tentássemos fazer isso com o evento Instruction retired, por exemplo, o tempo de execução de um programa aumentaria múltiplas vezes. Então, em vez disso é utilizado um método estatístico. O contador é calculado através do valor SAV (Sample After Value), escolhido de forma a fazer com que a CPU pare o programa através de uma interrupção depois de aproximadamente um milissegundo. O sistema de tempo de execução do Vtune salva no gerenciador de interrupções a informação do comando em execução (Program Counter Register) e o número da thread sendo executada, assim como o do processo. Esses dados são extraídos pelo Vtune, na avaliação da medição. Em um processador de 2 GHz, isso significa que todos os dois milhões de ciclos de clock teriam determinado em que posição o programa se encontrava imediatamente. Se cada linha do programa rodar exatamente uma vez, a subdivisão deveria ser equivalente. Mas jumps, laços e ramificações produzem os chamados hotspots, ou seja, partes de programa que absorvem uma parte considerável do tempo de execução. Além disso, o desempenho de programas pode

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

43


ANÁLISE | Vtune

ser degradado pelo aumento de tempos de desempenho em um processo dição exige as informações dos símde latência no acesso à memória, ao complicado que não tinha nada a bolos, caso contrário o Vtune apenas disco ou à rede. consegue mostrar uma classificação ver com o próprio aplicativo. das linhas de Assembler, exatamente Ao se realizar uma medição, deve-se também levar em consideração que o como um depurador. Vtune utiliza um método estático para A parte gráfica da aplicação é iniciada avaliação de um programa para os hotspots. Na maior parte dos novos sistemas Linux, com /opt/intel/vtune/bin/vtlec. O menu Os seguintes pontos são importantes: a instalação não apresenta problemas. File | New | New Project | Tuning Acti➧ O programa deve trabalhar com Normalmente as versões atuais do Suse, vity inicia uma nova análise. A primeira dados realistas (isso também vale Red Hat e Fedora encontram bom suporte verificação normalmente diz respeito ao naturalmente para qualquer outro e também são certificadas. A versão atu- chamado Callgraph. O Vtune pesquisa tipo de análise de desempenho). al do Vtune também pode ser utilizada o controle de fluxo no nível das chama➧ O tempo de execução deve ser lon- sem problemas no Open Suse 10.1 (32 das de função, e atribui a elas eventos go o suficiente para que apareçam, bits), embora ela ainda não suporte essa medidos. Através da instrumentação do de maneira estática, eventos sufi- variante oficialmente. código a ser executado, obtemos dados cientes em cada hotspot. O Vtune A instalação requer o arquivo com- absolutamente corretos, como, por exemainda pode apresentar o número de pactado e um arquivo de licença válido. plo, com que freqüência o programa ineventos contabilizados de fato. Caso Em [1] há também uma licença de teste vocou uma dada função, e que parte do a medição de um hotspot dependa de 30 dias. A versão econômica para es- tempo de execução ele passou lá. Assim, de apenas poucos eventos (menos tudantes custa exatos 50 euros, enquanto o programador visualiza imediatamende 20, por exemplo), a informação uma única licença normal custa a partir te quais funções contribuem com uma de 630 euros. O processo de instalação parte significativa do tempo de execução é menos confiável. ➧ Teoricamente pode ocorrer de os é iniciado pelo script install.sh. Acon- como um todo. Um assistente auxilia todas as configuselha-se, inicialmente, a manter a conhotspots não serem conhecidos. rações necessárias. Normalmente basta ➧ É freqüente a medição apresentar figuração padrão. inserir o caminho para a aplicação com uma imprecisão – chamada skid –, na qual o evento real e a linha de o parâmetro de inicialização necessário. programa mostrada não combinam O Vtune carrega o binário (para examinar exatamente. Nesse ponto é necessáos pontos de entrada e saída de funções) e ria uma pequena experiência, mas executa o programa. Depois de terminar deve estar claro para qualquer pro- O Vtune necessita de um diretório de a execução do programa, ele analisa os gramador que, por exemplo, apenas dados globais, que ele por padrão depo- dados e os mostra sob as formas de tabela no caso de uma bifurcação pode sita em /opt/intel/vtune/global_data. Ele e Callgraph (figura 1). ocorrer um Branch Mispredict. requer um módulo de kernel próprio, Do lado esquerdo o programa mostra Além dessas limitações, há algumas cujo código-fonte encontra-se em /opt/ uma estrutura em árvore das medições. intel/vtune/vdk/src. Em novas versões Um duplo clique em uma pasta Run (ou vantagens: ➧ Não é necessário orquestrar o pró- do kernel e de distribuições, isso pode em uma das medições listadas abaixo) levar a problemas que, com certa sorte, abre a visão de dados. Ela é mostrada prio código-fonte. ➧ O Vtune permite uma visão de normalmente são eliminados. pelo Vtune através do menu contextual todo o sistema. O autor conseguiu O Vtune dispõe também de uma (clique direito do mouse) como tabela várias vezes, por exemplo, com a interface gráfica de usuário (vtlec), bem e gráfico de barras. ajuda do Vtune, reverter problemas como de uma ferramenta para linha de Análises precisas requerem uma rodacomando (vtl). No Linux, a interface grá- da de coleta de informações, chamada fica se baseia na plataforma do Eclipse, Sampling Run, que inicia o Sampling e apresenta as solicitações feitas à CPU Wizard na Tuning Activity. Caso o usue à memória. No entanto, em alguns ário queira ir além da instalação padrão casos essas solicitações podem causar e ainda medir eventos, ele precisa maradulterações à medição da capacidade. car com um x a opção Change Sampling Por isso o autor aconselha a separar a Events, na caixa de diálogo do assistente. medição da análise. Em Activity Configuration, é possível inserir medições adicionais através de Events (figura 2). O número de eventos medidos ao mesComo exemplo prático, em [2] há um mo tempo em uma execução depende pequeno programa em C, com o qual da CPU e da combinação dos próprios os testes a seguir foram executados. Ele eventos. O Vtune gera automaticamente se baseia em OpenMP e com isso roda um número de execuções de acordo com paralelamente em várias plataformas. a definição da medição, realizando-as em A tradução foi feita com o compilador seguida. Isso naturalmente significa tamFigura 3: O resultado de um Sampling Run mostra os eventos estáticos de todos os processos que estão rodando C da Intel, com o comando icc -g -o bém que cada rodada executa o programa no sistema. O objeto da pesquisa é mostrado na linha vt_test -openmp omp_mm4.c. A opção -g duas vezes: uma vez para a calibragem, cinza na parte de baixo. é importante; a interpretação da me- outra para a medição. O Vtune presume

Primeiros passos

Módulo de kernel obrigatório

Interface gráfica

http://supertuxbr.blogspot.com 44

http://www.linuxmagazine.com.br


Vtune | ANÁLISE

e é equipado com mais de 700 eventos, também estruturados sistematicamente. O resultado de um Sampling Run é mostrado primeiramente englobando todos os processos (figura 3) que rodaram no sistema durante o tempo de medição. Se o cursor do mouse ficar parado por alguns instantes sobre o nome do módulo, o Vtune mostra um resumo Figura 4: A visualização da thread denuncia: uma thread está desse módulo. recebendo mais tarefas do que outra, e por isso tamNo exemplo, o probém dura mais tempo. Além do tempo de execução, grama vt_tes teve o podem ser vistas as respectivas partes dos eventos maior valor, bem como registrados pelo programa. o número de instruentão que o programa trabalhe de forma ções executadas (INST_RETIRED.ANY), e idêntica todas as vezes. também o tempo de execução (CPUT_ CLK_UNHALTED.CORE). O último critério, à primeira vista, é o mais importante. Otimizações se pagam nos pontos onde Em CPUs Core 2 existem cinco conta- um tempo de execução mais longo é dores, em princípio. Deles, três estão necessário. Nos hotspots, a relação do limitados aos eventos padrão, restando número de instruções fornece uma apenas dois contadores para medições em base para nos informar se uma otimigeral. Entretanto, na maioria das vezes zação vale a pena do ponto de vista faz sentido definir os eventos padrão para da microestrutura. cada caso. Com isso, comportamentos como INST_RETIRED.ANY/CPU_CLK_UNHALTED. CORE sempre podem ser avaliados. A lista dos eventos disponíveis depende da CPU, Em tais decisões deve-se sempre observar e em sistemas mais modernos também quanto tempo realmente seria necessário do chipset. Eventos como “2nd Level para um segmento de código. Em um Cache read Misses” podem ser encon- programa que rode em dez segundos, trados em todas as CPUs atuais, mas não é interessante otimizar uma parte contadores SSE3, por exemplo, estão de código com um valor de CPI de 20, presentes apenas em sistemas com pro- pois ele necessita de apenas 0,1 segundo cessadores que também implementam para a execução. Também é importante essa unidade. o fato de que não se atinge um ganho de É importante lembrar que a Intel velocidade se mais de uma instrução for não implementou o contador de forma executada em um mesmo ciclo do clock. sistemática e abrangente para todos os Por isso, é interessante verificar antes se processadores. Os processadores Pentium o algoritmo pode ser aperfeiçoado ou se 4, Xeon e Pentium M são relativamente a paralelização não seria um caminho semelhantes entre si, distanciando-se, no possível e mais promissor. entanto, da arquitetura completamente No exemplo, esse definitivamente oposta do Itanium. O novo Core 2 se não é o caso. Um duplo clique na enorienta em torno de ambos os antecessores, trada do vt_test abre a visualização de threads (figura 4). Logo se percebe que as difeExemplo 1: Laço principal rentes threads OpenMP 01 for (k = 0; k < REPETIÇÕES; k++) { não recebem a mesma 02 #pragma omp for quantidade de trabalho. 03 for(i = 0; i < RA; i++) { Elas executam um nú04 for(j = 0; j < i; j++) { 05 d[i] += a[i][j] * b[i] + c[i]; mero bem diferente de 06 } instruções e, obviamen07 } te, também precisam de 08 } períodos diferentes. Até

Eventos e contador

Primeira avaliação

mesmo o comportamento de cada thread individual está longe do ideal.

Processo de otimização Outro duplo clique em uma das threads abre a visualização de módulo. O usuário pode navegar com o mouse através dos hotspots e chegar até o código-fonte (figura 5), cujo laço interno pode ser visto no exemplo 1. Cada laço realiza em princípio o mesmo trabalho – a diferença é o tipo de armazenamento de dados. A diferença entre o segundo e o terceiro laços está no acesso à matriz a[][]. O último – e pior – caso endereça o primeiro índice, portanto de forma contrária à estrutura de caching e pre-fetching do hardware. Cada erro de acesso ao cache (Cache Miss) baixa não apenas os dados necessários, mas também os elementos relativos a eles para o cache. Os laços 1 e 2 também reutilizam essas datas imediatamente. O terceiro requer um campo de memória completamente diferente a cada passo, o que leva a um grande aumento de cache misses. Isso pode ser observado não apenas no Vtune, mas também no tempo de execução (exemplo 2). A diferença de peso entre ambas as threads é esclarecida por um erro comum na aplicação do OpenMP. A thread 1 executa o laço de 0 até N/2, e a thread 2, de N/2 até N. A duração dos laços internos aumenta de forma proporcional a N. Esse é o motivo pelo qual o tempo de execução na utilização de duas CPUs não se divide ao meio. O leitor que se interessar deve buscar a especificação do OpenMP [3], seção Schedule. Caso o vtlec realize a medição, pode acontecer de esse processo con-

Figura 5: A visualização do código-fonte quebra os dados reunidos até a única linha de código para baixo. Na coluna cinza à direita, a parte da CPU pode ser vista por qualquer aplicação.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

45


ANÁLISE | Vtune

vtl activity Test -d 40 -c sampling -o “➥ec en=’Instructions Retired’ ➥en=’Clockticks’ -cal yes” -app ./vt_test ➥run

Figura 6: Informações importantes para uma otimização são fornecidas também pela ferramenta de linha de comando vtl. No exemplo, é mostrada uma visualização dos eventos registrados.

sumir grande parte da capacidade de CPU disponível, principalmente em conjunto com o X11 e o gerenciador de janelas. Além disso, em tarefas em lote, operações interativas costumam ser impossíveis. Por isso, é interessante que grande parte da funcionalidade do Vtune também possa ser acessada pela linha de comando (figura 6). Nesse caso, vtl -help fornece uma visão geral dos comandos e opções disponíveis. A ajuda oferece informações detalhadas quando informamos o comando desejado como opção adicional. Depois é conferida uma posição especial do comando padrão para a medição: vtl -help -c sampling.

Linha de comando do Vtune O Vtune fornece não somente os detalhes do comando desejado, mas também uma lista de todos os eventos disponíveis. Sem necessitar de mais carregamentos, o programa de teste pode ser executado no Vtune como a partir do vtlec:

Exemplo 2: Threads 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

$ export OMP_NUM_THREADS=2 $ ./vt_test example with 2 threads Stage 1 in 5.06335 secs Stage 2 in 5.05060 secs Stage 3 in 6.87645 secs Finished $ export OMP_NUM_THREADS=1 $ ./vt_test example with 1 threads Stage 1 in 6.82961 secs Stage 2 in 6.70549 secs Stage 3 in 9.10998 secs Finished

Checker e o Intel Thread Profiler trazem duas extensões especiais para o Vtune. O Thread Checker testa programas baseados em OpenMP, Posix Threads ou O elemento activity Test define Windows® Threads em sua correção, uma nova medição, que com -d 40 e sobretudo se os acessos à memória deve durar no máximo 40 segundos estão programados corretamente e (isso evita problemas com programas não há possibilidade de ocorrerem dependentes). É conduzida uma me- condições de corrida. O Thread Profiler facilita a verificadição do tipo sampling, que analisa dois eventos. Para calibrar o contador, ção e confirmação do comportamento o Vtune executa automaticamente, temporal de um programa baseado em com a opção -cal yes, duas funções: threads, registrando quais threads inia primeira simplesmente conta todos ciadas estão ativas em cada momento. os eventos que ocorrerem, enquanto Isso propicia também a localização de a segunda conduz a medição propria- deadlocks, ocorrências tão indesejáveis em qualquer programa. mente dita. O comando anexo run inicia a medição definida da mesma forma. Caso contrário, o comando acima iria definir apenas uma medição, que o desenvol- O Intel Vtune ajuda os programadores vedor iniciaria em um momento mais a localizarem problemas decorrentes adiante através de run. Os dados são de um mal ajuste do programa ao depositados pelo Vtune no diretório hardware Intel. O autor pôde verificar pessoal em ~/VTune. Na linha de co- na prática que esses problemas, em mando, show mostra os dados salvos sua maioria, ocorrem com menor ou atualmente e, com a opção all, são maior força em sistemas compatíveis mostrados também os eventos salvos com x86; portanto, uma possível otimização é indicada a todos os sistemas em uma execução: vrt show -all. desse tipo. O Vtune também pode fornecer diversas informações ao iniciante. Não é necessário escrever ou carregar códigos É possível ter uma primeira visão geral de forma especial. Muitos problemas da medição no console com o coman- podem ser compreendidos sem acesso do vtl view test -modules. Com isso o ao código-fonte, já que o usuário obtém Vtune mostra todos os processos que uma imagem completa do sistema com estavam ativos durante a medição, as- uma medição. sim como os valores medidos. As ouCom isso, o Vtune se revela uma tras avaliações infelizmente precisam ferramenta com muitas possibilidades, de um pouco mais de trabalho, sen- que além disso é fácil de ser instalada, do produzidas no console. Os dados mas que requer um certo conhecimento coletados podem ser empacotados e do hardware utilizado. A capacidade de transferidos para outro computador reconhecer quais dos muitos eventos para avaliação. No primeiro passo, vtl mensuráveis são relevantes ao se estupack test.vxp -ar test empacota os re- dar uma aplicação é uma das tarefas sultados no arquivo do pacote rtest.vxp. que nenhum programa pode resolver Ele contém, além do próprio arquivo de forma autônoma. ■ de dados ( *.tb5), informações sobre que dados foram medidos, e quando. Os dados salvos há pouco podem ser Mais Informações lidos na interface gráfica vtlec por [1] Intel Vtune: meio de File | Import | Tuning File | http://www.intel.com/cd/ Export File (*.vxp). software/products/ Além das análises apresentadas, o asmo-na/eng/vtune/239144.htm Vtune também oferece a possibilidade de conduzir avaliações em um espaço de [2] Exemplos on-line: tempo determinado, o que é de grande http://www.linuxmagazine.com.br/ ajuda para localizar gargalos no decorrer issue/27/vtune.html de eventos. [3] OpenMP: Para facilitar o desenvolvimento de http://www.openmp.org programas paralelizados, o Intel Thread

Resultado

Dados de teste transportáveis

http://supertuxbr.blogspot.com 46

http://www.linuxmagazine.com.br


Slackware 11 | ANÁLISE

O que há de novo na última versão do Slackware?

ANÁLISE

Melhor com o tempo Na versão mais recente do Slackware, somos presenteados com uma seleção de pacotes ainda maior que a de costume. A grande novidade fica por conta do kernel 2.6, que ainda não é padrão, porém vem em duas versões. O Slackware envelhece mantendo sua saúde e disposição. por Piter Punk

Finalmente saiu o Slackware 11.0, o mais novo lançamento da mais antiga distribuição Linux em atividade. O mais novo, mais demorado (mais de um ano) e, sem dúvidas, o maior (três CDs de pacotes) de todos os lançamentos até hoje. O objetivo deste artigo é mostrar quais as novidades do Slackware 11.0. A novidade mais óbvia é que agora são três CDs com pacotes binários, em vez dos tradicionais dois CDs. Para quem ainda não baixou (ou comprou), a divisão dos CDs do Slackware é mostrada na tabela 1. Os outros três CDs vêm com o código-fonte e alguns bônus: ➧ Código-fonte das séries a, ap, d, e, f, k, l, n e y, além dos pacotes de instalação do kernel 2.6.18 (testing);

➧ código-fonte das séries t, tcl, x e xap, feita em disquetes. A tabela 2 explica o os pacotes do “pasture” (pacotes que conteúdo das séries. Além das séries, existe o “pasture”, já foram da distribuição, mas atualmente são considerados obsoletos), uma coleção de pacotes antigos, porém o ZipSlack (que agora precisa de um ainda úteis, como lprng, apsfilter, versões disco Zip de 250 MB, não mais de antigas da Berkeley DB etc. Há ainda os 100 MB), o SlackBook (o famoso pacotes da categoria “testing” que, como TheBook) e imagens especiais para o nome indica, ainda se encontram em instalação por rede via PXE, pen- fase de testes em relação à inclusão na drives ou mini-ISO; distribuição estável padrão. Na categoria “extra” estão aqueles pacotes que ainda ➧ código-fonte das séries kde e kdei. não fazem parte da distribuição – e talvez nunca venham a ser incluídos –, mas são empacotados com ela devido a sua Para quem não entendeu essa separação utilidade ou pressão popular. Dito isso, pode-se notar que podemos em “séries”, isso é feito para facilitar a organização e o processo de instalação. instalar um servidor ou um desktop simples Os pacotes do Slackware são divididos com apenas o primeiro disco. Desktops em diferentes grupos, chamados “disk mais completos necessitam também do series” (séries de discos). O nome é uma segundo disco, e poucas aplicações faherança de quando a distribuição era riam uso do terceiro. Os usuários que se

Organização

Tabela 1: Pacotes binários nos CDs Nome

Partição

CD 1

Séries a, ap, d, e, f, k, l, n, x, xap (parcial) e y, além de todos os kernels de instalação e do sbootmgr.dsk para fazer o CD iniciar em máquinas que não suportam o boot por CD.

CD 2

Séries kde, t, tcl e xap (parcial); também inclui todos os discos de inicialização (kernel 2.4) e root (para instalação por disquetes) e parte dos aplicativos “extra”.

CD 3

Série kdei, outra parte dos aplicativos “extra” e seção “testing”.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

47


ANÁLISE | Slackware 11

Tabela 2: Séries do sistema A

Base do sistema. Kernel, módulos, utilitários necessários para o funcionamento do sistema etc.

AP

Aplicativos em modo texto. Players de MP3, encoders, mixers de som, editores de texto, corretores ortográficos, filtros de impressão, ferramentas para análise do sistema etc.

D

Linguagens e ferramentas de desenvolvimento.

E

Emacs (um sistema operacional travestido de editor de textos).

F

FAQs e HOWTOs (uma farta documentação direto da LDP. Extremamente útil em ambientes “não conectados”).

K

Código-fonte do kernel (no caso do Slackware 11, é o 2.4.33.3).

KDE

O K Desktop Environment. O principal ambiente de desktop do mundo Linux e suas toneladas de aplicativos.

KDEI

Os pacotes de internacionalização do KDE.

L

Bibliotecas utilizadas por outros programas. É altamente recomendado instalar a série L, se não quiser problemas depois. Por algum motivo misterioso, o Java fica aqui.

N

Servidores e aplicativos de rede: NFS, Apache, leitores de news, proftpd e vsftpd, Samba e vários outros.

T

LaTeX, um poderoso (se não o mais) sistema de processamento de texto.

TCL

As linguagens Tcl e Expect e seus toolkits gráficos.

X

O Xorg 6.9 e algumas fontes e pacotes adicionais.

XAP

Aplicativos Gráficos. Como a série AP, só que para o X. Aqui estão os navegadores, clientes de mensagens, leitores de email, editores gráficos, gerenciadores de janelas etc.

Y

Jogos em modo texto

acostumaram a usar somente dois discos podem perfeitamente manter esse hábito, sem qualquer prejuízo à instalação.

Descrição Geral

Usuários desktop ficarão felizes em ver o KDE 3.5.4 completo e funcionando suavemente, embora tenha sido necessário aplicar um patch para que o ambiente funcionasse sem o HAL (Hardware Abstraction Layer). Uma das adições do Slackware 11 é o Amarok, um reprodutor multimídia extremamente funcional e cheio de recursos, incluindo a possibilidade de baixar automaticamente as letras das músicas, e oferecendo suporte a plugins, entre outros. Ainda no mundo do desktop, o conjunto de aplicativos Mozilla foi substituído por seu descendente Seamonkey. Além do KDE 3.5.4, o Slackware vem com o XFCE 4.2.3.2, Fluxbox 1.0rc2, WindowMaker 0.92, Fvwm 2.4.19 e Blackbox 0.65 (a versão 0.70.1 está na categoria “extra”). Quem usa o Slackware como máquina de desenvolvimento vai gostar do novo pacote do Python, que agrega três pacotes antigos, pois está mais completo; também foram incluídas novas bibliotecas (principalmente na esfera multimídia), novas

ferramentas para controle de versão (git e mercurial) e a linguagem Ruby, que a cada dia possui mais desenvolvedores. No que diz respeito ao Java, na distribuição principal só temos o pacote JRE; o pacote JDK encontra-se na categoria “extra”. Há duas versões do PHP incluídas, a 4.4.4, na distribuição principal, e a 5.1.6, no “extra”. Para os administradores de sistemas, a inclusão do programa sysstat é muito bem-vinda. Ferramentas como o iostat para verificar o subsistema de E/S e o sar para analisar o sistema como um todo (inclusive com a possibilidade de deixálo monitorando o sistema e examinar os dados históricos) facilitam bastante a vida do administrador na hora de procurar gargalos e resolver problemas. A manutenção de sistemas Windows® também foi levada em consideração, e por isso há um pacote com o Rdesktop, uma ferramenta para conectar sua máquina Linux a máquinas rodando o Windows Terminal Server. É interessante notar que, à exceção do KDE e das linguagens em “extra” (JDK e PHP5), todos os pacotes que citamos até aqui já estão disponíveis após a instalação do primeiro CD. Ou seja, podemos instalar uma estação de desenvolvimen-

to, um servidor e um desktop leve com um único CD. De resto, o Slackware 11.0 é a mesma distribuição simples e estável que a comunidade já conhece desde 1993. A instalação depende somente da leitura das perguntas que aparecem, e ao final já se tem um sistema pronto; Patrick Volkerding, chefe do desenvolvimento da distribuição, continua adotando esse sistema para garantir que o usuário consiga controlar e ajustar seu sistema nos mínimos detalhes. Em outras palavras, é uma distribuição perfeita para usuários felizes.

Instalação

O teste de instalação foi feito em cinco diferentes máquinas, compreendendo desde um Pentium 133 até um Sempron 3000+. Foram utilizados teclados ABNT2 e US-Internacional, com conectores USB, serial e PS/2. Diversas placas de rede (PCI, ISA, onboard, PCMCIA) e placas de vídeo também foram usadas, assim como vários mouses (todos óticos e com “rodinha”) com conectores USB e PS/2. Três máquinas possuíam leitora/ gravadora de CD. Uma delas utiliza discos SCSI. Todas as placas de rede, vídeo e som funcionaram. Uma placa de som ISA precisou ser configurada usando o alsaconf após a instalação. Uma das placas de rede sem fio (com chipset Orinoco) funcionou perfeitamente depois da instalação, enquanto outra (com chipset BCM4318), apesar do carregamento do módulo no kernel 2.6 (bcm43xx), não funcionou. Segundo os desenvolvedores do módulo, essa placa possui problemas no gerenciamento de potência que eles estão tentando resolver. Das três máquinas com leitor de CD, uma delas não foi capaz de iniciar o instalador diretamente do CD 1. Para resolver isso, bastou criar um disquete de boot contendo o arquivo sbootmgr. dsk, cuja cópia se encontra no diretório isolinux do CD 1, e utilizá-lo para iniciar o CD-ROM. Logo na tela inicial, a primeira novidade: o kernel padrão não é mais o tradicional bare.i, e sim o sata.i, um reflexo da popularidade dos discos rígidos SATA. Em uma das máquinas deixamos a instalação continuar assim, e nas outras duas selecionamos o huge26. s como kernel de instalação. Em uma das duas máquinas restantes fizemos a instalação via rede, iniciando a partir de disquetes. O disco de inicialização utilizado foi o adaptec.s. Além dele, foi necessário criar dois discos de root (install.1

http://supertuxbr.blogspot.com 48

http://www.linuxmagazine.com.br


e install.2) e um disco adicional, o network. dsk. Apesar de extremamente entediante, o

processo correu sem problemas: primeiro o disco de inicialização, depois o install.1, em seguida o install.2, e por último digitar network para realizar a instalação via rede. Na última máquina, fizemos uma atualização do Slackware 10.2 para o 11.0; descreveremos esse processo na próxima seção. Depois de carregar o kernel e o sistema de instalação, somos presenteados com a boa e velha interface de instalação do Slackware. Quem fez uma instalação há dez anos não perceberá qualquer mudança radical. O particionamento de discos é feito usando o fdisk ou cfdisk. O primeiro é totalmente baseado em texto puro, enquanto o segundo mostra menus (também em modo texto, porém de forma mais organizada), e é teoricamente mais fácil de usar. Ao realizar o particionamento, é importante criar ao menos uma partição de swap e uma partição nativa do Linux. Com os discos já particionados, é só rodar o setup. A instalação é feita através de uma série de menus de texto. Ou seja, para instalar, é necessário que o usuário leia o que está escrito e responda de acordo com o texto apresentado. Nada extremamente complexo. A instalação pode ser resumida em: ➧ Selecionar um mapa de teclado. ➧ O instalador vai detectar a partição swap. O usuário deve apenas responder se quer usá-la e se quer que sejam checados os blocos ruins que porventura existam. ➧ Apresentada uma lista com as outras partições disponíveis e o usuário deve escolher uma para ser a partição raiz do sistema. Seleciona-se também se ela deve ser formatada (o que é bastante saudável na instalação de um novo sistema) e qual o sistema de arquivos a ser usado. ➧ Repetir o passo 3 algumas vezes, para as outras partições. Assim você pode ter uma partição para o /usr , outra para o /home etc. ➧ Escolher a fonte da instalação. Em três das nossas máquinas, a instalação foi feita a partir do CD-ROM, nas demais através da rede. ➧ Selecionar quais séries de pacotes serão instaladas. ➧ Selecionar o modo de instalação. Como três das máquinas tinham bastante espaço, escolhemos o modo completo (full). Na restante, escolhemos o modo menu para separarmos melhor os pacotes.

➧ Aguardar o término da instalação (trocar CDs, se for o caso, ou simplesmente esperar, se estivermos instalando via DVD ou a partir de um único CD). ➧ Especificar qual kernel deve ser utilizado. ➧ Configurar a rede, o mouse e o fuso horário. Feito

isso,

bast a

pressionar

[Ctrl]+[Alt]+[Del] para reiniciar a máquina

e ver o sistema novo aparecer. A instalação toda dura cerca de 40 minutos e ocupa entre 3 e 4 GB. Logo após a instalação do sistema, já podemos usá-lo.

Instalação de atualização Usando o slackpkg-2.09 que se localiza no diretório extra (no segundo CD, mas é possível baixar somente o pacote a partir de um mirror do Slackware), o procedimento para a atualização é: ➧ Instalar o pacote. ➧ Editar o arquivo /etc/slackpkg/mirrors e descomentar um dos mirrors. ➧ Executar slackpkg update && slackpkg install-new && slackpkg upgrade-all

O primeiro comando atualiza as listas de pacotes, o segundo instala os pacotes que foram incluídos no Slackware 11.0, e o terceiro atualiza os outros pacotes da distribuição. Os dois últimos comandos apresentam uma lista para que possam ser escolhidos os softwares para instalar ou atualizar. Afinal, nem todo mundo precisa de fontes indianas (um dos pacotes que foram incluídos na distribuição). É importante lembrar que foram feitas muitas modificações nos arquivos dentro do diretório /etc/rc.d. Quando o sistema perguntar ao usuário se ele deseja atualizar esses arquivos, é altamente recomendado que isso seja feito. Embora essa tarefa seja bastante enfadonha, a melhor forma de tratar os novos arquivos de configuração é selecionando a opção P (prompt) e examinar cada arquivo individualmente. A máquina em que testamos esse procedimento de atualização também está funcionando perfeitamente. Depois dos comandos acima, ainda executamos slackpgk clean-system para eliminar pacotes que não fazem mais parte do Slackware, mas ainda estão instalados desnecessariamente.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007


ANÁLISE | Slackware 11

Pós-instalação

➧ O huge26.s, que é o kernel 2.6.17.13 As duas máquinas que foram instaladas com suporte a praticamente tudo (sistemas de arquivos XFS, JFS, com o kernel 2.6 precisam de módulos ReiserFS, Ext3, várias controladoras que estão no extra. Todas as máquinas precisam de pequenos ajustes depois de SCSI, USB-Storage etc.), ou instaladas. A parte do kernel 2.6 merece ➧ o test26.s, que é o 2.6.18 com mais uma seção separada, mas os outros ajustes ou menos as mesmas opções de são mínimos e bastante simples: compilação do huge26.s ➧ Rodar o alsamixer e mudar o estado dos canais de som, tirando-os No caso do huge26.s, é possível fado mudo. Logo depois, executar zer a instalação via rede, usando o alsactl store para armazenar essas network26.dsk (que, apesar do nome, não cabe em um disquete). Emboconfigurações de som. ➧ Editar o /etc/X11/xorg.conf e trocar o ra seja possível fazer uma instalação driver do mouse de PS/2 para IMPS/2, com o kernel 2.6 utilizando apenas o pois só assim a rodinha funciona- primeiro CD, se o usuário quiser um rá. sistema plenamente funcional, será ➧ Mudar o mapa de teclado no xorg. necessário instalar os pacotes com os conf: módulos do kernel que se encontram no extra do CD 2 (para quem usou o # Teclado US Internacional huge26.s) ou no testing do CD 3 (para Option “XkbRules” “xorg” quem usou o test26.s). Option “XkbModel” “pc105” Quem possui processadores de núcleo Option “XkbLayout” “us” duplo, múltiplos processadores (SMP) ou Option “XkbVariant” “alt-intl” o recurso HT, da Intel, agora não precisa # Teclado ABNT2 mais recompilar o kernel. O Slackware 11.0 Option “XkbRules” “xorg” vem com um kernel 2.6.17.13 compilado Option “XkbModel” “abnt” para SMP no CD 2 (dentro do extra). Option “XkbLayout” “br” Um aviso importante para quem usar o pacote kernel-generic: Faça um initrd. ➧ Incluir: export GTK_IM_MODULE=”cedilla” Os pacotes kernel-generic são kernels sem no /etc/profile.d/lang.sh para cor- qualquer suporte especial, e não conserigir problemas com o C acentuado guem ler sistemas de arquivos ReiserFS e em aplicativos que usem a biblioteca Ext3. Após instalar algum deles, faça: GTK. mkinitrd -c -k 2.6.17.13 -m jbd:ext3 ➧ Editar o /etc/fstab e trocar todas as ocorrências de owner para users, para ➥(para ext3) ou permitir que os usuários sejam camkinitrd -c -k 2.6.17.13 -m reiserfs pazes de montar CDs e disquetes. ➥(para reiserfs) ➧ Criar o seu usuário e adicioná-lo ao grupo audio (e talvez também ao disk). Se a leitura de seu disco rígido exigir o acesso a algum módulo especial Nos passos 2 e 3, é possível usar os (por exemplo, se o disco for SCSI), comandos xorgsetup ou xorgconfig para será preciso incluir o módulo respecfazer essas alterações (e então aproveitar tivo no initrd. No meu caso, minha para mudar o driver de vídeo para um controladora SCSI AHA2940UW eximais adequado à sua placa de vídeo, e giu o comando: também para especificar a resolução da tela). Nesse momento, configurações sal- mkinitrd -c -k 2.6.17.13 -m aic7xxx_old: vas de outras instalações podem ajudar ➥jbd:ext3 e acelerar o processo. Depois de criado o initrd, deve-se adicionar uma linha initrd = /boot/initrd.gz em seu lilo.conf. Ele deve ficar Ainda não foi dessa vez que um kernel semelhante a: da série 2.6 veio como kernel padrão do Slackware. Apesar da vontade ge- image = /boot/vmlinuz root = /dev/hda5 ral, o kernel padrão ainda é o 2.4.33.3. initrd = /boot/initrd.gz Mas é perfeitamente possível usar o label = Linux kernel 2.6; já durante a instalação read-only pode-se usar:

Kernel 2.6

Lembre de depois executar o comando para copiar a nova imagem para o Registro Mestre de Inicialização. Quem usar o kernel 2.6 vai verificar que a detecção de hardware ficou bem mais rápida e eficiente. Mais um novo recurso do Slackware 11, que conseguiu desfazer-se do antigo sistema hotplug e passou a usar o Udev para realizar tanto a criação dos dispositivos como o carregamento de seus respectivos módulos. Entretanto, o uso do hotplug em conjunto com kernels da série 2.4 ainda é imprescindível. Com isso, temos um /dev menor e mais organizado, e a detecção de dispositivos tornou-se mais rápida e flexível. Algumas importantes vantagens do novo sistema Udev:

lilo

➧ Máquinas com mais de uma placa de rede não sofrem mais da indefinição relacionada ao arquivo de dispositivo. Basta editar /etc/udev/rules. d/net-devices.rules e descomentar as regras para placas de rede que já estejam definidas. ➧ A mesma indefinição não ocorre mais com os links de CD-ROM. Se ela ocorrer, pode-se descomentar a regra para criação de CD-ROMs que está em /etc/udev/rules.d/udev. rules. Para se encaixar nesse sistema, o esquema de blacklist também mudou. Agora, para impedir o carregamento de algum módulo, deve-se procurá-lo em /etc/modprobe.d/blacklist. O arquivo é bem documentado e a sintaxe é simples.

Conclusão

Apesar da inclusão de vários pacotes e da atualização de algumas centenas de outros, a característica mais marcante do Slackware 11.0 é o kernel 2.6 ainda não vir como padrão; a obrigação de se instalar os módulos do kernel após o término da instalação também é um inconveniente. O ponto positivo é a inclusão de três pacotes do kernel 2.6 pré-compilados. O Slackware 11.0 é como o próprio Patrick anuncia: “não menos que o melhor Slackware já lançado”. E realmente combina as já conhecidas estabilidade e segurança com alguns dos últimos avanços do Linux. Vale a pena a atualização para todos os usuários. E quem ainda não é usuário deve um dia testar o Linux mais tradicional do mercado. E, obviamente, tornar-se um novo usuário. ■

http://supertuxbr.blogspot.com 50

http://www.linuxmagazine.com.br


LPI 103-104 | TUTORIAL

Vamos continuar com a segunda aula da preparação para a certificação LPI

A aula de hoje trata do importantíssimo ambiente de linha de comando, além de sistemas de arquivos e outros assuntos. por Luciano Siqueira

Tópico 103: Comandos GNU e Unix. Objetivo 1.103.3: Trabalhando na linha de comando

tos. Usar alias sem argumentos mostra quais aliases existem e seus conteúdos. exec

O comando iniciado através de exec não se torna um processo filho do shell, mas toma seu lugar. Dessa forma, o shell é finalizado quando o comando terminar. O shell interpreta a primeira palavra na linha de comando como um comando. O caminho completo ou relativo para o comando precisa ser fornecido, a menos que o comando esteja localizado em um dos diretórios contidos na variável de ambiente PATH. Se o programa se encontrar no diretório de trabalho atual e fora dos diretórios contidos em PATH, ele precisará ser invocado precedido por ./.

A maneira mais direta de interagir com o computador é usando a linha de comando. O prompt do shell (terminando em $ ou # para o usuário root) indica que o shell está pronto para receber instruções. O shell é o ambiente que faz o intermédio entre o usuário e os recursos do computador, como um ambiente de programação em tempo real para executar tarefas. O shell padrão no Variáveis Linux é o bash (Bourne Again Shell), e é a ele que os procedimentos aqui As variáveis usadas no shell são semelhantes às usadas em linguagens de programostrados se referem. As instruções do shell geralmente mação. Nomes de variáveis são limitados seguem o formato: comando [opções] {ar- a caracteres alfanuméricos. gumentos} Para se criar ou modificar uma variável, Alguns comandos embutidos do am- espaços não devem ser usados: biente shell: $ nome_da_variável=valor_da_variável

alias

Cria um apelido para um comando, no formato:

O valor de uma variável é retornado acrescentando-se $ ao seu nome:

$ alias apelido=’nome_do_programa --opções’

$ echo $nome_da_variável valor_da_variável

É útil para facilitar a entrada de comandos recorrentes que levam muitos argumen-

Há dois tipos de variáveis: locais e exportadas:

TUTORIAL

LPI nível 1: Aula 2 Gözde Otman - www.sxc.hu

➧ Locais: Acessíveis apenas no shell atual. ➧ Exportadas: Acessíveis no shell e pelos processos iniciados neste shell. Todas as variáveis são listadas usando o comando set. Para ver apenas as variáveis exportadas, usa-se env. Se uma variável pode ser acessada por qualquer processo ou shell, é chamada de variável “global”. Algumas variáveis de ambiente podem ser pré-definidas, seja de forma embutida na shell ou nos arquivos de configuração, como mostra a tabela 1. Variáveis especiais ➧ $!: PID do último processo filho ➧ $$: PID do shell atual ➧ $?: Retorna 0 se o último comando foi bem sucedido, caso contrário retorna 1 ➧ ~: Corresponde ao diretório pessoal do usuário atual ➧ ~alaor: Corresponde ao diretório pessoal do usuário chamado “alaor” Comandos Seqüenciais Para executar três comandos em seqüência, independente do resultado de cada um, utiliza-se o formato: $ comando1 ; comando2 ; comando3

Para executar o comando seguinte apenas se o anterior foi bem sucedido (se retornou 0): $ comando1 && comando2 && comando3

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

51


TUTORIAL | LPI 103-104

Tabela 1: Variáveis pré-definidas Variável

Definição

DISPLAY

Usado pelo X para saber onde executar os aplicativos clientes

HISTFILE

Caminho para o histórico de comandos do usuário (geralmente $HOME/.bash_history)

HOME

Caminho para o diretório pessoal do usuário

LOGNAME

O nome que o usuário usou para entrar no sistema

PATH

Lista de diretórios nos quais programas serão procurados caso tenham sido solicitados sem o caminho completo ou relativo

PWD

O diretório atual

SHELL

O shell utilizado (nesse caso, /bin/bash)

TERM

O tipo de emulador de terminal utilizado

Executar o comando seguinte apenas se o anterior não foi bem sucedido (se retornou diferente de 0): $ comando1 || comando2 || comando3

Auto-Completar Comandos e Caminhos Um recurso que agiliza a digitação de comando e caminhos existentes, é a utilização da tecla [TAB]. Exemplo: Comando whatis $ wha<TAB> $ whatis

Objetivo 1.103.2: Processar fluxos de texto através de filtros

posição de campo. Para separar por campo, usa-se a opção -d para especificar o caractere que delimita os campos e -f para informar a posição do campo. Mostrar os campos da posição 1 e 3 do arquivo /etc/group, campos que estão separados por :: $ cut -d ‘:’ -f 1,3 /etc/group root:0 bin:1 daemon:2 sys:3 adm:4 (...)

Para mostrar outro delimitador no lugar do original, usa-se a opção --output-delimiter:

a leitura deve ser feita a partir da linha de $ cut -d ‘:’ -f 1,3 /etc/group --outputnúmero especificado após o +. wc: Conta linhas, palavras ou caracteres, ➥delimiter ‘ = ‘ root = 0 com as opções -l, -w e -c respectivamente. bin = 1 Quando usado sem argumentos, mostra daemon = 2 esses três valores na seqüência. sys = 3 nl: Numera linhas, como cat -b. O adm = 4 argumento -ba faz numerar todas as li- (...) nhas. O argumento -bt apenas as que não estejam em branco. paste: Concatena arquivos lado a lado. expand: Substitui espaços de tabulação (“TABs”) por espaços simples, mantendo $ paste texto_simples texto_simples texto simples texto simples a mesma distância aparente. criado com cat criado com cat unexpand: Substitui dois ou mais espaços simples por espaços de tabulação join: Similar ao paste, mas trabalha (TABs). hexdump: Mostra arquivos binários. A especificando campos, no formato join opção -C torna a saída mais legível, mos- -1 CAMPO -2 CAMPO <arquivo um> <arquitrando a coluna de endereço hexadecimal, vo dois>, onde CAMPO é o número seguida pela coluna dos dados do arquivo indicando qual campo nos respectivos (valores hexadecimais seqüenciais sepa- arquivos (primeiro e segundo) deve ser rados a cada dois bytes), e por último a correlacionado. Exemplo: Relacionar coluna que mostra esses mesmos bytes as linhas de arq2 cujo primeiro campo (coluna 1) seja igual ao primeiro no formato ASCII. split: Divide um arquivo em outros campo de arq2: menores seguindo critérios como tamanho ou número de linhas. A opção -l indica arq1: o número de linhas de cada parte do ar- 1 a1 x1 2 b1 y1 quivo dividido. A opção -b indica qual o 3 c1 z1 tamanho de cada parte. Um prefixo para as partes pode ser indicado após o nome arq2: 1 a2 x2 do arquivo a ser dividido: Dividir um arquivo em partes de 2 b2 y2 3 c2 z2 1024Kb usando o prefixo “parte_”: $

Esse objetivo se relaciona principalmente ao uso das ferramentas do pacote GNU textutils. São comandos Unix padrão, utilizados para modificar seqüências de texto. cat: É usado para mostrar o conteúdo de arquivos. tac: Tem a mesma função do cat, mas mostra o conteúdo de trás para frente. head: Mostra o começo de arquivos. Por padrão, as primeiras dez linhas são mostradas. A quantidade de linhas a serem mostradas é indicada pela opção -n. A opção -c especifica o número de caracteres (bytes) a serem mostrados no split -b 1024k “arquivo original” par- $ join -1 1 -2 1 arq1 arq2 lugar de linhas. tail: Mostra o final de arquivos. Por pa- te_ . Esse comando criará arquivos 1 a1 x1 a2 x2 drão, as últimas dez linhas são mostradas. chamados parte_aa, parte_ab, parte_ac 2 b1 y1 b2 y2 A quantidade de linhas a serem mostradas etc. Para concatenar novamente o 3 c1 z1 c2 z2 é indicada pela opção -n . A opção -c es- arquivo, usa-se cat. Será criado um A primeira coluna do resultado é o pecifica o número de caracteres (bytes) a arquivo de conteúdo idêntico ao do campo que foi relacionado, seguido das serem mostrados no lugar de linhas. Para arquivo original. uniq: Mostra o conteúdo de arquivos su- linhas correspondentes. É possível delique o final do arquivo seja mostrado conmitar quais campos mostrar, com a opção tinuamente, à medida que mais texto é primindo linhas seqüenciais repetidas. cut: Delimita um arquivo em colunas, em -o. Essa opção deve ser escrita no formato adicionado ao final do mesmo, usa-se a opção -f (de follow). O sinal + indica que determinado número de caracteres ou por N.M, onde N é o número correspondente

http://supertuxbr.blogspot.com 52

http://www.linuxmagazine.com.br


LPI 103-104 | TUTORIAL

ao arquivo e M o número correspondenO comando ls é usado para listar arquite ao campo desse arquivo. O campo de vos e conteúdo de um diretório. A opção relação também pode ser referido por -l exibe detalhes sobre o(s) arquivo(s), -s 0. Exemplo: Fazer a mesma relação do mostra o tamanho em KB, e -d mostra o exemplo anterior, mostrando apenas o diretório, e não seu conteúdo. Exemplo primeiro campo de arq1 e apenas o se- de saída de ls -l: gundo de arq2: $ join -1 1 -2 1 -o ‘1.2 2.3’ arq1 arq2 a1 x2 b1 y2 c1 z2

sort: Ordena alfabeticamente. Com a opção -n, ordena numericamente, e -r inverte o resultado. sort texto_simples criado com cat texto simples

fmt: Formata para determinado número de caracteres por linha. O padrão é 75. ➧ -w: indica o número de caracteres por linha ➧ -s: quebra linhas grandes, mas não as preenche ➧ -u: um espaço entre palavras e dois espaços entre sentenças. pr: Divide o arquivo para impressão. O padrão é 66 linhas por 72 caracteres de largura, modificados por -l e -w respectivamente. tr: Converte caracteres. O comando tr lê apenas diretamente via stdin. Conversão simples de um único caractere: $ cat texto_simples | tr ‘ ‘ ‘.’ texto.simples criado.com.cat

Converter letras minúsculas para maiúsculas: $ cat texto_simples | tr ‘a-z’ ‘A-Z’ TEXTO SIMPLES CRIADO COM CAT

Objetivo 1.103.3: Gerenciamento básico de arquivos Diretórios e arquivos Arquivos podem ser acessados tanto por seu caminho absoluto quanto por seu caminho relativo. Caminhos absolutos são aqueles iniciados pela barra da raiz (/), e caminhos relativos são aqueles que tomam por referência o diretório atual. O ponto (.) refere-se ao diretório atual, e .. refere-se ao diretório contendo o diretório atual.

$ ls -l /etc/X11/xinit/ total 20 -rw-r--r-- 1 root root 321 2006-01-14 ➥17:33 README.Xmodmap lrwxrwxrwx 1 root root 15 2006-03-20 ➥22:31 xinitrc -> xinitrc.fluxbox -rwxr-xr-x 1 root root 556 2003-03-16 ➥19:59 xinitrc.blackbox -rwxr-xr-x 1 root root 560 2006-03-07 ➥03:32 xinitrc.fluxbox -rwxr-xr-x 1 root root 799 2006-01-14 ➥17:30 xinitrc.twm -rwxr-xr-x 1 root root 788 2005-07-21 ➥15:27 xinitrc.wmaker

A primeira coluna mostra o tipo e as permissões do arquivo, a segunda coluna mostra o número de links físicos (hard links) para o arquivo, a terceira e a quarta mostram o dono e o grupo aos quais o arquivo pertence, a quinta mostra o tamanho em bytes, a sexta e a sétima mostram a data e a hora da última modificação no arquivo, e a oitava coluna mostra o nome do arquivo. Se o arquivo for um link simbólico, uma seta mostra o arquivo para o qual ele aponta. O comando cp é utilizado para copiar arquivos. Suas opções principais são: ➧ -i: Modo interativo. Pergunta antes de sobrescrever um arquivo. ➧ -p: Copia também os atributos do arquivo original. ➧ -r: Copiar recursivamente o conteúdo do diretório de origem. É importante saber que, ao se copiar um diretório recursivamente, o uso da barra / no final do diretório de origem fará com que apenas o conteúdo do diretório seja copiado para o destino, e o não uso da barra fará com que o diretório de origem e seu conteúdo sejam copiados no destino. O comando mv move e renomeia arquivos. Usado com a opção -i, ele pede confirmação antes de sobrescrever um arquivo de destino. Para alterar a data de um arquivo, utiliza-se o comando touch. Usado sem argumentos, touch altera a data e a hora de criação e modificação de um arquivo para os valores atuais do sistema. Para alterar apenas a data de modificação, usa-se a opção -m, e para alterar apenas a data de acesso, usa-se a opção -a. O argumento passado com -t usa outro valor de tempo.

No bash, o comando para retornar o diretório atual é pwd. O comando cd muda para o diretório especificado ou vai para o diretório pessoal quando nenhum diretório for especificado. O comando mkdir cria diretórios. Para criar uma árvore de diretórios recursivamente, usa-se a opção -p: $ mkdir -p caminho/completo/para/dir. Para alterar as permissões do diretório no ato da criação, as mesmas são transmitidas ao mkdir com a opção -m. Diretórios vazios podem ser apagados pelo comando rmdir. Para apagar uma árvore de diretórios vazios, usa-se a opção -p. Para apagar diretórios com conteúdo, usa-se rm -r, e para forçar a remoção, a opção -f é utilizada. Encontrando arquivos com o comando find Sintaxe do find: find diretório critério [-exec comando {} \;] O argumento diretório indica onde o find deve iniciar a busca, e critério pode ser o nome do arquivo ou

diretório a ser procurado, ou uma regra para a busca. Critérios comuns para o find: ➧ -type: Tipo do arquivo (d para diretório, f para arquivo comum e l para link) ➧ -name nome: Nome do arquivo ➧ -user usuário: Dono do arquivo ➧ -atime -/+n: Data de último acesso ao arquivo, menor ou maior que n. n corresponde a n * 24 horas. ➧ -ctime -/+n: Data de criação do arquivo, menor ou maior que n. ➧ -mtime -/+n: Data de modificação do arquivo, menor ou maior que n. ➧ -amin -/+n: Data de último acesso ao arquivo, menor ou maior que n. n corresponde a minutos. ➧ -cmin -/+n: Data de criação do arquivo, menor ou maior que n. ➧ -mmin -/+n: Data de modificação do arquivo, menor ou maior que n. ➧ -newer arquivo: O arquivo procurado foi criado ou modificado mais recentemente que arquivo. ➧ -perm modo: O arquivo procurado tem permissão modo. ➧ -perm -modo: O arquivo procurado tem todas as permissões listadas em modo. ➧ -perm +modo : O arquivo procurado tem qualquer das permissões listadas em modo. Exemplo: encontrar todos os arquivos do tipo link em /usr/lib criados há menos de 24 horas:

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

53


TUTORIAL | LPI 103-104

$ find /usr/lib -type l -ctime -1 /usr/lib/libssl.so /usr/lib/libcrypto.so /usr/lib/libssl.so.0 /usr/lib/libcrypto.so.0

dados. Esses descritores podem ser redirecionados de e para outros arquivos ou processos. Por padrão, o descritor de entrada (stdin) é o teclado e os descritores de saída padrão (stdout) e saída de erro Caracteres curinga (file globbing) (stderr) são a tela do computador. Os As operações com arquivos e diretórios valores numéricos para esses descritores permitem o uso de caracteres curinga, são 0 para stdin, 1 para stdout e 2 para stque são padrões de substituição de ca- derr. Os descritores também podem ser racteres. O caractere * substitui qualquer acessados através dos dispositivos virtuais seqüência de caracteres: /dev/stdin, /dev/stdout e /dev/stderr. O fluxo dos dados para redireciona$ ls /etc/host* mentos e canalizações numa linha de co/etc/host.conf mando vai da esquerda para a direita. /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/hosts.equiv

O caractere ? substitui apenas um caractere: $ ls /dev/fd? /dev/fd0 /dev/fd1 /dev/fd2 /dev/fd3

O uso de colchetes ([]) indica uma lista de caracteres: $ ls /dev/hd[abc] /dev/hda /dev/hdb /dev/hdc

Chaves ({}) indicam uma lista de termos separados por vírgula: $ ls /dev/{hda,fd0} /dev/fd0 /dev/hda

O uso de exclamação antes de um curinga o exclui da operação: $ ls /dev/fd[!01] /dev/fd2 /dev/fd3

Curingas precedidos de barra invertida (\) não realizam substituição: $ ls /dev/fd\[\!01\] ls: /dev/fd[!01]: Arquivo ou diretório não ➥encontrado

Entre aspas duplas, apenas os caracteres especiais |, / e $ têm efeito. Entre aspas simples, apenas o caractere especial \ tem efeito.

Objetivo 1.103.4: Fluxos, canalização e redirecionamentos de saída Processos Unix geralmente abrem três descritores padrão de arquivos, que os permitem processar entrada e saída de

Redirecionamento Para redirecionar a saída padrão de um comando para um arquivo, utiliza-se o símbolo > após o mesmo, que deve indicar o arquivo a ser criado com os dados referidos, como em $ cat texto_simples > clone_texto_simples. Se o arquivo existir previamente, será sobrescrito. Para adicionar os valores sem apagar o conteúdo existente, usa-se >>. Para redirecionar o conteúdo de um arquivo para a entrada padrão de um comando, usa-se <. Nesse caso, o fluxo dos dados segue da direita para a esquerda. É especialmente útil para utilizar com comandos como o tr, que não lê arquivos diretamente. O conteúdo redirecionado por padrão é o de stdout. Para especificar stderr, usa-se 2>. Para redirecionar ambos simultaneamente, usa-se &>. Canalização (pipe) É possível enviar a saída de um comando para a entrada de outro comando, utilizando o caractere de canalização |. Exemplo: extrair a terceira música de um CD com o comando cdparanoia, canalizando o áudio através do programa oggenc para armazenar a música no formato Ogg Vorbis.

É possível também usar a saída de um comando como argumento para outro, usando aspas invertidas: $ ls -dl `cat /etc/ld.so.conf` drwxr-xr-x 5 root root 7464 2006-01-14 ➥17:35 /usr/X11R6/lib drwxr-xr-x 2 root root 712 2006-03-17 ➥12:26 /usr/i486-slackware-linux/lib drwxr-xr-x 2 root root 688 2005-10-29 ➥22:53 /usr/lib/qt/lib drwxr-xr-x 16 root root 7272 2006-03-21 ➥02:49 /usr/local/lib

Resultado idêntico é conseguido inserindo o comando entre as aspas de $(). O comando xargs desempenha função parecida, passando os dados que recebe via stdin como argumento para um segundo comando. Exemplo do xargs acompanhando a execução do find: $ find /usr/X11R6/bin/ -name ‘xt*’ | xargs ➥ls -l -rwxr-xr-x 1 root bin 268928 2006-01-14 ➥17:35 /usr/X11R6/bin/xterm -rwxr-xr-x 1 root bin 13076 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapchar -rwxr-xr-x 1 root bin 6536 2006-01-14 ➥17:35 /usr/X11R6/bin/xtrapin (...)

Nesse exemplo, xargs tomou cada caminho passado por find e repassou como argumento para o comando ls -l.

Objetivo 1.103.5: Criar, monitorar e finalizar processos

Em linhas gerais, um processo é um programa em execução. Cada processo possui um número único de identificação chamado PID. Esse número pode ser usado para mudar a prioridade de um processo ou para finalizá-lo. pstree: Mostra processos ativos em formato de árvore genealógica (processos filhos $ cdparanoia -d /dev/cdrom 3 - | oggenc - - ligados aos respectivos processos pais). ➥o 03.ogg ps: Mostra os processos ativos de maneira detalhada. Por fim, é possível redirecionar sitop: Monitora continuamente os promultaneamente a saída tanto para um cessos, mostrando informações como uso arquivo quanto para stdout, através do de memória e CPU de cada processo. A comando tee. Para tal, canaliza-se a sa- tecla [H] fornece ajuda sobre o uso do ída do comando para o comando tee, e programa. Pode ser usado para alterar a a este um nome de arquivo para arma- prioridade de um processo. pidof: Retorna o PID do programa zenar a saída: cujo nome foi solicitado, se o programa $ cat /etc/passwd | tee cópia_passwd estiver em execução. kill : Envia sinais de controle para O conteúdo de /etc/passwd será mos- processos. O sinal padrão quando trado na tela e copiado no arquivo có- nenhum sinal é informado é SIGTERM, pia_passwd. de valor numérico 15, que pede ao

http://supertuxbr.blogspot.com 54

http://www.linuxmagazine.com.br


LPI 103-104 | TUTORIAL

programa em questão para finalizar. O processo não necessariamente obedece ao sinal, a menos que o sinal seja SIGKILL. Em alguns casos, o sinal SIGHUP pode ser interpretado como ordem para o processo reler seu(s) arquivo(s) de configuração. Exemplo de kill:

➧ SIGKILL: Força a finalização do processo. Valor numérico 9. ➧ SIGTERM: Pede ao processo para finalizar. Valor numérico 15. killall: Tem função igual à de kill, porém usa o nome do processo no lugar do PID. Com a opção -l, lista os possíveis sinais.

# kill -SIGTERM 4902

Tarefas em primeiro e segundo plano Após iniciado um programa no shell, ele normalmente assumirá o controle de stdin e stdout, ou seja, ficará em primeiro plano. Para interromper o programa e voltar ao prompt do shell, usa-se a combinação de teclas [Ctrl]+[Z]. Feito isso, para continuar a execução do programa em segundo plano, ou seja, mantendo o prompt do bash em primeiro plano, usa-se o comando bg

Envia o sinal SIGTERM para o processo de PID 4902. Sinais comuns: ➧ SIGHUP: Termina ou reinicia o processo. Valor numérico 1. ➧ SIGINT: Interrompe o processo, igual a [Ctrl]+[C]. Valor numérico 2. ➧ SIGQUIT: Fecha o processo. Valor numérico 3.

Tabela 2: Comandos do modo de comando Tecla(s)

Efeito

0, $

Início e fim de linha

1G, G

Início e fim de documento

b, e

Início e fim de palavra

(, )

Início e fim de sentença

{, }

Início e fim de parágrafo

w, W

Pular palavra e pular palavra contando com a pontuação

h, j, k, l

Esquerda, abaixo, acima, direita

/, ?

Busca para frente e para trás

i

Entra no modo de inserção na posição atual do cursor

a, A

Entra no modo de inserção depois do cursor ou no fim da linha

o, O

Adiciona linha e entra no modo de inserção depois ou antes do cursor

s, S

Apaga item ou linha e entra no modo de inserção

c

Modifica um item através de inserção de texto

r

Substitui um único caractere

x

Apaga um único caractere

y, yy

Copia um item ou toda linha

p, P

Cola o conteúdo copiado depois ou antes do cursor

u

Desfazer

ZZ

Fecha e salva se necessário

ZQ

Fecha e não salva

Tabela 3: Comandos de última linha ou coluna :!

Chama um comando do shell

:quit ou :q

Fecha

:quit! ou :q!

Fecha sem gravar

:wq

Salva e fecha

:exit ou :x ou :e

Fecha e grava se necessário

:visual

Volta para o modo de comando

(background). Para continuar a execução do programa em primeiro plano, usa-se o comando fg (foreground). Ao interromper uma tarefa, é mostrado um número que identifica a mesma. Este número é passado para fg e bg para especificar a tarefa desejada. Se houver apenas uma tarefa na sessão atual, fg e bg podem ser usados sem argumentos. Para usar o nome do programa no lugar de seu número de tarefa, basta precedê-lo por %?. O comando jobs lista as tarefas existentes na sessão atual do bash. É especialmente útil quando há mais de uma tarefa em andamento. É possível iniciar programas diretamente em segundo plano, adicionando o símbolo & ao seu final. Os números que são mostrados correspondem ao número da tarefa e ao PID, respectivamente. O número de uma tarefa pode ser usado como argumento do comando kill desde que precedido do símbolo %. Quando um usuário sai do sistema, um sinal SIGHUP é enviado a todos os processos iniciados por ele. Para que esse sinal não interrompa o processo do usuário após este sair do sistema, o comando deve ser invocado através do nohup: $ nohup wget ftp://transferência/muito/ ➥demorada.tar.bz2 & nohup: appending output to `nohup.out’

As saídas stdout e stderr serão redirecionadas para o arquivo nohup.out, criado no mesmo diretório em que o comando foi executado.

Objetivo 1.103.6: Modificar a prioridade de execução de um processo Números nice (NI) são usados para alterar a prioridade de CPU e balancear seu uso num ambiente multiusuário. Todo processo comum é iniciado com uma prioridade padrão (0). Números nice vão de 19 (menor prioridade) a -20 (prioridade maior). Apenas o usuário root pode diminuir o número nice de um processo para abaixo de zero. É possível iniciar um comando com uma prioridade diferente da padrão através do comando nice. Por padrão, nice muda a prioridade para 10. nice -n 15 tar czf home_backup.tar.gz /home inicia o comando tar com número nice de prioridade 15.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

55


TUTORIAL | LPI 103-104

Para alterar a prioridade de um processo em andamento, o renice é usado. A opção -p indica o PID do processo em questão. # renice -10 -p 2997 2997: prioridade antiga = 0; prioridade ➥nova = -10

sed: O comando sed é mais utilizado para procurar e substituir padrões em textos, mostrando o resultado em stdout. Sua sintaxe é sed [opções] ‘comando e expressão regular’ [arquivo original]. No sed, a ex-

Tópico 104: Dispositivos, Sistemas de arquivos Linux e padrão FHS

pressão regular fica circunscrita entre barras (/). Por exemplo, sed -e ‘/^#/d’ /etc/lilo.conf mostra o arquivo /etc/lilo. Objetivo 1.104.1: Criação de As opções -g e -u permitem alterar to- conf sem as linhas começadas por # (li- partições e sistemas de arquivos dos os processos do grupo ou do usuário, nhas de comentário). A letra d ao lado respectivamente. Com renice +5 -g users, da expressão regular é um comando sed Por padrão, discos IDE podem conter até todos os processos de usuários do grupo que indica a exclusão de linhas contendo quatro partições físicas, das quais uma pode users tiveram suas prioridades (número o respectivo padrão. Por exemplo, para ser estendida. A partição estendida pode substituir o termo hda por sdb, usaríamos ser dividida em partições lógicas. nice) alteradas para +5. Prioridades podem ser modificadas sed -e ‘s/hda/sdb/g’ /etc/lilo.conf. Fdisk: O fdisk é o programa padrão interativamente através do programa para manipular partições no Linux. Com Opções comuns de sed: top. Quando na tela de processos, basta ➧ -e: Executa a expressão e comando a opção -l, ele lista os dispositivos e as a seguir. partições existentes. Para manipular apertar a tecla [R] e indicar o número ➧ -f: Lê expressões e comandos do partições, o fdisk deve ser iniciado tenPID do processo. arquivo indicado pela opção. do como argumento o dispositivo em ➧ -n: Não mostrar as linhas que não questão. Uma vez dentro do fdisk, certas Objetivo 1.103.7: Procurar letras corresponderão a comandos. Alguns correspondam à expressão. comandos bastante utilizados, podem ser Comandos comuns de sed: em arquivos de texto usando vistos na tabela 4: ➧ s: Substituir. expressões regulares ➧ d: Apagar a linha. O fdisk cria novas partições identifiExpressões regulares e grep ➧ r: Insere o conteúdo do arquivo indi- cadas como partições nativas de Linux, Expressões regulares são elementos cado na ocorrência da expressão. cujo código hexadecimal é 83 (0x83). O de texto, palavras-chave e modifica➧ w: Escreve a saída no arquivo indi- código de identificação de partições do dores que formam um padrão, usacado. tipo swap é 82 (0x82). do para encontrar e opcionalmente Criação de Sistemas de Arquivos: ➧ g: Substitui todas as ocorrências da alterar um padrão correspondente. Durante muito tempo o sistema de arexpressão na linha atual. Muitos programas suportam o uso de quivos mais utilizado no Linux foi o Ext2 expressões regulares. O comando grep Objetivo 1.103.8: Edição (second extended). No entanto, hoje são é o mais comum para realizar buscas básica de arquivos com o vi muito usados sistemas de arquivos com por expressões regulares em textos. journalling, como o Ext3 e o ReiserFS. Caracteres especiais em expressões Na maioria das distribuições, o vi é o edi- Ext2 e Ext3 utilizam blocos de 1024 bytes. regulares: tor de textos padrão. O vi localiza-se em Há três tipos de blocos: /bin. Há três modos básicos no vi: ➧ Superblocks: Repetem-se a cada 8193 ➧ ^: Começo de linha blocos. Contêm informações sobre ➧ $: Fim de linha Modo de inserção: A maneira mais o tamanho dos blocos, inodes livres, ➧ .: Qualquer caractere comum de entrar no modo de inserção data da última montagem etc. ➧ *: Qualquer seqüência de zero ou é apertando a tecla [i] ou [A]. É o modo mais intuitivo, usado para digitar texmais caracteres ➧ inodes: Indicadores para os blocos de dados. Os 12 primeiros blocos ➧ []: Qualquer caractere que esteja to no documento. A tecla [ESC] sai do de dados após o inode são acessapresente nos colchetes modo de inserção e volta para o modo dos seqüencialmente. Se os dados Exemplos: Mostrar apenas as linhas de comando. que começam com o caractere # do arexcederem 12 blocos, blocos inode Modo de última linha ou coluna: quivo /etc/lilo.conf: grep ‘^#’ /etc/lilo. Acessível ao apertar a tecla [:] no modo indiretos agem como espelho. Cada conf. Mostrar linhas de /etc/lilo.conf que inode tem 256 bytes e contém a inde comando. Usado para fazer buscas, contenham os termos hda ou hdb: grep salvar, sair, executar comandos no shell, formação de usuário, grupo, per‘hda[ab]’ /etc/lilo.conf. missões e data referente aos dados alterar configurações do vi etc. Para reMais opções de grep: associados. tornar ao modo de comando, usa-se o ➧ Blocos de dados: Os blocos que ➧ -c: Conta as linhas contendo o comando visual. Veja a tabela 3 para mais detalhes. contêm os arquivos e diretórios padrão. Modo de comando: É o modo inicial propriamente ditos. ➧ -i: Ignora a diferença entra maiúsdo vi. Serve para navegação e edição. GeA diferença para um sistema de arquiculas ou minúsculas. ➧ -f: Usa a expressão regular contida no ralmente, os comandos são letras únicas. vos com journalling é que um sistema arquivo indicado por essa opção. Se precedido por número, o comando com essa capacidade registra de antemão ➧ -n: Procurar somente na linha indi- será repetido correspondentemente ao todas alterações que irá realizar no disco. Dessa forma, erros de gravação (normalcada por essa opção. valor desse número. Algumas teclas comuns usadas no modo mente ocasionados por queda de energia ➧ -v: Mostra todas as linhas exceto a de comando podem ser vistas na tabela 2: ou desligamento incorreto) podem ser que corresponder ao padrão.

http://supertuxbr.blogspot.com 56

http://www.linuxmagazine.com.br


LPI 103-104 | TUTORIAL

Tabela 4: Comandos do fdisk

Como o comando

mkfs, o fsck possui a opção -t para especificar o

Comando

Efeito

p

Lista as partições

n

Cria uma nova partição interativamente

t

Muda a identificação da partição

d

Apaga uma partição

q

Sai do fdisk sem gravar as alterações

w

Sai do fdisk e grava as alterações

m

Mostra a ajuda de comandos

tipo do sistema de arquivos, e um comando específico para cada partição: fsck.ext2 ou e2fsck, fsck. ext3, fsck.xfs, reiserfsck e dosfsck.

Examinando e corrigindo o sistema de arquivos mais facilmente diagnosticados e sanados. debugfs: Depurador inÉ possível fazer a conversão de Ext2 para terativo de sistemas de arquivos. Examina Ext3 sem perda de dados. sistemas Ext2 e Ext3. Muda diretórios, O comando mkfs cria sistemas de ar- examina dados de inodes, apaga arquivos, quivos em partições. A opção -t indica cria links, mostra o log de journalling o tipo do sistema de arquivos. Para criar Ext3 etc. É usado em casos extremos, uma partição Ext2 na partição /dev/hda3, geralmente após o fsck ter falhado. dumpe2fs: Mostra informações de usa-se mkfs -t Ext2 /dev/hda3. Há também comandos específicos para cada grupo de blocos e de superblocos. sistema de arquivos: mkfs.ext2, mke2fs, tune2fs: Configura parâmetros ajustámkfs.ext3, mkfs.xfs, mkreiserfs, mkdosfs veis em sistemas de arquivos Ext2, como e mkfs.vfat. rótulo e limites de montagem antes de Partição Swap: Após a partição swap checar automaticamente. ser criada pelo fdisk, ela precisa ser formatada com o comando mkswap. Por exemUso do disco plo, mkswap /dev/hda2. Após ser criada e df: Mostra o espaço disponível em cada formatada, uma partição swap precisa dispositivo. A análise é feita diretamenser ativada para ser usada como memó- te no dispositivo. Por padrão, mostra o ria swap. O comando swapon -a ativa espaço em unidades de 1 KB. A opção todas as partições swap que constarem -h usa medidas apropriadas para tornar a em /etc/fstab. As entradas referentes a saída mais inteligível. partições swap em /etc/fstab não têm du: Mostra o espaço ocupado. Sem ponto de montagem. argumentos, mostra o uso de cada direExemplo de entrada de partição swap tório no sistema. Um diretório específico em /etc/fstab: pode ser indicado através da opção -s. A opção -h usa medidas apropriadas para /dev/hda2 swap swap defaults 0 0 tornar a saída mais inteligível. Normalmente, todas as partições swap contidas em /etc/fstab são ativadas pelos scripts de inicialização do sistema. Para ativar ou desativar essa partição manualmente, usa-se swapon /dev/hda2 e swapoff /dev/hda2, respectivamente. Informações sobre partições swap ativas são armazenadas em /proc/swaps.

Objetivo 1.104.2: Manutenção da integridade de sistemas de arquivos Checando o sistema de arquivos O comando fsck deve ser executado em partições que apresentarem erros ou em dispositivos que foram desligados incorretamente. A partição deverá estar desmontada ou montada como somenteleitura (ro) para a verificação.

Objetivo 1.104.3: Controle da montagem e desmontagem dos sistemas de arquivos /etc/fstab Durante os procedimentos de carregamento do sistema, é o arquivo /etc/fstab que determina os pontos de montagem dos dispositivos. Cada linha corresponde a um dispositivo. Cada linha contém os seguintes termos separados por tabulações ou espaços: ➧ Dispositivo ➧ Ponto de montagem (swap se for uma partição de swap) ➧ Tipo de sistema de arquivos ➧ Opções ➧ Dump ( 0 ou 1). Determina se o dispositivo deverá ser considerado pelo comando dump. Se ausente, 0 é considerado.

➧ fsck (1 ou 2). Determina a ordem da checagem feita pelo fsck durante a inicialização. Para a partição raiz, deve ser 1. Se ausente, 0 é presumido e a checagem não é feita no boot. Para permitir que usuários comuns montem e desmontem dispositivos – geralmente, o caso de dispositivos removíveis –, devese incluir a opção users para o respectivo dispositivo. O termo auto na posição referente ao sistema de arquivos indica que o sistema de arquivos deve ser identificado automaticamente. Para mais opções do arquivo /exc/fstab veja a tabela 5. mount O comando mount usado sem argumentos mostra os dispositivos montados e outros detalhes, como ponto de montagem e tipo do sistema de arquivos. Também é usado para montar dispositivos manualmente. Para montar manualmente um dispositivo que conste em /etc/fstab, basta fornecer para o comando mount a localização do dispositivo ou do diretório alvo. Para desmontar um dispositivo, o comando umount é utilizado, tendo como argumento o dispositivo ou o diretório alvo a ser desmontado. Usado com a opção -a, mount monta todos os dispositivos em /etc/fstab (exceto os marcados com a opção noauto). Opções de montagem As opções de montagem são as mesmas para /etc/fstab e para mount. Se mais de uma opção for fornecida, deverão ser separadas por vírgula.

Objetivo 1.104.4: Administração de cotas de disco Para habilitar o controle de cotas de disco, é necessário que o kernel suporte essa função, e incluir a opção usrquota ou grpquota em /etc/fstab. Para que a opção recém-adicionada tenha efeito, é necessário remontar o dispositivo. Para gerar a tabela de estatísticas de uso do sistema de arquivos, deve-se executar o quotacheck -a, o que é normalmente feito pelos scripts de inicialização. Para criar as configurações de cota para usuários e grupos, usa-se o comando edquota. A opção -u altera as configurações de cota para o usuário especificado, da mesma forma que -g altera para o grupo especificado. O editor padrão do sistema (geralmente o vi) é usado para essa tarefa.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

57


TUTORIAL | LPI 103-104

Tabela 5: Opções do arquivo /etc/fstab Opção

$ chmod g=r,o-r texto_simples

Efeito

Incluir permissão de escrita para o grupo do arquivo texto_simples:

rw ou ro

Gravável ou somente leitura

noauto

Não é montado automaticamente

users

O dispositivo poderá ser montado e desmontado por usuários comuns

user

Apenas quem montou terá permissão de desmontar

owner

As permissões do dispositivo montado se adequarão ao usuário que o montou

usrquota

Habilita o uso de cotas de disco para usuário

grpquota

Habilita o uso de cotas de disco para grupo

remount

Remonta um dispositivo montado com outras opções. Útil para remontar um dispositivo como somente leitura, por exemplo

Essas configurações são armazenadas no diretório alvo onde a partição em questão foi montada, nos arquivos aquota.user e aquota.group. Nesses arquivos é possível especificar limites como espaço e inodes para o usuário ou grupo. Para que as cotas passem a ser monitoradas e controladas, deve-se executar o comando quota -a. Assim, os limites para cada usuário serão comparados à tabela de estatísticas de cotas, até que um dos limites seja alcançado e o usuário não disponha de mais espaço. É possível também estabelecer um período em que o usuário será avisado de que seu limite foi alcançado, através do comando edquota com a opção -ta, de uma maneira semelhante à forma de configurar os limites. Para que o usuário acompanhe o status de sua cota, basta executar o comando quota sem argumentos. O superusuário pode gerar relatórios de cota dos sistemas de arquivos com o comando repquota -a.

Objetivo 1.104.5: Controle de permissões e acesso a arquivos Há três níveis de permissão para arquivos e diretórios: usuário dono do arquivo (u), grupo dono do arquivo (g) e outros (o). Exemplo de permissões de arquivos: $ ls -l /etc/X11/xdm/ total 80 -rwxr-xr-x 1 root root 385 2006-01-14 ➥17:30 GiveConsole -rwxr-xr-x 1 root root 244 2006-01-14 ➥17:30 TakeConsole -r--r--r-- 1 root root 3618 2006-01-14 ➥17:30 Xaccess -rwxr-xr-x 1 root root 191 2006-01-14 ➥17:30 Xreset -r--r--r-- 1 root root 2559 2006-01-14 ➥17:30 Xresources -r--r--r-- 1 root root 487 2005-09-12

$ chmod g+w texto_simples

➥02:56 Xservers (...) lrwxrwxrwx 1 root root 20 2006-03-19 ➥09:36 authdir -> ../../../var/lib/xdm -rwxr-xr-x 1 root root 14696 2006-01-14 ➥17:35 chooser drwxr-xr-x 2 root root 104 2006-01-14 ➥17:30 pixmaps -r--r--r-- 1 root root 1533 2006-01-14 ➥17:30 xdm-config

A primeira letra representa o tipo do arquivo, podendo ser: ➧ d: diretório ➧ l: link simbólico ➧ c: dispositivo especial de caracteres ➧ p: canal fifo ➧ s: socket ➧ -: arquivo convencional As demais letras são divididas em grupos de três, determinando as permissões para o dono do arquivo, o grupo do arquivo e demais usuários, respectivamente. As permissões são alteradas com o comando chmod, podendo ser de leitura (r), escrita (w) e execução (x). Exemplo: O grupo a que pertence o arquivo texto_simples terá apenas acesso de leitura ao mesmo, e para os demais usuários será retirada a permissão de leitura:

Apesar de possuírem o mesmo modelo de permissões, arquivos e diretórios reagem de maneiras diferentes. Em diretórios, a permissão r permite acessar o conteúdo do diretório, a permissão w permite criar arquivos dentro do diretório, e x permite listar o conteúdo do diretório. Permissões Octais Permissões podem ser manejadas mais eficientemente através de um formato numérico, chamado octal. O número octal consiste de uma seqüência de dígitos, cada um representando as permissões para o usuário, grupo e outros, nessa ordem. Veja a tabela 6 . Assim, o comando chmod 0664 texto_simples mudará as permissões do arquivo texto_simples para -rw-rw-r--, ou seja, leitura e escrita para o usuário, leitura e escrita para o grupo e somente leitura para outros. Para mudar recursivamente todos os arquivos dentro de um diretório especificado, utiliza-se o chmod com a opção -R. umask O umask é o filtro de permissões para criação de arquivos. As permissões para novos arquivos criados são aplicadas calculando as permissões padrão do sistema (0666 para arquivos e 0777 para diretórios) menos as permissões umask. umask, sem argumentos, mostra a máscara atual de criação de arquivos. Para mudar, basta fornecer a nova máscara como argumento. Em sistemas onde os grupos iniciais dos usuários são particulares, a máscara poderá ser 002, o que sub-

Tabela 6: Permissões octais e seus significados Dígito

Leitura (valor 4)

Escrita (valor 2)

Execução (valor 1)

0

1

sim

2

sim

3

sim

sim

4

sim

5

sim

sim

6

sim

sim

7

sim

sim

sim

http://supertuxbr.blogspot.com 58

http://www.linuxmagazine.com.br


LPI 103-104 | TUTORIAL

Tabela 7: Permissões especiais em formato octal Dígito

suid (valor 4)

sgid (valor 2)

sticky (valor 1)

0

1

sim

2

sim

3

sim

sim

4

sim

5

sim

sim

6

sim

sim

7

sim

sim

sim

trairá das permissões padrão do sistema a permissão 2 (w, escrita), na categoria outros (o). Dessa forma, os arquivos serão criados com as permissões 0664. Em sistemas onde o grupo inicial de todos os usuários é o grupo users, a máscara poderá ser 0022, o que subtrairá das permissões padrão do sistema a permissão 2 (w, escrita), nas categoria grupo (g) e outros (o). Dessa forma, os arquivos serão criados com as permissões 0644, limitando a permissão de escrita apenas ao usuário dono do arquivo. suid e sgid Todos os processos são vinculados ao usuário que os iniciou. Dessa forma, um programa pode trabalhar com um arquivo apenas até onde as permissões desse arquivo permitem ao usuário. Algumas tarefas, no entanto, exigem que um usuário altere ou acesse arquivos aos quais não tem a permissão necessária. Por exemplo, alterar a própria senha exige que o arquivo /etc/passwd seja alterado e as permissões de /etc/passwd só permitem escrita ao usuário dono (root): $ ls -l /etc/passwd -rw-r--r-- 1 root root 814 2006-03-15 ➥14:04 /etc/passwd

Para contornar essa condição, existe um bit de permissão especial chamado suid. Arquivos executáveis que possuam a permissão suid serão executados em nome do dono do arquivo, e não em nome de quem os executou. A permissão suid é representada pela letra s, no campo referente ao dono do arquivo (u): $ ls -l /usr/bin/passwd -rws--x--x 1 root bin 37880 2004-06-21 ➥16:20 /usr/bin/passwd

Exemplo: Incluir o modo suid em um arquivo executável:

$ chmod u+s meu_programa

De maneira semelhante, a permissão sgid atua em diretórios. A permissão sgid é uma permissão de grupo, portanto aparece no campo de permissões referente ao grupo. Num diretório com a permissão sgid, todos os arquivos criados pertencerão ao grupo do diretório em questão, o que é especialmente útil em diretórios com o qual trabalham um grupo de usuários pertencentes ao mesmo grupo. Quando habilitadas, as permissões suid e sgid fazem aparecer a letra s no lugar da letra x nas permissões de dono do arquivo e grupo do arquivo, respectivamente. Se a permissão de execução também existir, aparecerá a letra s em minúsculo. Se apenas as permissões suid e sgid existirem, aparecerá a letra S, em maiúsculo.

Permissões especiais em formato octal Como as opções convencionais, as permissões especiais também podem ser manipuladas em formato octal (numérico). A permissão especial é o primeiro dos quatro dígitos da opção no formato octal. A tabela 7 detalha essa correspondência.

Objetivo 1.104.6: Modificar donos e grupos de arquivos Para alterar dono e grupo de arquivos e diretórios, usa-se chown e chgrp. O primeiro argumento é um nome válido de usuário ou grupo, e o segundo é o arquivo ou diretório a ser alterado. Apenas o superusuário pode usar o comando chown, mas qualquer usuário pode usar chgrp em seus arquivos e diretórios. Mudar dono de arquivo: # chown luciano texto_simples

Mudar grupo de arquivo: $ chgrp users texto_simples

Para alterar usuário e grupo simultaneamente: # chown luciano.users texto_simples

Tanto chown quanto chgrp possuem a opção -R, para alterar conteúdos de diretórios recursivamente.

A permissão sticky O inconveniente em usar diretórios compartilhados é que um usuário po- Objetivo 1.104.7: Criar e alterar deria apagar algum ou todo o conteúdo links simbólicos e links físicos inadvertidamente. Para evitar que isso aconteça, existe o modo de permissão sticky, que impede que usuários apaHardlinks (links físicos) guem arquivos que não tenham sido Hardlinks são um ou mais nomes que um criados por eles mesmos. É o caso do inode do sistema de arquivos pode ter. diretório /tmp: Todo arquivo criado é, necessariamente, um hardlink para seu inode correspon$ ls -ld /tmp dente. O mesmo só será apagado após drwxrwxrwt 21 root root 1312 2006-03-23 seu último hardlink remanescente ser ➥22:51 /tmp apagado e nenhum programa estar mantendo o arquivo aberto. Novos hardlinks A letra t nas permissões para demais são criados usando o comando ln: usuários demonstra o uso da permissão sticky. Se apenas a permissão sticky existir, $ ln texto_simples outro_texto_simples aparecerá a letra T maiúscula. A opção -i do ls mostra o número Exemplo: Usar a permissão sticky no dos inodes dos arquivos: diretório comunitario: $ chmod o+t comunitario/

$ ls -i texto_simples outro_texto_simples

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

59


TUTORIAL | LPI 103-104

55412 outro_texto_simples 55412 texto_ ➥simples

Ambos texto_simples e outro_texto_simsão hardlinks para o mesmo inode 55412. Hardlinks para o mesmo inode possuem mesma permissão, donos, tamanho e data, pois esses atributos são registrados diretamente nos inodes. ples

$ ls -l texto_simples -rw-r--r-- 2 luciano users 29 2006-01-01 ➥00:01 texto_simples

Tabela 8: Diretórios que residem obrigatoriamente na partição raiz Diretórios

Conteúdo

/bin e /sbin

Contêm os programas necessários para carregar o sistema e comandos especiais

/etc

Arquivos de configuração específicos da máquina

/lib

Bibliotecas compartilhadas pelos programas em / bin e /sbin e módulos do kernel

/mnt

Pontos de montagem para outras partições ou dispositivos

/proc

Armazena informações do kernel em tempo de execução

O número 2 na segunda coluna de informações demonstra que há dois hardlinks para o inode correspondente ao arquivo texto_simples. Hardlinks só podem ser criados dentro de um mesmo sistema de arquivos. Não é possível criar hardlinks para diretórios. Os arquivos especiais . e .. são hardlinks para diretório criados exclusivamente pelo próprio sistema.

Tabela 9: Diretórios que podem ser pontos de montagem para outras partições e dispositivos

Softlinks (links simbólicos) Links simbólicos apontam para um caminho ou, mais especificamente, para um hardlink. Links simbólicos podem apontar para qualquer alvo, inclusive em sistemas de arquivos diferentes. Para criar um link simbólico, usa-se ln com a opção -s. $ ln -s texto_simples link_texto_simples

Detalhes do link: $ ls -l mais_texto_simples lrwxrwxrwx 1 luciano users 13 2006-03-24 ➥05:11 mais_texto_simples -> texto_simples

Um link é indicado pela letra l no início das permissões, que nesse caso são sempre rwxrwxrwx. O tamanho do arquivo de link é exatamente a quantidade de bytes (caracteres) do caminho alvo. A seta ao lado do nome do link simbólico indica o caminho até o alvo. Um link simbólico para um caminho relativo será quebrado se o alvo ou o próprio link for movido. Um link simbólico para um caminho absoluto só será quebrado se o alvo for movido ou apagado. Para atualizar a informação de alvo de um link simbólico existente, recria-se o link com a opção -f. Funções comuns para links simbólicos são indicar caminhos longos freqüentemente usados, criar nomes mais simples para executáveis e nomes adicionais para bibliotecas de sistema.

Diretórios

Conteúdo

/boot

Kernel e mapas do sistema e os carregadores de boot de segundo estágio

/home

Os diretórios dos usuários

/root

Diretório do superusuário

/tmp

Arquivos temporários

/usr

Programas, bibliotecas e documentos disponíveis no sistema

/usr/local e /opt

Programas adicionais. Também podem conter as bibliotecas necessárias para os programas adicionais

/var/www e /var/ftp

Páginas HTML e diretórios para FTP anônimo

/var

Dados de programas como configurações variantes e logs. Contém diretórios compartilhados (ex: /var/ spool/mail) e não compartilhados (ex: /var/log)

Objetivo 1.104.8: Encontrar arquivos de sistema e conhecer sua localização correta

geralmente feito por um agendamento

cron diário, mas que pode ser executado

Hierarquia padrão de sistemas de arquivos (FHS) O FHS (do inglês Filesystem Hierarchy Standard) é o padrão de diretórios base adotado pela maioria da distribuições Linux. Cada diretório serve a um propósito, sendo divididos entre os que devem existir na partição raiz (veja a tabela 8) e os que podem ser pontos de montagem para outras partições ou dispositivos (veja a tabela 9).

manualmente. O arquivo de configuração do updatedb é o /etc/updatedb.conf. Nele constam informações como quais diretórios e sistemas de arquivos ignorar na atualização do banco de dados. which: Usado para retornar o caminho completo para o programa fornecido. Realiza a busca apenas nos diretórios definidos na variável de ambiente PATH. whereis: Retorna os caminhos para o arquivo executável, código-fonte e página manual referente ao comando solicitado, se houver.

Encontrando arquivos Além do find, é possível utilizar o locate para encontrar arquivos. Todo caminho de arquivo ou diretório contendo a expressão fornecida como argumento será mostrado. A busca é significativamente mais rápida em relação ao find pois o locate realiza a busca em seu banco de dados – /var/lib/slocate/slocate.db – e não diretamente no disco. Esse banco de dados precisa ser regularmente atualizado através do comando updatedb, o que é

Consideração sobre os tópicos Os tópicos 103 e 104 são alguns dos mais extensos. Justamente por isso, não espere perguntas muito detalhadas sobre os assuntos abordados. Porém, os temas atravessam outros tópicos, e na prova haverá várias perguntas a respeito. Tenha certeza de conhecer o propósito de cada comando e suas principais opções. Além de perguntas práticas, serão feitas algumas perguntas conceituais, principalmente sobre sistemas de arquivos. ■

http://supertuxbr.blogspot.com 60

http://www.linuxmagazine.com.br


Ivman | TUTORIAL

Hotplug personalizado com o Ivman

TUTORIAL

Conexão pessoal Um conhecimento mais profundo do sistema de hotplug do Linux abre as portas da inovação e automação. Veja como criar uma solução personalizada de backup para laptops. Jens-Christoph Brendel

O

hotplug costuma ser considerado um recurso imprescindível, mas ao mesmo tempo bastante incompatível com as idiossincrasias dos usuários. No entanto, construir sua própria solução com base nesses componentes pode ser mais fácil do que se imagina. Este artigo busca demonstrar como se pode usar o Ivman, um manipulador genérico de eventos da camada de abstração de hardware (HAL), para criar uma solução de hotplug personalizada. A solução descrita neste artigo resolve um problema comum a usuários de computadores portáteis. Embora todos os computadores necessitem de backups regulares, um esquema de backup cíclico baseado no cron não é particularmente eficiente em laptops. Por exemplo, a bateria pode estar no fim no momento do início do backup, ou talvez o laptop esteja a quilômetros de distância do servidor, dispositivo de fita ou disco de backup. Uma resposta melhor seria configurar seu computador para monitorar a conexão de um dispositivo USB e detectar automaticamente a presença do disco com a partição de backup. Assim que a partição estiver disponível, o computador a montará em um ponto específico do sistema de arquivos. Um processo de backup assíncrono será iniciado em intervalos regulares, procurando o ponto de montagem do backup antes de realizar qualquer outra tarefa. Se o disco não estiver presente, o processo simplesmente voltará a esperar sem incomodar o usuário.

Divulgue a notícia

pode variar desde um simples comando Quando um disco é conectado, o controla- até um script complexo. dor recebe um sinal e responde acionando As regras podem empregar, em suas uma interrupção. Se sua distribuição Linux condições, qualquer informação conheciutiliza o HAL [1], esse sistema recebe a da pelo HAL. O comando lshal fornece interrupção e a converte em um evento mais detalhes (figura 1). que é propagado no D-Bus, o barramento O conjunto de regras é definido made mensagens do sistema. Programas do joritariamente em dois arquivos de conespaço do usuário escutam esse barra- figuração: IvmConfigActions.xml define as mento, capturam as mensagens enviadas ações a executar mediante a conexão de a eles, e então acionam eventos, como a um novo dispositivo ou mídia. O arquivo IvmConfigProperties.xml contém as regras montagem de discos, por exemplo. O ambiente Linux inclui diversas fer- cujas condições baseiam-se nas propriedades ramentas que avaliam a informação como dos dispositivos. Há também um arquivo de uma resposta a um evento de hotplug. No configuração intitulado IvmConfigBase.xml, desktop Gnome, o Gnome Volume Mana- com padrões gerais. Por exemplo, pode-se ger realiza essa função, enquanto o KDE usar esse arquivo para especificar as IDs de utiliza seus Kioslaves. Além dessas duas grupo e usuário que o Ivman permitirá. Por soluções específicas para esses ambientes último, as versões mais recentes do Ivman desktop, há abordagens independentes, possuem um arquivo chamado IvmConfigConditions.xml, que define as condições que como o Submnount e o Ivman [2]. Diferentemente do Submount, o Ivman devem ser satisfeitas para que o programa roda no espaço do usuário, e pode ser utili- execute uma ação específica. ➧ zado em paralelo com o KDE ou o Gnome. O Ivman é um gerenciador e montador automático de volumes que permite que se executem comandos arbitrários em resposta a eventos de hardware. Para as distribuições que não incluem o Ivman, é possível baixálo a partir da página do projeto [2].

Conforme as regras

O Ivman utiliza um conjunto de regras para associar condições a ações, investigando cada evento HAL para assegurar se uma condição está satisfeita. Em caso positivo, o Ivman ativa uma ação, que

Figura 1: O comando lshal mostra todos os dispositivos e propriedades registradas na camada de abstração de hardware (HAL).

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

61


TUTORIAL | Ivman

Exemplo 1: IvmConfigActions.xml (trecho) <!-- Montando o disco de backup --> <ivm:Match name=”hal.volume.uuid” value=”e86236bb-d107-41cd-b8b1”> <ivm:Option name=”exec” value=”echo ‘Conectando disco de backup: “`date` >> /var/log/backup.log” /> <ivm:Option name=”exec” value=”mount $hal.block.device$ /media/backupdisk && echo ‘Disco de backup $hal.block.device$ montado ➥em /media/backupdisk’ >> /var/log/backup.log” /> 05 <ivm:Option name=”execun” value=”echo ‘Disco de backup desconectado: ‘ `date` >> /var/log/backup.log” /> 06 </ivm:Match>

TUTORIAL

01 02 03 04

...e ação!

Em nosso exemplo de backup, queremos que o sistema responda quando um disco rígido específico for conectado; portanto, o IvmConfigActions.xml é o local certo para começarmos. A parte condicional de toda regra pode usar a chave ivm::Match para especificar uma propriedade do HAL e fornecer um valor que realize uma ação. Os comandos a seguir associam um ponto de montagem a um pendrive USB baseado no nome do modelo:

<!-- Montando um pendrive --> <ivm:Match name=”hal.storage.model” ➥value=”TS64MJFLASHA”> <ivm:Option name=”exec” value=”mount ➥$hal.block.device$ /media/pendrive” /> </ivm:Match>

Os cifrões indicam que o comando de montagem utilizará a propriedade block.device do HAL em vez do nome do dispositivo. Entretanto, a partição de backup necessita de uma propriedade mais específica. É possível utilizar a ID única de volume para detectar a partição. Também desejamos registrar os eventos de conexão e desconexão junto com o relatório do progresso do backup. Nem precisamos de um script para isso; apenas algumas linhas no arquivo de configuração de ações são suficientes (exemplo 1). É claro que poderíamos iniciar o backup ao mesmo tempo, mas esse seria um evento relativamente raro. Em nosso caso, queremos que a máquina guarde “fotografias” normais do sistema de arquivos quando o disco de backup for conectado. Para permitir que isso ocorra, devemos permitir que o cron execute o script do exemplo 2 periodicamente para verificar se um disco está montado no ponto de montagem de backup. Em caso positivo, é necessário que este seja o disco correto para que a “fotografia” seja acionada. A saída é enviada para o mesmo arquivo de registro onde o status da montagem do disco é gravado (exemplo 3). Geraremos uma “fotografia” usando a já tradicional ferramenta rsnapshot, que economiza espaço copiando somente os arquivos

Exemplo 2: Cronjob para uma “fotografia” de backup 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

#!/bin/sh if [ `grep backupdisk /etc/mtab | wc -l` -gt 0 ] # Certo, encontramos o disco de backup then if [ -f /var/run/rsnapshot.pid ] # O rsnapshot já está em execução -> sair then exit 1 else # Vamos tirar uma foto echo -e “\n========================================\n” >> /var/log/backup.log echo “Iniciando a fotografia em `date`” >> /var/log/backup.log /usr/bin/rsnapshot hourly 2>&1 1>> /var/log/backup.log echo “Fotografia finalizada em `date`” >> /var/log/backup.log fi else # Disco de backup não está montado -> saor exit 1 fi

Exemplo 3: Trecho do arquivo de log 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

Conectando disco de backup: Seg Dez 04 11:00:52 BRST 2006 Disco de backup /dev/sda2 montado em /media/backupdisk: Seg Dez 04 11:03:57 CEST 2006 ========================================================== Iniciando fotografia em Seg Dez 04 12:00:01 BRST 2006 echo 25958 > /var/run/rsnapshot.pid ... mkdir -m 0755 -p /media/backupdisk/hourly.0/ /usr/bin/rsync -ax --delete --numeric-ids --relative --delete-excluded \ --exclude=media/backupdisk \ --link-dest=/media/backupdisk/hourly.1/localhost/ / \ /media/backupdisk/hourly.0/localhost/ ... rm -f /var/run/rsnapshot.pid Fotografia finalizada em Seg Dez 04 16:05:03 BRST 2006 ...

que tenham sido modificados. Também seria possível especificarmos um número máximo de “fotografias”, para que a primeira delas fosse sobrescrita quando esse número fosse atingido. Isso impediria o preenchimento total do disco, e também oferece uma série de “fotografias” de diferentes datas. Para realizar a recuperação, só é necessário copiar de volta os arquivos.

Conclusões

Essa abordagem oferece um backup regular executado automaticamente, dependendo somente da conexão do disco; é flexível, e portanto reflete as necessidades da computação móvel. É

possível realizar quase qualquer ação com dispositivos arbitrários seguindo a mesma abordagem; por exemplo, é possível iniciar uma ferramenta de gerenciamento de arquivos musicais mediante a conexão de seu tocador de MP3, ou iniciar um visualizador de imagens ao se conectar uma câmera. ■

Mais Informações [1] HAL: http://www.freedesktop.org/ wiki/Software_2fhal [2] Ivman: http://ivman.sourceforge.net/

http://supertuxbr.blogspot.com 62

http://www.linuxmagazine.com.br


Postal | SYSADMIN

Na pista dos gargalos com o benchmark de servidor de email Postal

S

SYSADMIN

Se o servidor de email está muito lento, os usuários ficam revoltados. Mas quem quer otimizar o servidor precisa de medições confiáveis da velocidade do MTA. Para produzir a carga necessária e compilar os resultados, contamos com a ajuda do programa de benchmark Postal. por Jörg Fritsch

Stephen Lewis - www.sxc.hu

Avaliação postal

Construção do laboratório

ervidores de email têm que lidar cabeçalhos de emails e fecha a conexão antes que chegue o corpo da mensagem. com milhares de mensagens e se A maioria dos servidores de email avaliam comunicar com outros servidores. Ao mesmo tempo, tanto o SMTP (Simple É relativamente fácil determinar a base do imediatamente o cabeçalho da mensaMail Transfer Protocol) quanto o formato funcionamento de um servidor através da gem, por isso esse passo é incorporado da mensagem são extremamente diver- função de sua função de relatório. O mais ainda na medição. Essa técnica também sificados. A tarefa do administrador em difícil é estabelecer ambientes genéricos é indicada para testar balanceadores de meio a esse cenário já é um tanto difícil. de testes que façam sentido para analisar carga, pois fica rapidamente evidente o E fica ainda mais complicada quando diferentes servidores de email sob condições algoritmo usado para dividir a carga soo objetivo é a otimização – para isso, a de laboratório. A figura 2 mostra a topologia bre o servidor. Pode ser surpreendente que um simferramenta de benchmark Postal pode típica para medições em laboratório. Uma potente rede gigabit unindo servidor e clien- ples PC cliente baste para medir os liser de grande ajuda. Benchmarks de servidores de email tes, o servidor de emails, um cliente com a mites de capacidade de um servidor de ajudam a estabelecer uma linha basal aplicação de benchmark Postal e um des- emails bem configurado. Mas criar um que serve como ponto de partida ou re- tinatário de email. Na verdade, os tempos email preenchido com uma salada de ferência para melhorias futuras. Assim, de resposta dos serviços de diretório têm letras e enviá-lo não custa nem tempo pode-se controlar como uma alteração grande influência no desempenho (LDAP, computacional, nem acesso ao disco em um parâmetro influencia o desempe- DNS ou Active Directory). Sob condições rígido. Somente a placa de rede deve nho. O conceito de benchmark pode ser de laboratório, a configuração do servidor ser corretamente dimensionada para a descrito como valor de referência, teste de de emails elimina essas interferências. tarefa. É bem diferente do processamento desempenho ou teste comparativo. das mensagens que chegam ao servidor As exigências sobre servidores de email – que precisa se entender com todos os e, portanto, também sobre as técnicas de formatos e codificações possíveis. medição, diferenciam-se de acordo com Configurado de maneira apropriada, o A influência do Mail Sink também a área de aplicação. O servidor pode, Postal simula todas as tarefas com as quais é pequena – ele precisa apenas perpor exemplo, servir como relay, traba- o servidor tem que lidar. Suas quantidades manecer idêntico para todos os relays lhar como servidor de comunicação e e características dependem de sua posição a serem comparados. Um bom relay groupware, com caixas de email locais, e tarefas na rede (figura 1). Na simulação também trabalha rápido mesmo que o ou ser simultaneamente um antivírus de um relay, é necesário além disso um e um filtro de spam. Dependendo do segundo servidor de emails, que coleta cenário, muda também sua posição na e junta emails indiscriminadamente. O rede; às vezes o servidor funciona como Sendmail e o Postfix podem ser configugateway de email no acesso à Internet rados sem muito esforço para exercerem Servidor interno de emails Relay interno ou groupware, na intranet (figura 1), outras como servidor da rede a função de Mail Sink. Isso é feito ainda Servidores remotos na Internet na DMZ interna de uma empresa, ou atrás de um mais facilmente com o script em Perl de Figura 1: Um servidor de relay de emails na DMZ precisa lidar com muitas conexões independentes que vêm de balanceador de carga. Tudo isso deve ser Thomas Aeby [1] do exemplo 1. fora, com sobreposição no tempo. Então, ele transfere levado em consideração pela ferramenta Sem Mail Sink, temos um teste simos emails para o servidor interno. de benchmark. plificado, no qual o cliente envia apenas

Gerador de carga

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

63


SYSADMIN | Postal

Quadro 1: Rabid

Exemplo 1: Mail Sink

Enquanto o Postal envia emails via SMTP, o Rabid os apanha do servidor POP. O programa compreende muitos dos parâmetros conhecidos do Postal: -p define o número de conexões simultâneas, e -c as mensagens chamadas por conexão. Os parâmetros -r, -l, -a, -s e -z também deram o mesmo significado para o Postal conforme a tabela 1. O Rabid utiliza da mesma forma o arquivo semente citado no texto. Como o POP precisa de uma autenticação de usuário, o arquivo contém também, depois de cada nome de usuário, uma senha (separada por espaços em branco). No entanto, o arquivo de conversão expande apenas o nome de usuário e ignora as senhas.

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 29 30 31 32

A escolha da combinação adequada de -p e -c depende do comportamento esperado do usuário: quantos são eles, com que freqüência acessam suas caixas de mensagens, e quantos emails existem na caixa. Porém, na vida real é bem mais difícil encontrar valores significativos de carga de um servidor POP do que com o Rabid. Enquanto sabemos que um tamanho médio de 10 KB para os emails que chegam é comum, não há um valor real correto para o tamanho médio de preenchimento de uma caixa de emails POP. O Rabid também traz algumas opções próprias; por exemplo, -d define quantos emails o programa baixa do servidor de emails e quantos ele deve apagar do servidor. Por padrão estão configurados 100%. Além disso, o software verifica, em todos os emails baixados, se a soma MD5 que o Postal inseriu em cada mensagem ainda combina com o conteúdo da mensagem. Com isso, a comparação com o benchmark puro também é interessante para eliminar problemas no servidor. Erros ocultos Comparado com o Postal, o Rabid realmente ainda parece não estar maduro. A tentativa de requerer uma parte de 10% das conexões IMAP do servidor com a opção -i falhou nos testes deste artigo. Entretanto, a opção -i é descrita na página de manual, e não provocou nenhuma mensagem de erro na sua chamada. No entanto, ao final da página de manual, esconde-se o aviso de que a ferramenta até o momento não suporta SSL nem IMAP.

Switch

#!/usr/bin/perl use use use use

Net::SMTP::Server; Net::SMTP::Server::Client; Getopt::Long; strict;

my $porta = 25; # Porta padrão do servidor my $endereco = “localhost”; # Por padrão, vincular-se somente ao localhost GetOptions (“p=i” => \$port, “b=s” => \$endereco) || die “Modo de uso: $0 [-p porta] [-b endereco de escuta]”; print “configurando o servidor para escutar na porta $endereco:$porta\n”; my $servidor = new Net::SMTP::Server($endereco, $porta) || die “Cannot setup server: $!”; while(my $conexao = $servidor->accept()) { # Recebemos uma conexao de entrada. # Vamos criar um processo-filho para cuidar dela. next if( fork() > 0 ); my $cliente = new Net::SMTP::Server::Client($conexao) || die “Nao consegui lidar com a conexao do cliente: $!”; # Conversar com o cliente $cliente->process || die “O cliente nao mandou email para ca”; # Registrar a informacao e terminar system(“logger”, “-s”, “-p”, “local1.notice”, “-t”, “mailsink”, “recebi mensagem de “.($cliente->{“FROM”}). “ para “.join(“,”,@{$cliente->{“TO”}}). “, tamanho: “.length($cliente->{“MSG”}).” bytes” ); exit(0); }

Suíte Postal

servidor alvo esteja lento, pois o relay armazena em buffer os emails que se A suíte de benchmarks Postal é consencontram em filas de espera (queues). tituída de três programas de linha de Uma comparação entre servidores de comando: postal, postal-list e rabid. email igualmente lentos e um mail O primeiro é responsável pelo bensink rápido e outro lento permitem tirar chmark de SMTP; enquanto postalalgumas conclusões da velocidade da list testa como o Postal expande seu fila de mensagens. Ela pode depender, arquivo de semente para o tempo de por exemplo, do sistema de arquivos ou execução, e o rabid é indicado para dos volumes NFS montados. testar os servidores POP3 e IMAP, ou Os processos de escrita nos relays são então revisar os emails gravados no regulados pela disponibilidade e veloci- disco rígido (veja o quadro 1). Para produzir uma carga realista para dade do servidor alvo. No entanto, seu comportamento de escrita se diferencia o servidor de emails, o Postal necessiclaramente de servidores com caixas de ta de milhares de endereços de email. mensagem locais: enquanto um relay tem Começa-se com um arquivo semente muitos acessos de escrita e apagamento, que é preenchido com endereços de os servidores com caixas de emails locais email. A página de manual descreve têm alta ocorrência de operações de escrita esse arquivo como User List. Caso seu que inserem emails em um arquivo Mbox tamanho não seja suficiente, um ge(eventualmente muito grande). rador aleatório se encarrega do resto.

Saída do Postal

Cliente do Postal

Servidor de emails

Mail Sink

Figura 2: No teste de laboratório, um cliente do Postal (que simula o remetente dos emails), o servidor de emails e um destinatário (o alvo das mensagens transmitidas) estão ligados por um switch.

01 02 03 04 05 06 07 08 09

$ postal -p200 -c 4 10.0.0.110 ./postal-user time,messages,data(K),errors,connections,SSL connections 21:31,6869,37177,0,2929,0 21:32,7241,38282,1,2913,0 21:33,7095,37838,0,2836,0 21:34,6390,34206,10,2559,0 21:35,7458,39774,0,2974,0 21:36,7353,39646,0,2911,0 21:37,7433,39269,0,2976,0

http://supertuxbr.blogspot.com 64

http://www.linuxmagazine.com.br


Postal | SYSADMIN

Quadro 2: Aceleração do TCP No kernel Linux há muitas possibilidades de ajustar o desempenho da pilha TCP/IP às exigências dos aplicativos do servidor. Um meio realmente fácil é aumentar o buffer da interface: ifconfig eth0 txqueuelen 1000. Opções mais complicadas estão disponíveis com o comando sysctl -w Variável=Valor, ou podem ser mais definidas de forma mais elegante no arquivo sysctl.conf. Em servidores que disponham de grande quantidade de memória, aconselha-se aumentar o tamanho máximo do buffer de envio e recebimento: net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 Em operação, o Linux ajusta os tamanhos do buffer TCP de maneira independente. O administrador pode interferir até mesmo nesse automatismo e definir os números máximo e mínimo de bytes: net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_rmem = 4096 65536 16777216 O mecanismo de início lento (slow start) do TCP (ssthresh) também afeta as conexões subseqüentes. Isso pode ser modificado para que o servidor, depois de um congestionamento de rede, possa voltar rapidamente à velocidade máxima da conexão: net.ipv4.tcp_no_metrics_save = 1

Bem alimentado

O arquivo semente pode conter simples nomes de usuários ou endereços de email completos (com nomes de domínio). O Postal insere diretamente o conteúdo de um arquivo semente no endereço do destinatário, ou utiliza as regras de expansão descritas no arquivo de conversão: ^f .[0-9abc][xyz][ghjjhjlk089765]

Essas linhas consistem de uma expressão regular (^f, no caso) e uma instrução de conversão. O Postal procura no arquivo semente um endereço de email ao acaso que coincida com a expressão regular – no caso, que comece com o caractere f. Como a instrução começa por um ponto, o primeiro caractere permanece inalterado. Depois seguem-se três instruções entre chaves, que substituem a segunda, terceira e quarta letras do endereço por uma letra da lista. Com a regra configurada acima, existem 13 * 3 * 14 = 546 expansões possíveis para cada endereço de email do arquivo semente começando por f. Todos os outros endereços ignoram essa etapa de conversão. O comando postal-list arquivosemente arquivo-conversao mostra todas as expansões. Um simples | wc -l à direita conta o total de endereços possíveis.

Modelo adequado

Congestionamento no circuito Um recurso muito específico disponível desde o kernel 2.6.13 é a possibilidade de se alterar o algoritmo de controle de congestionamento da rede (o que evita uma sobrecarga). Atualmente há oito opções de algoritmos. Alguns são otimizados para redes de alta velocidade (net.ipv4.tcp_congestion_control=htcp), enquanto outros favorecem redes com altas taxas de perda de pacotes, como WLANs, por exemplo (net. ipv4.tcp_congestion_control=westwood).

Tanto o modelo quanto a semente precisam ser adaptados ao tamanho da empresa. Para se testar um servidor de email que serve como relay ou como servidor groupware a 35 mil funcionários, um padrão que expanda apenas para 500 endereços de email não será de grande ajuda. Da mesma forma, uma pequena copiadora com 80 funcionários não precisa de um arquivo semente que forneça 20.000 endereços. Na linha do assunto e no conteúdo da mensagem, o Postal dá bem menos trabalho e os preenche com uma salada de letras aleatórias. Para se utilizar caixas de mensagens de destinatários reais para fins de teste, deve-se identificar nelas as mensagens criadas pelo Postal através do cabeçalho adicional X-Postal, o que possibilita separá-las automaticamente.

Todavia, os endereços não devem ser totalmente aleatórios, mas seguir determinadas regras. Eles são definidos pelo responsável pelo teste através de expressões regulares no arquivo de conversão, e depois são expandidos pelo Postal para endereços de destinatários correspondentes.

Antes de se iniciar o Postal, deve ser esclarecido o que queremos testar ou simular: um relay de email, um servidor groupware, ou algum outro cenário. Com isso, definiremos quais parâmetros do Postal são mais importantes (tabela 1). O parâmetro Set

Quem quiser instalar placas de rede gigabit deve ainda aumentar o valor das conexões de backlog e inserir a linha net.core. netdev_max_backlog = 2500 ao sysctl. conf. Caso contrário, o Linux rapidamente começará a recusar pacotes recebidos, mas não terminados. Um bom valor de backlog para placas de 10 GB é 30.000.

Muito a ser feito

Figura 3: Os resultados do Postal podem ser abertos em uma tabela de cálculo (aqui mostrada no Calc do BROffice. org), para representar o processo ao longo do tempo como curva (à direita), ou calcular valores médios (abaixo, à esquerda).

define, por exemplo, o número de computadores clientes simulados que estão ligados ao servidor de emails. Em servidores groupware, antivírus ou filtros de spam na LAN, há no máximo de um a dois clientes. O parâmetro -p (processos paralelos do Postal) deve utilizar, nesse caso, um valor pequeno, enquanto -c (emails por conexão) deve vir acompanhado de um valor alto. Em relays de email e provedores de serviços, o valor exato depende do tamanho do provedor. Todavia, em ambos esses casos, -p será grande e -c, pequeno. Junto com os valores de -c e -p, o Postal descobre, na inicialização, quais arquivos semente e de conversão são desejados por quem os chamou: postal -c mensagem -p processos arquivo_ ➥semente arquivo_de_conversão > arquivo_de_ ➥saída

Caso não se deseje utilizar um arquivo de conversão, sendo satisfatório apenas ter o arquivo com a lista de sementes, devese colocar um simples sinal de menos (-) na lista de parâmetros. Normalmente o parâmetro -m também é útil, pois define o tamanho máximo dos emails enviados. Seu valor padrão, 10 KB, é realista. O Postal envia emails de tamanhos aleatórios entre 0 KB e o tamanho fornecido em -m. Se for estimado que o servidor venha a receber muitos emails com grandes anexos, seria interessante aumentar o -m proporcionalmente. Muitos programas de elaboração de relatórios para servidores de email são capazes de mostrar graficamente o tamanho médio dos emails recebidos.

Teste de duração

Uma opção interessante para testes longos e para certificação de qualidade é o -r. Ele determina quantos emails por minuto no máximo o Postal pode enviar. Em serviços

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

65


SYSADMIN | Postal

Tabela 1: Opções do Postal Parâmetro

Saída

-m n

Tamanho máximo do email em KB. O Postal envia emails de tamanho aleatório.

-p n

Número de processos simultâneos do Postal. Como cada processo inicia uma conexão, esse parâmetro (n) define o número de conexões simultâneas.

-c n

Quantidade máxima de emails por conexão. O Postal envia ao acaso entre 1 e n mensagens em uma conexão. O valor -1 corresponde ao número máximo, e com ele o Postal envia até 4 milhões de emails.

-r n

Limitação do número de emails por minuto. Por padrão o Postal tenta enviar 24.000 mensagens por minuto.

-s n

Parte das conexões SSL em porcentagem (entre 0 e 100; por padrão, 0).

-l n m ...

Endereços IP locais, ou seja, os endereços IP de onde partem as conexões ao Postal. Interessante em PCs clientes com vários endereços.

-b

Modo de compatibilidade para servidores de email deficientes. Até o momento apenas o modo Netscape está implementado, que apaga espaços em branco no início da linha de assunto.

-a

Ativa todas as funções de registro. Com isso, o Postal grava nos logs todos os dados que receber.

-z e -Z

Protocola toda a comunicação (em arquivos separados por thread e processo). Esse parâmetro é voltado principalmente à depuração.

produtivos o Postal consegue em -r pequenos observar o serviço sem maiores aborrecimentos. O cliente pode rodar por algumas semanas com tranqüilidade. No resultado talvez apareça que todo dia no mesmo horário a performance cai. Se apenas nesse horário é rodado o backup das caixas de email do usuário, já encontramos a causa. O Postal grava no arquivo de saída os valores capturados, em forma de uma lista CSV (Comma Separated Values), junto com todas as mensagens de erro encontradas. Erros de leitura são relativamente freqüentes. O exemplo 2 mostra um pequeno trecho de um teste, sem as mensagens de erro. A primeira coluna informa a hora (hora:minuto), depois são mostrados os números das mensagens enviadas com sucesso, o tamanho total de todos os emails nesse minuto em KB, o número de conexões, e finalmente a quantidade de conexões SSL. Os textos de mensagens de erro mencionados são bastante interessantes para se desvendar o motivo das causas; no entanto eles atrapalham a importação para o cálculo de tabelas. Essa importação é realmente prática para, por exemplo, reproduzir graficamente o percurso temporal da medição ou calcular um valor médio (figura 3). Na maioria das vezes as capacidades no começo da medição se mostram muito altas, mas em seguida caem, para depois atingir um valor constante. Um dos motivos para isso é o hábito de o servidor de email manter suas filas o mais longe possível na memória. Outra possibilidade seria o cache de

escrita do sistema de disco. Devido a esses fatores, o benchmark deve rodar durante várias horas caso se deseje que ele forneça um valor significativo ao final.

Evitando erros

O interessante na avaliação é que o Postal gera erros não apenas como mensagens, mas também como taxa de erros por minuto (Error Rate). Um eventual erro de leitura é normal em servidores de email. É mais razoável ter como objetivo um serviço estável com menos erros e para isso viver com uma capacidade um pouco menor, do que acelerar o sistema a qualquer preço. Em princípio, toda avaliação deveria começar verificando se cada servidor realmente teve que lidar com emails comparáveis. Para isso, basta dividir a quantidade de dados em KB pelo número de emails. Se um servidor obtiver o resultado de 5,3 KB, e o outro, 8,8 KB, então os resultados não são comparáveis.

Lendo as pistas

Durante a execução, o Postal deposita no diretório atual um arquivo de log chamado postal.log, com a soma MD5 de todos os emails enviados. O sentido desse arquivo não é totalmente claro: as somas de verificação também são enviadas nos emails. O Rabid baixa os emails do servidor por POP3 e verifica se eles chegaram sem dano, através de comparações das somas MD5 (veja o quadro 1).

Como os emails chegam pela rede, uma suposição bastante popular diz que a otimização mais importante para um servidor de emails passa pela pilha de protocolo TCP (veja o quadro 2). Mas a prática mostra que a responsabilidade desse item sobre o desempenho da rede é desprezível quando comparada à influência do disco rígido e do sistema de arquivos. Um único disco SCSI atualmente pode escrever 200 MB, enquanto uma boa placa de rede gigabit otimizada lê múltiplas vezes mais da rede. Servidores de email funcionam melhor com múltiplos discos SCSI pequenos, porém mais rápidos, e alguns poucos em RAID, do que com discos de grande capacidade. Conseqüentemente, a segunda situação é mais freqüente do que a primeira. Nos benchmarks verificados nos últimos doze meses na Linux Magazine, pudemos observar que muitos servidores de email comerciais tentam armazenar temporariamente todas as filas de emails na RAM, e utilizar o disco rígido quando a memória não é mais suficiente.

Meça você mesmo

Quem quiser saber tudo sobre dicas de otimização para aplicar em seu próprio servidor provavelmente apreciará bastante o Postal. O programa gera uma carga de maneira segura, que torna as medições comparáveis e confiáveis. De posse dessas informações, o administrador pode então assumir os compromissos certos quanto à otimização. ■

Mais Informações [1] Thomas Aeby: http://www.bigsister.ch [2] Postal: http://www.coker.com.au/postal/ [3] Lawrence Berkeley National Laboratory, “Linux TCP Tuning”: http://dsd. lbl.gov/TCP-tuning/linux.html [4] Jeremy Mates, “Sendmail Message Sink”: http://sial.org/howto/ sendmail/discard

O autor Jörg Fritsch estuda Química e trabalha na área de desenvolvimento de software e segurança de TI. Desde 2003 ele é engenheiro de Segurança da Comunicação e Informação na agência NATO C3. Além disso é autor de inúmeros artigos técnicos sobre balanceamento de carga, TCP/IP e segurança.

http://supertuxbr.blogspot.com 66

http://www.linuxmagazine.com.br


Nagios | SYSADMIN

Conheça a mais famosa ferramenta de monitoramento de redes

SYSADMIN

Sempre alerta

O crescimento do número de servidores e serviços em uma rede pode levar o administrador à loucura. O Nagios é o software mais conhecido para monitoramento de redes, mas possui uma configuração complexa. Veja como instalá-lo e configurá-lo apropriadamente. por João Carlos Gomes da Costa

Lars Sundström - www.sxc.hu

A

principal responsabilidade do ad- além de serviços e dados de rede, como ministrador de sistemas reside na portas e servidores DHCP, FTP, SSH, estabilidade dos serviços oferecidos. DNS e de banco de dados, entre outros. Por isso, para garantir que nossos servi- No caso da maioria dos serviços, existe a ços estejam sempre no ar, utilizamos o possibilidade de determinarmos um valor auxílio de outros aplicativos – sejam eles para alertas (Warning) ou advertências uma rotina, script, uma tarefa agendada críticas (Critical). É possível estabelecer –, em geral destinados ao monitoramento uma regra para, por exemplo, ao atingir dos ativos da rede corporativa. 75% de uso de seus discos rígidos, o servidor Infelizmente, as próprias aplicações enviar um alerta para o administrador; ao costumam apresentar eventuais instabi- chegar a 85% de ocupação, enviar uma lidades, como provavelmente muitos já advertência crítica. Os valores para o ensabem, encarregando o usuário de avisar vio de alertas são configurados de acordo o setor de TI a respeito da falha. Em redes com a necessidade e o ambiente. Nesse sem ferramentas de monitoramento de ser- caso, também podem ser configurados vidores e switches (como já presenciei no para que o Nagios faça notificação por passado), isso pode ocorrer com frequên- email em caso de problemas com servicia. Para solucionar essa tarefa específica, ços ou dispositivos. O acesso ao Nagios via Web (figura 1) o Nagios é altamente indicado. oferece diversas maneiras de visualização dos serviços e máquinas monitorados. Um frame da página mostra todas as formas possíveis de se configurar essa visualização. É possível separar as máquinas por O Nagios tem como função principal o grupos para facilitar a visualização e o monitoramento de ativos da rede através monitoramento. Por exemplo, podemos de plugins que realizam a checagem de criar um grupo para sistemas Windows®, outro para Linux e ainda mais um para os um serviço ou dispositivo. Periodicamente, o programa verifica switches. Além de alertas visuais, podemos se o host está no ar, através de pacotes também habilitar alertas sonoros. O Nagios também pode gerar um ICMP (o conhecido ping). O intervalo entre verificações pode ser ajustado de mapa gráfico da rede, o que pode faciliacordo com a necessidade do administra- tar imensamente a descoberta da fonte dor. Quando o ping falha, o administrador do problema. Esse mapa permite ao adpercebe o erro ao acessar a interface web ministrador uma visualização espacial do Nagios. Além disso, o Nagios também mais precisa do parque de máquinas e pode trabalhar com outras formas de noti- seus respectivos serviços. ficação, enviando emails aos responsáveis Além de todas essas funções aprepelo serviço, por exemplo. sentadas, o Nagios mantém um regisÉ possível monitorar também outros tro de todos os alertas e notificações, e aspectos locais dos servidores, como discos também gera relatórios. Nos arquivos rígidos, CPU, usuários logados, memória, de configuração é possível determinar

Características básicas

por quanto tempo esses registros permanecerão disponíveis.

Pontos positivos

Ferramenta eficaz em sua função, o Nagios aumenta a produtividade dos administradores e analistas, já que monitora os ativos autonomamente. Ele ainda reduz o tempo de resposta em caso de problemas, pois os alertas são enviados imediatamente, possivelmente antes de prejudicar os usuários. Manutenção preventiva é outra vantagem oferecida pelo programa, já que o programa também pode emitir alertas sobre condições anteriores à falha dos serviços. O Nagios também é bastante escalável. Ao ampliar o número de ativos e serviços rodando, ele nos permite também adicionar novos plugins de checagem ou até mesmo

Figura 1: O Nagios pode ser acessado via Web, mostrando ao administrador simultaneamente diversos aspectos das máquinas monitoradas.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

67


SYSADMIN | Nagios

desenvolvermos os nossos. Infelizmente o desenvolvimento de um plugin para verificação do Microsoft SQL Server, de minha autoria, foi descontinuado. Há diversos sites que publicam plugins prontos, mas é necessário tomar cuidado, pois é possível que plugins baixados de fontes pouco confiáveis ajam diferentemente do prometido. Alguns sites, além de publicar o plugin compilado, disponibilizam também seu código-fonte, auxiliando a análise do mesmo.

Pontos negativos

Em uma pesquisa com outros administradores de sistemas, concluí que o Nagios é bastante apreciado em geral. Em contrapartida, seu processo de configuração foi considerado complexo pela maioria dos consultados. Realmente, o processo de configuração costuma ser um tanto árduo, até o administrador adquirir uma maior intimidade com o processo. É comum enfrentar dificuldades especialmente na configuração do Nagios Remote Plugin Executor (NRPE), um software acessório destinado justamente a checagens remotas. Por exemplo, o arquivo de configuração que utilizo possui mais de 3.000 linhas.

Mão na massa

É interessante que a máquina a ser configurada já possua o Apache instalado, e também que já esteja pronta para o envio de emails, caso se deseje utilizar a notificação por esse meio. Algumas distribuições, como Debian e Red Hat, possuem pacotes pré-compilados do Nagios. A versão atual do programa é a 2.6, com apenas pequenas diferenças em relação à 2.5. A maior mudança referese aos arquivos de configuração em que estão armazenadas determinadas seções. Todavia, a sintaxe dos parâmetros praticamente não sofreu alterações. Os passos para a instalação, indicados a seguir, são baseados na documentação oficial. ➧ Baixar o Nagios. Em [1], é possível baixar as versões 1.4 e 2.6 do software. É recomendável obter sempre a versão estável mais recente. No momento da publicação deste artigo, essa era a versão 2.6. Baixe também os plugins do Nagios e o NRPE. ➧ Compilação do programa. Primeiramente, vamos descompactar o códigofonte e entrar no diretório criado: # tar –zxvf nagios-2.6.tar.gz # cd nagios-2.6

Em seguida, vamos definir os parâmetros para a compilação e compilar o programa: # ./configure –prefix=/usr/local/nagios # make all # make install

Por último, instalamos os arquivos de configuração e o script de inicialização: # make install-config # make install-init

Compilado o Nagios, podemos fazer o mesmo com os plugins que baixamos: # # # # # #

tar –zxvf nagios-plugins-1.x.x.tar.gz cd nagios-plugins-1.x.x ./configure –prefix=/usr/local/nagios make make check make install

O último procedimento é a compilação e instalação do NRPE. Note que, diferentemente dos anteriores, esse software não utiliza o comando make install: # tar –zxvf nrpe-2.6.tar.gz # cd nrpe-2.6 # ./configure # make all # cp src/nrpe /usr/local/nagios/bin # cp src/check_nrpe /usr/local/nagios/ ➥libexec # cp sample-config/nrpe.cfg /usr/local/ ➥nagios/etc

NRPE em ação

O NRPE é o responsável pela checagem remota do host. Dessa forma, temos que instalá-lo nas estações a serem monitoradas, junto com os plugins. Quando instalamos o NRPE, ele utiliza por padrão a porta TCP 5666, mas isso pode ser alterado pelo administrador. O Nagios envia uma requisição do comando a ser monitorado para a porta 5666 da máquina monitorada. Esta, por sua vez, se encarrega de executar o comando solicitado e retornar os valores necessários, informando a condição do serviço. É possível inclusive desenvolver seus próprios plugins, de acordo com suas necessidades.

Configuração do Apache É preciso fazer a configuração do Apache para possibilitar o acesso à interface web do Nagios. Para isso, devemos editar o arquivo

de configuração do Apache, que varia de acordo com a distribuição. Se a configuração estiver segmentada em diversos arquivos, é importante verificar o local ideal para inserir os parâmetros a seguir: ScriptAlias /nagios/cgi-bin /usr/local/ ➥nagios/sbin <Directory “/usr/local/nagios/sbin”> Options ExecCGI AllowOverride None Order allow,deny Allow from all AuthName “Acesso ao Nagios” AuthType Basic AuthUserFile /usr/local/nagios/etc/. ➥htaccess Require valid-user </Directory> Alias /nagios /usr/local/nagios/share <Directory “/usr/local/nagios/share”> Options None AllowOverride None Order allow,deny Allow from all AuthName “Acesso ao Nagios” AuthType Basic AuthUserFile /usr/local/nagios/etc/. ➥htaccess Require valid-user </Directory>

Observações gerais

Os comentários contidos nos arquivos de configuração, além da documentação, são importantes fontes de informação a respeito da configuração do Nagios. Procure explorar também outras formas de configuração, usando, por exemplo, o protocolo SNMP. Um site que pode ajudar bastante na configuração do software encontra-se em [2]. Ele oferece plugins de checagem e exemplos de configuração do NRPE para máquinas Windows®. ■

Mais Informações [1] Página do Nagios: http://www.nagios.org [2] Nagios Exchange: http://www.nagiosexchange.org/

O autor João Carlos Gomes da Costa (gomesdacosta@gmail.com) possui dois anos de experiência em infra-estrutura de redes e administração de sistemas Linux e Microsoft, e atualmente é administrador de sistemas em um complexo hospitalar.

http://supertuxbr.blogspot.com 68

http://www.linuxmagazine.com.br


Árvores binárias | PROGRAMAÇÃO

Salvar dados e reencontrá-los rapidamente: árvores Red-Black

O que os esquilos e o kernel Linux têm em comum? Ambos percorrem árvores para armazenar coisas e depois reencontrá-las. Mas nessa comparação o kernel Linux trabalha melhor – por exemplo ao lidar de maneira bem peculiar com árvores pintadas de duas cores. por Tim Schürmann

O

esquilo Sandy já não tem mais a percorrer exaustivamente a complexa juventude de antes. Não apenas lista. Quanto mais elementos essa lista os ossos lhe doem, como também contiver, mais demorada será a busca a boa memória de antes o abandonou. – na pior das hipóteses, é preciso verificar No ano passado, quando procurava sua cada um dos elementos. Se ainda inserirnoz preferida guardada do ano anterior, mos essa busca ineficiente em um laço, ele foi obrigado a vasculhar entre todos o tempo de execução de nosso código se seus pertences. Assim como na vida real, alongará insuportavelmente. a guloseima estava escondida entre os últimos itens do estoque. Muitos programadores certamente se identificarão com o sofrimento de Sandy. O kernel Linux enfrenta problemas semeAssim como o velho esquilo, eles arma- lhantes com freqüência. Por isso, o sistema zenam seus dados desordenadamente operacional necessita, por exemplo, saber na memória. Um vetor ou inteiro longo quais regiões da memória já estão ocupadas. servem como depósitos de ponteiros para Ele poderia arquivar essas informações em listas interligadas, como por exemplo: uma lista encadeada como a que descrevemos. Nesse caso, se o kernel quisesse determinar typedef struct _elemento{ se uma região de salvamento ainda está livre, void *ponteiroparameusdados; ele teria que, em algumas situações, percorrer struct_element *proximo; longas seqüências, sempre até o fim. Outro } elemento; exemplo é oferecido pelo escalonador de E/ S: assim que um programa precisa acessar O ponteiro proximo sempre se refere o disco rígido, ele envia uma solicitação ao ao elemento seguinte na lista. Se agora kernel do sistema operacional. Lá, o escalonador de E/S assume outras o programador estiver procurando um elemento armazenado ali, ele precisa atividades. De maneira simplificada, ele primeiro memoriza todas as solicitações entrantes em uma fila de espera, para depois finalmente colocá-las em uma Noz seqüência mais organizada. Isso deve acelerar o acesso ao disco rígido. Quanto mais solicitações um programa apresentar, Castanha mais dados terão que ser administrados Amendoim pelo escalonador. Aqui, uma lista simples conseguiria prejudicar fortemente o desempenho de todo o sistema, e noAvelã vamente devorar em parte a vantagem de aceleração.

Kernel

Figura 1: Um exemplo de árvore de busca que administra as nozes de Sandy. As chaves são os nomes dos tipos na parte superior de cada nó, enquanto o conteúdo relacionado está localizado no campo inferior.

Na árvore

Como o esquilo Sandy já está um pouco senil, mas ainda lúcido, ele vai implementar um sistema de armazenagem inteligente em seu depósito ainda este

PROGRAMAÇÃO

Árvores coloridas

Peter E - www.sxc.hu

ano. Para isso, ele procurou uma bela árvore antiga com muitos galhos. Antes de guardar suas nozes ali, ele as mistura ao acaso. A informática já teve essa idéia há algum tempo. Em comparação à árvore real de Sandy, aqui felizmente existem alguns espaços sobrando, e com isso algumas vantagens. Ela consiste de uma raiz e muitas bifurcações, chamadas “nós”, que podem acomodar quaisquer dados. As hastes de conexão são chamadas “arestas”. Os últimos nós da copa da árvore chamam-se, como os seus equivalente reais, “folhas”. Ao contrário da vida do esquilo, no mundo da informática as árvores ficam de cabeça para baixo, as raízes normalmente são desenhadas em cima e o caminho para as folhas se estende para baixo.

Árvore binária

Para que fique tudo ainda mais fácil, nas próximas etapas cada nó deve exibir no máximo dois galhos, ou melhor, arestas. Em C, um nó como esse seria implementado da seguinte forma: typedef struct _no{ int data; struct _no *esquerda;

Figura 2: Uma busca pela chave 5 segue de acordo com este esquema: a busca se inicia na raiz da árvore binária. Como 5 é menor que 10, o próximo passo muda para o filho esquerdo. Aqui está o 3, que é menor que 5. Então a busca muda para o filho direito de 3, onde finalmente encontra-se o nó procurado.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

69


PROGRAMAÇÃO | Árvores binárias

Figura 3: Exemplo de uma Árvore RedBlack. A raiz é sempre preta, enquanto os outros nós são vermelhos ou pretos. struct _no *direita; struct _no *pai; } no

Para simplificar as coisas, suponhamos que os dados armazenados em um nó sejam números. É claro que em vez disso também é possível utilizarmos outros tipos de dados, desde que possam ser comparados de alguma forma. Em linguagem matemática: existe uma organização (parcial) para os nós. Ambos os ponteiros apontam para o seu correspondente dos lados esquerdo e direito na seqüência de nós da árvore. Esses correspondentes se chamam filhos. Para depois tornar um pouco mais fácil a implementação dos algoritmos, a estrutura também salva os nós anteriores, que conseqüentemente são chamados de pais. Os nós da raiz são reconhecidos por possuírem a variável pai com valor ZERO.

Etiquetas

Sandy se encontra agora diante de uma pequena porção de nozes. Por motivos óbvios, ele colocou cada porção cuidadosamente em um pequeno saco e os nomeou de acordo com o tipo de noz que continham. Assim, nenhuma noz vai se misturar (figura 1). Agora Sandy consegue chegar ao conteúdo pela descrição dos pacotes.

A Avô

P

T

Pai

Tio

I

X

Irmão

E

D

Filho Esquerdo

Filho Direito

Figura 4: A relação de parentesco dos nós na representação gráfica. Todos os nós são parentes do nó “X”.

De forma semelhante ao mundo dos bancos de dados, a descrição dos sacos se chama chave. De forma geral, o usuário gostaria de encontrar o mais rápido possível o elemento que corresponde à chave. Enquanto Sandy procura um determinado tipo de noz, o kernel procura o layout correspondente para uma região de armazenagem. Uma estrutura de dados que solucione essa tarefa é conhecida pelos programadores pelo nome de dicionário ou array associativo. Não basta mais, portanto, salvar apenas as nozes, ou seja, os dados, em um nó. Em vez disso, as chaves mencionadas também precisam ser depositadas lá. Os exemplos seguintes tornam essa compreensão mais fácil, e utilizam, em vez de tipos de noz, novamente números crescentes.

Distribuidor

Em seguida, Sandy pensa sobre a melhor forma de distribuir os sacos de nozes pelos nós, para que a busca por um determinado tipo retorne o resultado sem o esquilo ter que escalar muito. Depois de refletir um pouco, lhe ocorre um sistema supostamente genial. Primeiro, ele fica parado próximo à raiz e olha para cima, o que corresponde a olhar para baixo na figura 1. Agora ele pega um dos sacos e o coloca no primeiro nó. Finalmente, ele apanha todos os tipos de nozes que no alfabeto estão imediatamente antes daquele que acabou de ser estocado. Munido deles, ele se volta para a aresta esquerda, ou seja, a parte da árvore, e recomeça o jogo de outra forma. Por fim, ele repete o processo com o resto das nozes para a parte direita da árvore. Lá se encontram todas as nozes cujos nomes, no alfabeto, começam depois das nozes que se encontram na raiz.

Comparação de chaves De maneira geral, para qualquer nó da árvore, todas as chaves da parte esquerda são menores, e todas as chaves do lado

direito são maiores que a chave da raiz. A estrutura resultante é uma árvore de busca binária. Quem quiser reencontrar um elemento na árvore de busca deve iniciar pela raiz e olhar se a chave buscada é maior ou menor que a armazenada ali. Se for menor, a busca muda para a seqüência à esquerda da raiz; do contrário, para a direita. Isso dura até que seja encontrado um nó com a chave buscada, ou quando o nó não existir. Quando o nó correspondente é encontrado, significa que ele contém os dados procurados (veja a figura 2).

Baixa profundidade

Na necessidade de se administrar um grande volume de objetos e ter que localizá-los novamente da maneira mais rápida possível, esse tipo de árvore de busca binária é mais vantajosa em comparação com uma simples lista. Observando-se uma árvore com n nós, na qual cada nó tem exatamente dois filhos, um caminho vindo da raiz leva a uma folha através de, no máximo, log2 n nós. A extensão desse caminho é chamada também de profundidade da árvore. Como se pode ver, mesmo no pior caso evita-se a necessidade de consultar todos os elementos armazenados. Infelizmente, Sandy se deparou com um problema: ao colocar os montes de noz na seqüência crescente de nomes na árvore, ele obtêm uma lista muito longa. Então os nomes dos próximos tipos de noz sempre estão alfabeticamente após o que acabou de ser consultado. Conseqüentemente, ele segue sempre para a direita. Não resta mais nada ao pequeno esquilo, a não ser prestar atenção à arrumação das nozes e escolher uma distribuição adequada para os nós. Felizmente, para os programadores isso é um pouco mais fácil. Eles podem simplesmente cortar qualquer aresta e colar os nós em qualquer lugar da árvore novamente. Essa técnica permite que, depois da inserção de um novo elemento, se evite essa formação de cadeia indesejada para, de alguma forma,

Exemplo 1: Tio e irmão 01 02 03 04 05 06 07 08

no* tio(no *n){ if (n->pai == n->pai->pai->esquerdo) return n->pai->pai->direito; else return n->pai->pai->esquerdo; } no* irmao(no *n){ if (n == n->pai->esquerdo) return n->pai->direito; else return n->pai->esquerdo; }

http://supertuxbr.blogspot.com 70

http://www.linuxmagazine.com.br


Árvores binárias | PROGRAMAÇÃO

trazer a profundidade novamente para o valor log2 n. Muitas pessoas já tentaram solucionar esse problema de otimização. Em 1972, finalmente o professor de informática Rudolf Bayer foi bem-sucedido. Ele coloriu cada nó de uma árvore de busca binária de preto ou vermelho. Os algoritmos de otimização elaborados devem manter essas marcações coloridas das arestas com o mesmo nível. O resultado atualmente é conhecido como árvore Red-Black (Red-Black Tree). Um nó dessa árvore em C tem a seguinte estrutura: typedef struct _no{ int chave; void *dados; enum { vermelho, preto } cor; struct _no *esquerda; struct _no *direita; struct _no *pai; } no;

O escalonador de E/S no kernel Linux também recorre a diversas árvores red-black para as solicitações recebidas. Ele as utiliza como base para filas de espera especiais, nas quais, por exemplo, ele deposita cada solicitação de leitura que chega. As chaves podem ser, entre outras coisas, os setores requisitados do disco. Dessa maneira, o escalonador pode chegar a cada solicitação muito

mais rapidamente, beneficiando assim o processo de otimização. As árvores red-black também são empregadas no gerenciamento de memória. Elas ajudam na verificação rápida de regiões da memória e, com isso, na administração de espaços virtuais de endereçamento. Graças à árvore de buscas, o kernel consegue determinar rapidamente quais áreas estão ocupadas (quando a busca na árvore red-black é bem-sucedida) e quais ainda estão livres (em buscas sem sucesso). Antes que os próximos parágrafos possam fornecer uma visão exata dos algoritmos de inserção e eliminação de elementos, é necessário um pequeno aviso: a implementação é trabalhosa. Por isso, uma implementação só é vantajosa quando grandes volumes de dados precisam ser administrados e localizados novamente. Quem tiver apenas cinco elementos para administrar muito provavelmente fará o serviço mais rápido com uma árvore de busca binária convencional, pois evitará todo o esforço de administração.

Regulamentação

Uma árvore red-black é uma árvore de busca binária na qual cada nó possui a cor vermelha ou preta. Além disso, existem as seguintes condições: ➧ A raiz é sempre preta. ➧ As folhas da árvore são pretas e vazias; elas não armazenam, portanto, nozes ou A A qualquer outra informação. Elas apenas marcam P P T T o final da árvore. Em N N C, as folhas são implementadas através de um ponteiro nulo (a esquerda ou, conforme o caso, a direita do pai contém o Figura 5: Inserção, caso 3: tio e pai são coloridos de preto, o avô de vermelho. A função de ordenação valor NULL), e presumem assegura que as condições das árvores red-black que esses nós nulos são não serão infringidas. pretos (figura 3).

A P

A N

T N

T

P

Figura 6: Inserção, caso 4: o novo nó N possui um pai vermelho e um tio preto. Caso ele esteja do lado esquerdo do pai, é necessária mais uma rotação direita no pai.

➧ Um nó vermelho tem apenas filhos pretos. ➧ Para cada caminho que parte da raiz até uma folha, o número de nós pretos percorridos é sempre igual. A figura 3 mostra o exemplo de uma árvore red-black. Ele preenche todos os quatro requisitos que logicamente também os algoritmos seguintes devem levar em consideração. A condição mais importante é a última. Ela faz com que a árvore não se degenere e não construa ramificações muito longas (o que também pode ser demonstrado de maneira formal). Antes de explicarmos sobre a inserção e exclusão de elementos, algumas correlações precisam ser esclarecidas. Depois de termos mencionado o relacionameto entre pai e filho, chegam agora o avô, o tio e o irmão. O avô é, como na vida real, o pai do pai (figura 4). No exemplo 1 podemos ver como são definidos o tio e o irmão de um nó. Uma busca funciona exatamente assim, como na árvore de busca binária. Aqui as cores dos nós não têm nenhuma importância e podem ser ignoradas. Esse procedimento é mostrado pelo exemplo 2 em código C. No entanto, inserir um novo nó é mais complicado. Primeiro procuramos um local apropriado para o novo elemento. Para isso, é indicado o algoritmo de busca normal. Como o elemento ainda não está contido na árvore, ele acaba indo parar em uma folha. Agora produzimos

Exemplo 2: Busca 01 no *busca(no *raiz, int chave) 02 { 03 // busca nos nós a chave “chave” na árvore de buscas com a raiz “raiz” 04 05 no *atual = raiz; 06 while (atual != NULL) 07 { 08 if (chave < atual->chave) atual = atual->esquerda; 09 else if (chave > atual->chave) atual = atual->direita; 10 else if (atual->chave == chave) return atual; 11 } 12 return NULL; 13 }

Figura 7: Uma rotação esquerda transforma a árvore da esquerda na da direita, uma rotação direita faz da árvore direita a representação daquela à esquerda.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

71


PROGRAMAÇÃO | Árvores binárias

A P

Caso a caso

P T

N

N

A T

Figura 8: Inserção, caso 5: o novo nó N possui pai e tio vermelhos. Caso ele se encontre à esquerda do pai, é necessária ainda uma rotação à direita no avô.

um novo nó e o anexamos como novo filho na folha encontrada. Ao final, ele recebe uma coloração vermelha. Porém, agora uma das quatro condições poderia ser ferida. Vale a pena, portanto, verificar se é o caso de conduzir ações específicas de acordo com a situação.

Exemplo 3: Rotações 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

void rotacaoesquerda(no *n) { no *x = n; no *y = x->direita; no *subarvore1 = x->esquerda; no *subarvore2 = y->esquerda; no *subarvore3 = y->direita; no *paidex = x->pai; if(paidex != NULL) { if (n == paidex->esquerda) paidex->esquerda = y; else paidex->direita = y; } y->pai = paidex; y->direita = subarvore3; y->esquerda = x; x->pai = y; x->esquerda = subarvore1; x->direita = subarvore2; if(subarvore1 != NULL) subarvore1->pai=x; if(subarvore2 != NULL) subarvore2->pai=x; if(subarvore3 != NULL) subarvore3->pai=y; } void rotacaodireita(no *n) { no *y = n; no *x = y->esquerda; no *subarvore1 = x->esquerda; no *subarvore2 = x->direita; no *subarvore3 = y->direita; no *paidey = y->pai; if(paidey != NULL) { if(n == paidey->esquerda) paidey->esquerda = x; else paidey->direita = x; } x->pai = paidey; x->esquerda = subarvore1; x->direita = y; y->pai = x; y->esquerda = subarvore2; y->direita = subarvore3; if(subarvore1 != NULL) subarvore1->pai = x; if(subarvore2 != NULL) subarvore2->pai = y; if(subarvore3 != NULL) subarvore3->pai = y; }

A verificação e, caso necessário, o restabelecimento das condições, são assumidos pela função especial ordenar(), que recebe os nós transferidos e realiza todas as correções necessárias. Para isso, a função precisa escolher entre cinco casos possíveis:

I

P N

I IE

P ID

N

ID IE

Figura 9: Exclusão, caso 3b: pai e irmão trocam de cor. Por fim, uma rotação direita restabelece a ordem.

➧ Primeiro caso: O novo nó é ao mesmo tempo também a raiz. Como não há qualquer outro nó na árvore, certamente a raiz pode ser pintada de preto sem problemas. ➧ Segundo caso: O novo nó tem um pai preto. Como o próprio novo nó é vermelho, todas as condições são satisfeitas, de modo que o processo já pode ser interrompido. ➧ Terceiro caso: O novo nó tem um pai vermelho e um tio vermelho, e com isso fere a condição 4. Nesse caso, simplesmente colorimos de preto o tio e o pai, e o avô de vermelho. Com isso, o avô poderia ferir uma das condições. Conseqüentemente os teste no bisavô devem prosseguir, nos quais a função ordenar() é agora aplicada a ele (figura 5). ➧ Quarto caso: (figura 6). O novo nó tem um pai vermelho e um tio preto. Se, além disso, ele for o filho direito de seu pai, segue-se uma chamada rotação à esquerda no pai. A figura 7 mostra como isso funciona: a situação à esquerda é transportada para aquela à direita. Para isso, basta alterar o respectivo ponteiro do nó envolvido. Felizmente a rotação dispensa mais uma árvore de busca válida. Caso o pai do novo nó seja o filho da direita do avô, segue-se, ao contrário da situação anterior, uma rotação simétrica à direita. Na figura 7 isso corresponde à transferência da árvore da direita para a da esquerda. Independentemente da direção tomada pela rotação, finalmente, na visão do pai, se apresenta o quinto e ao mesmo tempo último caso, que ainda deve ser verificado. O exemplo 3 mostra as funções para uma rotação para o nó n. ➧ Quinto caso: o novo nó tem um pai vermelho e um tio preto. Se ele, além disso, é o filho esquerdo de seu pai, segue-se uma rotação direita para o avô,

conforme a figura 8. Se, no entanto, o novo nó é o filho direito, segue-se em vez disso uma rotação esquerda. Finalmente trocamos as cores entre pai e avô. O exemplo 4 mostra o caso mais uma vez como código em C. O exemplo 5 mostra o algoritmo de inserção completo em C.

Exclusão

Excluir nós da árvore red-black é ainda mais complicado que inseri-los. Primeiro o já conhecido algoritmo de busca procura pelo nó a ser eliminado. Quando encontrado, inicia-se novamente uma identificação do caso. O algoritmo completo – implementado em C – pode ser encontrado em [1]. ➧ Primeiro caso: quando o nó a ser excluído possui dois filhos não-vazios, um sucessor deve ser definido. Ele pode ser o maior elemento na parte esquerda da árvore ou o menor elemento na parte direita da árvore (para entendidos de árvores: o sucessor EmOrdem). Agora o valor do sucessor deve ser transferido para o nó a ser eliminado. Com isso, o sucessor passa a ser irrelevante, e então pode ser excluído. Assim ele assume o papel do nó a ser excluído, para o qual os casos 2 e 3 ainda devem ser percorridos. ➧ Segundo caso: o nó a ser excluído possui duas folhas vazias como filhos (esquerdo e direito são ponteiros nulos). Nesse caso nomeamos uma das folhas vazias como sucessor. A P

P

N

N

I IE

ID

I IE

ID

Figura 10: Exclusão, caso 3c. O irmão do novo nó é colorido de vermelho: como isso fere as condições da árvore red-black, inicia-se nele a função ordenar() mais uma vez.

http://supertuxbr.blogspot.com 72

http://www.linuxmagazine.com.br


Árvores binárias | PROGRAMAÇÃO

P

P N

N

I IE

I IE

ID

ID

Figura 11: Exclusão, caso 3d (a variante fácil): basta o pai e o irmão trocarem a cor do nó a ser excluído.

outra folha está vazia de qualquer forma, e pode ser ignorada. Como isso se elimina o problema de exclusão do terceiro caso. ➧ Terceiro caso: O nó a ser excluído é exatamente o filho que não é um ponteiro nulo. Nesse caso, podemos primeiro tirar da árvore o nó a ser excluído e nomear o seu único filho como seu sucessor. Se o nó a ser excluído for preto e o sucessor vermelho, a condição 3, provavelmente violada, pode ser satisfeita, e com isso simplesmente colorimos o sucessor de preto. No entanto, nos seguintes casos, depois de tomada essa ação, outras condições da

árvore podem ser violadas (esses casos são apagados pela função auxiliar ordenar_excluir()), nos exemplos on-line [1]: ➧ O sucessor é a nova raiz. Como ele deve ser preto, não há mais nada a fazer. ➧ O novo irmão do sucessor é vermelho. Nesse caso trocamos as cores do pai e do irmão. Ao final, é realizada uma rotação à esquerda no pai, caso o sucessor seja o filho esquerdo de seu pai. Do contrário, segue-se uma rotação à direita (figura 9). Como resultado, a situação existente refere-se aos casos 3d, 3e ou 3f.

➧ O pai, o irmão e o filho do irmão são pretos. Nesse caso, o irmão recebe a cor vermelha, violando a condição 3 em relação ao pai. Para ele, a determinação do caso deve ser conduzida novamente com ordenar_excluir() (figura 10). ➧ O pai é vermelho, porém o irmão e o filho do irmão são pretos. Então basta trocar as cores entre o irmão e o pai (figura 11). ➧ O irmão e seu filho esquerdo são pretos, enquanto o filho direito do irmão é vermelho; e o próprio sucessor é o filho de seu pai. Primeiro trocamos as cores entre o irmão e seu filho direito.

P

P N

N

I IE

IE F

ID

IE

Figura 12: Exclusão, caso 3e. Um estado intermediário: no começo há a troca de cores entre irmão e filho direito. Depois de uma rotação à esquerda ou à direita, ocorre o caso 3f.

~

Transforme 1PC em até 10 PCs LINUX

simples de usar, flexível e de baixo custo. O Desktop Multiplier, Desktop Server e DiscoverStation formam um time campeão em usabilidade, recursos e custo! Unidos a um ambiente extremamente simples de usar, baseado em janelas, é uma grande opção pra quem busca mais flexibilidade e redução de custos.

DesktopMultiplier Administra seus computadores de acesso público com simplicidade e segurança. São mais de 30 aplicações e centenas de recursos de gerenciamento centralizado como: filtros de navegação na Internet, controle de tempo, protetor de privacidade e uma ampla seleção de softwares, incluindo uma suíte de escritório completa, gravação de CD's, firewall, anti-vírus entre outros. Essa moderna ferramenta vem integrada com o sistema Desktop Multiplier, ou seja, com um PC é possível criar até 10 estações independentes, uma por cada licença de uso, reduzindo ainda mais o seu gasto com investimentos.

DesktopServer Inclui um sistema operacional Linux, baseado no Fedora Core 4, com o Desktop Multiplier já pré-integrado que facilmente converte um sistema Linux em até 10 estações distintas simplesmente adicionando placas de vídeo, monitores, teclados, mouse e a licença de uso do software. *Cada estação adicional deverá adquirir uma licença de uso do Software e a placa de Vídeo simples ou Dual, distribuída pela ThinNetworks.

Este conceito Ultra ThinClient trás todas as vantagens e facilidades do Linux para a estação de trabalho. Por tanto se falar em código-aberto, a ThinNetworks disponibiliza hoje estas 3 soluções baseadas neste conceito voltadas exclusivamente para área de trabalho.

DesktopMultiplier Adiciona novas estações a uma distribuição Linux já instalada. É um programa que facilmente converte um sistema Linux em até 10 estações completamente independentes apenas adicionando placas de vídeo, monitores, teclados, mouse e a licença de uso do software.

Fone: (61) 3366-1333 Skype: thinnetworks vendas@thinnet.com.br www.thinnetworks.com.br

http://supertuxbr.blogspot.com


PROGRAMAÇÃO | Árvores binárias

Exemplo 4: Ordenação 01 void ordenar(no *n) 02 { 03 no *dotio = tio(n); 04 no *avo = n->pai->pai; 05 no *pai = n->pai; 06 07 if (n->pai == NULL){ 08 // 1o caso: 09 n->cor = preto; return; 10 } 11 else { 12 // 2o caso: 13 if (pai->cor == preto) return; 14 else { 15 // 3o caso: 16 if ((tio != NULL) && (tio->cor == vermelho)){ 17 pai->cor = preto; 18 tio->cor = preto; 19 avo->cor = vermelho; 20 ordenar(avo); 21 } 22 else { 23 // 4o caso: 24 if( (n == pai->direita) && (pai == avo->esquerda) ) { 25 rotacaoesquerda(pai); 26 // transformar o antigo pai no no atual do 5o caso 27 n = n->esquerda; 28 tio = otio(n); 29 avo = n->pai->pai; 30 pai = n->pai; 31 } else if ((n == pai->links) && (pai ==avo->direita)){ 32 rotacaodireita(pai); 33 // transformar o antigo pai no no atual do 5o caso 34 n = n->direita; 35 tio = otio(n); 36 avo = n->pai->pai; 37 pai = n->pai; 38 } 39 40 // 5o caso: 41 pai->cor = preto; 42 avo->cor = vermelho; 43 if((n == pai->esquerda) && (pai == avo->esquerda)) 44 rotacaodireita(avo); 45 else rotacaoesquerda(avo); 46 } 47 } 48 } 49 50 51 }// Fim da ordenação

Exemplo 5: Inserção 01 void inserir(no *raiz, no* novono) { 02 // Insere o nó novono na arvore cuja raiz é ‘raiz’ 03 no *atual = raiz; 04 no *antecessor = raiz; 05 while (atual != NULL) { 06 antecessor = atual; 07 if (novono->chave < atual->chave) atual = atual->esquerda; 08 else if (novono->chave > atual->chave) atual = atual->direita; 09 else if (atual->chave == novono->chave) return; 10 } 11 12 if (novono->chave < antecessor->chave) antecessor->esquerda = novono; 13 else if (novono->chave > antecessor->chave) antecessor->direita = novono; 14 novono->pai = antecessor; 15 novono->cor = vermelho; 16 ordenar(novono); 17 }

P N

I P

I ID

ID

N

Figura 13: Exclusão, caso 3f. Dessa vez, irmão e pai trocam de cor. O centro da rotação a ser executada é o pai. O caso simétrico transcorre da mesma forma.

Finalmente rotacionamos à direita o irmão. A versão simétrica dessa situação transcorre de forma semelhante, porém à esquerda. Independentemente da direção, apresenta-se no final o caso 3f (figura 12). ➧ O filho direito do irmão é vermelho, o próprio irmão é preto e o sucessor é o filho esquerdo de seu pai. Nesse caso também trocamos novamente as cores, dessa vez entre irmão e pai. Por fim, rotacionamos à esquerda o pai. O caso simétrico segue de forma semelhante (figura 3).

Rápido, mas complicado As árvores red-black aceleram consideravelmente a busca por elementos contidos nela, mas esse resultado não é facilmente atingível. Principalmente com grandes quantidades de dados, vale a pena o esforço de implementá-la. Quem tiver interesse em saber por que cada operação é conduzida em cada caso deve reproduzir os algoritmos em uma folha de papel para uma melhor compreensão. Ao longo dos anos foram desenvolvidas diversas aplicações que deveriam reduzir o esforço de implementação e facilitar os algoritmos complexos. Por exemplo, o sistema de arquivos ReiserFS otimiza as árvores de buscas binárias caso os dados contidos nela estejam escritos no disco rígido. Quem realmente pretender adotar as árvores red-black pode lançar mão de algumas implementações prontas, como por exemplo a libredblack [2]. Apesar disso, aconselha-se naturalmente ter um conhecimento básico do algoritmo a ser aplicado. ■

Mais Informações [1]

Exemplos on-line:

http://www.linuxmagazine.com.br/ issue/27/redblack.c [2] Libredblack: http://libredblack.sourceforge.net

http://supertuxbr.blogspot.com 74

http://www.linuxmagazine.com.br


GWT | PROGRAMAÇÃO

Aplicativos Web dinâmicos com o Google Web Toolkit

PROGRAMAÇÃO

Ferramentas do Google O Google Web Toolkit permite o desenvolvimento de aplicativos Web complexos completamente em Java, e converte-os automaticamente para AJAX. por Ramon Wartala

Jean Scheijen - www.sxc.hu

O

Google é mais que um simples mecanismo de busca. Essa empresa grande e em rápida expansão também compreende um importante centro de desenvolvimento de software. Além de programas como o Google Desktop e o Google Earth, a empresa produz outros softwares baseados na Web a cada três meses. Enquanto o Google Mail está sob os holofotes, novos aplicativos como Google Reader, Google Calendar e Google Spreadsheet ainda não atraíram muita atenção. Esses aplicativos menos conhecidos compartilham a aparência e o comportamento de seus companheiros mais populares, e utilizam AJAX para o acesso rápido e fácil por parte dos clientes. Apesar de muitos suspeitarem que o Google tivesse seu próprio framework rodando sob o capô, não havia como ter

certeza disso até a conferência Java One, em maio de 2006, quando foi liberado o Google Web Toolkit (GWT) para download gratuito [1].

O que há na caixa?

O AJAX [2], processamento assíncrono de requisições e respostas HTTP, que se utiliza de Javascript e XML, é um termo popular, atualmente, entre desenvolvedores Web. Os conjuntos de ferramentas para AJAX de linguagens como Perl, Ruby e PHP vêm se tornando cada vez mais populares. Porém, o Google se aventurou em território desconhecido com seu framework baseado em Java. O Java funciona simplesmente como uma linguagem de teste e geração, enquanto o AJAX utiliza Javascript no lado cliente. Mas qual o motivo da escolha do Java? O principal é a eliminação de falhas. O GWT oferece aos desenvolvedores a Exemplo 1: Tabela de possibilidade de executar PostgreSQL para MyAddress e testar aplicativos Java 01 CREATE TABLE myaddress.”names” no chamado “modo hos02 ( pedado” (hosted mode). 03 id serial NOT NULL, Isso significa executar 04 firstname varchar(50) NOT NULL, uma versão em Java do 05 surname varchar(100) NOT NULL, aplicativo dentro de uma 06 email varchar(128) NOT NULL, 07 CONSTRAINT id PRIMARY KEY(id) máquina virtual Java. Os 08 ) programadores podem 09 WITHOUT OIDS; usar seus ambientes de 10 ALTER TABLE myaddress.”names” OWNER TO myaddress; desenvolvimento pre-

feridos, assim como suas ferramentas de depuração. Após o término do aplicativo, ele é compilado para Javascript. O código HTML e Javascript gerado nesse processo pode ser instalado em um servidor web, onde será executado em modo web (web mode). A arquitetura de componentes do framework GWT inclui um navegador web especial, uma biblioteca de classes de widgets para interfaces AJAX, e implementações em Javascript das classes padrão de Java, tais como java.lang e java.util. Além disso, o framework modifica o código Javascript para se adequar a navegadores web populares, como Mozilla, Firefox, Internet Explorer, Opera e Safari.

Figura 1: Esse programa de emails é um dos aplicativos de exemplo com o objetivo de demonstrar as capacidades do Google Web Toolkit.

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

75


PROGRAMAÇÃO | GWT

Exemplo 2: NameController

se encontrará no arquivo HTML, que implementa a plataforma para a interface gráfica do cliente. As linhas mais importantes são as referências à classe do módulo e à biblioteca Javascript do framework GWT:

01 class NameController <ApplicationController 02 scaffold :name 03 def find_names_to_json 04 # assegure-se de não enviar html, e sim texto puro 05 @headers[“Content-Type”] = “text/plain; charset=utf-8” 06 search_name = @params[‘surname’] 07 names = Name.find(:all, :conditions => [‘surname like ?’, search_name]) 08 render_text names.to_json 09 end 10 end

Começando

O pacote gwt-linux-1.0.21.tar.gz, de 22 MB, inclui documentação e cinco aplicativos de exemplo, variando desde um programa Hello, passando por um widget, e indo até um pequeno aplicativo de email (figura 1). Os aplicativos podem ser iniciados através dos scripts shell nos diretórios dos aplicativos. O aplicativo de exemplo que discutiremos neste artigo utiliza um servidor pré-existente para consultar um banco de dados de endereços simples. Para manter tudo simples, o servidor será baseado em Ruby On Rails, pois a implementação necessita de apenas algumas linhas de código – o que obviamente não tem qualquer efeito sobre o cliente. A versão finalizada pode ser baixada em [3]. O serviço MeuEndereço, desenvolvido especialmente para esse objetivo, é um simples banco de dados (veja o exemplo 1) que gerencia prenomes, sobrenomes e endereços de email. A troca de dados baseia-se no formato JSON (Javascript Object Notation) [4]. Diferentemente do XML, o JSON não utiliza tags, e portanto gera menos trabalho. Para recuperar o endereço de um sobrenome a partir do banco de dados usando Rails, e para então empacotar o endereço no formato JSON, precisamos somente das dez linhas do exemplo 2. A linha 6 lê o sobrenome a partir de uma requisição HTTP, e encontra o endereço respectivo no banco de dados na linha 7. A linha 8 converte o endereço para o formato JSON.

Figura 2: O web service do nosso exemplo pode fornecer os registros diretamente para o navegador.

<meta name=’gwt:module’ content=’de. ➥wartala.MyAddress’> <script language=”javascript” src=”gwt. ➥js”></script>

O comando ruby script\server start inicia o serviço MyAddress. O servidor interno de desenvolvimento em Ruby On Rails faz o serviço escutar na porta 3000 em localhost. É possível simplesmente consultar o servidor pelo endereço http:// localhost:3000/name/ em um navegador. Outra vantagem do Ruby On Rails é que se pode gerenciar o banco de dados através de um formulário de entrada gerado (figura 2). Após preencher algumas entradas, é possível consultá-las no navegador, na URL http://localhost:3000/name/find_names_to_json?lastname=Name. Agora vamos começar a desenvolver o projeto com GWT que usa o web service. Podemos digitar projectCreator na linha de comando para criar a base do projeto para um aplicativo. A opção -out especifica o diretório de destino; -eclipse informa que criaremos o projeto para o IDE Eclipse: projectCreator -eclipse Myaddress_GWT -out ➥myaddress_gwt

A ferramenta de linha de comando

applicationCreator gera as classes, scripts e

arquivos de configuração necessários:

applicationCreator -eclipse MyAddress_GWT ➥out myaddress_gwt de.wartala.client. ➥MyAddress

Quando você tiver certeza de que possui todos os arquivos necessários, poderá importar o projeto em GWT no Eclipse, selecionando Import | Existing Projects into Workspace no Package Explorer (figura 3). Dentro da estrutura do projeto, utilizaremos a configuração em XML de um módulo como ponto de partida. O applicationCreator já criou uma configuração de módulo com um ponto de partida, baseada no pacote de destino necessário (exemplo 3). Ele faz referência à classe Java que o aplicativo chamará ao ser iniciado em modo hospedado, e também

Ao ser iniciado, o aplicativo primeiro chama o método onModuleLoad(), que cria os widgets fornecidos pela biblioteca gráfica, antes de instanciar outras classes: MyAddressRequester, em nosso exemplo. O aplicativo então envia requisições ao serviço MyAddress, recebe as respostas e preenche os elementos da interface gráfica com elas. O método initializeMainForm() cria a interface, que consiste de um botão de busca, uma caixa de entrada e um FlexTable.initializeMainForm(), e então especifica os atributos e eventos, exatamente como um AWT ou a interface Swing. Nosso exemplo necessita somente que um único ClickEvent acione um clique em Search. A resposta a esse evento é implementada pela classe interna, SearchButtonClickListener. Um evento onClick() aciona a parte AJAX do aplicativo, e envia uma requisição HTTP assíncrona para o serviço, a qual passa o resultado para um manipulador de resposta adequado. O JSONResponseTextHandler, outra classe interna, implementa o método onCompletion(), que é chamado quando a requisição HTTP assíncrona retorna um resultado. Quando o serviço retorna um objeto JSON, primeiro precisamos decodificar o

Figura 3: O Google Web Toolkit pode criar arquivos de projeto para o Eclipse, oferecendo aos programadores a possibilidade de importálos para o IDE como um projeto.

http://supertuxbr.blogspot.com 76

http://www.linuxmagazine.com.br


GWT | PROGRAMAÇÃO

objeto e quebrá-lo em pedaços para des- tro -eclipse ao chamar o projectCreator vendar seus componentes. O JSONParser. cria um arquivo com um sufixo .launch parse(responseText) lida com a tarefa de além dos dados específicos do projeto. decodificar o objeto, enquanto o méto- Graças aos parâmetros configurados do displayJSONObject() é responsável pela aqui, o aplicativo pode ser executado última etapa, delegando o fardo para o no Eclipse e depurado com uma pemétodo updateAddressTable(). O método quena ajuda de breakpoints e outras updateAddressTable() renderiza os resulta- técnicas (figura 5). dos sob a forma de uma tabela, entrando Além de suportar a depuração através os valores da resposta JSON nas linhas e do Eclipse, o framework GWT também é capaz de realizar seus próprios testes de colunas correspondentes. Em relação ao script de linha de unidade sobre suas classes. A classe GWTcomando MyAddress-shell.sh, a figura 4 TestCase é o ponto de entrada que implemostra o front-end em modo hospeda- menta a integração a JUnit. A ferramenta do. Após digitarmos um sobrenome, os de linha de comando junitCreator gera dados retornados pelo serviço aparecem todos os arquivos necessários, incluindo na tabela. a própria classe de teste:

Figura 5: O modo de depuração do Eclipse acelera a eliminação de falhas.

GWT e mais

Obviamente, o Google Web Toolkit tem um potencial maior do que um simples exemplo consegue demonstrar. Ele possui ao todo 20 widgets; a dojunitCreator.cmd -junit eclipse/plugins/ cumentação oferece uma visão geral ➥org.junit_3.8.1/junit.jar -eclipse da Galeria de Widgets [5]. Além dos ➥myaddress_gwt2 -out myaddress_gwt2 A vantagem do modo hospedado se ➥de.wartala.myaddress.test.MyAddressTest equivalentes HTML de checkboxes e torna aparente caso ocorra um erro botões de rádio, os Layout Managers no programa; é mais fácil encontrar (Panels) são especialmente úteis. O uma falha no código Java do que no Os arquivos criados aqui são utiliza- VerticalPanel pode ser de grande ajuJavascript compilado. Passar o parâme- dos para fins de teste, tanto no modo da para alinhar botões verticalmente, hospedado quanto no por exemplo. modo web, no Eclipse O GWT também oferece aos desene também na linha de volvedores a possibilidade de desenhar comando. Se o aplicativo seus próprios widgets; nos endereços [6] for executado sem qual- e [7] há diversos exemplos e tutoriais. O quer erro, podemos rodar framework já atraiu uma forte comunio script Project-compile. dade, que utiliza os Google Groups [8] sh para criar uma versão para discutir sobre o assunto. ■ em Javascript do aplicativo escrito originalmente em Java. Mais Informações O script realiza a tarefa de copiar e gerar todos os [1] Google Web Toolkit: arquivos necessários no http://code.google.com/webtoolkit subdiretório www do diretó[2] AJAX: Figura 4: Aplicativos AJAX podem ser depurados usando-se um rio atual, ao ser invocado http://en.wikipedia.org/wiki/ navegador web especial no modo hospedado. junitCreator.cmd.

Caça aos bugs

Ajax_%28programming%29

Exemplo 3: Classe cliente de ponto de partida 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TabPanel; /** * As classes de ponto de entrada definem <code>onModuleLoad()</code>. */ public class MyAddress implements EntryPoint { /** * Esse é o método de ponto de partida. */ public void onModuleLoad() { TabPanel tp = new TabPanel(); MyAddressRequester myJson = new MyAddressRequester(); tp.add(myJson.initializeMainForm() ,”Lastname”); tp.selectTab(0); RootPanel.get().add(tp); } }

[3] Exemplos de cliente e servidor deste artigo:

http://www.linuxmagazine.com.br/ issue/27/gwt [4] JSON: http://www.json.org [5] Galeria de widgets GWT: http://code.google.com/ webtoolkit/documentation/com. google.gwt.doc.DeveloperGuide. UserInterface.WidgetGallery.html [6] Biblioteca de widgets GWT: http://gwt-widget.sourceforge.net [7] gwtPowered.org: http://gwtpowered.org [8] Grupo GWT no Google Groups: http://groups.google.com/ group/Google-Web-Toolkit

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

77


Linux.local

SERVIÇOS

O maior diretório de empresas que oferecem produtos, soluções e serviços em Linux e Software Livre, organizado por Estado. Sentiu falta do nome de sua empresa aqui? Entre em contato com a gente: 11 2161-5400 ou anuncios@linuxmagazine.com.br

Fornecedor de Hardware = 1 Redes e Telefonia / PBX = 2 Integrador de Soluções = 3 Literatura / Editora = 4 Fornecedor de Software = 5 Consultoria / Treinamento = 6

Empresa

Cidade

Endereço

Telefone

Web

85 3252-3836

www.f13.com.br

1 2 3 4 5 6

Ceará F13 Tecnologia

Fortaleza

Rua Coronel Solon, 480 – Bairro de Fátima Fortaleza - CE - CEP 60040-270

Linux Shopp

Vila Velha

Rua São Simão (Correspondência), 18 – CEP: 29113-120

27 3082-0932

www.linuxshopp.com.br

Megawork Consultoria e Sistemas

Vitória

Rua Chapot Presvot, 389 – Praia do Canto – CEP: 29055-410 sl 201, 202

27 3315-2370

www.megawork.com.br

✔ ✔

Spirit Linux

Vitória

Rua Marins Alvarino, 150 – CEP: 29047-660

27 3227-5543

www.spiritlinux.com.br

✔ ✔

✔ ✔

✔ ✔

Espírito Santo ✔ ✔

✔ ✔

Minas Gerais Instituto Online

Belo Horizonte

Av. Bias Fortes, 932, Sala 204 – CEP: 30170-011

31 3224-7920

www.institutoonline.com.br

Linux Place

Belo Horizonte

Rua do Ouro, 136, Sala 301 – Serra – CEP: 30220-000

31 3284-0575

corporate.linuxplace.com.br

✔ ✔

✔ ✔

Microhard

Belo Horizonte

Rua República da Argentina, 520 – Sion – CEP: 30315-490

31 3281-5522

www.microhard.com.br

✔ ✔ ✔

✔ ✔

TurboSite

Belo Horizonte

Rua Paraíba, 966, Sala 303 – Savassi – CEP: 30130-141

0800 702-9004

www.turbosite.com.br

✔ ✔

Paraná iSolve

Curitiba

Av. Cândido de Abreu, 526, Cj. 1206B – CEP: 80530-000

41 252-2977

www.isolve.com.br

Mandriva Conectiva

Curitiba

Rua Tocantins, 89 – Cristo Rei – CEP: 80050-430

41 3360-2600

www.mandriva.com.br

NSI Training

Rio de Janeiro

Rua Araújo Porto Alegre, 71, 4ºandar Centro – CEP: 20030-012 21 2220-7055

www.nsi.com.br

Open IT

Rio de Janeiro

Rua do Mercado, 34, Sl, 402 – Centro – CEP: 20010-120

21 2508-9103

www.openit.com.br

Unipi Tecnologias

Campos dos Goytacazes

Av. Alberto Torres, 303, 1ºandar - Centro – CEP 28035-581

22 2725-1041

www.unipi.com.br

✔ ✔ ✔ ✔

Solis

Lajeado

Rua Comandante Wagner, 12 – São Cristóvão – CEP: 95900-000

51 3714-6653

www.solis.coop.br

✔ ✔ ✔ ✔ ✔

✔ ✔

✔ ✔ ✔ ✔

Rio de Janeiro

Rio Grande do Sul

DualCon

Novo Hamburgo

Rua Joaquim Pedro Soares, 1099, Sl. 305 – Centro

51 3593-5437

www.dualcon.com.br

Datarecover

Porto Alegre

Av. Carlos Gomes, 403, Sala 908, Centro Comercial Atrium Center – Bela Vista – CEP: 90480-003

51 3018-1200

www.datarecover.com.br

LM2 Consulting

Porto Alegre

Rua Germano Petersen Junior, 101-Sl 202 – Higienópolis – CEP: 90540-140

51 3018-1007

www.lm2.com.br

Av. Venâncio Aires, 1137 – Rio Branco – CEP: 90.040.193

51 3331-1446

Lnx-IT Informação e Tecnologia Porto Alegre

✔ ✔

✔ ✔

www.lnx-it.inf.br

✔ ✔

Plugin

Porto Alegre

Av. Júlio de Castilhos, 132, 11º andar Centro – CEP: 90030-130 51 4003-1001

www.plugin.com.br

TeHospedo

Porto Alegre

Rua dos Andradas, 1234/610 – Centro – CEP: 90020-008

51 3286-3799

www.tehospedo.com.br

✔ ✔

Redix

Blumenau

Rua 02 de Setembro, 733, sl 08. CEP 89052-000

47 3323-7313

www.redix.com.br

Santa Catarina ✔ ✔

✔ ✔

São Paulo Ws Host

Arthur Nogueira

Rua Jerere, 36 – Vista Alegre – CEP: 13280-000

19 3846-1137

www.wshost.com.br

DigiVoice

Barueri

Al. Juruá, 159, Térreo – Alphaville – CEP: 06455-010

11 4195-2557

www.digivoice.com.br

✔ ✔ ✔

✔ ✔

Dextra Sistemas

Campinas

Rua Antônio Paioli, 320 – Pq. das Universidades – CEP: 13086-045

19 3256-6722

www.dextra.com.br

✔ ✔

Insigne Free Software do Brasil Campinas

Av. Andrades Neves, 1579 – Castelo – CEP: 13070-001

19 3213-2100

www.insignesoftware.com

Microcamp

Campinas

Av. Thomaz Alves, 20 – Centro – CEP: 13010-160

19 3236-1915

www.microcamp.com.br

PC2 Consultoria em Software Livre

Carapicuiba

Rua Edeia, 500 - 06350-080

11 3213-6388

www.pc2consultoria.com

✔ ✔ ✔

✔ ✔ ✔

Savant Tecnologia

Diadema

Av. Senador Vitorino Freire, 465 – CEP: 09910-550

11 5034-4199

www.savant.com.br

Epopéia Informática

Marília

Rua Goiás, 392 – Bairro Cascata – CEP 17509-140

14 3413-1137

www.epopeia.com.br

Redentor

Osasco

Rua Costante Piovan, 150 – Jd. Três Montanhas – CEP: 06263-270

11 2106-9392

www.redentor.ind.br

Go-Global

Santana de Parnaíba Av. Yojiro Takaoca, 4384, Ed. Shopping Service, Cj. 1013 – CEP: 06541-038

11 2173-4211

www.go-global.com.br

AW2NET

Santo André

Rua Edson Soares, 59 – CEP: 09760-350

11 4990-0065

www.aw2net.com.br

Async Open Source

São Carlos

Rua Orlando Damiano, 2212 – CEP 13560-450

16 3376-0125

www.async.com.br

Delix Internet

São José do Rio Preto

Rua Voluntário de São Paulo, 3066 9º – Centro – CEP: 15015-909

11 4062-9889

www.delixhosting.com.br

✔ ✔ ✔ ✔

✔ ✔ ✔ ✔ ✔ ✔

http://supertuxbr.blogspot.com 78

http://www.linuxmagazine.com.br


Linux.local | SERVIÇOS

Empresa

Cidade

Endereço

Telefone

Web

1 2 3 4 5 6

São Paulo (continuação) 4Linux

São Paulo

Rua Teixeira da Silva, 660, 6º andar – CEP: 04002-031

11 2125-4747

www.4linux.com.br

A Casa do Linux

São Paulo

Al. Jaú, 490 – Jd. Paulista – CEP 01420-000

11 3549-5151

www.acasadolinux.com.br

✔ ✔

Accenture do Brasil Ltda.

São Paulo

Rua Alexandre Dumas, 2051 – Chácara Santo Antônio – CEP: 04717-004

11 5188-3000

www.accenture.com.br

✔ ✔

ACR Informática

São Paulo

Rua Lincoln de Albuquerque, 65 –Perdizes – CEP: 05004-010

11 3873-1515

www.acrinformatica.com.br

Agit Informática

São Paulo

Rua Major Quedinho, 111, 5º andar, Cj. 508 – Centro – CEP: 01050-030

11 3255-4945

www.agit.com.br

✔ ✔

Altbit - Informática Comércio e Serviços LTDA.

São Paulo

Av. Francisco Matarazzo, 229, Cj. 57 – Água Branca – CEP 05001-000

11 3879-9390

www.altbit.com.br

AS2M -WPC Consultoria

São Paulo

Av. Tiradentes, 615, Ed. Santiago, 2º andar Bom Retiro – CEP: 01101-010

11 3228-3709

www.wpc.com.br

✔ ✔

✔ ✔

✔ ✔

Big Host

São Paulo

Rua Dr. Miguel Couto, 58 – Centro – CEP: 01008-010

11 3033-4000

www.bighost.com.br

✔ ✔

Blanes

São Paulo

Rua André Ampére, 153 – 9º andar – Conj. 91 CEP: 04562-907 (próx. Av. L. C. Berrini)

11 5506-9677

www.blanes.com.br

✔ ✔ ✔

✔ ✔

Commlogik do Brasil Ltda.

São Paulo

Av. das Nações Unidas, 13.797, Bloco II, 6º andar – Morumbi – CEP: 04794-000

11 5503-1011

www.commlogik.com.br

✔ ✔ ✔

✔ ✔

Computer Consulting Projeto e Consultoria Ltda.

São Paulo

Rua Vergueiro, 6455, Cj. 06 – Alto do Ipiranga – CEP: 04273-100 11 5062-3927

www.computerconsulting.com.br

✔ ✔

Consist Consultoria, Sistemas e Representações Ltda.

São Paulo

Av. das Nações Unidas, 20.727 – CEP: 04795-100

11 5693-7210

www.consist.com.br

Domínio Tecnologia

São Paulo

Rua das Carnaubeiras, 98 – Metrô Conceição – CEP: 04343-080

11 5017-0040

www.dominiotecnologia.com.br

EDS do Brasil

São Paulo

Av. Pres. Juscelino Kubistcheck, 1830 Torre 4 - 5º andar

11 3707-4100

www.eds.com

Ética Tecnologia

São Paulo

Rua Nova York, 945 – Brooklin – CEP:04560-002

11 5093-3025

www.etica.net

Getronics ICT Solutions and Services

São Paulo

Rua Verbo Divino, 1207 – CEP: 04719-002

11 5187-2700

www.getronics.com/br

✔ ✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

Hewlett-Packard Brasil Ltda.

São Paulo

Av. das Nações Unidas, 12.901, 25º andar – CEP: 04578-000

11 5502-5000

www.hp.com.br

✔ ✔ ✔ ✔

IBM Brasil Ltda.

São Paulo

Rua Tutóia, 1157 – CEP: 04007-900

0800-7074 837

www.br.ibm.com

iFractal

São Paulo

Rua Fiação da Saúde, 145, Conj. 66 – Saúde – CEP: 04144-020 11 5078-6618

www.ifractal.com.br

Integral

São Paulo

Rua Dr. Gentil Leite Martins, 295, 2º andar Jd. Prudência – CEP: 04648-001

11 5545-2600

www.integral.com.br

Itautec S.A.

São Paulo

Rua Santa Catarina, 1 – Tatuapé – CEP: 03086-025

11 6097-3000

www.itautec.com.br

✔ ✔ ✔

Linux Komputer Informática

São Paulo

Av. Dr. Lino de Moraes Leme, 185 – CEP: 04360-001

11 5034-4191

www.komputer.com.br

Linux Mall

São Paulo

Rua Machado Bittencourt, 190, Cj. 2087 – CEP: 04044-001

11 5087-9441

www.linuxmall.com.br

Livraria Tempo Real

São Paulo

Al. Santos, 1202 – Cerqueira César – CEP: 01418-100

11 3266-2988

www.temporeal.com.br

Locasite Internet Service

São Paulo

Av. Brigadeiro Luiz Antonio, 2482, 3º andar – Centro – CEP: 01402-000

11 2121-4555

www.locasite.com.br

Microsiga

São Paulo

Av. Braz Leme, 1631 – CEP: 02511-000

11 3981-7200

www.microsiga.com.br

Novatec Editora Ltda.

São Paulo

Rua Luis Antonio dos Santos, 110 – Santana – 02460-000

11 6979-0071

www.novateceditora.com.br

Novell América Latina

São Paulo

✔ ✔

✔ ✔ ✔ ✔ ✔

✔ ✔ ✔ ✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔ ✔

Rua Funchal, 418 – Vila Olímpia

11 3345-3900

www.novell.com/brasil

Oracle do Brasil Sistemas Ltda. São Paulo

Av. Alfredo Egídio de Souza Aranha, 100 – Bloco B – 5º andar – CEP: 04726-170

11 5189-3000

www.oracle.com.br

Proelbra Tecnologia Eletrônica Ltda.

São Paulo

Av. Rouxinol, 1.041, Cj. 204, 2º andar Moema – CEP: 04516-001 11 5052- 8044

www.proelbra.com.br

Provider

São Paulo

Av. Cardoso de Melo, 1450, 6º andar – Vila Olímpia – CEP: 04548-005

11 2165-6500

www.e-provider.com.br

Red Hat Brasil

São Paulo

Av. Angélica, 2503, 8º andar Consolação – CEP: 01227-200

11 3124-6000

www.latinsourcetech.com.br

Samurai Projetos Especiais

São Paulo

Rua Barão do Triunfo, 550, 6º andar – CEP: 04602-002

11 5097-3014

www.samurai.com.br

✔ ✔

SAP Brasil

São Paulo

Av. das Nações Unidas, 11.541, 16º andar – CEP: 04578-000

11 5503-2400

www.sap.com.br

✔ ✔

Simples Consultoria

São Paulo

Rua Mourato Coelho, 299, Cj. 02 Pinheiros – CEP: 05417-010

11 3898-2121

www.simplesconsultoria.com.br

✔ ✔

Smart Solutions

São Paulo

Av. Jabaquara, 2940 cj 56 e 57

11 5052-5958

www.smart-tec.com.br

Snap IT

São Paulo

Rua João Gomes Junior, 131 – Jd. Bonfiglioli – CEP: 05299-000

11 3731-8008

www.snapit.com.br

Stefanini IT Solutions

São Paulo

Av. Brig. Faria Lima, 1355, 19º – Pinheiros – CEP: 01452-919

11 3039-2000

www.stefanini.com.br

Sun Microsystems

São Paulo

Rua Alexandre Dumas, 2016 – CEP: 04717-004

11 5187-2100

www.sun.com.br

Sybase Brasil

São Paulo

Av. Juscelino Kubitschek, 510, 9º andar Itaim Bibi – CEP: 04543-000

11 3046-7388

www.sybase.com.br

The Source

São Paulo

Rua Marquês de Abrantes, 203 – Chácara Tatuapé – CEP: 03060-020

11 6698-5090

www.thesource.com.br

Unisys Brasil Ltda.

São Paulo

Rua Alexandre Dumas, 1711, 10º andar, Ed. Birmann 11 – CEP: 04717-004

11 3305-7000

www.unisys.com.br

Utah

São Paulo

Av. Paulista, 925, 13º andar – Cerqueira César – CEP: 01311-916

11 3145-5888

Visuelles

São Paulo

Rua Eng. Domicio Diele Pacheco e Silva, 585 – Interlagos – CEP 04455-310

Webnow

São Paulo

Av. Nações Unidas, 12.995, 10º andar, Ed. Plaza Centenário – Chácara Itaim – CEP: 04578-000

WRL Informática Ltda.

São Paulo

Systech

Taquaritinga

✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

www.utah.com.br

✔ ✔

11 5614-1010

www.visuelles.com.br

✔ ✔

11 5503-6510

www.webnow.com.br

Rua Santa Ifigênia, 211/213, Box 02– Centro – CEP: 01207-001 11 3362-1334

www.wrl.com.br

Rua São José, 1126 – Centro - Caixa Postal 71 – CEP: 15.900-000

www.systech-ltd.com.br

✔ ✔

16 3252-7308

✔ ✔

http://supertuxbr.blogspot.com Linux Magazine #27 | Fevereiro de 2007

79


SERVIÇOS

Calendário de eventos Evento

Data

Local

Website

PHP Conference 2007

12 e 13 de fevereiro

Vancouver, Canadá

vancouver.php.net/node/360

LinuxWorld OpenSolutions Summit

14 e 15 de fevereiro

Nova York, EUA

www.linuxworldexpo.com

Open Source Developers’ Conference

20 a 22 de fevereiro

Netanya, Israel

www.osdc.org.il/2007

FOSDEM 2007

24 e 25 de fevereiro

Bruxelas, Bélgica

www.fosdem.org

PyCon 2007

24 a 26 de fevereiro

Addison, EUA

us.pycon.org

LinuxWorld Conference & Expo Mexico

27 de fevereiro a 2 de março

Cidade do México, México

www.linuxworldexpo.com.mx

IT Underground

8 e 9 de março

Praga, Rapública Tcheca

itunderground.org

FOSE 2007

20 a 22 de março

Washington, EUA

www.fose.com

8º Fórum Internacional do Software Livre

12 a 14 de abril

Porto Alegre, RS

fisl.softwarelivre.org/8.0

Libre Graphics Meeting 2007

4 a 6 de maio

Vancouver, Canadá

www.libregraphicsmeeting.org

Índice de anunciantes Empresa

Pág.

4Linux

15

EasyLinux

09

Guia de Tecnologia da Informação

02

Intel

84

Itautec

07

Linux Magazine

13

Linux Magazine

49

Linux World

81

Plugin

17

Red Hat

11

Thin Networks

47

http://supertuxbr.blogspot.com 80

http://www.linuxmagazine.com.br


�������������������������������

����������������

��������

�����������������������

���������������������

�������

�����������������������

������������������������

��������

������������������������

���������������������

����������

������������������������

�����������������������

���������

�����������������������

����������������������

������������

����������������������������� �������������������������

��������

������������������������

�����������������������

�������

�������������

���������������������������

�������������

�����������

�������������������������

������

�����������

�����������������������

����������

�����������

�������������������������

������

������������

�����������������������

��������������

��������������������

����������������������

����������

�����������������

�����������������������

��������

���������������

���������������������

http://supertuxbr.blogspot.com �����������������������������������������������������������������

���������������������������


PREVIEW

Na Linux Magazine #28… DESTAQUE

Gerenciamento de projetos Delegar atribuições pode parecer uma tarefa relativamente simples. Porém, quando se tem um prazo a cumprir, metas a atingir e uma equipe numerosa para coordenar, o trabalho pode tornar-se rapidamente hercúleo. Uma ferramenta que certamente ajuda muito a coordenação de projetos é o gerenciador de projetos. Através dele, o coordenador da equipe pode controlar quais tarefas já foram completadas, quais ainda nem se iniciaram, quem são os com-

ponentes de cada grupo de trabalho, além de permitir que se ajustem as datas de finalização e início de subprojetos e os papéis de cada integrante dentro do grupo. Os gerenciadores de projetos vão além, e facilitam também a comunicação dentro da equipe, contribuindo de forma importante para o sucesso do trabalho. A Linux Magazine analisou diversos softwares gerenciadores de projetos de Código Aberto, além de um proprietário, capazes de gerar gráficos de Gantt e outros ainda mais sofisticados, no intuito de tornar seus projetos mais ágeis e dinâmicos. ■ DESTAQUE

Interação pela janela O acordo da Microsoft com a Novell já se concretizou há alguns meses, mas muitos ainda não enxergam através da nuvem de dúvidas que paira no ar. Em uma entrevista exclusiva com o Gerente de Estratégias da Microsoft, a Linux Magazine falou sobre interoperabilidade, concorrência, mercado... e o acordo com a Novell. ■

Na EasyLinux #09… DESTAQUE

Games no Linux

Nem só de trabalho duro vive o Linux. O sistema do Pingüim também surpreende quando o tema é games e faz rodar alguns dos jogos mais emocionantes da atualidade, feitos nos moldes dos sistemas proprietários. Como isso é possível? Através do Cedega – software pago – ou do virtuoso Wine. Com algumas configurações e entradas básicas na linha de comando, você vai aprender a instalar jogos como o famoso City of Heroes, dentre outros. Não perca a série de artigos completa, com passo-apasso, screenshots e soluções, especialmente preparada para a sua diversão! ■

LABORATÓRIO

Tudo sob controle

Você quer saber qual o uso que seu computador faz da CPU, memória e outros recursos, além de verificar o recebimento de emails? Delegue essa tarefa ao GKrellM, um programa enxuto, que oferece plugins adicionais, especialista em monitorar o sistema na forma de eficientes gráficos. ■

http://supertuxbr.blogspot.com 82

http://www.linuxmagazine.com.br


�������������������������� �������� ����������������� ���������

��������� ���������������� ��������

���������� ���������������� ��������

������������������ ���������������������� ��������������������� �������

�������

������������������������������� ���������������������������� �������������������

������������������� ���������������������������� �������������������������������

������������������ ����������������������� ������������������������

�������������������� ����������������������� ����������������

��������������������������������������� ��������������� ���� ������������������������������� ����������������������� ���� ������������������������ �������������� ����

��������� ������������������������ ����������������������������������

��������������������� ��������������������������������� �����������������������������������

������������������������� ����������������������������������� ���� ������������������������������������ ���� ���������������������������� ���� ��������������������������������� ���� ��������������������������� ����

�����������������

���������������

����� ��������������������������������� �������������������

���������������������������

������������������

��������������������������������������������������� ���� �������������������������������

��������������

� �� ���� �� �� ��������� � ��������

��� ���� �� �� � ������ �� � ��������

����� ��� ����������������������� ����������������������� �����������������������������

����������

�����������������������

������������������������

���������������������������

���������������������������������

�������������������

��������������������� ���������������������

����������������������������������

��������������������

���������������������������������

�������

���

������������������������������������������������������������������

�����

�����

����� �������������

���������������������������������

�������������������������

������������������������

����������

���

����������������

�������������������������

���������������������

��������������������������

���������������������� ���������������������������� ���������������������������

��������������������������������

����������������

���������������������

�����������������������

���������������������������������

�����������

����������������������

������������������������ ���� ����������������������������� ������������������������ ���

������������

�������

�����������

��������������������������������������������������� �������������������������������������������������������� ������������������������������������������������� ����������������������������������������������������� ���

����������������

�����������������

����������������������������������������� ���������������������������

������������������

����������

���������������������

����������������������������������

������������

���������������

����� ����������������������������������� ��������������������������� ���������������������������������

��

����������������������������������������

���������������������� ������������������

������������������������ ����������������������������������

����������

�����

����������������

������������������ ��������������

������������������������������������ ������������������������

��������������������������

��������������������������� ������������������������������

����� ������������������������������� ���������������

���������������������������������������������������� ������������������������������������������

��������������������������������������������������� ���� ��������������������������������������� ���� �������������������� ���� ���������������������������������������������������

����������������

����� �������������������������������

��������������������������������������� ������������������������������������ �������������������������������������� ��������������������������������������

��� ������ �� � �������� ���������

��������������������

������������������������������

�������������

�������� � ����� � ����� � ������� � ����� � �������������� � ������ � ������ � ������ � ����� � ���

������������� � ������������������������ � ����������������������������� � ����� � ������ � ����� � �������� � �����

����������������������

������������������������

����

����

������������������������������������ ������������������������������������ �������������������������������������� ������������������������������������� �������������������������������

������������������������

���

���� ����� ���������� ������ ����

�������������������������������

��������

�����������

�������������

� ������ ������

����

����

����� �������������

���������������

���������������

�������������������������������

����������� ����������������� ���������

�������������� ������������������� ��������������

���� ����� ���������� ������ ����

�������������������

��������������

� � ����� � ���� � ����� � ����� � �����

������������������������������������������������������ �������������������������������������������������������������

���

����� ���� ����� �����

��

�������������������

� ��

��������������

������������������������� �������������������������� ������������������������ ����������������������

����� � ������ � � ������ � ������� € �����

� ������ � � ������ � ������� € �����

� � �� � � � � � � � � � � � � � � � � � � � � � � �

� �� ���� �� �� ��������� � ��������

���

�������������

��������������������

�������������������������

�����������������������

�����������������������������������

������������������� ���������������

������������������������ ���������������������������

��������� ��� ������ �� ������� �� ���������

����������������������

���������������������

�������������������������

���������������

�������������������������������

����������������������������

����������������������

�������������

����� ����

���������������������� ������������������������� ��������������������� �������������������������������

�����

�����

��������� ������� �� ���������

������������������

�������� ���������������� ���������

���������������������������

�����

����������� �����

��������� ������� �� ���������

� � �� � � � � � � � � � � � � � � � � � � � � � �

€ �����

� � �� � � � � � � � � � � � � � � � � � � � � � � �

���������

� � �� � � � � � � � � � � � � � � � � � � � � � � �

������� ���������������� ���������

������������������������

������������������ ������������������������ ���������������������������������� ��������������������������������

� � �� � � � � � � � � � � � � � � � � � � � � � � �

� � �� � � � �� � � ��� � ���� � � � � � � � �

������������������������������������������������������������������� ��������������������������������

http://supertuxbr.blogspot.com


Transforme o poder do MultiCore em aplicativos de alto-desempenho. Tenha seus aplicativos preparados para o processamento paralelo e escalável. Faça certo na primeira vez: Intel® Threading Analysis Tools Localiza os problemas de threadings latentes com visualização em tempo real. Compiladores Intel C++ e Fortran Aumenta o desempenho sem mudar o ambiente de desenvolvimento Analisadores de Desempenho Intel VTune™ Identifica de forma bastante rápida gargalos de desempenho nos aplicativos Intel Integrated Performance Primitives Acesse bibliotecas de rotinas multimídia otimizadas para múltiplas plataformas Intel Math Kernel Library Aumenta o desempenho de aplicativos através do uso de rotinas otimizadas como BLAS, FFT, LAPACK, incluindo suporte a MPI

“As ferramentas de threading da Intel tem acelerado nosso ciclo de desenvolvimento imensamente”. Dana Batalli Diretora de Desenvolvimento do RenderMan Pixar

Itautec 0800 121444 www.itautec.com.br/intel Katalogo 0800 7729897 www.katalogo.com.br/intel MStech (11) 5080-3838 www.mstech.com.br/intel Strattus (11) 3531-6550 www.strattus.com.br/intel Tech Digital (11) 5181-1852 www.techdigital.com.br/intel

http://supertuxbr.blogspot.com © 2006 Intel Corporation, Intel, the Intel logo, Pentium, Itanium, Intel Xeon and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands maybe claimed as the property of others.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.