Processo de inicialização
From debianfordummies.org
Autor Original: Nando
Conteúdo |
Níveis de execução
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.
Depois de completar o processo de inicialização, o init executa todos os scripts de inicialização em um diretório especificado pelo nível de execução padrão (este nível de execução é dado pela entrada para o id em /etc/inittab. Como a maioria dos Unices compatíveis com System V, o Linux possui 7 níveis de execução :
0 (parar o sistema)
1 (modo de usuário único)
2 até 5 (vários modos multiusuário)
6 (reinicia o sistema)
Sistemas Debian vêm com o valor id=2, o que indica que o nível de execução padrão será 2 quando o estado multiusuário for iniciado e que os scripts em /etc/rc2.d/ serão executados.
De fato, os scripts em quaisquer dos diretórios em /etc/rcN.d/ são apenas ligações simbólicas que apontam para scripts em /etc/init.d/. Porém, os nomes dos arquivos em cada um dos diretórios /etc/rcN.d/ são selecionados para indicar a maneira que os scripts em /etc/init.d/ serão executados. Especificamente, antes de entrar em qualquer nível de execução, todos os scripts iniciados com `K' são executados; esses scripts matam (param) serviços. Então todos os scripts iniciados com `S' são executados; esses scripts iniciam serviços. O número de dois dígitos seguido de `K' ou `S' indica a ordem na qual o script é executado. Scripts de menor valor numérico são executados primeiro.
Esse método funciona porque todos os scripts em /etc/init.d/ aceitam um argumento que pode ser "start" (iniciar), "stop" (parar), "reload" (recarregar), "restart" (reiniciar) ou "force-reload" (forçar-recarregar) e irão portanto cumprir a tarefa indicada pelo argumento. Esses scripts podem ser usados mesmo depois que um sistema tenha sido iniciado para controlar vários processos.
Por exemplo, com o argumento "reload" o comando
/etc/init.d/sendmail reload
Explicação: envia ao daemon do sendmail um sinal para reler seu arquivo de configuração.
Personalizando o processo de inicialização
O Debian não utiliza o diretório rc.local no estilo BSD para personalizar o processo de inicialização; ao invés disso ele fornece o seguinte mecanismo de personalização.
Suponha que um sistema precisa executar o script foo na inicialização da máquina ou ao entrar em um nível de execução (System V) em especifíco. O administrador do sistema deverá então :
1. Colocar o script foo dentro do diretório /etc/init.d/
cp foo /etc/init.d/
2. Executar o comando Debian update-rc.d com os argumentos apropriados.
update-rc.d argumentos
Para criar as ligações entre os diretórios (especificados na linha de comando) rc?.d e /etc/init.d/foo. Aqui, ? é um número de 0 a 6 que corresponde a um dos níveis de execução System V.
Exemplo:
update-rc.d foo defaults 19
3. Reiniciar o sistema.
shutdown -r now
O comando update-rc.d criará as ligações entre os arquivos nos diretórios rc?.d e o script em /etc/init.d/. Cada ligação iniciará com um `S' ou um `K', seguido por um número, seguido pelo nome do script. Quando o sistema entra em um nível de execução N, scripts que iniciam com `K' em /etc/rcN.d/ são executados com stop como seu argumento, seguido por aqueles começando com `S' em /etc/rcN.d com start como seu argumento.
Alguém poderia, por exemplo, fazer com que o script foo seja executado na inicialização do sistema colocando-o em /etc/init.d/ e instalando as ligações com o comando update-rc.d foo defaults 19. O argumento defaults se refere aos níveis de execução padrões, que são do nível 2 até o nível 5. O argumento 19 assegura que foo seja chamado antes de quaisquer scripts contendo números 20 ou superiores.
Mais sobre o comando update-rc.d
O que é?
Ferramenta de gerenciamento de scripts de inicialização.
Abaixo temos uma explicação detalhada de várias opções disponíveis com esse comando.
Para remover todos os links de um script, por exemplo faz-se:
update-rc.d -f nome remove
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.
Utilizando sysv-rc-conf
O que é?
Ferramente com interface gráfica para configuração do runlevel do SysV para o terminal.
Copie o script para o diretório /etc/init.d/
cp script /etc/init.d/
Torne o script executável
chmod +x script
Instale o aplicativo sysv-rc-conf, ou rcconf, recomendo o sysv-rc-conf.
aptitude install sysv-rc-conf
Execute o aplicativo sysv-rc-conf.
sysv-rc-conf
Será inciada a interface, nela você poderá selecionar os scripts que irão iniciar, incluindo o seu ou retirando outros que você não quer que inicie.
Para incluir o seu script, visualize ele na listagem da esquerda e marque com um [X] no runlevel 2. Para excluir, desmarque deixando a opção em branco [].
Obs: para selecionar use a tecla de espaço.
Utilizando rcconf
O que é?
É um _front-end_ para o `update-rc.d'.
O `rcconf' permite você controlar que serviços são iniciados quando o sistema inicia, mostrando um menu onde você pode escolher o comportamento do serviço.
`rcconf' obtém a lista de serviços de `/etc/init.d' e observa nos diretórios `/etc/rc?.d' para determinar se cada serviço está ligado ou não no boot. Se o número NN (de `/etc/rc?.d/NNname') não é 20 (padrão), `rcconf' salva o nome do serviço junto ao seu número em `/var/lib/rcconf/services' para que seja possível reestabelecer o serviço para sua configuração original.
Para modificar a lista de serviços, use
rcconf
e marque os serviços que devem iniciar durante o boot, ou desmarque aqueles que não são necessários.
Obs: Assim como o sysv-rc-conf usa a tecla de espaço para selecionar.
Fazendo tudo na unha
Copie o script para o diretório /etc/init.d/
cp script /etc/init.d/
Torne o script executável
chmod +x /etc/init.d/script
Entre no diretorio /etc/rc2.d
cd /etc/rc2.d/
Crie um link para o seu script
ln -s /etc/init.d/script /etc/rc2.d/S19script
Obs: Como foi explicado anteriormente os scripts que iniciam com `S' passam start como seu argumento, e o `19` assegura que o script seja chamado antes de quaisquer scripts contendo números 20 ou superiores.
Se você nao precisa que o script seja um dos primeiros a iniciar, ou melhor que ele seja inciado lá no final do boot, você pode coloca-lo como 99.
ln -s /etc/init.d/script /etc/rc2.d/S99script
Para retirar o script da inicialização, apenas remova o link, assim:
rm /etc/rc2.d/S99script
Obs: Os argumentos K e S devem, obrigatoriamente, estar em Caixa Alta (maiúscula).
Especificando o runlevel do sistema com o Grub
Uma opção muito versátil do GRUB é poder especificar o runlevel do sistema na entrada de configuração do mesmo. Para isso basta colocar o número do runlevel que deseja utilizar no final da opção kernel.
Exemplos:
Runlevel padrão (em branco)
title Debian GNU/Linux, kernel 2.6.8-2-386 root (hd0,0) kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro initrd /boot/initrd.img-2.6.8-2-386 savedefault boot
Modo single user
title Debian GNU/Linux, kernel 2.6.8-2-386 (recovery mode) root (hd0,0) kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro single initrd /boot/initrd.img-2.6.8-2-386
Runlevel 3
title Debian GNU/Linux, kernel 2.6.8-2-386 (runlevel 3) root (hd0,0) kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro 3 initrd /boot/initrd.img-2.6.8-2-386 boot
Runlevel 5
title Debian GNU/Linux, kernel 2.6.8-2-386 (runlevel 5) root (hd0,0) kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro 5 initrd /boot/initrd.img-2.6.8-2-386 boot
Copyright
(C) 2005 Fernandino Fernandes
Esse tutorial está licenciado sob os termos da FDL (Free Documentation License) publicada pela Free Software Foundation.
Referência e Fontes:
Debian Reference e Guia Prático para o Debian GNU/Linux
