Archive for the ‘Linux’ Category.

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

Instalando, removendo e pesquisando programas no Ubuntu e Debian

Alguns comandos úteis para instalação, remoção, informação e pesquisa de programas no Ubuntu e no Debian (via linha de comando). A apresentação dos comandos segue uma seqüência lógica do momento que instalamos até removermos um pacote.

Para pesquisarmos um pacote pelo nome:
hst:~# aptitude search iptraf
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

A primeira coluna (p) indica o estado do pacote, que pode ser:

i: Instalado
v: pacote virtual (um pacote que como dependência possui outros pacotes)
p: pacote não instalado
c: Removido, mas os arquivos de configuração ainda estão presentes
u: Desempacotado
B: Quebrado
C: Meio-configurado
H: meio-instalado
Agora, se quisermos pesquisar um pacote pela sua descrição, podemos utilizar o comando:

hst:~# aptitude search ~d"lan monitor"
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

Para obtermos maiores informações sobre um determinado pacote:

hst:~# aptitude show iptraf
Package: iptraf
State: not installed
Version: 2.7.0-7
Priority: optional
Section: net
Maintainer: Frederic Peters
Uncompressed Size: 745k
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Description: Interactive Colorful IP LAN Monitor
IPTraf is an ncurses-based IP LAN monitor that generates various network statistics including TCP info, UDP counts, ICMP
and OSPF information, Ethernet load info, node stats, IP checksum errors, and others.
hst:~#

Se for este o pacote que desejamos, para instalar basta executar o comando:

hst:~# aptitude install iptraf

Agora digamos que por algum motivo queremos remove-lo, para isso usamos o comando:

hst:~# aptitude remove iptraf

E por fim, para removermos os arquivos de configuração (que não são removidos pelo comando acima) executamos o comando:

hst:~# aptitude purge iptraf

Existem outros comandos interessantes como:

  • update: Atualiza a lista de pacotes disponíveis no repositório apt;
  • upgrade: Atualiza toda a distribuição para os pacotes mais recentes;
  • clean: Remove todos os arquivos .deb que estão no cache (/var/cache/apt/archives);
  • download: Baixa um pacote específico no diretório corrente.

Fontes:Installing Software on Debian e manpage do aptitude

Reconfigurações do Debian

Existem alguns comandos úteis que permitem reconfigurar alguns componentes do Debian ou até a distro inteira (como no primeiro boot). Segue abaixo uma pequena lista:

  • apt-setup: Permite reconfigurar os repositórios APT, é a mesma interface carregada no primeiro boot;
  • dpkg-reconfigure pacote: Efetua a reconfiguração de um pacote já instalado. Para isso, ele utiliza a mesma interface de configuração que é exibida quando um pacote é instalado (e se for aplicável ao pacote);
  • base-config: Permite efetuar a configuração do sistema base do Debian com opções como Linguagem, Timezone, usuários e senhas, hostname, apt (o mesmo do apt-setup), instalar pacotes (necessita do pacote base-config instalado).

Bem, pra quem já teve problemas no Xwindow e não sabia exatamente o que executar para reconfigura-lo (eu gostava do Xconfigurator do RedHat :) ), pode executar o comando:
# dpkg-reconfigure xserver-xfree86

Desmontando um dispositivo ocupado

Hoje tive um problema ao desmontar um compartilhamento montado via samba, onde o servidor que estava sendo acessado (windows 2003) não possuia mais tal compartilhamento. Ao tentar desmontá-lo utilizando somente o comando umount, recebia uma mensagem informando que o dispositivo estava ocupado (Device is busy).

Ao tentar achar o processo que estava usando este compartilhamento (via fuser), recebia uma mensagem de permissão negada (access denied).
Decidi dar uma olhada na manpage do umount, e descobri que desde a versão 2.4.11 do kernel, existe uma opção (-l) chamada Lazy unmount cujo objetivo é forçar a o processo de desmontagem removendo todas as referências tão logo ele não esteja mais ocupado.

Um exemplo:

# umount -l /media/smb

Executando um comando periodicamente e exibindo seu resultado

As vezes é necessário executarmos um comando a cada n segundos para acompanhar algum processo que esteja rodando ou para analisarmos algum valor como por exemplo o uso de memória.

Para resolver este problema, existe um comando específico para isso, o Watch. Com ele podemos definir o tempo de atualização da exibição com a opção -n, e destacar os valores diferentes entre as exibições com a opção -d. O resultado é exibido em tela cheia no console.

