quinta-feira, 23 de maio de 2013

LibreOffice: Como Copiar Textos de uma Planilha do Calc para uma Tabela do Writer

1- O Cenário

Creio que muitas pessoas já devam ter passado por este problema: após uma imensa jornada de trabalho, conseguem finalmente concluir uma linda planilha no Calc do LibreOffice. Esta planilha tem, naturalmente, uma coleção gigantesca de linhas, cada uma com muitos dados em várias colunas. Portanto, convém que este volume de informações não deva ser digitada novamente.
Contudo, para a apresentação final de seu trabalho, toda esta planilha, ou, quem sabe, parte dela, deve ser inserida no corpo de um texto maior, gerado no Writer do LibreOffice. Ocorre que estes dados se encaixam perfeitamente em uma tabela do texto, de modo que fiquem facilmente organizados, identificados e estratificados do discurso escrito presente no documento.
Assim, você marca e copia todas as células (das colunas e linhas da sua planilha) que deseja importar para a tabela do documento de texto e, ao clicar na primeira célula da tabela e tentar colar, surpreende-se com um comportamento estranho: todo o conteúdo é colado dentre de uma única célula, aquela onde você estava com o cursor. O Writer não consegue identificar no conteúdo a presença de diferentes células da planilha e fazer a correspondência para as células da tabela do texto.
E agora, como resolver isso??


2- A Solução

Fiquem calmos, é possível fazer esta operação, ainda que não tão automaticamente, mas sem dor. Basta seguir estes passos:

PASSO 01: Vamos à planilha do Calc e copiamos todas as células que desejamos importar para a tabela do editor de textos Writer.

Figura 01: Copiando uma seleção de células da planilha Calc do LibreOffice.



PASSO 02: Agora abrimos o texto do Writer e, em uma posição vazia e fora da tabela, selecionamos a opção Colar Especial do menu Editar (ou Control + Shift + V). Surge uma janela com opções especiais de colagem e selecionamos a opção Texto Formatado (RTF).

Figura 02: Janela de Colar Especial, do menu Editar.

 Selecionada esta opção, o conteúdo das células da planilha entrarão no formato de uma nova tabela, a partir da posição de seu cursor. Esta tabela já é uma tabela comum do Writer e você pode usá-la, adaptá-la ou formatá-la, se desejar.

Figura 03: Conteúdo da planilha do Calc inserido no formato de tabela do Writer.


PASSO 03: Porém, se você já tem uma tabela pronta, vazia e formatada em seu documento de texto e deseja inserir estes dados nela, basta copiar e colar normalmente, ou mesmo marcar e arrastar os valores, dentro do Writer. Neste caso, a tabela criada automaticamente no momento da colagem ficará vazia e, para apagá-la, basta selecionar todas as suas células e clicar no botão Apagar Linha.


3- Conclusões

 Este rápido artigo pretendeu ensinar uma técnica muito simples e rápida de migração de dados de uma planilha eletrônica do Calc do LibreOffice para uma tabela do Writer, sem perda de dados ou da formatação, como também sem qualquer esforço para redigitar todo ou parte dos dados. Possivelmente, versões futuras do LibreOffice permitirão a colagem direta destes conteúdos dentro de uma tabela pré-existente (ao menos é o que os desenvolvedores prometem...).
Espero sinceramente ter ajudado e, claro, como sempre pedimos: COMENTEM!!


quinta-feira, 7 de junho de 2012

Preservando as Permissões do Linux com Script Java Ant Build

O projeto Ant da Apache é uma biblioteca utilíssima que, lendo um pequeno script em XML, é capaz de compilar todo o código do seu projeto, empacotá-lo em arquivo JAR, WAR, EAR, ZIP ou outros formatos e ainda faz mais uma série de outras coisas divertidas, a maioria envolvendo manipulação de arquivos e diretórios.
Embora seja o compilador/empacotador padrão de quase qualquer projeto Java profissional, o Ant lida com manipulação de arquivos e execução de programas tão bem que pode facilmente ler scripts que, com certa criatividade, podem compilar e empacotar programas e C, C++, dentre outras linguagens, além de servir de empacotador para outros projetos genéricos.


  • As Permissões no Linux

(Mais informações sobre as permissões do Linux, vide aqui).
No Linux, as permissões de acesso e execução de arquivos é gravada em forma de atributos de arquivo, e estão dispersas em 3 níveis: usuário (dono do arquivo), os outros membros do grupo principal (do usuário dono do arquivo) e, finalmente, os outros usuários que sobraram. Cada um destes três níveis tem 3 atributos de permissão: leitura somente, leitura e gravação, execução. Assim, temos uma combinação de 7 possibilidades para cada nível, ficando:

0 --- sem permissão
1 --x execução
2 -w- escrita
3 -wx escrita e execução
4 r-- leitura
5 r-x leitura e execução
6 rw- leitura e escrita
7 rwx leitura, escrita e execução

Como se pode perceber, estas permissões, nesta ordem (rwx) formam uma seqüência de 3 bits, que pode então ser representada por um número octal (sim, já que 23 = 8).

0: 000
1: 001
2: 010
3: 011
4: 100
5: 101
6: 110
7: 111

Assim, se temos 3 níveis, e se cada nível pode ser representado por um número octal, então as permissões completas podem ser representadas por uma seqüência de 3 números octais. Exemplos:


rwx rwx rwx = 777
r-x r-x r-x = 555
rwx r-- r-- = 744
e assim por diante...


  • O Problema das Permissões no Linux

Muito bem, e qual o problema disso?? É bem simples, meu caro Watson...
Se a permissão de execução de um arquivo, no Linux, é tão-somente um atributo deste arquivo, como podemos preservá-lo, caso o arquivo seja compilado via Ant?? Suponhamos os seguintes cenários:

1- Que o Ant empacote um programa que tem um arquivo executável (por exemplo, script.sh) gerando um arquivo ZIP. Isso funciona?

Não funciona. O formato ZIP não retém as permissões de arquivos do Linux. Ainda que retivesse, se o programa estiver sendo empacotado numa máquina que roda outro sistema (ex: Windows), as permissões não existirão e, no momento em que o Ant ler o arquivo, elas continuarão perdidas.
Exemplo:

[Este exemplo não faz o que pretendemos]
[arquivos compilados e copiados para a pasta "build"]
<zip destfile="pacote.zip" basedir="build"/>


2- Ah, mas o Ant tem uma task tar. E se ele empacotar o programa como tar??

O formato tar suporta o que queremos, de fato, mas ainda é pouco. Exatamente porque o Java é multiplataforma, a task tar do Ant não usa o programa tar do seu Linux. Usa uma implementação totalmente feita em Java do padrão tar. Só poderia ser assim, para que a task funcionasse inclusive em máquinas que não têm o programa tar, garantindo a compatibilidade entre as diversas plataformas.
O resultado disso é que o arquivo tar é gerado perfeitamente, porém sem as permissões herdadas de cada arquivo, e sim com permissões genéricas.
Exemplo:

[Este exemplo não faz o que pretendemos]
[arquivos compilados e copiados para a pasta "build"]
<tar destfile="pacote.tar">
     <fileset dir="build" includes="**/*"/>
</tar>


  • A Solução do Problema

Finalmente, existem algumas opções que podem resolver o problema. Vamos a elas.

1- Usando o Programa tar de seu Linux

Esta sabemos que não é a melhor opção, embora funcione. Através da task exec, o Ant permite a execução de um programa externo, inclusive passando parâmetros (argumentos) para o mesmo (mais sobre esta task aqui).
O exemplo abaixo indica como chamar o programa tar de um script Ant, passando argumentos que indicam o que deve ser empacotado (diretório ".") e uma lista de arquivos a serem excluídos. O problema é que, como o programa tar normalmente só existe em ambientes Linux, para evitar erros, a task é instruída a só executar se este ambiente for detectado. Esta detecção, internamente, é feita pela propriedade de sistema "os.name".

[Este exemplo não é a melhor opção]
<exec executable="tar" output="/dev/null" os="Linux">
        <arg value="--exclude-from=arquivos_a_excluir.txt"/>
        <arg value="-cvz"/>
        <arg value="--file=${pacote.tar}"/>
        <arg value="."/>
</exec>

A fragilidade desta opção é que, dependendo de um programa externo, ela não funciona em qualquer plataforma. Se você constrói seu sistema sozinho ou se a sua equipe tem o ambiente todo padronizado, então ela pode ser usada. Caso contrário, você teria que criar tantas task exec quanto sistemas usados por sua equipe, e torcer para que, em cada sistema, todos tenham o programa tar no mesmo lugar (ou no PATH).


1- A Forma Correta

A maneira abaixo despreza chamadas para programas externas e constrói a solução ideal. Como isto é possível??
Simples, meu caro Watson: substituímos (ou incluímos) a tag (elemento) fileset pela tag tarfileset. Esta tag é específica da task tar e herda de fileset. Esta faz o mesmo que aquela, ou seja, define uma lista de arquivos para serem considerados, porém com duas propriedades (atributos) a mais, a saber:

- filemode: define as permissões de arquivo Linux que os arquivos incluídos nesta tag deverão ter após incluídos no pacote tar, independente de os arquivos originais terem ou não estas permissões.
- dirmode: faz o mesmo, porém para diretórios.

Assim, é possível se manter ou mesmo trocar as permissões de arquivos no momento de serem empacotados no pacote tar. Evidentemente, devido a esta arquitetura de trabalho, o pacote tar será formado como desejado mesmo que você esteja rodando o script Ant de ambiente Windows, que não suporta as permissões de arquivos Linux. Ou seja: funciona em qualquer plataforma, por mais louca que seja a maneira como ela armazena seus arquivos.

Veja na prática como funciona, pelo exemplo abaixo:

[Este exemplo é o recomendável]
<tar destfile="pacote.tar">
    <fileset dir="build" includes="**/*" excludes="build/script.sh"/>
    <tarfileset dir="build" includes="build/script.sh" filemode="755"/>
</tar>

 No exemplo, selecionamos os arquivo que não são executáveis dentro do elemento fileset, como é feito normalmente. Porém, excluímos o único arquivo diferente, o que queremos que seja um executável. Logo abaixo, incluímos o arquivo executável, porém agora utilizando o elemento (tag) tarfileset, que está instruído a adicioná-lo ao pacote usando as permissões 755.
Como vimos acima, as permissões são representadas por 3 algarismos octais. Os atributos filemode e dirmode de tarfileset somente recebem estes 3 algarismos numéricos. No exemplo, 755 representa: rwx  r-x  r-x, ou seja, todos podem ler e executar, mas somente o dono do arquivo pode modificá-lo.


  • Conclusões

Neste artigo apresentamos como utilizar, no escopo de um script Ant, a task tar, de modo a elegantemente preservar as permissões de arquivos Linux ao se criar um pacote. Claro, estas permissões podem inclusive serem alteradas e/ou criadas no momento do empacotamento, uma vez que esta solução é ágil e flexível. Porque a implementação do tar no Ant é feita em puro Java, a solução dispensa o uso de chamadas a programas externos, o que poderia consistir em fragilidade no script, e, o melhor de tudo, pode ser rodada a partir de qualquer sistema, mesmo aqueles para quem estas permissões não existam nativamente.
Espero ter ajudado e, claro, COMENTEM!!!

domingo, 3 de junho de 2012

Instalando um Servidor Jabber jabberd no Ubuntu ou Debian

Jabber é um serviço que implementa o protocolo XMPP (Extensible Messaging and Presence Protocol), um protocolo aberto responsável por definir padrões para a comunicação entre clientes e servidores de mensagens instantâneas. É claro que não é o único padrão neste sentido, já que temos muitos deles (como o ICQ, AIM, MSN, etc.), mas é o único realmente aberto e gratuito.
Porque o XMPP é gratuito, existem muitos servidores e clientes Jabber, que implementam este protocolo e permitem, assim, que você tenha um serviço privado de mensagens instantâneas na sua casa, sua empresa, sua lan house ou rede particular. O objetivo deste artigo é exatamente isto: ajudar-lhe a instalar e configurar seu serviço particular de mensagens instantâneas baseado em Jabber. Note que todas as ações descritas neste tutorial supõem que você tem prioridade de root.


1- De Que Programas Preciso?

Para começar, você precisa de dois tipos de programas:

  • Um servidor Jabber, que ficará em uma máquina servidora acessível via rede;
  • Um cliente Jabber, que ficará em cada máquina de usuário.

