Archive for novembro 2005

Logando atividades realizadas no shell

No dicas-l de hoje tem uma dica que publiquei entitulada: Logando atividades realizadas no shell. Explica sobre como armazenar em um arquivo, os comandos executados e suas respectivas saídas.

Bom para quem quer documentar algum processo realizado…

Ferramenta para dimensionar seus servidores em um ambiente virtual

No link HP MS Virtual Server Solution Sizer encontra-se uma ferramenta para auxiliar no dimensionamento de novas máquinas (Hardware HP) que rodarão múltiplos ambientes virtualizados para consolidar velhos servidores.

No início do processo é possível informar quais os servidores que se deseja consolidar, informando suas características de hardware, software e utilização atual. Também é possível carregar uma planilha excel contendo os dados necessários.

Os cálculos são realizados após completar o questionário com algumas informações relevantes e ao final será apresentando uma planilha com a quantidade de servidores necessários e nos detalhes, uma proposta de como poderia ser distribuido os antigos servidores dentro do novo modelo e a possível utilização de cada equipamento.

O software utilizado para a virtualização é o Microsoft Virtual Server 2005 que requer como sistema operacional Host o Microsoft Windows 2003.

Como listar e matar processos pelo nome (e não pelo PID)

?? comum quando estamos trabalhando em um console linux e precisamos matar algum processo, executar um # ps aux | grep [PROGRAMA], pegar o PID e executar um # kill [PID] (ou kill -9 [PID]). Pois bem, se você ainda não conhece, deixe me falar (escrever) que é possível listar e matar os processos, utilizando para isso o próprio nome do processo. Para isso existem dois comandos encarregados desta tarefa, são eles o pgrep e o pkill.

O pgrep é responsável por pegar os processos em execução e listar seus IDs (PIDs), para isso o critério de seleção deverá ser completamente satisfeito. Por exemplo:

# pgrep httpd
Listará todos os PIDs de processos que tenham o nome httpd

Também é possível passar alguns parâmetros, como o -u que relaciona processos cujo o UID é efetivamente listado.

O pkill, por sua vez, enviará o respectivo sinal para cada processo que for listado (por padrão o SIGTERM) conforme o critério de seleção utilizado. Por exemplo:

# pkill -HUP syslogd
Fará com que o syslogd re-leia o arquivo de configuração.

Para maiores informações, consulte a página de manual destes comandos.

Pilha de tecnologias do W3C

Navegando pelo site do World Wide Web Consortium (W3C), encontrei um diagrama que sempre imaginei existir mas nunca tinha achado. trata-se de uma imagem que apresenta de forma simples e objetiva onde se encaixam e qual a utilidade de cada uma das tecnologias recomendadas pela W3C.


Clique sobre a imagem para visualizá-la em tamanho natural.

Para quem imaginava que os Web Standards resumiam-se apenas ao XHTML, CSS, DOM e XML pode ter se impressionado com a quantidade de padrões disponíveis para uso. Se você tem interesse em desenvolver sites/sistemas seguindo os Padrões Web, este poderá ser um bom ponto de partida. ;)

Para efeito de referência o link onde achei esta imagem é: About W3C: Technology.

Otimizando a compilação de aplicações no linux com Make em servidores multiprocessados

Se você possui um computador com suporte SMP (Symmetric MultiProcessor) é possível compilar os programas que utilizam o make (a grande maioria, se não todos) utilizando dois ou mais processadores. Para isso digamos que a aplicação em questão possui um arquivo Makefile, edite-o e procure pela linha:
MAKE=make

ao final da linha adicione a opção -jN, onde N é o número de jobs (ou processos de compilação) que serão executados simultaneamente.

?? aconselhável que N seja definido como o número de processadores da máquina +1, ou seja, digamos que você possui uma máquina com 2 processadores Dual Core, então você poderia alterar a linha para:
MAKE=make -j5

Caso o arquivo Makefile não possua a entrada MAKE, então você poderá adicionar a opção -j diretamente ao executar o make:
# ./configure
# make -j5

Se você possui muita memória RAM/Swap, pode testar a opção -j sem nenhum número, desta forma o make não irá limitar o número de atividades simultâneas.

?? possível também calcular a duração das compilações para avaliar qual o melhor valor para a opção -j, para isso utilize o comando time. Por exemplo:
# ./configure
# time make

Efetuei um teste compilando a aplicação RRDTools em um servidor Dual Xeon. A compilação normal durou (real) 1m38s. Já compilando com a opção -j5 a duração foi para 46s ou seja 54% mais rápido.

CPAN, manuseando extensões e módulos Perl de forma fácil

O CPAN (Comprehensive Perl Archive Network) é o repositório web central para módulos e extensões para Perl. Ele é formado por vários servidores distribuídos pelo mundo que podem ser utilizados para facilitar a instalação e atualização de recursos adicionais a linguagem Perl.

Normalmente utilizo o CPAN, quando instalo no servidor alguma aplicação feita em perl que necessita de módulos não fornecidos pela distribuição que estou utilizando.

Para abrir uma shell do CPAN, utilize o comando:

# perl -MCPAN -eshell
cpan shell -- CPAN exploration and modules installation (v1.7601)
ReadLine support available (try 'install Bundle::CPAN')


cpan>

Ao abrir uma shell, você poderá solicitar ajudar utilizando o comando ? ou help. Entre os comandos disponíveis, acredito que o mais utilizado é o comando install, para adicionar novos módulos.

Para sair do shell, utilize o comando quit.

Também é possível executar um dos comandos do CPAN de modo não interativo. Para isso basta usar a sintaxe:
# perl -MCPAN -e 'install Bundle::Apache::ASP'

