Infotech Notes

13/Setembro/2007

Kernel

Arquivado em: Uncategorized — Gustavo @ 1:33 am

Particularmente o processo de compilação é relativamente simples. O que pega mesmo é o que voce vai compilar (ou melhor, o que será compilado juntamente com a base e o que será compilado como módulo). O comentário é que, se voce usa algum recurso mais de uma vez em uma mesma semana, então compile o suporte a este recurso diretamente no kernel. Caso contrário, compile-o como módulo.

O sistema utilizado nestes passos foi um Debian 3.1 r5, com kernel padrão 2.4.27. O kernel compilado foi o 2.6.13, mas os passos para compilar qualquer outro kernel da série 2.6 é o mesmo.

Para iniciar, vá até o site http://www.kernel.org/pub/linux/kernel/v2.6/ e pegue o arquivo linux-2.6.13.5.tar.bz2.

Salve este arquivo em qualquer lugar no seu sistema. Realize a descompactação e untar do mesmo com o comando tar xvjf linux-2.6.13.5.tar.bz2 -C /usr/src

Vá até o diretório /usr/src e crie um link para linux com o comando ln -s linux-2.6.13.5 linux

Instale alguns aplicativos necessários para começarmos a configurar o seu kernel e depois compilá-lo. Vale lembrar que o compilador C deve estar instalado no seu sistema. Caso não esteja, basta adicionar a parte entre colchetes na linha abaixo.
# aptitude install libncurses5 libncurses5-dev initrd-tools [gcc g++]

Após o término da instalação destes aplicativos, vá para o diretório linux e edite o arquivo Makefile. Na variavel Extraversion, coloque alguma string que identifique que este kernel foi compilado por voce. Salve e saia.

Execute o comando make menuconfig, e escolha as opções para que sua máquina funcione corretamente. Uma dica é utilizar os comandos lsusb e lspci para listar o hardware que sua máquina tem atualmente. Caso voce não encontre estes comandos, basta instalar os pacotes pciutils e usbutils

Este passo de configuração deve serfeito com bastante calma, pois dependendo da sua configuração algumas configurações especiais precisarão existir, e isto depende exclusivamente do hardware que voce possui. Lembre-se de salvar o arquivo de configuração com o nome .config.

Depois de salvar a sua configuração, efetue uma cópia de segurança de seu arquivo de configuração, apenas para manter registro. Caso a sua compilação não funcione, ou a máquina não consiga bootar com o novo kernel, voce deve voltar à prancheta novamente e verificar a sua configuração.

Bom, pensando que a sua configuração está OK, vamos executar a compilação propiamente dita. Para isso, basta digitar make.

Após uns 20 a 30 minutos de trabalho de seu micro, o seu novo kernel já está compilado. Como na série 2.6 a compilação dos módulos já acontece juntamente com a compilação do kernel, basta copiarmos estes módulos compilados para seu local padrão, que deve ser /lib/modules/2.6.13.5_sua-string. Isto é feito com o comando make módules_install

Copie o arquivo bzImage para o diretório /boot. Minha sugestão é que voce renomeie este arquivo para algo mais esclarecedor, como por exemplo kernel-2.6.13.5_sua-string. Use o comando cp /usr/src/linux/arch/i386/boot/bzImage /boot/kernel-2.6.13.5_sua-string

Vamos criar o arquivo de inicialização. Para fazer isso, use o comando mkinitrd -o /boot/initrd.img-2.6.13.5_sua-string /lib/modules/2.6.13.5_sua-string.

Agora o último passo é configurar o boot loader, ou o GRUB como é mais conhecido. Edite o arquivo /boot/grub/menu.lst e vá até o final do arquivo. Lá voce deve encontrar linhas semelhantes a estas abaixo.

title                                                      Debian GNU/Linux, kernel 2.4.27
root                                                      (hd0,0)
kernel                                                   /vmlinuz-2.4.27 root=/dev/sda3 ro
initrd                                                    /initrd.img-2.4.27
savedefault

Faça uma cópia destas linhas e coloque no final do arquivo. De acordo com as informações acima, suas linhas devem se parecer com estas

title                                                       Debian GNU/Linux, kernel 2.6.13.5_sua-string
root                                                       (hd0,0)
kernel                                                    /vmlinuz-2.6.13.5_sua-string root=/dev/sda3 ro
initrd                                                     /initrd.img-2.6.13.5_sua-string
savedefault

Prontinho. Agora basta ajoelhar e torcer para que sua máquina suba com o novo kernel compilado por voce.

Módulos

Eu mencionei a compilação automática dos módulos quando o kernel foi compilado. Mas como é a utilização e/ou gerenciamento destes módulos compilados ?

A princípio, quando o kernel necessita de uma funcionalidade que é suprida pelo módulo, o próprio kernel se encarrega de carregá-lo, mas voce pode carregá-lo usando o comando modprobe.

