Trabalhando com init no Debian
Por: Flavio Torres <flaviotorres@linuxmasters.info>
Este artigo irá tratar de scripts de inicialização e manipulação relacionados ao init, está agora dividido em 2 partes:
1) Ferramentas para manipular os inits.
- rcconf
- update-rc.d
- sysv-rc-conf
- sysvconfig
2) Ferramentas para trabalhar com eles.
- invoke-rc.d
- Na unha
- Script Service1 para Debian
- Script Service2 para Debian
- Script para criação e uso de um rc.local para o Debian
O que são níveis de execução?
Os Níveis de execução (run levels) são diferentes modos de funcionamento do GNU/Linux com programas, daemons e recursos específicos. Em geral, os sistemas GNU/Linux possuem sete níveis de execução numerados de 0 a 6. O daemon init é o primeiro programa executado no GNU/Linux (veja através do comando ps axu | grep init) e responsável pela carga de todos daemons de inicialização e configuração do sistema.
Existem dois estilos de init: o BSD e o SystemV. Cada um tem suas peculiaridades. Sistemas BSD, como o Slackware armazenam seus scripts /etc/rc.d, cada um deles responsável por uma das etapas da inicialização:
rc.S - Este é o script de Inicialização do Slackware;
rc.K - Carregado quando entramos no runlevel 1, para manutenção do sistema;
rc.M - Modo multiusuário, utilizado nos demais runlevels;
rc.4 - Aciona o login gráfico (runlevel 4);
rc.0 e rc.6 - Respectivamente desliga e reboota o computador.
rc.sysvinit - Utilizado quando existem scripts no padrão SystemV para serem iniciados.
O Debian, e sistemas Debian-Like ( Ubuntu, Kurumin ), como também sistemas RedHat-Like 'Como RedHat' ( Conectiva, RedHat, Fedora ) utilizam o sistema de init SystemV, onde os scripts de níveis de inicialização são armazenados em '/etc/init.d' (Listagem: 1) e gerenciados por links simbóbicos ( symlinks ) que são criados em '/etc/rc?.d', onde o ? representa o runlevel. (Listagem 2).
Listagem 1:
$ ls -la /etc/init.d/
-rwxr-xr-x 1 root root 560 2006-04-10 13:00 firewall
-rwxr-xr-x 1 root root 811 2004-09-10 12:00 halt
-rwxr-xr-x 1 root root 165 2004-09-10 12:00 hostname.sh
-rwxr-xr-x 1 root root 3344 2005-03-19 22:51 hotplug
-rwxr-xr-x 1 root root 359 2005-03-20 11:09 hotplug-net
-rwxr-xr-x 1 root root 3499 2005-03-22 11:21 hwclockfirst.sh
-rwxr-xr-x 1 root root 3638 2005-03-22 11:21 hwclock.sh
-rwxr-xr-x 1 root root 2240 2005-05-02 10:57 ifupdown
-rwxr-xr-x 1 root root 802 2005-04-04 10:33 ifupdown-clean
-rwxr-xr-x 1 root root 1764 2004-10-24 13:28 inetd
-rwxr-xr-x 1 root root 658 2005-04-10 19:35 initrd-tools.sh
-rwxr-xr-x 1 root root 2923 2005-02-04 17:30 keymap.sh
-rwxr-xr-x 1 root root 1346 2005-05-25 15:21 klogd
Listagem 2:
$ ls -la /etc/rc1.d/
drwxr-xr-x 2 root root 4096 2006-06-09 15:48 .
drwxr-xr-x 72 root root 4096 2006-08-04 18:08 ..
lrwxrwxrwx 1 root root 18 2005-09-05 16:33 K00firewall -> http://ivandroconradi.multiply.com/init.d/firewall
lrwxrwxrwx 1 root root 14 2005-08-30 08:31 K11cron -> http://ivandroconradi.multiply.com/init.d/cron
lrwxrwxrwx 1 root root 15 2005-08-30 09:01 K19samba -> http://ivandroconradi.multiply.com/init.d/samba
lrwxrwxrwx 1 root root 14 2005-09-02 09:50 K20dhcp -> http://ivandroconradi.multiply.com/init.d/dhcp
lrwxrwxrwx 1 root root 15 2005-08-30 08:31 K20exim4 -> http://ivandroconradi.multiply.com/init.d/exim4
lrwxrwxrwx 1 root root 15 2005-08-30 08:31 K20inetd -> http://ivandroconradi.multiply.com/init.d/inetd
lrwxrwxrwx 1 root root 13 2005-08-30 09:01 K20lpd -> http://ivandroconradi.multiply.com/init.d/lpd
lrwxrwxrwx 1 root root 17 2005-08-30 08:30 K20makedev -> http://ivandroconradi.multiply.com/init.d/makedev
lrwxrwxrwx 1 root root 15 2005-11-08 15:57 K20mysql -> http://ivandroconradi.multiply.com/init.d/mysql
lrwxrwxrwx 1 root root 14 2006-03-15 10:47 K20ntop -> http://ivandroconradi.multiply.com/init.d/ntop
lrwxrwxrwx 1 root root 17 2006-03-28 13:28 K20openvpn -> http://ivandroconradi.multiply.com/init.d/openvpn
lrwxrwxrwx 1 root root 17 2006-06-03 00:26 K20postfix -> http://ivandroconradi.multiply.com/init.d/postfix
lrwxrwxrwx 1 root root 19 2006-06-03 00:35 K20saslauthd -> http://ivandroconradi.multiply.com/init.d/saslauthd
lrwxrwxrwx 1 root root 13 2005-08-30 09:01 K20ssh -> http://ivandroconradi.multiply.com/init.d/ssh
lrwxrwxrwx 1 root root 17 2006-06-09 15:48 K20sysstat -> http://ivandroconradi.multiply.com/init.d/sysstat
lrwxrwxrwx 1 root root 17 2006-03-24 09:31 K20winbind -> http://ivandroconradi.multiply.com/init.d/winbind
lrwxrwxrwx 1 root root 15 2005-08-30 09:11 K30squid -> http://ivandroconradi.multiply.com/init.d/squid
lrwxrwxrwx 1 root root 17 2005-09-01 11:46 K50proftpd -> http://ivandroconradi.multiply.com/init.d/proftpd
lrwxrwxrwx 1 root root 20 2005-08-30 09:01 K79nfs-common -> http://ivandroconradi.multiply.com/init.d/nfs-common
lrwxrwxrwx 1 root root 27 2005-08-30 09:01 K80nfs-kernel-server -> http://ivandroconradi.multiply.com/init.d/nfs-kernel-server
lrwxrwxrwx 1 root root 17 2005-08-30 09:01 K81portmap -> http://ivandroconradi.multiply.com/init.d/portmap
lrwxrwxrwx 1 root root 15 2005-08-30 09:01 K85bind9 -> http://ivandroconradi.multiply.com/init.d/bind9
lrwxrwxrwx 1 root root 13 2005-08-30 08:31 K86ppp -> http://ivandroconradi.multiply.com/init.d/ppp
lrwxrwxrwx 1 root root 13 2005-08-30 08:31 K89atd -> http://ivandroconradi.multiply.com/init.d/atd
lrwxrwxrwx 1 root root 15 2005-08-30 08:31 K89klogd -> http://ivandroconradi.multiply.com/init.d/klogd
lrwxrwxrwx 1 root root 18 2005-08-30 08:31 K90sysklogd -> http://ivandroconradi.multiply.com/init.d/sysklogd
lrwxrwxrwx 1 root root 17 2005-08-30 09:01 K91apache2 -> http://ivandroconradi.multiply.com/init.d/apache2
lrwxrwxrwx 1 root root 16 2005-08-30 08:30 S20single -> http://ivandroconradi.multiply.com/init.d/single
Antes de entrar em qualquer nível de execução, todos os scripts iniciados com 'K' ( Killed ) são executados; esses scripts matam ( páram ) processos. Já os scripts iniciados com 'S' ( Started ) são executados; esses scripts iniciam processos. O número seguido de 'K' ou 'S' indica a ordem na qual o script é executado. Scripts de menor valor numérico são executados primeiro. Em nosso exemplo na Listagem 2, o primeiro processo a ser desativado é o firewall ( K00firewall )
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.
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/runlevelPara mudar para o nível de execução 2, digite ( com privilégios de superusuário ):# init 3. E confira a mudança digitando: runlevel. Você deverá ver este resultado:
N 2
# /sbin/runlevel
2 3
O nível de execução padrão em uma distribuição GNU/Linux é definido através do arquivo de configuração do /etc/inittab através da linha
id:2:initdefault:
NOTA: As distribuições RedHat-Like dispõem do arquivo rc.local localizado em /etc, que é um script usado para a administração local, onde novos daemons ( ou scripts pessoais ) devem ser adicionados, caso não deseje adicioná-lo em algum nível específico de inicialização.
E o que nível de inicialização significa?
Nível 0:
Interrompe a execução do sistema. Todos os programas e daemons são finalizados. É acionado pelo comando shutdown -h now.
Nível 1:
Neste nível os sistemas trabalham em modo monousuário, com um conjunto mínimo de processos ativos. O sistema de arquivos raiz (root) está montado em modo de leitura. Este nível de execução é normalmente utilizado quando a inicialização normal falha por alguma razão, e muito útil para executar a manutenção do sistema.
Nível 2:
Modo multiusuário (padrão da Debian)
Nível 3:
Modo multiusuário, todos os processos estão ativos.
Nível 4:
Modo multiusuário. Este nível não é utilizado na maior parte das distribuições.
Nível 5:
Modo multiusuário com login gráfico
Nível 6:
Reinicialização do sistema. Todos os programas e daemons são encerrados e o sistema é reiniciado. É acionado pelo comando shutdown -r e o pressionamento de CTRL+ALT+DEL.
Caso deseje adicionar novos serviços para iniciar junto com o boot, devemos adicionar o script em /etc/init.d/.
Assim sendo, para invocar um script temos: /etc/init.d/