Por exemplo, digamos que precisaremos acompanhar o uso de memória com o comando free a cada 1 segundo destacando as diferenças:

# watch -n 1 -d free -h

Para sair do modo de execução, basta pressionar [Ctrl]+c

Lembrando que caso o objeto de análise seja um arquivo texto como por exemplo um arquivo de Logs, você pode utilizar o comando tail com a opção -f. Com ele toda linha adicionada ao arquivo em análise será prontamente exibida na tela.

Por exemplo, para acompanharmos os logs gerados pelo sistema, podemos usar o comando:

# tail -f /var/log/messages

Uma dica importante, em alguns casos, como nos logs gerados pelo serviço de e-mail ou durante um processo de compilação (quando muitas mensagens são apresentadas na tela) se você quiser “parar” o scroll das mensagens, basta pressionar [Ctrl]+s. Para voltar a exibição normal, pressione a seqüência [Ctrl]+q.

Ubuntu – Tocando MP3 e vendo videos em DivX

Por padrão o Gnome (que é a interface gráfica do Ubuntu) vem com o player de videos (e música) Totem. Por se tratar de uma distribuição GNU, o Totem vem sem os codecs “não livres” para mp3, DivX entre outros.

Existem básicamente duas bibliotecas para instalar os codecs no Totem: a GStreamer e o Xine. Após fazer alguns testes, percebi que o Xine possui um desempenho superior ao GStreamer (pelo menos na placa de video que teste – ATI Radeon 7500) na exibição de videos codificados com XviD.

Aqui é possível ver uma lista dos codecs de áudio e video suportados pelo Xine. O que me chamou a atenção, é que apenas o uso do Xine no totem, não me permitiu escutar arquivos mp3, sendo necessário então instalar o Gstreamer.

Sendo assim primeiro teremos que habilitar os repositórios Universe e Multiverse. Para isso, abra o menu Aplicações -> Adicionar Aplicações. Na janela que se abre, escolha o menu Configurações -> Repositórios e em seguida no botão Adicionar. Selecione os dois últimos checkboxes, Mantido pela comunidade (Universo) e Não Livres (Multiverso). Em seguida clique em Ok, Ok. Uma janela de Informações se abrirá solicitando que a lista de pacotes seja recarregada. Confirme-a.

Por fim para instalar os pacotes necessários, abra um terminal e execute o comando:
$ sudo apt-get install totem-xine gstreamer0.8-mad

Pronto, ao finalizar a instalação o sistema estará com suporte aos codecs do Xine e do GStreamer para execução de mp3 e videos em diversos formatos.

Uma dica, atualmente estou usando o player amaroK para escutar MP3. ?? muito bom, e por acaso hoje saiu no Dicas-l um post sobre ele..

História do Unix, Windows e Linguagens de programação

Pois bem… faz algum tempo que não publico nada por aqui e para (re)começar bem vou abordar uma questão de história.

Conversando com minha noiva sobre a história da computação, me lembrei de um site (na verdade um PDF) que possuia uma árvore genealógica do sistema Unics (que depois virou unix) desde sua origem em setembro de 1969. Como da última vez que o acessei este site ainda estávamos no Linux Kernel 2.4.5 (Junho 2001) não sabia se ele ainda existia e se ainda estava sendo atualizado. Pra variar utilizei o google e voialá! achei o bendito.

Fiquei feliz após análisa-lo e constatar que está extremamente atualizado, sendo que a última entrada é do Darwin 8.5 (junto com o MacOS X) de 15/02/2006. Não são todos os sistemas que se encontram neste gráfico, o próprio autor avisa que existem 96 “sabores” (que ele conhece) que não estão relacionados.

Ainda no mesmo site, achei dois outros links para árvores genealógicas do Windows e das linguagens de programação.
No caso das linguagens, são listadas apenas 50, porém existe uma listagem com 2500 linguagens em The Language List.
Segue abaixo os links:

Nos sites, encontram-se um preview do gráfico (para visualização no browser) e arquivos PDF e Postscript para impressão em A4, letter e Plotter dos diagrama. No caso do Unix existe também um índice das diversar versões com seus respectivos anos de “nascimento”.

Outros links interesantes que podem ser encontrados:

Recomendo que quem tem interesse em história da informática, dê uma navegada nesse site. Existem diversos outros links com muito mais informações.