Pense no iptables. Mesmo quando voce compila todo o iptables no kernel, algumas características são fornecidas somente através de módulos, como o Connection Track ou o Stablished/Related. Quando voce chama o iptables com estas características, dois módulos são carregados para que estas características estejam disponíveis: ipt_state e ip_conntrack.

Então, depois que estes módulos foram carregados, execute um lsmod para ver se eles estão realmente lá. É possível também ver quais módulos estão carregados como comando cat proc/modules

Para verificar quais módulos estão disponíveis (compilados) para serem usados, basta executar um modprobe -l. Todos os arquivos que terminam em .ko são os módulos compilados e estão à sua disposição.

O comando modinfo mostra diversas informações sobre o módulo, inclusive se ele depende de algum outro módulo. Existe um arquivo chamado modules.dep que relaciona todos os módulos e suas dependencias. Caso haja algum problema com a carga de algum módulo por causa de suas dependencias, isto pode ser por algum erro neste arquivo. A melhor coisa a fazer é remover este arquivo e refaze-lo. O arquivo encontra-se em /lib/modules/$(uname -r)/modules.dep e para reconstruí-lo, use o comando depmod.

Para remover um módulo da memória, utilize o comando rmmod ou modprobe -r

12/Setembro/2007

Segurança

Arquivado em: Linux — Gustavo @ 1:03 am

O acesso remoto é um ponto extremamente problemático em termos de segurança. De que adianta ter um sistema bem fechado, se todo o acesso é realizado através de telnet e ftp ? Nestes protocolos, a senha trafega em texto puro, e qualquer sniffer é capaz de ler o usuário e senha utilizado.

Levando isto em consideração, muitos administradores hoje sequer ativam os serviços de telnet em seus servidores, e se o ftp é usado, é feito completamente sem senha, para evitar problemas.

O substituto destes dois protocolos chama-se ssh (de Secure SHell).

A instalação do ssh é extremamente simples. Em um sistema debian, basta executar um apt-get install ssh.

A parte legal disto é que através de um software chamado WinSCP, voce consegue copiar de e para o servidor Linux/Unix qualquer arquivo, como se fosse uma janela do windows explorer. Arrastar e soltar. Já para realizar o acesso remoto, use o PuTTy.

Entre estações linux/unix, o comando para acesso remoto é ssh usuario@ip-remoto. Para copiar arquivos, use o scp – scp arq-local usuario@ip-remoto:arq-remoto ou scp usuario@ip-remoto:arq-remoto arq-local

Mas em ssh existe uma facilidade na autenticação, que é a utilização de chaves. As chaves permitem segurança na autenticação, uma vez que ela é composta de 2 partes – pública e privada. Depois que a chave é criada, a parte pública pode e deve ser divulgada entre os servidores que receberão a conexão. E a parte privada da chave deve ficar bem guardada e bem protegida. Quando a conexão ssh se realiza, a verificação entre estas duas chaves, se OK, garante o acesso sem a necessidade de utilização de senha.

O processo de geração das chaves é muito simples. Basta usar o comando ssh-keygen (definindo qual é o tipo de chave escolhida) e seguir as orientações. Feito isto, proteja a chave privada e divulgue a chave pública.

TCP Wrappers

A utilização desta facilidade demanda várias conversas acaloradas. Existem os que abominam o uso e os que não vivem sem. Eu ainda vou assistir duas pessoas destes grupos defendendo as suas posições. Vai ser divertido…

Basicamente a coisa funciona assim. Existem 2 arquivos. /etc/hosts.sllow e /etc/hosts.deny. O primeiro permite as conexões e o segundo nega as conexões.

Para exemplificar, vou criar um bloqueio para que ninguém acesse meu seridor através de ssh, exceto minha máquina. A sintaxe fica assim (/etc/hosts.deny)

sshd : ALL EXCEPT 192.168.0.15

Ou assim (/etc/hosts.allow)

sshd : 192.168.0.15

Há os que dizem que a segunda maneira é melhor que a primeira. Particularmente eu não gosto de usar, porque há maneiras mais elegantes de impedir este tipo de acesso. Mas há quem goste, então ele ainda existe e creio que deve ficar no ar mais um bom tempo…

11/Setembro/2007

Quotas

Arquivado em: Linux — Gustavo @ 12:16 am

O sistema de quotas sempre foi e sempre será importante em um sistema de servidor de arquivos. Afinal, de que adianta ter um monte de discos se algum usuário resolve consumir tudo com MP3 ou filminhos em MPEG ?

Basicamente, o sistema de quotas garante o uso racional do disco, e permite uma grande flexibilidade e rapidez para sua configuração e manutenção.