onde Bundle::Apache::ASP é a extensão que desejamos instalar.

Acho que é isso, uma das grandes vantagens desse modelo de distribuição é a facilidade de instalar recursos sem se preocupar de onde deve baixá-los e como deverá compilá-los. ?? claro, ele não faz a instalação automática de pacotes dependentes, mas pelo menos lhe avisa o que deverá ser instalado.

Corrigindo arquivos PST corrompidos

Quem utiliza o Outlook/Outlook Express já deve ter se deparado com uma corrupção do seu arquivo .PST (Pastas Pessoais). Existem diversas ferramentas que efetuam a correção desse arquivo, mas o que poucos sabem é que o próprio windows fornece uma aplicação para reparar arquivos .PST danificados: o scanpst.exe.

O scanpst pode ser localizado sob o menu Programas -> acessórios -> Ferramentas do sistema ou no diretório C:\Arquivos de programas\Arquivos comuns\System\MSMAPI\1033

No caso de pasta offline (.OST) utilizadas para acesso Offline a pastas do MS Exchange Server, pode-se utilizar a ferramenta scanost.exe localizada no diretório acima ou o próprio scanpst.exe.

Módulos de rede Linux para máquinas virtuais

Ao instalar linux em máquinas virtuais no modo expert, sempre que se faz a configuração de rede (manualmente) fica a dúvida de qual “hardware” o software de máquina virtual esta emulando para a interface ethernet. Depois de apanhar um pouco, descobri os módulos compatíveis para as maquinas virtuais que mais utilizo:

  • VMware
    módulo ethernet: PCNET32
  • Microsoft Virtual PC 2004
    módulo ethernet: de4×5

Se por acaso você souber algum outro módulo importante (interface de video, etc) pode colaborar enviando um comentário.

Comandos MySQL

Segue alguns comandos úteis para o MySQL:

  • Alterar o valor do Auto Increment em uma tabela:

    mysql> ALTER TABLE <em>tabela</em> AUTO_INCREMENT=1;
  • Apresentar a estrutura de uma tabela:
    mysql> desc <em>tabela</em>;
  • Criar banco de dados e adicionar usuário para acesso:
    mysql> USE mysql;
    mysql> CREATE DATABASE bancodedados;
    mysql> GRANT ALL PRIVILEGES ON bancodedados.* TO usuario IDENTIFIED BY 'senha_do_usuario';
    mysql> FLUSH PRIVILEGES;
    
  • Tirar o privilégio de um usuário:
    mysql> USE mysql;
    mysql> REVOKE ALL PRIVILEGES ON bancodedados.* FROM usuário;
    mysql> FLUSH PRIVILEGES;
  • Remover um usuário:
    mysql> USE mysql;
    mysql> DELETE FROM mysql.user WHERE User='tatu';
    

Maiores informações sobre os comandos GRANT/REVOKE

Alterando a senha do usuário root no MySQL

Algumas vezes já me deparei com a dificuldade de tentar me lembrar qual era mesmo a senha que eu havia definido para o usuário root nos servidores com MySQL… depois de algumas vezes decidi guardar esta dica em algum lugar que me facilitasse recuperar quando necessário, e lá foi ela pra minha incrível base de conhecimentos em arquivo texto indexada pelo grep ;) . Bem, como tudo evolui, a base de conhecimentos em arquivo texto transformou-se neste blog e mais uma dica fará parte dele agora (não que a solução anterior estivesse ruim, mas infelizmente não era pública).

Para alterar a senha do usuário root siga os seguintes passos:

Linux:

  1. Parar o serviço do MySQL (service mysqld stop, /etc/init.d/mysqld stop, matando o processo – conforme sua distribuição);
  2. Reiniciar o mysql com a opção –skip-grant-tables (você poderá utilizá-la ao iniciar o mysqld manuamente ou colocando-a no arquivo de init)
  3. Alterar a senha do usuário root com o comando:
    # mysqladmin -u root password 'nova_senha'
    # mysqladmin flush-privileges
    

    você pode alterar a senha também com o comando:

    # mysql -u root mysql
    mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

Windows XP (com o MySQL rodando como serviço):

  1. Entrar nos serviços do windows (Iniciar -> Executar -> services.msc);
  2. Procure pelo MySQL, clique com o botão direito sobre ele e vá em propriedades;
  3. Pare o serviço (clicando sobre o botão parar);
  4. Insira no campo “Parâmetros de inicialização” o parâmetro –skip-grant-tables e clique no botão iniciar e em seguida botão Ok;
  5. Execute o cmd (Iniciar -> Executar -> cmd) , entre no diretório de binários do MySQL (cd c:\arquivos de programas\mysql\bin (ou onde estiver instalado));
  6. Alterar a senha do usuário root com o comando:
    mysqladmin -u root password 'nova_senha'
     mysqladmin flush-privileges
    

    você pode alterar a senha também com o comando:

    mysql -u root mysql
    mysql> UPDATE user SET Password=PASSWORD('nova_senha') WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

O parâmetro –skip-grant-tables desabilita no servidor o uso do sistema de privilégios. Com isso todos os usuários terão acesso a todos os bancos de dados. Ao executar o comando Flush privileges, o servidor retorna a utilizar seu sistema de privilégios, mantendo a segurança original do serviço.

Agora se você adicionou o parâmetro –skip-grant-tables no arquivo de init, não se esqueca de remové-lo de lá, para evitar que na próxima reinicialização do serviço ele fique vulnerável. Caso seu MySQL esteja no Windows, execute os 4 primeiros passos novamente removendo o parâmetro passado na inicialização.

Update: O Artigo foi adaptado também para apresentar a troca de senhas no ambiente windows conforme sugestão do Carlos Henrique.