A princípio, qualquer servidor Jabber deve poder falar com qualquer cliente, sem exclusividade, já que o protocolo XMPP é aberto e único.
Consulte aqui uma lista de clientes Jabber, e consulte aqui uma lista completa de servidores Jabber.
Para efeito deste artigo, vamos utilizar o servidor jabberd, versão 14, que é um servidor leve e bastante flexível, e vamos utilizar, para testar, o cliente pidgin, que é leve e multi-plataforma.


2- Instalação dos Programas

Nas máquinas clientes (dos usuários), instale o pidgin:

apt-get install pidgin

Faça a instalação do cliente em pelo menos uma máquina, para fins de teste. Em último caso, você pode instalar o cliente e o servidor na mesma máquina, para que faça todos os testes e configurações antes da implantação na máquina servidora realmente.

Na máquina servidora, instale o jabberd:


apt-get install jabberd14

(Em algumas distribuições, há o meta-pacote "jabber", que tem o jabberd14 como dependente. Neste caso, use opcionalmente "apt-get install jabber")

Isto instala o servidor jabberd e já roda o script de inicialização, programando-o para carregar sempre durante o boot. Evidentemente, você desejará modificar as configurações do servidor, então é preciso pará-lo:

/etc/init.d/jabberd14 stop


3- Configurando o Servidor jabberd

Toda a configuração do servidor está em um único arquivo XML, que pode ser encontrado em:

/etc/jabber/jabber.xml

Já a configuração do script de inicialização, dependendo de sua distribuição, pode ser encontrada em um destes dois arquivos:

/etc/jabber/jabber.cnf (mais comum no Debian)
ou
/etc/default/jabberd14 (mais comum no Ubuntu)

O arquivo jabber.xml é vastamente documentado e já vem pronto para uso. Contudo, algumas informações você precisará alterar.


Ajustando o nome e domínio do servidor

Ache a linha:

<host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>

E troque a referência "localhost" pelo nome de sua máquina na rede. Use aqui o que chamamos de FQDN (Full-Qualified Domain Name), ou seja, o nome da máquina com o domínio. Exemplo: se sua máquina se chama "host1" e seu domínio é "minhacasa.org", então configure esta linha assim:

<host><jabberd:cmdline flag="h">host1.minhacasa.org</jabberd:cmdline></host>

Observe que a linha acima faz menção à opção de linha de comando "-h". Esta opção é usada na inicialização do servidor pelo script e serve para indicar o nome do host que deverá ser considerado.
Portanto, uma vez alterando o nome de máquina no arquivo jabber.xml, você deve necessariamente abrir o arquivo de configuração do script e fazer a mesma alteração:

/etc/jabber/jabber.cnf (Debian):
JABBER_HOSTNAME=host1.minhacasa.org

ou

/etc/default/jabberd14 (Ubuntu):
HOSTNAME=host1.minhacasa.org

 Ainda falta um passo: neste arquivo de configuração do script acima, há referência ao diretório de spool. Este diretório é onde o jabberd armazena todos os dados dos usuários criados (que são arquivos XML contendo as informações de usuário, como login e senha, e o ícone do mesmo). Para cada opção de host o jabberd necessita de um sub-diretório dentro do spool de mesmo nome do host.
Assim, se seu diretório de spool é /var/spool/jabberd/, então você deve criar o diretório:

mkdir /var/spool/jabberd/host1.minhacasa.org

 Verifique com que usuário o seu jabberd roda. Em geral, ele roda com usuário e grupo chamado "jabberd". Assim, atribua este diretório a estes usuário e grupo:

chown jabberd /var/spool/jabberd/host1.minhacasa.org
chgrp jabberd /var/spool/jabberd/host1.minhacasa.org


Ajustando a porta

Se você chegou até aqui, seu servidor jabberd já está pronto para rodar perfeitamente. Contudo, ele vai rodar nas portas padrões do Jabber, a porta 5222 (para acesso sem encriptação) e 5223 (para acesso com encriptação). É fortemente recomendável, especialmente se seu servidor estará aberto para acesso externo via internet, que você troque a porta.
Para tanto, localize no arquivo jabber.xml mencionado acima as linhas:

<ip port="5222"/> (usada para acesso sem SSL)
<tls port='5223'/> (usada para acesso com SSL)

Troque os valores 5222 e 5223 para valores que você desejar. É imprescindível, entretanto, que você verifique o firewall de sua máquina onde está instalado o jabberd para se certificar de que as portas escolhidas estão abertas para acesso conforme você deseja. De outro modo, o servidor ficará inacessível.


Cadastramento de usuários

O jabberd vem, por padrão, disponível para aceitar que qualquer novo usuário se cadastre (registre) no sistema. Caso esta não seja a opção de seu desejo, então visite, no arquivo jabber.xml mencionado acima, as tags <register> e escolha a opção que mais lhe convenha.
Para eliminar totalmente a opção de registro automático pelo usuário, elimine deste arquivo todas as tags <register>.
Caso você queira ter total controle sobre os usuários e deseja registrá-los através de um serviço web ou criando-os a mão mesmo, você deverá saber a sintaxe do arquivo XML de usuário para escrevê-lo, ou confiar em um script que faça isto. Se é este seu desejo, veja bons scripts administrativos do Jabber aqui e aqui.
Lembre-se de que, para o Jabber, o nome do usuário sempre tem a fórmula:

nomeusuario@host.dominio
Arquivo: "/var/spool/jabberd/host.dominio/nomeusuario.xml"

Muitos clientes só conseguirão cadastrar ou localizar usuários usando esta forma acima.
Também é importante lembrar-se de que, se você fará o cadastramento de usuários manualmente ou através de outro sistema, os arquivos XML de cada usuário deverão ser atribuídos aos usuário e grupo do jabberd, conforme fizemos com o diretório de spool acima.


4- Reiniciando o Servidor

Após concluídas todas estas modificações, o servidor precisa ser reiniciado. Para tanto, rode os comandos:

/etc/init.d/jabberd14 stop (caso ainda não o tenha feito)
/etc/init.d/jabberd14 start

Para verificar se o servidor rodou usando o nome de host adequado, consulte o comando executado pelo script:

ps ax | grep jabberd