Alumas coisas devem ser observadas:
1. O kernel deve ter compilado o suporte a cotas (já incluso no kernel versão 2.4 e 2.6).
2. É possível habilitar as cotas para cada uma das partições, seja por grupo ou por usuário.
(boot em single mode)
3. Para adicionar as cotas nas partições, voce deve desmontar as partições de sua máquina. Isto exigirá um remount. Se for aplicado a cota na partição root “/”, deve ser executado em single mode (init 1).
4. Voce pode escolher qual será a versão de cota usada, mas saiba que a versão 2 é bem mais ágil em partições maiores. Se sua partição for pequena, prefira a versão 1.

Após a instalação do pacote quota, edite o arquivo /etc/fstab. No exemplo oabaixo, eu estou aplicando a cota na partição /dev/hda4, no diretório /home. Mas é possível também fazer a aplicação de quota para uma partição LVM

# cat /etc/fstab
/etc/fstab: static file system information
proc              /proc                    proc          defaults                                            0 0
/dev/hda2   /                             reiserfs    notail                                                 0 1
/dev/hda4   /home                   ext3         defaults,usrquota,grpquota                0 2
/dev/hda3   /mnt/win98           vfat           defaults,utf8,umask=007,gid=46     0 1
/dev/hda1   none                      swap        sw                                                       0 0

Veja como fica aplicada a quota em uma partição LVM
# cat /etc/fstab
/dev/VolGroup00/LogVol01 /home ext3 defaults,usrquota,grpquota 1 2

Após esta configuração, basta executar a remontagem da partição para que as configurações sejam adotadas. Use o comando

# mount -o remount /home

Verifique se as configurações foram carregadas corretamente. Com o comando mount, a partição com cota deve aparecer assim

# mount
/dev/hda2 on / type reiserfs (rw,errors=remount-ro)
/dev/hda3 on /mnt/win98 type vfat (rw)
/dev/hda4 on /home type ext3  (rw,usrquota,grpquota)

Criar os arquivos na cota na raiz da partição que receberá o sistema de cotas

# quotacheck -cug /home

Verifique então se o sistema está ativo com as cotas configuradas

# repquota -v -a

Agora que o sistema já está com o suporte a cotas ativo, vem a etapa de configuração de cotas para os usuários e grupos. Para isto, existem alguns utilitários muito bons e simples.

# repquota -a

*** Report for user quotas on device /dev/hda4
Block grace time: 7days; Inode grace time: 7days
Block limits                File limits
User             used    soft    hard  grace    used  soft  hard  grace
————————————————————————-
root      –     498612      0       0                5760     0     0
user1     –   177472      0       0                3486     0     0
user2     –              8      0       0                     2     0     0

Para editar a cota para que o usuario user1 use 100 MB de dados, com um limite máxixmo de 110 MB, ou 200 arquivos, com um limite máximo de 250 arquivos, altere as configurações confirme o modelo.

# edquota -u user1

Disk quotas for user user1 (uid 1188):
Filesystem                   blocks       soft       hard       inodes     soft     hard
/dev/hda4                      0         100000   110000        0         200     250

Para editar a cota para que o grupo group1 use 200 MB de dados, com um limite máxixmo de 220 MB, ou 400 arquivos, com um limite máximo de 500 arquivos, altere as configurações confirme o modelo.

# edquota -g user1

Disk quotas for group group1 (uid 5022):
Filesystem                   blocks       soft       hard       inodes     soft     hard
/dev/hda4                      0         200000   220000        0         400     500

Caso voce queira desativar a cota da partição, execute o comando quotaoff -v /home. Para ativá-la novamente, execute o comando quotaon -v /home

10/Setembro/2007

Procesos

Arquivado em: Linux — Gustavo @ 2:12 am

No Linux, quando voce executa algum comando ou quando o sistema executa alguma tarefa que foi programada anteriormente, um identificador de processo é atribuído à tarefa, e é através destes identificadores que o kernel gerencia as atividades e delega uma fatia de tempo ao processo em questão para que a tarefa seja cumprida.

Nenhum sistema operacional é efetivamente multitarefa, mas se esta distribuição de tempo for bem feita, melhor será o resultado e a perfirmance do sistema.

Para voce ter uma idéia dos processos que estão em execução em sua máquina, execute o comando
ps aux ou o comando top.

Eu não vou listar aqui a saida deste comando porque eu ainda estou brigando com o alinhamento. De qualquer maneira, observe a coluna STAT (ps aux) ou a coluna S (top). Ela mostra algumas letras. O significado destas letras são:

- D -> processo dormente
- R -> processo sendo executado
- S -> processo dormente, aguardando algo
- T -> processo parado por algum sinal de controle
- Z -> processo zumbi ou defunto
- processo de alta prioridade
- N -> processo de baixa prioridade
- L -> processo com páginas travadas em memória
- s -> processo iniciador da sessão
- + -> processo em foreground

