O que é um runlevel?
Runlevel é o nível de inicialização do sistema.
Este nível decide qual serviço vai inicializar ou não com o sistema. O
Debian e o
Red Hat utilizam o sistema System V, o
Slakware, o sistema
FreeBSD, o
Ubuntu está lançando o sistema Upstart, mas ainda utiliza o System V.
Após o carregamento do sistema, o kernel é carregado na memória, junto com os dispositivos que estão no
/etc/fstab e no
/etc/dev. Temos então, o carregamento do sistema. Este acontece no
/etc/init.d, onde ficam todos os *daemons que são
iniciados como sistema, todos os scripts responsáveis por parar ou iniciar um serviço estão no
/etc/init.d.
*
Daemon é um script que é utilizado para dar start, stop ou restart em um serviço.
Quando o sistema é ativado, o primeiro arquivo a ser lido é o
/etc/inittab, que armazena o runlevel do sistema na seguinte linha:
id:x:initdefault
Onde
x é o runlevel padrão. Por exemplo, no Debian o runlevel padrão é o 2 (dois). Para verificar o runlevel da sua distribuição,
você primeiro abre o arquivo com um editor de texto de sua escolha e depois localiza o ID que indica qual o runlevel padrão.
Vamos usar o
Vim como o editor de texto para o nosso exemplo:
# vim /etc/inittab
id:2:initdefault
Obs.: No Vim, para localizar algo dentro de um arquivo, digite
/ e entre com a string que deseja localizar.
Cuidado ao mudar o runlevel no arquivo
inittab, pois se colocarmos o runlevel 6 ou 1, que é o da reinicialização do sistema ou o de
finalização dos serviços e desligamento do sistema, o sistema não carrega e fica em looping.
As opções que podemos colocar no inittab são:
- 0 → Logo após iniciar o sistema o mesmo já finaliza todos os serviços e desliga.
- 1 → Temos ao iniciar o modo monousuário.
- 2-5 → Temos os modos multiusuários que podem ser tanto gráfico como no modo texto.
- 6 → Modo que reinicia a máquina.
Após ler o arquivo
/etc/inittab, o sistema sabe em qual runlevel deve iniciar, porém, não executa nenhum script de inicialização.
No nosso caso, que estamos usando o Debian como exemplo, ele vai carregar o runlevel 2, mas antes dele abrir o runlevel 2, ele necessita carregar
os serviços essenciais ao sistema que se encontram em
/etc/rS.d, ao abrir o arquivo como o vim (
# vim
/etc/rS.d), verificamos que temos dentro deste arquivo somente links que apontam para o arquivo
/etc/init.d, onde
realmente ficam os scripts de inicialização do sistema.
Após, ele carregar os arquivos essenciais ao sistema no
/etc/rS.d, então ele parte para abrir os scripts do runlevel 2, que se encontram
em
/etc/rc2.d.
Para visualizar, execute:
# cd /etc/rc2.d && ls –l
Verificamos que também são links, e que apontam para
/etc/init.d, repare que temos uma letra S e K no inicio de cada link, onde S
vem de start que significa daemon iniciado e K vem de killer, que significa daemon morto.
Os scripts também recebem um numero, por exemplo: S20cups - isto significa que o serviço do CUPS será o vigésimo a ser iniciado. Outro exemplo:
k95cups - isto significa que o serviço do CUPS será o nonagésimo quinto a ser finalizado.
Também podemos mudar de runlevel em nível de execução, primeiro verifique qual runlevel seu sistema está utilizando, executando o seguinte
comando:
# runlevel
Mudamos para o nível monousuário:
# init 1
Mudamos para o nível de reinicialização do sistema:
# init 6
Ao mudar o runlevel com
init, você estará fazendo isso em tempo de execução, logo, não teremos o problema dele entrar em looping.
Isto só ocorreria se fosse modificado no arquivo
/etc/inittab.
Para reiniciar um serviço no Debian, colocamos o PATH completo:
# /etc/init.d/ networking restart
Obs.: Poderíamos usar o start ou stop, que inicia ou para o serviço.
Acabamos de reiniciar a placa de rede, no
CentOS é um pouco diferente:
# service network restart
* Como no Debian, poderíamos usar o start ou stop, que inicia ou para o serviço.
Podemos colocar qualquer script para iniciar, vamos criar um script de exemplo e colocar na inicialização do Debian.
Criando um arquivo para carregar as configurações do firewall, neste momento, você deve estar dentro do diretório
/etc/init.d:
# touch firewall && vim firewall
Adicione:
modprobe iptables
echo >1 /proc/sys/net/ipv4/ip_forward
iptables –t nat –A POSROUTING –o eth1 –j MASQUERADE;
Salvando o arquivo e saindo:
:wq!
Colocando o script firewall para inicializar:
# update-rc.d firewall defaults
No CentOS, acredito que seja assim:
# cd /etc/init.d && chkconfig --add firewall
Ou então:
# mv ~/firewall /etc/init.d
Fui! Hoje eu saí com a mulher casada (Debian ). No próximo artigo, eu saio com a amante (Slackware).
Também publicado em:
runlevel « www.tripletech.com.br