Patch RoundCube 0.1 beta2

Fiz um patch para o Webmail RoundCube que faz com que ele pesquise tanto o e-mail quanto o nome do usuário de uma base de dados LDAP.

Para isso:

  1. Copie o patch para o diretório program/include localizado dentro do diretório raiz do roundcube;
  2. Execute o comando
    # patch < main.inc.patch
  3. edite o arquivo config/main.inc.php e adicione a entrada:
    $rcmail_config['virtuser_ldap'] = array('hosts' => 'your.ldap.server',
    'port' => 389,
    'base_dn' => 'ou=users,dc=domain,dc=com',
    'name_field' => 'cn',
    'mail_field' => 'mail',
    'scope' => 'sub');
  4. Nessa configuração, ajuste as configurações conforme a sua base LDAP;
  5. Efetue o login no roundcube para testar, mas lembre-se: o RoundCube irá consultar a base ldap e salvará as informações capturadas no MySQL, ou seja, se você já logou no webmail terá que limpar a tabela users e identities do banco de dados do RoundCube para que ele salve as novas informações.

?? só isso? sim, é só isso… fiz testes e está funcionando legal. Isso será base para a próxima versão do Webmail da Univali (ih, falei ! :D )


Technorati : , ,

O que é o Load Average

Load Average é a média da soma do número de processos aguardando na fila para rodar mais o número atual de processos sendo executados nos últimos 1, 5 e 15 minutos.

Grande parte dos administradores de sistema referem-se e utilizam a carga de 1 minuto para na análise da carga do sistema. Recomenda-se o uso do 15 minutos para uso em planejamento de capacidade (Capacity planning).

Afirmações relevantes do artigo “UNIX Load Average Part 1: How It works by Dr. Neil Gunther

  • A Carga (LOAD) não é a utilização mas sim o tamanho total da fila;
  • Eles são amostras de 3 séries de momentos diferentes;
  • Estão em ordem errada para representar a informação de tendência.

O que pode ocasionar a carga alta:

  • Se a máquina em questão tiver pouca memória e estiver fazendo swap (paginação de memória em disco) o processo responsável pelo swap (kswapd) estará sendo executado diretamente ocasionando o aumento da carga;

O material acima é um breve resumo do que achei sobre Load Average nos endereços abaixo. Sugestões/correções serão muito bem vindas.

Referências:


Technorati : , ,

Erro ao conectar no MySQL a partir do PHP

Instalei o PHP 4 com um MySQL 5 no windows para efetuar alguns testes. Ao criar um script simples para conectar no MySQL foi apresentada a seguinte mensagem:

Client does not support authentication protocol requested by server; consider upgrading MySQL client

Após algumas consultas descobri que é só re-definir a senha do usuário que está acessando o BD, uma vez que o cliente MySQL do PHP utilizado na versão 4 é um pouco antigo. Para isso é só executar o comando:

mysql> SET PASSWORD FOR <a href="mailto:'usuario'@'servidor'">'usuario'@'servidor'</a> = OLD_PASSWORD('novaSenha');

Referência: http://dev.mysql.com/doc/refman/5.0/en/old-client.html


Technorati : ,

Igualando pacotes instalados no Debian/Ubuntu

Imagine aquele servidor (ou mesmo desktop) que você ficou vários dias escolhendo quais pacotes instalar…. uma hora será necessário repitir este procedimento e covenhamos, é um saco ficar levantando o que deve ser instalado e o que deve ser removido, para que as duas instalações fiquem iguais. Para quem utiliza o Debian (ou Ubuntu) existe uma forma bem fácil de resolver este problema, o comando dpkg possui duas opções que permite “equalizar” ou igualar o estado dos pacotes dessas duas instalações.

Para isso, na instalação onde você passou horas definindo o que deveria ser executado, execute o comando:

# dpkg --get-selections > pacotes.lst

Em seguida, copie o arquivo pacotes.lst para a instalação que você pretende deixar igual a primeira e executar o comando:

# dpkg --set-selections < pacotes.lst

?? importante lembrar que o comando acima não instalará nem removerá nenhum pacote da sua instalação, e sim estará definindo o estado do pacote de acordo com a primeira instalação. Para efetivar o processo de instalação/remoção dos pacotes, basta executar o aplicativo dselect, que é um front-end para o gerenciador de pacotes do Debian (deb).

# dselect

Em seguida, vá até a opção [I]nstalar (pode ser pressionando a tecla I) e em seguida pressione a tecla Enter. Após concluir o processo de instalação, escolha a opção [R]emover e pressione Enter novamente.

Aproveitando o embalo, o dselect permite configurar os repositórios do APT, assim como atualizar a lista de pacotes, instalar e remover pacotes e configurar pacotes que ainda não tenham sido configurados.