Para facilitar o gerenciamento dos processos, o kernel trabalha com envio de sinais aos mesmos. Existem 64 sinais possíveis para serem enviados, mas nem todos são conhecidos, ou mesmo utilizados. Os mais conhecidos e utilizados são:

- 1 – SIGHUP -> reinicia o processo
- 9 – SIGKILL -> mata o processo
- 15 – SIGTERM -> pede para o processo se encerrar
- 18 – SIGCONT -> continua, se estiver parado
- 19 – SIGSTOP -> para o processo (igual ao ctrl-z)

No diretório /proc existem diversas informações sobre os processos que estão rodando na máquina. Vá ao diretório /proc e execute um ls -l. Aparecerão vários diretórios com nomes iguais aos números dos processos listados pelo comando ps aux. Nestes diretórios estão todas as informações de todos os processos que atualmente estão em execução, além de outras informações estatísticas sobre os mesmos

Uma das coisas mais interessantes que podem ser feitas com os processos é a re-definição de sua prioridade dentro do sistema. Imagine por exemplo que um processo está consumindo muito do poder de processamento de sua máquina, e que não há qualquer problema em diminuir a sua prioridade. Basta redefinir a prioridade do processo através com comando renice. Ou então voce pode matar o processo, e iniciá-lo com uma prioridade mais baixa utilizando o comando nice. Vale lembrar que a escala de prioridade em linux e unix vai de -20 (maior prioridade) a 19 (menor prioridade). Por padrão, a prioridade dos processos é zero.

Quando um processo é interrompido com um SIGSTOP (ou melhor, um Ctrl-Z), é possível verificar seu estado através do ps aux ou ps -ef. Além disso, se voce quiser colocar este processo em background, basta digitar bg.

Para traze-lo de volta para o primeiro plano, digite fgPara verificar quantos e quais processos foram colocados em background, execute o comando jobs.

# jobs
[1] Stopped vi teste1
[2]- Stopped vi teste2
[3]+ Stopped vi teste3

Caso haja mais de um processo em background e voce deseje colocar em foreground um processo específico, execute o comando fg (é o valor que está entre colchetes [ ])

8/Setembro/2007

Agendamentos de tarefas

Arquivado em: Linux — Gustavo @ 8:46 pm

Bom, agora que o horário da máquina está corretamente configurado, nós podemos realizar os agendamentos de tarefas com mais segurança, e sabendo que às 2 da manhã será realizada a tarefa das 2 da manhã e não a de outro horário.

Para isto, existem 2 ferramentas. Cron e AT. O cron é mais usado para tarefas repetitivas, como backups, execução de scripts de limpeza de disco, etc. Já o at é mais usado quando a tarefa será executada uma única vez, e dentro de poucos minutos.

Cron
O cron é extremamente útil e simples. O que mais confunde é a sua sintaxe. Para facilitar a edição dos agendamentos, use os comandos:
# export EDITOR=vi
# crontab -e

Isto vai abrir um arquivo de texto, ende voce pode adicionar e/ou editar a tarefa
A sintaxe para isto é:

30 18 * 1-10 1-6 root /root/backup geral
| | | | | | |
| | | | | | +-> comando a ser executado (path completo)
| | | | | +——> usuário que executará o comando
| | | | +———-> dia da semana
| | | +—————> mês do ano
| | +——————> dia do mês
| +——————–> hora
+————————> minuto

Para ver as tarefas agendadas
# crontab -l

Para remover os agendamentos, use o comando
# crontab -r

At
Antes de usar o AT, verifique se o horário de sua máquina está correto, porque senão o job será executado em outro momento. Para usar o at, deve-se seguir os passos
# at HH:mm MM/DD/YYYY
at> ls –color /etc
at> echo date
at> ^D

at: agenda e executa os jobs
atq: mostra a lista de jobs pendentes
atrm: remove os jobs agendados e ainda não executados

Horários

Arquivado em: Linux — Gustavo @ 7:03 pm

Com a grande utilização da Internet, e a consequente globalização da ecomonia, os horários tornam-se fundamentais. Como comprovar por exemplo que algum evento de segurança ocorreu se os horários dos logs não coincidem ?
Como ter certeza de que seu backup vai ser executado às 2 da manhã, se o horário da sua máquina está escorregando 1 minuto a cada dia ?

Foi para isso que o NTP (network time protocol) foi criado. Para que voce tenha alguém que te dê o horário preciso, e com uma ferramenta voce atualize o horário da sua máquina localmente.

Aqui no Brasil, que fornece o horário oficial brasileiro é o Observatório Nacional. O ON possui relógios atomicos de Césio, que tem altíssima precisão, e a partir destes relógios, é fornecido o horário oficial do Brasil.

