O primeiro processo rodado pelo sistema após o boot do kernel chama-se init. Ele tem como tarefa, além de outras coisas, checar a integridade das partições e rodar os serviços da máquina.
Existem dois estilos de init: o BSD e o SYS V. Cada um tem suas peculiaridades. O Debian usa init SYS V. Os scripts são armazenados em /etc/init.d e links são criados em /etc/rc?.d, onde o ? representa o runlevel. Existe ainda o diretório /etc/rc.boot, rodado antes de todos os runlevels mas só durante o boot. Esse diretório já é obsoleto e não deve ser usado.
Os links que se encontram nos diretórios /etc/rc?.d estão no seguinte formato:
SNNnome KNNnome
Onde NN é um número qualquer. Os que começam com S serão iniciados e os que começam com K serão matados. O número, representado pelo NN define a ordem. Começa do menor e vai para o maior.
Todo script do /etc/init.d (e consequentemente dos /etc/rc?.d) suportam os argumentos "start", "stop" e "restart" que podem ser usados para iniciar, parar e reiniciar os serviços, respectivamente. Para reiniciar o servidor apache, por exemplo, executa-se:
# /etc/init.d/apache restart
Alguns dos scripts suportam também "reload" e/ou "force-reload". Chamar os scripts com --help lista os argumentos suportados.
O update-rc.d
é uma ferramenta de gerenciamento de scripts de
inicialização. Para remover todos os links de um script, por exemplo faz-se:
# update-rc.d -f remove nome
Onde nome é o nome do script em /etc/init.d. Isso é necessário para se criar uma configuração diferente da que foi feita anteriormente.
Se você quer reconfigurar um script de inicialização ou acaba de incluir um script seu em /etc/init.d e quer iniciá-lo, basta usar:
# update-rc.d nome start NN runlevel . (...)
Por exemplo: vamos imaginar que acaba de ser colocado o script maintaince.sh no /etc/init.d. Você quer que ele seja iniciado (argumento "start" passado) no runlevel de boot padrão (2) e fechado (argumento "stop") quando se desliga ou reinicia (runlevels 0 e 6) e quer que ele seja um dos últimos a ser iniciado/parado. Faz-se então:
# update-rc.d maintaince.sh start 97 2 . stop 97 0 . stop 97 6 .
Como se pode ver, as configurações são separadas por um ponto (.) e há um também no final da linha de comando. Para somente testar o que será feito adicione um "-n" depois do nome do comando.
Para facilitar as coisas, pode-se usar o update-rc.d com as configurações padrão. Ou seja: iniciar nos runlevels 2, 3, 4 e 5 e finalizar nos 0, 1 e 6. Basta usar:
# update-rc.d nome defaults
O update-rc.d assume a ordem de execução como 20, isso pode ser trocado passando o número logo após a palavra defaults. Para usar ordem de execução diferente para iniciar e desligar basta passar dois números após a palavra defaults -- o primeiro será a ordem de início e o segundo de finalização do script.
O esquema tradicional do SYS V para implementar os runlevels através de links nos diretórios /etc/rc?.d traz o problema de não conseguir fazer a inspeção da sua configuração de runlevels facilmente. Felizmente o Debian nos dá uma alternativa muito boa: file-rc.
Para instalá-lo, basta um
# apt-get install file-rc
Basicamente, ele substitui aqueles links intermináveis e de difícil manutenção por um arquivo único: /etc/runlevel.conf. Aqui está um segmento de um /etc/runlevel.conf típico:
#/etc/runlevel.conf # #Formato: #<ordem> <desligado> <ligado> <script> 05 - 0 /etc/init.d/halt 05 - 1 /etc/init.d/single 05 - 6 /etc/init.d/reboot 10 0,1,6 2,3,4,5 /etc/init.d/sysklogd 12 0,1,6 2,3,4,5 /etc/init.d/kerneld [..] 89 0,1,6 2,3,4,5 /etc/init.d/cron 99 - 2,3,4,5 /etc/init.d/rmnologin 99 0,1,6 2,3,4,5 /etc/init.d/xdm
A última coluna é o script que será executado. A primeira coluna é a ordem em que o script será executado no boot. Isso é equivalente ao NN dos links SNNnome e KNNnome vistos acima. A segunda coluna é uma lista separada por vírgulas dos runlevels em que o script será morto (equivalente ao K dos links KNNnome). A terceira coluna é o mesmo da segunda, mas para os runlevels em que o script será executado (equivalente ao S dos links SNNnome).
Dessa forma, verifique a linha com o número 10:
10 0,1,6 2,3,4,5 /etc/init.d/sysklogd
Isso significa que o script /etc/init.d/sysklogd será executado nos runlevels 2, 3, 4 e 5, e será morto nos runlevels 0, 1 e 6. Além disso, pelo número de ordem podemos dizer que ele será avaliado (para execução ou morte) imediatamente antes do script /etc/init.d/kerneld e imediatamente depois de /etc/init.d/reboot.
Como último exemplo, verifique a linha número 99:
99 - 2,3,4,5 /etc/init.d/rmnologin
Isso significa que o script /etc/init.d/rmnologin não será morto nunca naquele número de ordem (é isso que significa o "-"), e será executado nos runlevels 2, 3, 4 e 5. Se o hífen for utilizado na terceira coluna, isso significa que o script nunca será executado naquele número de ordem.
Adicionalmente, um programa update-rc.d é fornecido no pacote para que a administração do boot tipo SYS V seja feita da mesma forma (veja a seção anterior), muito embora eu duvide que, depois de se familiarizar com o /etc/runlevel.conf, você ainda vai usar o update-rc.d.
kov@debian.org