O carregamento de um sistema GNU/Linux começa com o arranque de seu Boot Loader(Carregador de sistema).
O boot loader inicia o carregamento do kernel linux na memória RAM, logo depois que o kernel é carregado começa o processo de carregamento dos serviços para utilização do sistema. Esse primeiro processo é chamado init.
O /sbin/init é um script que irá carregar na memória os serviços contidos no seu nível de execução(runlevel) padrão do sistema. Existem dois estilos de init o System V e o BSD, este post tratará apenas do System V.
No estilo System V existem 7 níveis de iniciação conhecidos como runlevels.
Podemos personalizar os níveis, logo preste atenção e tome muito cuidado a usar uma distro diferente, veja um exemplo.:
No Debian
- Nível 0: Desliga o sistema;
- Nível 1 ou S: Mono usuário sendo root, carregando apenas os serviços essenciais básicos ao sistema;
- Nível 2 a 5: Multi usuário não fazendo distinção do modo texto ou gráfico;
- Nível 6: Reinicia o sistema;
No Red Hat
- Nível 0: Desliga o sistema;
- Nível 1: Mono usuário sendo root, carregando apenas os serviços essenciais básicos ao sistema;
- Nível 2: Multi usuário sem o compartilhamento de arquivos NFS;
- Nível 3: Multi usuário com rede e modo texto;
- Nível 4: Não usado, podendo ser personalizado;
- Nível 5: Multi usuário completo com parte gráfica;
- Nível 6: Reinicia;
O nível de execução(runlevel) padrão do sistema é guardado no arquivo /etc/inittab e definido na linha id:x:initdefault, onde “x” representa o número do runlevel definido.
No bash podemos descobrir o runlevel padrão com o comando.:
# runlevel
O que acontece se os níveis 0 ou 6 forem definidos como padrão? O nível 0(zero) sempre desligará o sistema e o 6 irá reiniciar.
No diretório /etc/init.d/ é guardado os scripts responsáveis por controlar os serviços, também conhecidos como daemons. Por exemplo, o /etc/init.d/cups é um shell script que inicia e interrompe o servidor de impressão.
Cada nível de execução(runlevel) tem seu próprio diretório contendo vários links simbólicos que apontam para os daemons dos serviços que serão carregados.
Diretório que guarda links para os daemons essenciais para o carregamento do sistema:
/etc/rcS.d
Diretório que guarda links para os daemons dos serviços que deveram ser carregados, ou melhor, mortos no runlevel 0:
/etc/rc0.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados no runlevel 1:
/etc/rc1.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados no runlevel 2:
/etc/rc2.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados no runlevel 3:
/etc/rc3.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados no runlevel 4:
/etc/rc4.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados no runlevel 5:
/etc/rc5.d/
Diretório que guarda links para os daemons dos serviços que deveram ser carregados, ou melhor, mortos no runlevel 6:
/etc/rc6.d/
Para evitar que o servidor de impressão seja carregado no runlevel 2, basta apenas remover seu link simbólico do diretório /etc/rc2.d/, o mesmo vale para os outros níveis.
Listando o conteúdo do /etc/rc2.d/ :
# ls -l /etc/rc2.d/
lrwxrwxrwx 1 root root 21 Jun 19 09:35 S05loadcpufreq -> ../init.d/loadcpufreq
lrwxrwxrwx 1 root root 15 Jun 19 09:11 S12acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root 14 Jun 19 09:34 S12dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root 20 Jun 19 09:34 S20nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root 14 Jun 19 09:38 S20cups -> ../init.d/cups
Conseguimos ver todos os links que apontam para os daemons dos serviços que serão carregados nesse nível, preste atenção esses arquivos são apenas links simbólicos que apontam para os verdadeiros daemons que estão no /etc/init.d/.
Podemos encontrar dois tipos de arquivos, os que serão carregados e os que não serão carregados mesmo estando no diretório do nível padrão, por exemplo:
SXXnome e KXXnome
- S – Quer dizer que vai ser carregado;
- K – Quer dizer que não vai ser carregado;
- XX – O número que especifica a ordem para carregar os serviços;
O arquivo S20cups será carregado, para o contrário basta renomeá-lo para K20cups.
Simples assim:
# mv /etc/rc2.d/S20cups /etc/rc2.d/K20cups
Então se quiser que o servidor de impressão seja carregado no runlevel 3, crie um link simbólico:
# ln -s /etc/init.d/cups /etc/rc3.d/S20cups
Listando o /etc/rc3.d/ para ver o resultado =)
# ls -l /etc/rc3.d/S20cups
lrwxrwxrwx 1 root root 16 Set 23 13:29 S20cups -> /etc/init.d/cups
Depois de carregado podemos manipular os serviços diretamente com seus daemons:
Parando o servidor de impressão
# /etc/init.d/cups stop
Iniciando o servidor de impressão
# /etc/init.d/cups start
Agora só testar com os outros serviços, boa sorte! =)
–
Coragem