Além disso, o ON também oferece gratuitamente um serviço (NTP Server) que permite que voce sincronize o relógio do seu computador.

Para iso, é necessário que voce tenha instalado em sua máquina um NTP Client. Este software vai até o servidor especificado (no caso do ON o IP é 200.20.186.75) e obtém informações obre o horário, corrigindo o horário de sua máquina, se necessário. Ele utiliza a porta UDP 123.

É óbvio que existem outros servidores de horário na internet e no Brasil. Basta procurar.

Como no Brasil é utilizado o Horário de Verão, vale lembrar que é precido informar ao computador quando o horário deve ser alterado, e se será adiantado ou atrasado. Nas distribuições Red Hat e Debian, isto pode ser feito através do utilitário tzselect. Para outros linux, use o tzconfig.

Segue abaixo um arquivo simples de configuração do NTP Client. Ele funciona com qualquer distribuição linux e unix.

# cat /etc/ntp.conf
server 200.144.121.33 # servidor de horário da RNP
server 127.127.1.0
fudge 127.127.1.0 stratum 10
driftfile /etc/ntp/drift
broadcastdelay 0.008
authenticate no

Para verificar se sua máquina está conectada e com o horário ajustado, basta executar o comando
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*titan.cais.rnp. 255.210.122.2 2 u 150 1024 377 10.680 -0.607 0.310
LOCAL(0) LOCAL(0) 10 l 53 64 377 0.000 0.000 0.001

Usuários e seus ambientes

Arquivado em: Linux — Gustavo @ 5:30 pm

Continuando o post que tratava da criação e administração das contas dos usuários, este post descreve como manipular o ambiente para o trabalho do usuário. Ele vai tratar das variáveis globais e locais, aliases, arquivos de configuração do amiente, layout de teclado e mouse.

Variáveis
Em um shell, a manipulação de variáveis é muito simples. Para definir uma variável, basta atribuir um valor à mesma e pronto. Por exemplo, para definir a variável TESTE, basta dar o seguinte comando
# TESTE=10
ou
# TESTE=”palavra”

No primeiro caso, a variável tem um valor numérico atribuído a ela. No segundo caso, o conteúdo da variável TESTE é “palavra” (sem as aspas duplas)

Para verificar se a variável existe e qual é o seu conteúdo, basta executar o comando
# echo$TESTE

As variáveis podem ser locais ou globais. As variáveis locais existem somente enquanto o usuário estiver conectado à máquina. Assim que ele sair, a variável deixa de existir. Já as variáveis globais existem enquanto a máquina estiver ligada.
Para ver quais são as variáveis globais definidas, basta executar o comando
# env

Para ver as variáveis locais, execute o comando
# set
Este comando mostra as variáveis locais e globais.

Para tornar uma variável Global, basta colocar o comando export antes da definiçção da variável, como a seguir
# export TESTE=10
ou
# export TESTE=”palavra”

Esta definição de variáveis é muito útil para ajudar a configurar o ambiente do usuário

Alias
Um alias nada mais é do que uma definição de comandos, agrupados em uma variável, que quando executada, atua como o comando lá configurado. Por exemplo, imagine que voce usa um comando semelhante a este
# tail -20 /var/log/auth.log
O resultado deste comando, em meu sistema, foi
Sep 8 09:22:31 linux sshd[32198]: Illegal user user from 88.14.88.231
Sep 8 09:22:39 linux sshd[32202]: Illegal user admin from 88.14.88.231
Sep 8 09:22:47 linux sshd[32204]: Illegal user test from 88.14.88.231
Sep 8 09:23:07 linux sshd[32214]: Illegal user danny from 88.14.88.231
Sep 8 09:23:11 linux sshd[32216]: Illegal user sharon from 88.14.88.231
Sep 8 09:33:12 linux sshd[32218]: fatal: Timeout before authentication for 88.14.88.231
Sep 8 10:17:01 linux CRON[32219]: (pam_unix) session opened for user root by (uid=0)
Sep 8 10:17:01 linux CRON[32219]: (pam_unix) session closed for user root
Sep 8 11:17:01 linux CRON[32221]: (pam_unix) session opened for user root by (uid=0)
Sep 8 11:17:01 linux CRON[32221]: (pam_unix) session closed for user root
Sep 8 12:17:01 linux CRON[32223]: (pam_unix) session opened for user root by (uid=0)
Sep 8 12:17:01 linux CRON[32223]: (pam_unix) session closed for user root
Sep 8 13:17:01 linux CRON[32225]: (pam_unix) session opened for user root by (uid=0)
Sep 8 13:17:01 linux CRON[32225]: (pam_unix) session closed for user root
Sep 8 14:17:01 linux CRON[32227]: (pam_unix) session opened for user root by (uid=0)
Sep 8 14:17:01 linux CRON[32227]: (pam_unix) session closed for user root
Sep 8 14:53:14 linux sshd[32229]: Accepted keyboard-interactive/pam for usuario from xxx.xxx.xxx.xxx port 58001 ssh2
Sep 8 14:53:14 linux sshd[32233]: (pam_unix) session opened for user usuario by (uid=0)
Sep 8 14:53:20 linux su[32239]: + pts/0 usuario:root
Sep 8 14:53:20 linux su[32239]: (pam_unix) session opened for user root by usuario(uid=1000)

