Menu Principal

segunda-feira, 27 de fevereiro de 2012

rc?.d


O que determina se cada serviço vai ser ou não ativado durante o boot, não é o fato de estar ou não instalado, mas sim, a presença de um link simbólico criado dentro de uma das pastas de inicialização do sistema. Por padrão, são executados primeiro os links que estão dentro da pasta "/etc/rcS.d/" (que inclui os serviços essenciais, executados logo no início do boot) e, em seguida, os links dentro da pasta "/etc/rc5.d/", que inclui os demais serviços.
O número (5 no exemplo) indica o runlevel que será usado, que pode ser um valor de 1 a 5. Cada runlevel corresponde a uma pasta, com um conjunto diferente de scripts de inicialização. Esta foi uma forma encontrada pelas distribuições para ter vários "profiles", que podem ser usados de acordo com a situação.
A configuração mais comum é usar o runlevel 1 como um modo de recuperação, no qual apenas os serviços essenciais para concluir o boot são carregados, sem ambiente gráfico e sem suporte a rede. Hoje em dia, o runlevel 1 é pouco usado, pois é mais fácil corrigir problemas dando boot com um live-CD e resolvendo os problemas através dele, mas a possibilidade continua disponível.
Em seguida temos o runlevel 3, onde quase todos os serviços são carregados, com exceção do ambiente gráfico (este modo é muito usado em servidores). Finalmente, temos o runlevel 5, que corresponde ao modo "normal", onde o ambiente gráfico é carregado, junto com todos os outros serviços. Como em outros casos, existem variações; o Slackware, por exemplo, utiliza o runlevel 4 para carregamento do ambiente gráfico, enquanto o Ubuntu usa um sistema completamente diferente.
Usando o runlevel 5, são carregados os scripts colocados dentro da pasta "/etc/rc5.d/", enquanto que, usando o runlevel 3, são carregados os scripts dentro da pasta "/etc/rc3.d/". Nada impede que você modifique a organização dos arquivos manualmente, de forma a fazer o X carregar também no runlevel 3, ou qualquer outra coisa que quiser. São apenas pastas com scripts e links simbólicos e não uma caixa preta.
Se você quiser ver a lista completa, pode dar uma olhada no conteúdo da pasta /etc/rc3.d/

ls -l /etc/rc3.d/

Cada nível de execução é controlado através de links simbólicos existentes nos seis diretórios (/etc/rc.d/rc1.d até /etc/rc.d/rc6.d). Examinemos o conteúdo do diretório /etc/rc1.d:
# ls -l
lrwxrwxrwx 1 root  root 19 Mar 22 21:02 K00linuxconf -> ../init.d/linuxconf
lrwxrwxrwx 1 root  root 18 Mar 22 20:54 K05keytable -> ../init.d/keytable
lrwxrwxrwx 1 root  root 13 Mar 22 20:59 K10xfs -> ../init.d/xfs
lrwxrwxrwx 1 root  root 13 Mar 22 20:58 K15gpm -> ../init.d/gpm
lrwxrwxrwx 1 root  root 15 Mar 22 20:53 K15httpd -> ../init.d/httpd
lrwxrwxrwx 1 root  root 18 Mar 22 21:05 K30sendmail -> ../init.d/sendmail
lrwxrwxrwx 1 root  root 14 Mar 22 21:03 K50inet -> ../init.d/inet
lrwxrwxrwx 1 root  root 13 Mar 22 20:53 K60atd -> ../init.d/atd
lrwxrwxrwx 1 root  root 15 Mar 22 21:06 K60crond -> ../init.d/crond
lrwxrwxrwx 1 root  root 13 Mar 22 21:02 K60lpd -> ../init.d/lpd
lrwxrwxrwx 1 root  root 15 Mar 22 20:59 K75netfs -> ../init.d/netfs
lrwxrwxrwx 1 root  root 17 Mar 22 21:05 K89portmap -> ../init.d/portmap
lrwxrwxrwx 1 root  root 17 Mar 22 20:59 K90network -> ../init.d/network
lrwxrwxrwx 1 root  root 16 Mar 22 21:06 K99syslog -> ../init.d/syslog
lrwxrwxrwx 1 root  root 16 Mar 22 20:59 S00single -> ../init.d/single
Como se pode ver, todo o conteúdo do diretório /etc/rc1.d consiste de links simbólicos apontando para scripts dentro do diretório /etc/rc.d/init.d. A primeira letra dos nomes dos links simbólicos pode ser ou "S" ou "K", indicando se o processo para o qual aponta deve ser ativado (Started) ou desativado (Killed). O número que se segue a esta letra indica a ordem em que os processos devem ser encerrados ou ativados. Em nosso exemplo o primeiro processo a ser desativado é o linuxconf. O primeiro a ser ativado, após terem sido encerrados todos os demais processos, é o script single.
Cada um dos scripts residentes no diretório /etc/rc.d/init.d aceita geralmente três parâmetros: start, stop, restart. Estes parâmetros indicam, respectivamente, a ativação, desativação e desativação seguida de ativação do processo.
Para determinar o nível de execução em que seu sistema está funcionando, utilize o comando /sbin/runlevel. Este comando irá consultar o arquivo /var/run/utmp para determinar o estado atual e o anterior. Caso o estado anterior não possa ser determinado é exibida a letra "N" em seu lugar:
# /sbin/runlevel
N 3
 