Deve surgir algo como:

2764 pts/1    S      0:00 /usr/sbin/jabberd --background -h host1.minhacasa.org -s /var/spool/jabberd

onde:

--background: informa que o serviço deve rodar como deamon, ou seja, em segundo plano.
-h: informa o nome do host (e, conseqüentemente, a pasta a ser lida dentro do spool);
-s: indica o local onde está o spool.


5- Conclusões

Bom, ao final deste tutorial, você deverá estar com um servidor Jabber rodando perfeitamente. Deve também ser capaz de criar usuários e configurar facilmente um cliente, como o Pidgin. Espero ter ajudado e conto com suas impressões nos comentários!!

quinta-feira, 22 de dezembro de 2011

Script para Automatizar Conexões SSH

Se você é um solicitado administrador de redes, um responsável por uma lan house ou um laboratório Linux ou mesmo um usuário avançado, certamente já se viu na situação de ter de abrir várias sessões de SSH para máquinas diferentes com grande freqüência. Normalmente, isto não é problema algum, mas muitas vezes é chato e cansativo se digitar tantos parâmetros para abrir a conexão.
Se este é o seu problema, o script abaixo poderá lhe ajudar muito!!



  • Mas, o que ele faz??
Ele automatiza o comando do SSH retirando alguns dos indicadores de parâmetros, como o "-p".


  • Como Devo Usá-lo??
Primeiramente, grave o script com um nome sugestivo, como "fastssh.sh", colocando-o em um diretório dentro de seu PATH (por exemplo, o /usr/bin), para que possa ser executado de qualquer diretório.
Não se esqueça de determinar a permissão de execução para todos os usuários, com o comando:

chmod +x fastssh.sh


Agora, imagine que você tem dois servidores que precisam ser acessados rotineiramente, com as seguintes configurações:

nomes: "server1.dominio.com" e "server2.dominio.com".
porta do SSH: 1000.
usuário: "pele".

OBS1: é sempre recomendável, para garantir maior segurança, que o SSH utilize uma porta fora do padrão!!
OBS2: Cuidado!! Normalmente, não é recomendável se conectar em servidor diretamente como "root".

Você deverá criar então 2 arquivos bem simples:

server1.sh:
fastssh.sh server1.dominio.com 1000 pele

server2.sh:
fastssh.sh server2.dominio.com 1000 pele

Faça os dois arquivos se tornarem executáveis (utilizando o mesmo comando "chmod", conforme mostrado acima) e coloque-os igualmente em uma pasta como o /usr/bin (ou qualquer outra que esteja no seu PATH).
Pronto!! Parabéns, agora, para se conectar a qualquer um dos servidores, basta somente se chamar o script correspondente, digitando-se "server1.sh" ou "server2.sh".


  • Conclusões
Este artigo foi bem simples e mostrou uma técnica de automatização extremamente útil e a que, muitas vezes, na pressa do dia-a-dia nós não atentamos e não utilizamos. Muitas vezes, são nas tarefas mais banais onde se perde mais tempo... Assim, fica aqui a dica e o script, testado e pronto para entrar em funcionamento na sua rede!!

sábado, 5 de novembro de 2011

Instalando a Versão Mais Nova do TimThumb

  • O Que é o TimThumb??

O TimThumb é uma pequena aplicação em PHP criada para automatizar o redimensionamento de imagens em páginas web, tarefa especialmente importante na geração de thumbnails para galerias de fotos e imagens. Pode ser usada em qualquer portal cujo servidor suporte PHP, mas tem sido fortemente aplicada em temas para o Wordpress. O próprio Wordpress não usa o TimThumb (ao menos até as últimas versões lançadas até o momento da escrita deste artigo), mas muitos de seus temas o têm usado ostensivamente.

Página do Projeto TimThumb:


  • O Problema da Vulnerabilidade (Falha no TimThumb)

Recentemente, a Avast noticiou ter descoberto uma vulnerabilidade provocada por uma falha no TimThumb que permite a injeção de código malicioso em páginas que utilizam este componente, podendo infectar máquinas clientes e disseminar o código malicioso rapidamente. Mais informações, vide aqui. Uma lista ainda bem incompleta de temas do Wordpress que utilizam o TimThumb está aqui.


  • Como Saber se Uso o TimThumb??

O TimThumb nada mais é do que um arquivo PHP. Nos temas do Wordpress, ele pode ter os seguintes nomes: timthumb.php, thumb.php, image.php, além de alguns outros nomes menos utilizados. O comando abaixo lista possíveis lugares onde o TimThumb pode estar instalado:

cd /var/www [ou o local onde está sua pasta web]
find . | grep thumb.php
find . | grep image.php

Em último caso, você pode varrer todos os arquivos PHP das suas pastas virtuais, com o comando:

find . | grep .php

Anote os arquivos que os comandos geram em suas saídas. Estes são do TimThumb e precisam ser atualizados.


  • Atualizando o TimThumb (Passo-a-Passo)


1- Baixe a versão mais nova do TimThumb em:

http://timthumb.googlecode.com/svn/trunk/timthumb.php

Atente para que o arquivo tem, além do código em si, logo no início, algumas informações de registro, como a versão e a licença. Verifique estes dados na versão que está instalada em cada sistema web seu e valide se a sua versão é mesmo defasada e precisa ser atualizada. A versão pode ser encontrada em uma linha semelhante a esta:

define ('VERSION', '2.8.2');

2- Antes de qualquer coisa, PELAMORDEDEUS, faça backup dos arquivos que você pretende substituir. Mantenha estes backups durante algum tempo, para que seja fácil voltar os arquivos antigos caso algum erro seja detectado com a versão nova.

3- Verifique as permissões que foram dadas a cada arquivo de versão antiga que deve ser substituído. Verifique também o nome de usuário e grupo atribuído a estes arquivos. Para tanto, utilize o comando "ls -l".

4- Copie o arquivo que você baixou, correspondente à versão mais nova do TimThumb, para o mesmo local e com o mesmo nome do arquivo correspondente à versão antiga, de forma a sobreescrevê-lo. Faça isso para cada ocorrência do TimThumb em seus sistemas web. Restaure ao arquivo recém-copiado as mesmas permissões de acesso, nome de usuário e grupo, conforme configurado no arquivo antigo.