<update>
Saiu um artigo no dia 24/08 entitulado Linux Get list of installed software for reinstallation / restore software que além de apresentar a mesma coisa que relatei acima, vai um pouco além e explica como pode-se fazer a mesma coisa com distribuições baseadas em RPM.
</update>


Technorati : , , , , ,

Invertendo uma string no shell

Comando simples mais (in)útil: rev. Com ele é possível inverter uma string (ou as linhas de um arquivo) passados para ele, exemplo:

$ echo 123 | rev
321

Outro exemplo:

$ cat teste
Jose Morelli Neto
$ rev teste
oteN illeroM esoJ

Se alguem descobrir uma boa utilidade para este comando, por favor me avise ;)

e-mail com anexo a partir da linha de comando

As vezes precisamos enviar um arquivo a partir do shell de um servidor para o e-mail de algum usuário. ?? comum acessarmos um FTP do servidor e copiar o arquivo ou enviar o arquivo como conteúdo do e-mail (e não anexo). Esses tempos descobri um utilitário que me encantou: o mpack. Sua principal função é empacotar um arquivo em formato MIME.Segue um exemplo para enviar um e-mail com o arquvio /etc/hosts como anexo:

# mpack -s "Assunto qualquer" /etc/hosts usuario@email.com

?? possível enviar arquivos binários também, basta apontar o local. Caso você queira adicionar alguma descrição ao arquivo, basta utilizar o parâmetro -d [arquivo_descricao]

Também é possível apenas empacotar (ou desempacotar) o arquivo em formato MIME. No exemplo abaixo estamos codificando o arquivo /bin/ls no arquivo arquivo_mime
# mpack -s "qualquer coisa" -o arquivo_mime /bin/ls

E agora para desempacotar:

# munpack -s "qualquer coisa" arquivo_mime

Assim o arquivo ls será descomprimido no diretório raiz.

Atualizando o Ubuntu para o Dapper (6.06)

Pois é… decidi atualizar meu Ubuntu da versão breezy (5.10) para o Dapper (6.06). Tentei como sempre pela forma normal: pegar o CD da última release, iniciar a máquina com ele e efetuar a atualização. Mas infelizmente não deu… algum problema na minha máquina fazia com que o Ubuntu travasse no momento do boot. Ai, por acaso fui atualizar alguns pacotes e me deparei com um mensagem na parte superior da tela de atualização: “New distribution release ‘6.06 LTS’ is available” e do lado um botão “atualizar”. Pressionei o botão e voi-a-lá! após algumas confirmações meu Ubuntu já tinha virado dapper….

Atualiza??§??£o do ubuntu

Para abrir o Gerenciador de atualizações, você pode ir pelo menu: “Sistema -> Administração -> Gerenciador de Atualizações” ou no terminal, executar o comando:

$ sudo "update-manager -d"

?? só isso… claro atualizar via web implica em baixar todos os pacotes da internet… algo em torno de 640MB, mas vale a pena ;)

Dig, consultando DNS

Para quem não conhece, o Dig (Domain Information Groper) é um utilitário para consultas a DNS. Ele é normalmente utilizado para identificar problemas de DNS por ser uma ferramenta flexivel, fácil de utilizar e permitir um retorno das pesquisas de fácil compreensão.

o comando básico é:

# dig @servidor nome tipo

onde:

  • servidor: é o endereço IP ou nome do servidor smtp que será consultado;
  • nome: é o nome domínio que estamos consultando;
  • tipo: é o tipo de consulta. Pode ser MX (serviço de e-mail), A (endereço), ANY (todas as informações), etc. Se não preenchido o tipo padrão é A.

Existem várias opções de consulta, a que acho mais interessante é a +trace. Quando ela é utilizada, a saída apresenta todas as respostas desde os rootservers, incluindo qual deles respondeu. Um exemplo:

# dig @dns1.univali.br www.inf.ufsc.br A +trace

Qualquer outra informação: man dig ;)

Teste de carga utilizando Shell Script

A algumas semanas atrás, fiquei responsável por realizar testes de carga em uma sistema web da Univali que foi desenvolvido para o processo de Avaliação Institucional, no qual todos os alunos e professores devem preencher um questionário avaliando as disciplinas, os professores, os coordenadores de curso… ou seja, a universidade como um todo.

Fiquei com esta tarefa, pois a alguns anos também sou responsável pelo teste de carga da aplicação responsável pela processo de matrícula via Internet.

A tarefa é “simples”: consiste em monitorar o uso de recursos de todos os servidores envolvidos no processo (servidores web, banco de dados, etc) e aplicar uma carga que deverá simular um número n de usuários efetuando um determinado processo (preenchendo um formulário, navegando em um site, etc) em um período de tempo. O objetivo é dizer quantos usuários simultâneos poderão estar utilizando o sistema com um tempo de resposta aceitável e de forma que os recursos de hardware/software não sejam consumidos completamente.