Alteração dos Níveis de Execução
Os níveis de execução podem ser mudados pelo superusuário com o sistema em funcionamento. Sempre que é alterado um nível de execução são comparados, nos dois níveis, os processos que devem ser ativados e quais devem ser desativados. O processo init, que é processo pai de todos os demais (PID 1), compara a lista dos processos que devem ser encerrados no diretório indicativo do nível de execução atual com a lista dos processos que devem ser ativados no nível de execução de destino. De posse desta informação o processo init determinará quais processos devem ser ativados ou desativados.
Para reiniciar o sistema basta executar o comando
init 6 Veja a lista dos links em /etc/rc.d/rc6.d:
K00linuxconf K05keytable K10xfs K15gpm K15httpd K30sendmail K50inet K60atd K60crond K60lpd K75netfs K80random K89portmap K90killall K90network K99syslog S00reboot Como se pode ver, a maioria dos links inicia-se com a letra "K", indicando que os processos serão desativados. Apenas um link inicia-se por "S", S00reboot, que aponta para o script /etc/init.d/halt.
Similarmente, para colocar o sistema em modo monousuário
init 1 Nível de Execução Padrão
O nível em que o sistema irá funcionar é indicado pela entrada
id:3:initdefault: do arquivo /etc/inittab. Neste sistema o nível padrão de execução é 3. Para alterar este nível de execução basta alterar o número "3" para o valor desejado. Nunca altere este valor para "0" ou "6", que indicam, respectivamente, o sistema parado ou em modo de encerramento.
Definição ou Remoção de Processos Residentes
Para desativar um serviço de um determinado nível de execução basta remover o link simbólico do diretório apropriado. Por exemplo, para desativar o serviço httpd, do nível de execução 3, basta remover o link /etc/rc.d/rc3.d/S85httpd do diretório /etc/rc.d/rc3.d.
Similarmente, para inserir um novo serviço, basta criar um link no diretório padrão de execução, apontando para o script correspondente em /etc/rc.d/init.d:
# cd /etc/rc.d/rc3.d # ln -s /etc/rc.d/init.d S99local Este script realmente existe e é normalmente utilizado para inserir os serviços locais. Pela numeração (99), este script sempre será o último a ser ativado.
Importante, certifique-se de escolher uma numeração que posicione a ativação do script na ordem correta. Se o serviço é dependente do funcionamento da rede ele deve necessariamente ser ativado após estes serviços estarem ativos.
Utilitários para Configuração dos Níveis de Execução
Até agora abordamos a configuração manual dos scripts de inicialização. Existem entretanto diversos utilitários para realizar este este trabalho.
  • chkconfig
    Utilitário para configuração dos níveis de execução invocado a partir da linha de comandos
  • ksysv
    Utilitário gráfico que permite a configuração dos níveis de execução e ativação e desativação de processos individuais
  • linuxconf
    Ferramenta genérica de configuração que permite o gerenciamento dos níveis de execução
A forma mais segura de se lidar com esta configuração certamente começa com o entendimento perfeito de seu funcionamento. As interfaces gráficas podem obscurecer o significado real do que se está fazendo e conduzir a uma configuração indesejável. Em qualquer situação, realizando-se o trabalho manualmente ou através de utilitários, recomendamos o backup de todos os arquivos envolvidos para poder retornar à uma situação estável em caso de problemas.
Para lidar com a ativação e desativação de processos residentes, algo que frequentemente precisamos fazer sempre que alteramos a configuração de um serviço, precisamos realizar os seguintes passos:
# cd /etc/rc.d/init.d
# httpd restart
Em nosso exemplo nos dirigimos ao diretório onde ficam todos os scripts de ativação de processos e invocamos o script httpd com o parâmetro "restart".
Um artifício engenhoso para realizar esta tarefa nos é fornecido, através de um alias, em sistemas Conectiva Linux. Este alias, disponível no ambiente do usuário root, chama-se cds:
alias cds='cd /etc/rc.d/init.d && ls'
Como podemos ver, o alias realiza dois passos: a mudança para o diretório /etc/rc.d/init.d e a listagem de seu conteúdo. Desta forma podemos visualizar o nome de todos os scripts disponíveis, facilitando a invocação do script apropriado. Simples, mas extremamente útil.
 

Nenhum comentário:

Postar um comentário