5- Teste, teste, teste. Testar nunca é demais.



  • Instalando o TimThumb Pela Primeira Vez!!

Embora este artigo seja inicialmente destinado a ajudar um administrador de sistemas a atualizar o TimThumb, esta seção foi criada para ajudar os desenvolvedores web que acaso venham até aqui e quereiram aprender a usar o TimThumb em seus sistemas.
Antes de instalar, note que o TimThumb é um script PHP e, evidentemente, necessita rodar em um servidor que suporte PHP.
Poucos passos podem propiciar uma boa instalação do TimThumb em seu sistema:

1- Copie o arquivo timthumb.php para seu sistema web, mantendo as permissões, usuário e grupo coerentes com os demais arquivos PHP.

2- No diretório onde o arquivo acima foi copiado, crie duas pastas especiais, que serão usadas para criação, utilização e armazenamento de thumbnails geradas automaticamente pelo TimThumb. Estas pastas são: cache e temp.

3- Defina para as pastas cache e temp a permissão 777. Apenas para estas pastas a permissão terá este valor, e não para arquivos PHP ou qualquer outro trecho de seu sistema!!

4- Verifique outro pré-requisito: é preciso se ter instalada a biblioteca GD Image, e esta precisa ser suportada pelo ser servidor web.


  • Conclusões

Este breve artigo pretende ajudar os administradores a atualizar seguramente um componente interno utilizado em temas do Wordpress (ou em outros sistemas web). Note que o procedimento é válido para qualquer versão, e não apenas no caso mencionado acima, a respeito da falha de segurança de algumas versões do componente. Espero ter ajudado e, claro, COMENTEM!!

domingo, 18 de setembro de 2011

Instalando o Bugzilla no Debian ou Ubuntu

  • Introdução

O Bugzilla é um famoso gerenciador de bugs e pendências para projetos de desenvolvimento, especialmente desenvolvimento de sistemas, criado pela Fundação Mozilla. Suporta múltiplos projetos, diversos componentes por projeto e login de usuários. Suporta envio de anexos e é bastante flexível, além de ser código aberto (e, portanto, gratuito). Você pode baixar e instalar o Bugzilla em sua máquina pessoal, em um servidor de seu projeto, sua empresa ou instituição, ou mesmo modificá-lo e adaptá-lo para seu uso, caso deseje. Este artigo ensina os passos básicos para a instalação comum do Bugzilla, dando ênfase a sistemas derivados do Debian (como Ubuntu). Uma documentação detalhada de cada versão do sistema, incluindo a instalação destas, pode ser encontrada do repositório oficial de documentações (aqui). O artigo é divido em várias seções, uma para cada etapa da instalação, para melhor compreensão e orientação segura do fluxo, descrito passo-a-passo.


  • Verificando Dependências: Perl

O Bugzilla depente da linguagem Perl. Você não precisa saber nada da linguagem e possivelmente ela já vem na sua distribuição. Porém, para verificar isto, digite o comando:

perl -v

Caso o comando rode perfeitamente, o Perl está instalado. A versão mínima do Perl para rodar o Bugzilla deve ser maior ou igual à 5.8.1.


  • Verificando Dependências: Banco de Dados

O Bugzilla pode rodar em uma de três opções diferentes de bancos: MySQL, Oracle ou PostgreSQL. Para verificar as versões de cada um deles, digite:

mysql -V [para o MySQL. Deve ser maior ou igual a 4.1.2]
psql -V [para o PostgreSQL. Deve ser maior ou igual a 8.00.0000]
select * from v$version [para o Oracle. Deve ser maior ou igual a 10.02.0]

Se você tem ao menos um destes bancos e não está usando uma versão incrivelmente desatualizada da sua distribuição, então muito provavelmente seu banco servirá para o Bugzilla. Caso você ainda não tenha um banco de dados, recomendo que instale e use o MySQL. Para tanto, visite o nosso artigo Como Instalar e Configurar o MySQL no Ubuntu.


  • Verificando Dependências: Servidor Web

 Imagino que, a esta altura, você já tenha o Apache Web Server instalado (ou outro servidor web que suporte Perl). O Bugzilla recomenda o uso do Apache e, caso não o tenha instalado, proceda a instalação do mesmo via apt-get, digitando:

apt-get install apache2


  • Instalando e Configurando o Bugzilla

Muito bem, agora você está pronto para começar a instalação do Bugzilla. Baixe-o do portal oficial e copie-o para o diretório onde estão suas páginas do Apache. Descomprima-o lá dentro. Exemplo (para o arquivo da versão 4.0.2 e para o diretório /var/www como sendo o repositório das pastas virtuais do Apache):

mv bugzilla-4.0.2.tar.gz /var/www/
cd /var/www/
tar -zxvf bugzilla-4.0.2.tar.gz

É sempre bom renomear o diretório criado para um nome que você decida ser melhor, caso deseje:

mv bugzilla-4.0.2 bugzilla

Como o Bugzilla precisa escrever nos seus próprios arquivos, você terá de dar permissão para tanto. Verifique o usuário e grupo do Apache que está configurado na sua distribuição (para o Ubuntu, o usuário e grupo são ambos www-data) e modifique as permissões de acesso do Bugzilla para autorizar este usuário e grupo:

chown -R www-data bugzilla/
chgrp -R www-data bugzilla/

Você pode conferir se tudo funcionou com um "ls -l".


  • Instalando e Configurando os Módulos do Perl para o Bugzilla

A não ser que você seja um ávido desenvolvedor Perl, possivelmente seu servidor tem o Perl, porém não tem todos os módulos e bibliotecas necessárias para rodar o Bugzilla em sua plenitude. Neste caso, precisaremos verificar quais módulos você realmente tem e quais precisam ser instalados. Esta etapa deve ser feita cuidadosamente para que não falte nenhum módulo. Felizmente, o programa fornece uma ferramenta para isto. Entre no diretório do Bugzilla (talvez /var/www/bugzilla, ou o local onde você o colocou) e digite:

./checksetup.pl --check-modules