Mas para poluir menos a saída, eu incrementei um pouco
# tail -20 /var/log/auth.log | grep Illegal | cut -d” ” -f 1,2,3,6-11
A saida foi
Sep 8 sshd[32198]: Illegal user user from 88.14.88.231
Sep 8 sshd[32202]: Illegal user admin from 88.14.88.231
Sep 8 sshd[32204]: Illegal user test from 88.14.88.231
Sep 8 sshd[32214]: Illegal user danny from 88.14.88.231
Sep 8 sshd[32216]: Illegal user sharon from 88.14.88.231

Ao invés de digitar tudo isto, voce pode criar um “comando” que execute esta instrução para voce. Para fazer isto, basta executar o comando
# alias tentativa=’cat auth.log | grep Illegal | cut -d” ” -f 1,2,3,6-11 | more’
e entao chamar pelo novo comando que acabou de ser definido
# tentativa
O resultado será o mesmo que foi apresentado pelo comando anterior

Para desfazer esta configuração, execute o comando
# unalias tentativa

Arquivos de login
Logo após o login de um usuário no sistema, seja ele root ou não, alguns arquivos são lidos para estabelecer algumas configurações padrão para os ambientes e usuários no sistema. Estes arquios são: /etc/profile; ~/.bash_profile; ~/.bash_login; ~/.bash_profile; ~/.profile ou ainda o ~/.bashrc

Nestes arquivos é que são colocadas as diversas configurações para o ambiente do usuário, como a definição da variável PATH e o umask. Caso voce faça algugma alteração no arquivo /etc/profile, voce pode testar as alterações com o comando
# source (ex. # source /etc/profile)

E no caso de um logout, se existir o arquivo ~/.bash_logout, o mesmo será executado.

Teclado e mouse
As configurações de teclado e mouse raramente são refeitas, uma vez que após a instalação, nunca mais o teclado e o mouse serão trocados. Mas caso isso aconteça, os comandos abaixo podem lhe salvar, sem precisar ficar adivinhando onde estã o pipe (|) ou mesmo o /.
# loadkeys -d us
ou
# loadkeys -d br-abnt2

Para verificar onde o seu mouse está conectado e se ele está funcionando, execute um destes comandos e movimente seu mouse
# cat /dev/psaux
# cat /dev/usb/mouse
# cat /dev/ttyS0

Dois outros arquivos bastante interessante és são o /etc/issue e o /etc/motd. Eles mostram mensagens antes e depois do login do usuário. Muito útil para dar algumas instruções importantes e que sempre devem ser lembradas. Aliás, existem alguns aplicativos que vivem trocando as mensagens do dia. Procure por fortunes linux no Google, e veja o que voce consegue.

7/Setembro/2007

Compactadores e empacotadores

Arquivado em: Linux — Gustavo @ 1:31 am

Quem nunca usou um compactador na vida que atire a primeira pedra !!! Puxando pela minha memória, eu me lembro que na época do MS-DOS 3.3, havia um compactador que criava um disco virtual, e com isso, voce praticamente duplicava seu HD. Então como eu tinha um HD de 120 MB, com esta ferramenta (eu não me lembro do nome dela) voce ficava com um disco de 240 MB.

Convenhamos, era MUUUUUUUIIIIIIIIITTTTTOOOOOOOOOO espaço, pois o DOS consumia 5 disquetes de 360 K (se fosse completamente instalado), o compilador Clipper 5 tinha 2 de 1,44 MB, o dBase III tinha uns 250 KB (sem as tranqueiras de help e outras baboseiras da Ashton-Tate) e o MS-Word 5 tinha 3 disquetes de 1,2 MB (desde estes tempos a MS já era exagerada com os aplicativos).

Foi nesta mesma época que coneçaram a surgir os compactadores. ARJ, LHA, PKzip/PKUnzip eram os conhecidos, e creio que os únicos disponíveis. Me lembro inclusive de um amigo meu ter conseguido o código foonte do LHA, e para meu desespero, não consegui compilá-lo no meu computador, pois minha máquina, apesar de ter muito disco, tinha pouca memória (2 MB) e eu não conseguia rodar o Compilador C da MS, que era pesado.