Esse “número mágico” é utilizado para definirmos se um processo será dividido por grupos de pessoas em vários dias ou se será necessário a adição de mais servidores no farm.

Bem, por que estou escrevendo isso? porque até o início do ano eu costumava utilizar um software da Microsoft para efetuar os testes de carga chamado Web Application Stress Tool. Infelizmente para algumas aplicações web eu não conseguia efetuar o teste corretamente, simulando um usuário real no sistema. Dessa vez tentei evoluir um pouco e decidi fazer a aplicação em Shell Script! :)

A experiência foi muito boa, confesso que consegui obter um resultado satisfatório e ter uma flexibilidade imensa para criar o programa. Abaixo um descrição de um dos teste executados com 500 usuários simultâneos:

Foram utilizados 500 usuários que efetuaram o processo de login na Intranet no intervalo de 5 minutos. Estava sendo disparado o acesso de exatamente 5 usuários a cada 3 segundos. Após efetuar o login, o ???usuário??? passava para a tela onde encontram-se os formulários de avaliação institucional e em seguida escolhia o primeiro formulário de avaliação referente a disciplina. Neste ponto foi adicionado um intervalo que varia de 2 a 3 minutos referente ao preenchimento do formulário. Após a conclusão o mesmo era salvo e o usuário escolhia um novo formulário. Este processo se repetiu no total de 8 vezes, sendo 5 para formulários de disciplinas cursadas e 3 referentes ao curso (Curso, coordenador e auto-avaliação). Ao final o usuário efetuava o processo de Logout da Intranet.

Para o teste de cargas utilizei principalmente o curl auxiliado por diversas outras ferramentas encontradas no shell padrão de qualquer distro. Para o monitoramento também foram criados scripts que coletavam informações como uso de CPU, memória, conexões simultâneas, processos do apache em execução e outras informações relevantes.
Acho que é isso… gostaria apenas de compartilhar mais uma idéia que podê ser resolvida com shell scripts. Quem sabe futuramente transformo esse meu conhecimento em uma aplicação mais flexivel e fácil de configurar que suporte “farms” de clientes, geração de gráficos automaticamente (pois usei o Excel pra fazer isso ;) e mais o que vier na cabeça.

Instalação do Oracle 9.2.0.4.0 no Debian 3.1 (Sarge)

Esse pequeno tutorial visa instalar o Oracle com a finalidade de recompilar o php com suporte ao oci8 (AKA Oracle Client). Pode ser utilizado também para efetuar a instalação de um servidor que seja o banco de dados propriamente dito, porém fica por sua conta selecionar os produtos corretos que deverão ser instalados e efetuar as otimizações de kernel necessárias. Este tutorial parte de uma instalação mínima do Debian 3.1 Sarge, contendo apenas os pacotes básicos.

1. Instalar o X-Window básico:
# apt-get install x-window-system

Efetuar a configuração conforme seu hardware.

2. Adicionar usuário e grupo para o Oracle:
# groupadd oinstall
# useradd oracle -g oinstall -s /bin/bash -d /opt/oracle
# passwd oracle
# mkdir /opt/oracle
# chown oracle:oinstall /opt/oracle

3. Instalar os pacotes necessários para efetuar a instalação:
# apt-get install libstdc++2.10-glibc2.2 gcc-2.95 libc-dev x-window-system

4. Linkar bibliotecas e o gcc necessários pelo oracle:
# cd /usr/lib
# ln -s libstdc++-libc6.2-2.so.3 libstdc++-libc6.1-1.so.2
# cd /usr/bin
# ln -sf gcc-2.95 gcc

5. Montar o CD número 1 do oracle:
# mount -oexec /dev/cdrom

6. Logar em outro terminal (Alt+F2) com o usuário oracle

7. Preparar para que o Xwindow inicie um Xterm, e inicia-lo:
$ echo /usr/bin/X11/xterm > .xinitrc
$ startx

8. Iniciar a instalação do oracle:
$ /media/cdrom/runInstaller

Durante a instalação, os produtos que devem ser instalados são:
- SQL Plus
- Oracle Call Interfaces
- Oracle Programmer

9. Após o final da instalação, adicionar as linhas abaixo no arquivo /etc/bash.bashrc:
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/OraHome1
export ORACLE_SID=unvp01
export ORACLE_TERM=xterm
export NLS_LANG=PORTUGUESE_BRAZIL.WE8ISO8859P1
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH


# Set shell search paths
export PATH=$PATH:$ORACLE_HOME/bin


# CLASSPATH:
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

10. Por fim, adicionar o diretório de bibliotecas do oracle ao sistema:
# echo '$ORACLE_HOME/lib' >> /etc/ld.so.conf
# ldconfig