Linux: Entendendo a configuração dos serviços

Linux: Entendendo a configuração dos serviços
Ao contrário do que pode parecer à primeira vista, no Linux é utilizado um sistema bastante simples para determinar quais componentes do sistema devem ser carregados durante o boot e em qual ordem.

Quando você liga o micro, o primeiro software que é carregado é o BIOS da placa-mãe, que faz a contagem da memória RAM, uma detecção rápida dos dispositivos instalados e por fim carrega o sistema operacional principal a partir do HD, CD-ROM, disquete, rede, ou o que quer que seja. Este procedimento inicial é chamado de POST (Power-on self test)

Depois de fazer seu trabalho, o BIOS carrega o sistema operacional, lendo o primeiro setor do disco rígido o famoso MBR, onde vai o gerenciador de boot.

Na verdade, no MBR mesmo vai apenas um bootstrap, um pequeno software que instrui o BIOS a carregar o executável do lilo ou grub em um ponto específico do HD. O MBR propriamente dito é muito pequeno, de modo que não é possível armazenar muita coisa diretamente nele.

O gerenciador de boot tem a função de carregar o Kernel e, a partir dele, todo o restante do sistema.

Inicialmente, o Kernel é um arquivo compactado e somente-leitura, encontrado dentro da pasta /boot do sistema (no Kurumin 7 é o “/boot/vmlinuz-2.6.18.1-slh-up-2”). Ele é descompactado em uma área reservada da memória RAM e roda a partir daí, aproveitando o fato de que a memória RAM é muito mais rápida que o HD.

Este executável principal do Kernel nunca é alterado durante o uso normal do sistema, ele muda apenas quando você recompila o Kernel manualmente ou instala uma nova versão.

Depois de carregado, a primeira coisa que o Kernel faz é montar a partição raiz, onde o sistema está instalado. Neste estágio ele carrega o init, o software que inicia o boot normal do sistema, lendo os scripts de inicialização e carregando os módulos e softwares especificados neles.

O arquivo de configuração do init é o “/etc/inittab“. Ele é geralmente o primeiro arquivo de configuração lido durante o boot. A principal tarefa dele é carregar os demais scripts de inicialização, usados para carregar os demais componentes do sistema e fazer todas as operações de checagem, necessárias durante o boot.

No “/etc/inittab” da maioria das distribuições derivadas do Debian, você verá a linha:

# Boot-time system configuration/initialization script.
si::sysinit:/etc/init.d/rcS
Esta linha executa o script “/etc/init.d/rcS”. Se você examiná-lo também, vai encontrar o seguinte:

for i in /etc/rcS.d/S??*
do

$i start
….
done
Os “…” indicam partes dos script que removi para deixar apenas as partes que interessam aqui. Estas linhas são um shell script, que vai executar os scripts dentro da pasta “/etc/rcS.d/“. Esta pasta contém scripts que devem ser executados sempre, a cada boot, e são responsáveis por etapas fundamentais do boot.

Alguns exemplos de scripts e programas executados nesta etapa são o “keymap.sh” (que carrega o mapa de teclas do teclado), “checkroot.sh” (que verifica a partição do sistema, de forma similar ao scandisk do Windows), o “modutils” (que carrega os módulos especificados no arquivo “/etc/modules”, de forma a ativar o suporte a vários componentes do micro), o “checkfs.sh” (que complementa a checkroot.sh, checando as demais partições do HD), o mountall.sh (que lê o arquivo /etc/fstab e monta as demais partições do HD) e o “networking”, que ativa a rede.

De acordo com a distribuição usada, são carregados neste ponto outros serviços, para ativar suporte a placas PCMCIA, placas ISA, ou outros tipos de hardware, ativar o suporte a compartilhamentos de rede e, assim por diante. É possível executar praticamente qualquer tipo de comando ou programa nesta etapa, justamente por isso os passos executados durante o boot mudam de distribuição para distribuição, de acordo com o que os desenvolvedores consideram mais adequado. A idéia aqui é apenas dar uma base, mostrando alguns passos essenciais que são sempre executados.

Depois desta rodada inicial, são executados os scripts correspondentes ao runlevel padrão do sistema, que é configurado no “/etc/inittab”, na linha:

# The default runlevel.
id:5:initdefault:
O número (5 no exemplo) indica o runlevel que será usado, que pode ser um número de 1 a 5. Cada runlevel corresponde a uma pasta, com um conjunto diferente de scripts de inicialização. É uma forma de ter vários “profiles”, para uso do sistema em diferentes situações.