Atualmente, algumas pessoas acham que nada é mais importante que o WinZip. Com ele podemos colocar todo um diretório, seus subdiretórios e arquivos empacotados e compactados em um único grande arquivo conteiner. Porém, o grande problema do WinZip é que ele não mantém os metadados a salvo. No mundo Linux/Unix, estes metadados são fundamentais. E para garantir que eles retornem ao descompactar/desempacotar um arquivo, existe o tar (Tape ARchiver).

Basicamente o que o tar faz é colocar toda a mesma estrutura de diretórios, subdiretórios, arquivos, e toda a informação referente a estes objetos, em um único arquivo chamado arquivo conteiner. Este arquivo pode depois ser comprimido (através de gzip e/ou bzip2, por ex.), tornando este arquivo menor, facilitando a sua guarda (para backup) ou o transporte (através da internet).

Já os compactadores fazem basicamente a compressão dos arquivos, tornando-os menores e menos custosos para o seu transporte.

Os mais usados são GZIP/GUNZIP e BZIP2/BUNZIP2. Conforme a tabela abaixo, notam-se as diferenças em seus algoritmos de compressão

Arquivo de texto puro:
Tamanho original: 78.046.443 bytes (aprox. 75 MB)
————————-GZIP ——BZIP2
Compressão (seg.): ——1,01———132 (2 m 12 seg)
Descompressão (seg.): —0,82———1,7
Tamanho comprimido: –149.733——-6.107 bytes

Arquivo binário:
Tamanho original: 31.886.628 bytes (aprox. 30 MB)
————————-GZIP ———-BZIP2
Compressão (seg.): ——–4————–12
Descompressão (seg.): —0,6————-4,5
Tamanho comprimido: –14.857.548——10.602.750 bytes

Com estas tabelas pode-se verificar que cada um deles trata melhor um tipo de arquivo do que o outro, e que os tempos de compressão e descompressão podem variar muito.

As opções mais comuns para o TAR são:

# tar cvzf conteiner.tar.gz dir/arquivo
onde:
- c -> cria um novo arquivo
- v -> verbose mode
- z -> usa o gzip para comprimir
- f -> arquivo conteiner

# tar xvzf conteiner.tar.gz
onde:
- x -> extrai os arquivos do arquivo conteiner
- v -> verbose mode
- z -> usa o gzip para descomprimir
- f -> arquivo conteiner

# tar cvjf conteiner.tar.gz dir/arquivo
onde:
- c -> cria um novo arquivo
- v -> verbose mode
- j -> usa o bzip2 para comprimir
- f -> arquivo conteiner

# tar xvjf conteiner.tar.gz
onde:
- x -> extrai os arquivos do arquivo conteiner
- v -> verbose mode
- j -> usa o bunzip2 para descomprimir
- f -> arquivo conteiner

4/Setembro/2007

Instalação de programas

Arquivado em: Linux — Gustavo @ 1:28 am

Tenho certeza que todo mundo já instalou pelo menos uma dúzia de programas em Windows. O que seria de um sistema operacional se não pudéssemos adicionar os nossos utilitários ?

No meu tempo, bastava copiar o .exe de um disquete para outro e a instalação já estava feita. O máximo que podia acontecer era necessitar de algum arquivo de help ou de overlay.

Nos dias de hoje, o protocolo de instalação NNF (Next, Next, Finish) facilitou enormemente a nossa vida para a instalação de programas no Windows.

No linux, para variar, sempre existe mais de uma maneira de obter o mesmo resultado. Mesmo com a instalação de programas.

Para os que ainda estão acostumados com o NNF, o Linux permite a instalação através do RPM (Red Hat) e do DPKG/Aptitude (Debian).

Estes dois aplicativos são muito bons para instalar os utiliitários necessários ao seu trabalho.

Cada um destes utilitários – chamados de gerenciadores de pacotes – trabalha com sua própria base de dados para saber o que já está instalado, e quais arquivos e/ou programas são necessários quando se pretende instalar algum outro programa ou utiilitário.

No caso do RPM, esta base de dados se encontra em /var/lib/rpm e é mantida com um utilitário chamado BDB (Berkeley DataBase). Além disso, o RPM também tem um verificador criptográfico com GPG e MD5, e checagem de integridade dos arquivos instalados, coisa que o dpkg/aptitude não tem. Mas o aptitude tem um modo que funciona através de opções (TUI ou Text User Interface), o qual é muito interessante. Digite aptitude e de um enter para ver como é. E as informações sobre os pacotes instalados se encontram no arquivo texto /var/lib/dpkg/status.

A seguir estão dicas muito interessantes e úteis sobre os comandos mais usados para realizar a instalação/remoção/manutenção dos pacotes em RedHat e Debian.