A propósito falando de história, não sei quem havia me perguntado dia desses, qual era a primeira versão de kernel do Linux que “vi” o lançamento… era o 2.0.36 (em novembro de 1998). Nessa época eu usava o Minilinux, uma distro em 4 disquetes baseada em Slackware que era instalada sobre FAT32 e vinha até com X-Window (se alguém quiser, ainda tenho ela aqui :) ). Nesse ano também, foi quando fui para a fenasoft e adquiri da “Conectiva Internet Solutions” meu primeiro CD de instalação de Linux que era o “Conectiva Red Hat Linux versão Marumbi”. Foi a partir dai que me encantei com esse sistema e o utilizo até hoje, principalmente em servidores.

[update 08/05/06]

Achei outro link com um poster em pdf da O’Reilly com 50 linguagens de programação: The history of Programming Language.

[/update 08/05/06]

Dicas para configurar um servidor DNS reverso

Segue aqui algumas dicas para administradores que precisam configurar um DNS reverso utilizando CIDR (ou, IPs fornecidos pela empresa de telefônia para um link empresarial que possui autorização para efetuar reverso):

Exemplo:

No arquivo /etc/named.conf crie a entrada:

zone "32-39.130.215.200.in-addr.arpa" {
type master;
file "130.215.200.revzone";
};

Estas linhas indicam que o servidor DNS em questão será responsável pelos endereços IP 200.215.130.32 ? 200.215.130.39;

Já o arquivo /var/named/130.214.200.revzone ficará semelhante a:

$ORIGIN .
$TTL 3600 ; 1 hour
32-39.130.215.200.in-addr.arpa IN SOA gw.empresa.com.br. root.gw.empresa.com.br. (
051211 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
NS gw.empresa.com.br.
$ORIGIN 32-39.130.215.200.in-addr.arpa.
34 PTR gw.empresa.com.br.
35 PTR empresa.com.br.

Também é interessante resaltar que caso você estivesse repassando a autoridade de um CIDR para outro servidor a configuração ficaria semelhante a:


$ORIGIN .
$TTL 3600 ; 1 hour
130.215.200.in-addr.arpa IN SOA gw.empresa.com.br. root.gw.empresa.com.br. (
051211 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
NS gw.empresa.com.br.
$ORIGIN 130.215.200.in-addr.arpa.
32/29 NS dns.que.respondera

Referências:
RFC 2317 – Classless IN-ADDR.ARPA delegation

Backup do Banco de dados MySQL

Escrevi um programa em shell script para facilitar o backup do MySQL e decidi disponibiliza-lo para que outros administradores possam utilizar e coloborar com dicas ou sugestões. Sinceramente desta vez não pesquisei para saber se já existia algo pronto, simplesmente decidi fazer um programa que supra minhas necessidades de backup do MySQL (é, um tipo de backup para cada grupo de servidores :) ). Acredito que da forma que foi elaborado, este programa poderá auxiliar a várias pessoas com diferentes necessidades.

Algumas características:

  • Arquivos individuais para cada bancos de dados: Permite gerar um arquivo compactado (gzip) para cada BD do seu MySQL ou,
  • Arquivo único para todos os bancos de dados: Gera um único arquivo contendo o backup de todos os bancos de dados do MySQL;
  • Histórico de backup com limite máximo de versões anteriores: Ideal para casos onde é necessário restaurar o estado de um banco de dados de alguns dias atrás e o administrador não dispõe de nenhum software que gerencia o backup (Data Protector, Veritas, Tivoli, etc);
  • Arquivos com nomes únicos: Caso você utiliza algum software responsável pelo gerenciamento do backup, basta não optar pelo histórico e toda vez que for executado o script os arquivos serão sobrescritos;
  • Exclusão de Databases: Permite definir quais bancos de dados não serão copiados (funciona apenas quando for gerado arquivos individuaus para cada banco de dados;)

Um exemplo de linha do crontab para efetuar o backup ? 1:00 da manhã:
00 1 * * * /root/scripts/backupMysql.sh

DOWNLOAD:
backupMysql.sh (versão 1.0)

TODO:

  • Adicionar função para envio de e-mails;
  • Permitir a exclusão de databases mesmo quando optar-se pela geração de um único arquivo de backup;
  • Adapta-lo de forma a permitir backup do PostgreSQL;
  • Mais alguma coisa ?

Caso você tenha alguma dúvida, sugestão ou crítica, por favor compartilhe-a comigo utilizando ou o formulário de contato (na página de contatos no início desta página) ou utilizando os comentários abaixo.

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…