Não fique triste, mas a saída reportará várias linhas em vermelho, indicando os módulos não encontrados (ou encontrados, mas em versões inferiores à esperada). Você pode tentar instalá-los com os comandos sugeridos na própria saída, ou via apt-get. Eu recomendo que instale via apt-get o máximo de módulos possíveis, de sorte a garantir a integridade de seu sistema.
Alguns módulos que possivelmente estarão presentes: CGI.pm, Digest-SHA, TimeDate, DBI, URI, DBD-mysql. Alguns módulos que possivelmente estarão ausentes e podem ser instalados via apt-get são:

Módulo DateTime-Timezone:
apt-get install libdatetime-timezone-perl

Módulos List-MoreUtils e DateTime:
apt-get install libdatetime-perl liblist-moreutils-perl

Módulo Email-Send:
apt-get install libemail-send-perl

Módulo Email-MIME:
apt-get install libemail-mime-perl

Módulo Template (Template-Toolkit):
apt-get install libtemplate-perl

Caso, em seu sistema, outro módulo esteja faltando, o pacote correspondente pode ser encontrado fazendo a pesquisa:

apt-cache search [nome-do-módulo]

Use esta opção acima para achar também os módulos opcionais que deseja instalar (embora não estritamente obrigatórios, os módulos opcionais podem ser desejáveis para um uso mais amplo do Bugzilla).

Após a instalação dos módulos, rode de novo o comando checksetup (conforme mostrado lá em cima) para verificar se ainda há pendências.
Se algum módulo ficar faltando, ou caso esteja instalado, contudo o comando informa que se trata de uma versão inferior à requerida, então é preciso fazer o resto da instalação "à mão", ou seja, com os comandos sugeridos. Neste momento, como você fez o máximo que pôde com os pacotes do Debian (pelo apt-get), então as chances de instalações ou atualizações manuais falharem são de fato muito pequenas. Vide a seção seguinte.


  • Instalando Manualmente os Módulos do Perl para o Bugzilla

Suponhamos que o procedimento da seção acima informa que dois módulos foram instalados corretamente pelo gerenciador apt-get mas não se encontram nas versões mínimas requeridas: Template-Toolkit e Email-MIME (comumente isto acontece em algumas versões do Ubuntu).
Felizmente, o Bugzilla também se preocupou com problemas inerentes a este cenário, e prontificou uma ferramenta que auxiliará a instalação das versões mais novas (ou ao menos as versões corretas e apropriadas) dos módulos em questão. O próprio comando "checksetup.pl" sugere como proceder!! Basta que se digite (em relação a estes dois módulos e estando ainda no diretório do Bugzilla):

/usr/bin/perl install-module.pl Template
/usr/bin/perl install-module.pl Email::MIME

Utilizei estes módulos como exemplo, pois é comum que isto aconteça com eles. Entretanto, o comando acima instalará qualquer módulo, se substituir o "Template" ou "Email::MIME" pelo nome do módulo desejado. Impera ressalvar que, em qualquer condição, só faça uso dessa ferramenta se e somente se a instalação dos módulos pelo seu gerenciador de pacotes (apt-get, aptitude, Synaptic, etc.) não for possível ou acabar instalando versões anteriores à necessária.
Agora, faça figa, cruze os dedos, e verifique novamente como estão os módulos com o mesmo famoso comando ensinado lá em cima:

./checksetup.pl --check-modules

Se estiver tudo branquinho, então esta etapa foi superada!! Parabéns e continue aí embaixo com a próxima etapa!!


  • Instalando os Módulos Opcionais do Perl para o Bugzilla

Esta seção não é rigorosamente necessária para continuar a instalação, mas pode ser necessária dependendo da funcionalidade do Bugzilla que você desejar usar. Se quiser, pule para a seção seguinte. Caso contrário, instale os módulos que você realmente precisa dentre as opções abaixo. Os módulos HTML-Parser e libwww-perl possivelmente já estarão instalados. Seguem os comandos para a instalação dos outros.

Módulos GD e Chart:
apt-get install libchart-perl

Módulos GDTextUtil e GDGraph:
apt-get install libgd-graph-perl

Módulo Template-GD:
apt-get install libtemplate-plugin-gd-perl

Módulo MIME-tools:
apt-get install libmime-tools-perl

Módulo XML-Twig:
apt-get install libxml-twig-perl

Módulo perl-ldap:
apt-get install libnet-ldap-perl

Módulo Authen-SASL:
apt-get install libauthen-sasl-perl

Módulo RadiusPerl:
apt-get install libauthen-radius-perl

Módulo SOAP-Lite:
apt-get install libsoap-lite-perl

Módulos JSON-RPC e JSON-XS:
apt-get install libjson-rpc-perl

Módulo Test-Taint:
apt-get install libtest-taint-perl

Módulo HTML-Scrubber:
apt-get install libhtml-scrubber-perl

Módulo TheSchwartz:
apt-get install libtheschwartz-perl

Módulo Daemon-Generic:
apt-get install libdaemon-generic-perl

Note que alguns módulos não estão, aparentemente, disponíveis via gerenciador de pacotes. Assim, como na seção anterior, caso um dos módulos não seja encontrado ou não esteja na versão requerida, ele pode ser instalado diretamente pelo comando "install-module.pl", conforme descrito acima.


  • Instalando o Módulo do Perl no Apache2

Se o seu Apache2 já roda programas escritos em Perl, então talvez este passo também não seja necessário. Caso contrário, você precisa do módulo de Perl para o Apache. Este módulo faz com que o Apache aprenda a repassar para o executor Perl o código escrito em arquivos solicitados. Sem o módulo, os arquivos de código Perl serão tratados como arquivos de texto puro e serão simplesmente listados na tela de seu navegador.
Verificando se você tem o módulo Perl do apache:

ls /etc/apache2/mods-available/
[deve aparecer o arquivo perl.load na listagem]

Verificando se o módulo está ativo:

ls /etc/apache2/mods-enabled/
[deve aparecer o arquivo perl.load na listagem]

Caso o arquivo mencionado não esteja lá, o módulo não está instalado.
Instalando o módulo Perl do Apache2:

apt-get install libapache2-mod-perl2

Agora o arquivo deve aparecer em ambos os diretórios. Não se esqueça de que, sempre que uma mudança como estas é feita, é preciso que se reinicie o Apache. Você pode deixar para fazer isto depois, quando terminar de configurá-lo para o Bugzilla. Porém, caso deseje testar o carregamento do módulo, digite:

service apache2 restart