Usando o runlevel 5, são carregados os scripts dentro da pasta “/etc/rc5.d/“, enquanto que, usando o runlevel 3, são carregados os scripts dentro da pasta “/etc/rc3.d/”. Na maioria das distribuições, a diferença entre o runlevel 3 e o 5 é que o 5 inclui o carregamento do modo gráfico, enquanto o 3 se limita a carregar os serviços essenciais do sistema. No Kurumin é usado o runlevel 5 por padrão.

Configurando e modificando os links dentro da pasta “/etc/rc5.d”, você pode desativar componentes do sistema (de forma a acelerar o boot, ou reduzir o uso de memória) e também carregar componentes adicionais.

Quando você instala o Samba por exemplo, é criado automaticamente um link para ele dentro da pasta, de forma que ele seja carregado durante o boot.

Vamos entender melhor como isso funciona:

Nas distribuições que seguem o padrão do Debian, os scripts que executáveis que iniciam os serviços de sistema ficam todos dentro da pasta “/etc/init.d/”. Para parar, iniciar ou reiniciar o serviço ssh, por exemplo, use os comandos:

# /etc/init.d/ssh start
# /etc/init.d/ssh stop
# /etc/init.d/ssh restart
No Kurumin, Mandriva e algumas outras distribuições, existe o comando service, que facilita um pouco as coisas, permitindo que, ao invés de ter de digitar o caminho completo, você possa controlar os serviços através dos comandos:

# service ssh start
# service ssh stop
# service ssh restart
Os scripts que estão na pasta “/etc/init.d/” servem para “chamar” os executáveis dos servidores. Eles apenas fazem as verificações necessárias e em seguida inicializam ou encerram os executáveis propriamente ditos, que em geral estão na pasta “/usr/bin/” ou “/usr/sbin/”.

A pasta “/etc/init.d/” contém scripts para quase todos os serviços que estão instalados no sistema. Quando você instala o Samba pelo apt-get, por exemplo, é criado o script “/etc/init.d/samba“, mesmo que ele não exista anteriormente.
img1
O que determina se o Samba será executado ou não durante o boot não é o script na pasta “/etc/init.d/”, mas sim um link simbólico criado dentro de uma das pastas de inicialização.

Por padrão, são executados primeiro os links que estão dentro da pasta “/etc/rcS.d/” e em seguida os que estiverem dentro da pasta “/etc/rc5.d/“.
img2
Os números antes dos nomes dos serviços dentro da pasta “/etc/rc5.d/” determinam a ordem em que eles serão executados. Você vai querer que o firewall seja sempre ativado antes do Samba por exemplo.

O “S” (start) indica que o serviço será inicializado no boot. A partir daí, o sistema vai inicializando um por vez, começando com os serviços com número mais baixo. Caso dois estejam com o mesmo número, eles são executados em ordem alfabética.

Para que um determinado serviço pare de ser inicializado automaticamente no boot, basta deletar a entrada dentro da pasta, como em:

# rm -f /etc/rc5.d/S20samba
Para que o serviço volte a ser inicializado você deve criar novamente o link, apontando para o script na pasta /etc/init.d, como em:

# cd /etc/rc5.d/
# ln -s ../init.d/samba S20samba
ou:
# ln -s ../init.d/ssh S21ssh
Esta é a forma “correta” de criar os links: acessando primeiro a pasta onde eles são criados e criando os links com as localizações relativas. Se estamos na pasta “/etc/rc5.d” e criamos o link apontando para “../init.d/samba”, significa que o sistema vai subir um nível de diretório (vai para o /etc) e em seguida acessa a pasta “init.d/”.

Você pode também utilizar update-rc.d, um pequeno utilitário do Debian, que automatiza este processo.

Para ativar um serviço, criando o link para ele dentro da pasta “/etc/rc5.d”, você usaria o comando:

# update-rc.d -f ssh defaults
Para desativá-lo, você usa:
# update-rc.d -f ssh remove
No Kurumin, você pode usar também o chkconfig (que também é encontrado no Mandriva e no Fedora), que tem a mesma função, mas usa uma sintaxe mais simples. Neste caso use:

# chkconfig ssh on

(ativa)

# chkconfig ssh off

(desativa)

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X