Debian:
dpkg -l –verifica se o pacote está instalado
dpkg -i — instala o pacote
dpkg -L — verifica onde os arquivos deste pacote estão instalados
dpkg -r — desinstala o pacote (mas deixa os arquivos de configuração)
dpkg -P –
desinstala o pacote (e remove os arquivos de configuração)
aptitude update
atualiza a base de dados usada pelo aptitude/dpkg
aptitude search –procura pelo pacote na base de dados
aptitude install — instala o pacote e suas dependências (se houver)
aptitude remove
– desinstala o pacote (mas deixa os arquivos de configuração)
aptitude purge
desinstala o pacote (e remove os arquivos de configuração)

RedHat:
rpm -qa –mostra a lista de pacotes instalados no sistema
rpm -q –verifica se o pacote está instalado
rpm -qp –verifica o que será instalado junto com o pacote
rpm -qpi –verifica as informações do pacote não instalado
rpm -ql –verifica quais arquivosdo pacote foram instalados
rpm -qlp –verifica quais pacotes devem ser instalados junto com o pacote
rpm -ivh –test –percent –verifica se a instalação vai acontecer sem problemas
rpm -ivh –instala o pacote e verifica as dependências
rpm -ivh –nodeps — instala o pacote sem as dependências
rpm -Uvh –atualiza o pacote
rpm -e –test –verifica o que será feito ao remover o pacote
rpm -e –remove o pacote iinstalado
rpm -Va –verifica a integridade dos pacotes instalados

É claro que ainda existem diversas opções nestes dois (ou três) gerenciadores de pacotes, mas o essencial para 99% das vezes está acima.

Bom, mas nem só de rpm e aptitude vivem os linuxistas. Por várias vezes eu tive que instalar alguns utilitários em meu sistema e a única coisa disponível era o código fonte da aplicação. O que fazer ?

Na grande parte das vezes, estes códigos fonte vem empacotados e compactados em arquivos conteiners conhecidos como tarball. Estes arquivos nada mais são do que toda a estrutura de arquivos e diretórios necessários para realizar a compilação do utilitário em questão.

Minha dica neste caso é copiar o arquivo para o diretório /usr/local, e depois descompactá-lo e descomprimi-lo.

Os comandos mais usados para isto são tar xvzf pacote.tar.gz ou tar xvjf pacote.tar.bz2. Eu vou dar mais detalhes sobre os compactadores e empacotadores no próximo post.

Depois de descompactar/desempacotar o pacote, basta seguir as instruções contidas nos arquivos README e/ou INSTALL. Estes arquivos costumam aparecer na maioria esmagadora dos pacotes, mas deve existir algum que não tenha qualquer um destes arquivos. Mas como estes arquivos costumam ter instruções de compilação, é muito provável que eles estejam lá.

Os passos mais comuns para a compilação dos pacotes são
./configure
make
make install

Muito provavelmente, após a compilação, e caso nenhum erro tenha acontecido, seu novo aplicativo já estará pronto para ser usado.

O ./configure cria o arquivo de compilação que o comando make utilizará para compilar o seu aplicativo. Já o comando make install basicamente coloca os arquivos compilados em seus lugares adequados para que seja possível utilizar o novo aplicativo.

1/Setembro/2007

Redes 2

Arquivado em: Linux — Gustavo @ 1:17 am

Para completrar as informações do post de redes, seguem alguns comandos bem úteis para ajudar na configuração de rede.

- mii-tool: este utilitário ajuda a definir a velocidade e o duplex da interface. Eu costumo usar o comando mii-tool -F 100baseTx-FD eth0

- ethtool: Este comando está ficando mais conhecido por conta das interfaces em gigabit. O mii-tool não consegue manipular interfaces superiores a 100 Mbps, então o substituto natural é o ethtool. Ele suporta também 10Gbps. O comando usado é ethtool -s eth0 speed 1000 duplex full

- ifconfig -a: Mostra quais são as interfaces instaladas no seu computador. Para quem tem máquinas com várias interfaces, este comando ajuda a ver todas elas, mesmo que elas estejam em down

- /etc/network/interfaces: No Debian, este arquivo é o responsável pela configuração de rede do seu sistema. O padrão é:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.30
netmask 255.255.255..0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.0.2 192.168.0.3
dns-search nome.do.dominio

Já em um sistema red Hat, os arquivos de configuração de rede estão no diretório /etc/sysconfig/network-scripts/ e se chamam ifcfg-eth0, ifcfg-eth1, ifcfg-eth2, etc, Segue o conteúdo do arquivo ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.0 255
HWADDR=00:03:47:99:FA:BC
IPADDR=192.168.0.30
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
TYPE=Ethernet

Obviamente que a configuração de uma rede ainda pode envolver outras configurações e/ou outras informações. Mas o básico para funcionar pode ser visto aqui. Eu espero colocar aqui nos próximos dias os passos para a configuração de uma placa de rede wireless, mesmo que o linux não reconheça a placa.

Blog no WordPress.com.