Você pode rodar de novo o verificador "./checksetup.pl --check-modules" e observar a linha "mod_perl" para averiguar se a versão do módulo do Perl para o Apache é maior ou igual à requerida. Embora esta linha esteja entre os módulos opcionais, ela é imprescindível caso você pretenda usar o Apache como servidor web através do módulo citado.


  • Gerando Automaticamente o Arquivo localconfig

A instalação está quase no fim!! Agora o seu Bugzilla precisa, para rodar perfeitamente, de acesso ao banco de dados. Para tanto, o programa lê um arquivo de configuração denominado "localconfig". Se você procurar este arquivo (e tiver feito tudo conforme indiquei até aqui!), notará que ele não existe (ainda). Não se preocupe, ele é gerado automaticamente pelo mesmo programa "checksetup.pl", porém rodado agora sem o parâmetro "--check-modules". Portanto, execute:

./checksetup.pl

[Quase no final deve surgir esta mensagem:]
This version of Bugzilla contains some variables that you may want to change and adapt to your local settings. Please edit the file ./localconfig and rerun checksetup.pl.

Muito bem!! Seu arquivo foi gerado!! Mas ainda está com as opções padrões... precisamos configurar qual schema (database) e qual usuário de banco o Bugzilla usará.


  • Criando Usuário de Banco e Schema (Database)

Este é um bom momento para se criar um usuário do banco de dados para o Bugzilla (jamais, jamais, sob qualquer hipótese, use o usuário "root"!!!), como também o seu Schema (ou Database). Como este artigo recomenda o uso do MySQL, abaixo estão os comandos do MySQL para executar estas funções. Caso você esteja usando o Oracle ou o PostgreSQL, busque na documentação de seu banco a maneira apropriada de se realizar estas operações.

Criando um usuário no MySQL:

mysql -u root -p
[digite a senha do banco, definida na instalação do mesmo, lá em cima]

mysql> create user 'bugzilla'@'localhost' identified by 'password';
[password é a senha que você deseja colocar, bugzilla é o nome do usuário (de até 16 caracteres). Não use nada óbvio!!]

Criando um schema para o Bugzilla:

mysql> create database bugzilla character set = 'utf8';
["bugzilla" será o nome do schema. Use o nome que quiser]

Concedendo privilégios para o novo usuário sobre o novo schema:

mysql> grant all privileges on bugzilla.* to 'bugzilla'@'localhost';


  • Configurando o Arquivo localconfig

Edite o arquivo "localconfig", de forma a acrescentar os dados do banco de dados e permitir o acesso correto do Bugzilla ao mesmo.

vi localconfig

Configure as opções:

$webservergroup = 'www-data';
[ou o nome do grupo linux usado pelo seu Apache]

$db_driver = 'mysql';
[pode ainda ser "oracle" ou "Pg", conforme o caso]

$db_host = 'localhost';
[caso acesse o banco de outra máquina, coloque o endereço do host aqui]

$db_name = 'bugzilla';
[ou o nome do schema ou database que você escolheu]

$db_user = 'bugzilla';
[ou o nome do usuário do banco que você escolheu]

$db_pass = 'password';
[ou a senha do usuário do banco que você escolheu]

Possivelmente as outras opções podem ficar como estão. Para testar se está tudo certinho e finalmente criar todas as suas tabelas dentro do banco de dados, rode novamente o programa:

./checksetup.pl

Se tudo correr bem, você verá um monte de tabelas sendo criadas. Ao final, serão solicitados dados para o administrador do Bugzilla, a saber:

- e-mail do Administrador do Bugzilla;
- Nome (real) do Administrador do Bugzilla;
- Senha (segura, por favor!!) do Administrador do Bugzilla.

Parabéns, seu Buzilla está configurado!! Resta apenas ensinar o Apache a encontrá-lo, que é seu último e derradeiro passo!!
NOTA: Uma vez terminada a configuração total, você poderá, via interface web do Bugzilla, criar mais usuários, inclusive outros usuários com perfil de Administrador.


  • Configurando o Servidor Web para o Bugzilla

A equipe do Bugzilla recomenda que se use o Apache Web Server. Este tutorial tem indicado o Apache desde o início; portanto, será explanada apenas a configuração deste servidor web. Se você usa, por qualquer motivo, outro servidor web, busque em suas documentações as configurações equivalentes.

Rode a página de teste do Bugzilla:

http://[seu servidor]/[pasta virtual]/testagent.cgi
[troque "seu servidor" pelo endereço ou IP de seu servidor, e "pasta virtual" pelo diretório onde o Bugzilla foi instalado]
Exemplo:
http://localhost/bugzilla/testagent.cgi

Se aparecer somente o texto "OK", então provável é que esteja tudo funcionando. Se o código do arquivo CGI for listado na tela, então o Apache ainda precisa entender melhor o Bugzilla. Possivelmente é isto que irá acontecer.

Existem duas maneiras de se configurar o Apache para rodar o Bugzilla: via mod_cgi e via mod_perl. Neste tutorial vamos varrer o mod_cgi, por ser mais econômico na memória e mais flexível (suporta múltiplas instâncias no mesmo servidor).
Abra o arquivo de configuração de seu Apache (apache2.conf ou httpd.conf, dependendo de sua distribuição):
vi /etc/apache2/apache2.conf

Acrescente as linhas:

<Directory /var/www/bugzilla>
AddHandler cgi-script .cgi
Options +Indexes +ExecCGI
DirectoryIndex index.cgi
AllowOverride Limit FileInfo Indexes
</Directory>
[troque o "/var/www/bugzilla" pelo diretório correto onde o seu Bugzilla está instalado]

Reinicie o Apache Web Server (lembra que eu pedi que você esperasse por este momento bem lá em cima?? Pois é, agora chegou a hora!!):

service apache2 restart

 Rode o "checksetup.pl" para pequenos ajustes automáticos. Este programa pode ser rodado a qualquer momento que se fizer necessário, sem prejuízo algum:

./checksetup.pl

Acesse novamente a página de testes lá em cima, no início desta seção. Se tudo funcionou, ela vai listar apenas uma linha contendo o texto:


OK mod_cgi

Parabéns!! Seu Bugzilla está instalado e rodando!! Acesse-o pelo endereço:

http://[seu servidor]/[pasta virtual]/
Exemplo:
http://localhost/bugzilla/

Se preciso, dê um Ctrl+F5 (função refresh ou recarregar do navegador) na página para ela acordar. Deve aparecer uma tela chamada "Main Page" e dizendo, sorridente, "Welcome to Bugzilla"!!

Agora você vai desejar certamente descansar um pouco, tomar um café, ou um chá, ou um mate, comentar este artigo dizendo como ele te ajudou tanto (ehehe) e, enfim, começar a cadastrar seus projetos e os componentes internos dos mesmos. Para tanto, clique em "Login", digite o e-mail que você informou para o Administrador, a senha que foi igualmente informada, e siga as instruções da página que surgirá.


  • Conclusões

Este foi um artigo um tanto quanto extenso que procurou deixar de forma bem clara e simples todos os (muitos!) passo da instalação completa do Bugzilla. Embora os passos sejam numerosos e a quantidade de tecnologias utilizadas seja grande e diversificada, o Bugzilla é amigável e vem com programas internos que facilitam e automatizam muito todo o processo.
A documentação é muito clara, porém não está em português. Uma pendência na documentação, no entanto, é que, com o caráter generalista que lhe é de costume, ela deixa passar muitos comando que podem instalar mais seguramente módulos e bibliotecas, como os comandos que utilizam o gerenciador de pacotes do Debian, o apt-get.
Evidentemente, outras distribuições de Linux, com seus próprios sistemas de pacotes e seus gerenciadores, substituirão os comandos informados aqui por comandos bem semelhantes. Assim, espero, com este artigo, ter ajudado a aprimorar o processo de instalação do Bugzilla e colaborar com aqueles que precisam de uma instalação confiável, detalhista e segura, onde todos os passos são avaliados e explicados.
Se você realmente gostou, deixe seu comentário e experiência. Poderá estar, com isto, ajudando a muitos outros que nos visitam em busca de informações e ajuda.

Como Instalar e Configurar o MySQL no Ubuntu

O MySQL é talvez o mais popular banco de dados do mundo. Gratuito e de código aberto, certamente, ainda que você não o use nos sistemas que você desenvolve, você precisará de ferramentas (muitas abertas, outras nem tanto) que demandam a utilização deste banco de dados. Em geral isto é uma coisa boa porque o MySQL é um banco rápido e leve. Este artigo expõe, de forma simples e direta, como instalar o MySQL em sistemas baseados em Debian, como o Ubuntu.
Apenas por curiosidade, segue uma lista de algumas ferramentas comuns que usam o MySQL, das quais talvez você necessite em seus projetos ou em sua empresa:

MediaWiki, ferramenta gratuita para criação de páginas Wiki.
Wordpress, ferramenta gratuita para criação de blogs.
Bugzilla, ferramenta gratuita para controle de bugs de um projeto.
FengOffice, gerenciador de projetos não tão gratuito.
OTRS, famoso gerenciador de tickets, muito útil para serviços de helpdesk e suporte.


  • Instalando o MySQL

Entre como administrador (root) do sistema e digite:

apt-get install mysql-server
(Quando for solicitado, defina uma senha segura de root do MySQL. Não deixe esta senha em branco!!)

O pacote "mysql-server" é, na verdade, um meta-pacote que aponta para a versão mais nova do banco disponível nos repositórios de sua distribuição.
Isto instala apenas o servidor do banco, ou seja, o banco em si. Este servidor vem com um cliente em modo texto bem simples, mas não instala diretamente nenhuma ferramenta gráfica de administração e manipulação do banco.

Nota 01: O download completo do banco e as principais dependências podem chegar a mais de 24MB e a instalação dos mesmos ocupará mais de 60MB de disco. Verifique a disponibilidade de seus discos.

Nota 02: Embora seja possível, evite instalar a versão disponível no portal do banco, a menos que você seja especialista no assunto, pois esta versão vem com opções de configurações consideradas inseguras.


  • Instalando Clientes Gráficos (GUI) do MySQL

É claro que só o banco e as ferramentas em modo texto disponíveis no servidor não vão deixar um DBA completamente feliz... neste caso, especialmente para uso profissional, será preciso que se instalem ferramentas gráficas que facilitem o trabalho de consultas, criação de queries e scripts, administração do banco de dados, etc.

IMPORTANTE: Recomenda-se que estas ferramentas abaixo sejam instaladas nos clientes, e não no servidor. Isto quer dizer: não as instale na máquina que vai servir o banco, mas sim nas máquinas pessoais de cada usuário ou administrador do banco.

1- Uma ferramenta simples, gratuita e ágil é o MySQL Query Browser, que pode ser instalada com o comando:

apt-get install mysql-query-browser

Com ela, você pode:

- Criar queries e scripts;
- Salvar históricos;
- Autocompletar comandos;
- Depurar scripts;
- dentre muitas outras funcionalidades!!


2- Muitas vezes, a instalação deste programa inclui automaticamente outro bem útil, o MySQL Administrator. Caso não o inclua na sua distribuição, instale-o com o comando:

apt-get install mysql-admin

Com o MySQL Administrator, você pode:

- Gerenciar usuários e bancos;
- Fazer e restaurar backups;
- Parar e reiniciar o banco;
- Obter informações críticas sobre o sistema onde o banco roda;
- Configurar grande parte dos parâmetros do banco;
- Medir o desempenho do banco;
- Visualizar logs;
- Acompanhar replicações;
- dentre muitas outras coisas!!


3- Ainda uma outra ferramenta extremamente útil na suíte de ferramentas gratuitas do MySQL é o MySQL Workbench, que pode ser instalado com o comando:

apt-get install mysql-workbench-gpl

Esta ferramenta possibilita:

- Muito do que as ferramentas anteriores permitem, adicionando:
- Gerenciamento completo de múltiplas instâncias do MySQL;
- Engenharia reversa do schemas e/ou scripts para geração de modelos EER (Modelos de Entidade-Relacionamento, aprimorados para suportar subclasses e superclasses, união de objetos, especialização e generalização).
Com as ferramentas acima, qualquer profissional estará bem munido para usar o MySQL tranqüilo e feliz!!

Espero ter ajudado, pessoal!! Boa sorte a todos e, claro, COMENTEM (e, se quiserem, cliquem no maiszinho aí embaixo!!)