Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

F.2.4. O Programa /sbin/init

O programa /sbin/init (também chamado de init) coordena o resto do processo de inicialização e configura o ambiente para o usuário.
Quando o comando init inicia, ele torna-se o pai ou avô de todos os processos que iniciaram automaticamente no sistema. Primeiro, ele roda o script /etc/rc.d/rc.sysinit, o qual configura o caminho do ambiente, inicia a swap, verifica os sistemas de arquivos, e executa todos os outros passos necessários para a inicialização do sistema. Por exemplo, a maioria dos sistemas usam um relógio, e por isso o rc.sysinit lê o arquivo de configuração /etc/sysconfig/clock para inicializar o relógio do hardware. Outro exemplo é se houverem processos especiais em portas seriais que precisem ser inicializados, o rc.sysinit executa o arquivo /etc/rc.serial.
O comando init então processa o trabalho no diretório /etc/event.d o qual descreve como o sistema deve ser configurado em cada SysV init runlevel. Runlevels são um estado, ou modo, definido por serviços listados no diretório SysV /etc/rc.d/rc<x>.d/ onde <x> é o número do runlevel. Para mais informações sobre SysV init runlevels, consulte Seção F.4, “Níveis de Execução SysV Init”.
A seguir, o comando initconfigura a biblioteca de funções fonte para o sistema, /etc/rc.d/init.d/functions, a qual configura como iniciar, eliminar (kill), e determinar o PID de um programa.
O programa init inicia todos os processos de segundo plano tentando encontrar no diretório rc apropriado o nível de execução especificado como padrão em /etc/inittab. Os diretórios rc são numerados de forma a corresponder ao nível de execução que eles representam, Por exemplo, /etc/rc.d/rc5.d/ é o diretório para o nível de execução 5.
Ao inicializar em nível de execução 5, o programa init lê o diretório /etc/rc.d/rc5.d/ para determinar quais processos iniciar e parar.
Veja abaixo um exemplo de listagem do diretório /etc/rc.d/rc5.d/:
K05innd -> ../init.d/innd 
K05saslauthd -> ../init.d/saslauthd 
K10dc_server -> ../init.d/dc_server 
K10psacct -> ../init.d/psacct 
K10radiusd -> ../init.d/radiusd 
K12dc_client -> ../init.d/dc_client 
K12FreeWnn -> ../init.d/FreeWnn 
K12mailman -> ../init.d/mailman 
K12mysqld -> ../init.d/mysqld 
K15httpd -> ../init.d/httpd 
K20netdump-server -> ../init.d/netdump-server 
K20rstatd -> ../init.d/rstatd 
K20rusersd -> ../init.d/rusersd 
K20rwhod -> ../init.d/rwhod 
K24irda -> ../init.d/irda 
K25squid -> ../init.d/squid 
K28amd -> ../init.d/amd 
K30spamassassin -> ../init.d/spamassassin 
K34dhcrelay -> ../init.d/dhcrelay 
K34yppasswdd -> ../init.d/yppasswdd 
K35dhcpd -> ../init.d/dhcpd 
K35smb -> ../init.d/smb 
K35vncserver -> ../init.d/vncserver 
K36lisa -> ../init.d/lisa 
K45arpwatch -> ../init.d/arpwatch 
K45named -> ../init.d/named 
K46radvd -> ../init.d/radvd 
K50netdump -> ../init.d/netdump 
K50snmpd -> ../init.d/snmpd 
K50snmptrapd -> ../init.d/snmptrapd 
K50tux -> ../init.d/tux 
K50vsftpd -> ../init.d/vsftpd 
K54dovecot -> ../init.d/dovecot 
K61ldap -> ../init.d/ldap 
K65kadmin -> ../init.d/kadmin 
K65kprop -> ../init.d/kprop 
K65krb524 -> ../init.d/krb524 
K65krb5kdc -> ../init.d/krb5kdc 
K70aep1000 -> ../init.d/aep1000 
K70bcm5820 -> ../init.d/bcm5820 
K74ypserv -> ../init.d/ypserv 
K74ypxfrd -> ../init.d/ypxfrd 
K85mdmpd -> ../init.d/mdmpd 
K89netplugd -> ../init.d/netplugd 
K99microcode_ctl -> ../init.d/microcode_ctl 
S04readahead_early -> ../init.d/readahead_early 
S05kudzu -> ../init.d/kudzu 
S06cpuspeed -> ../init.d/cpuspeed 
S08ip6tables -> ../init.d/ip6tables 
S08iptables -> ../init.d/iptables 
S09isdn -> ../init.d/isdn 
S10network -> ../init.d/network 
S12syslog -> ../init.d/syslog 
S13irqbalance -> ../init.d/irqbalance 
S13portmap -> ../init.d/portmap 
S15mdmonitor -> ../init.d/mdmonitor 
S15zebra -> ../init.d/zebra 
S16bgpd -> ../init.d/bgpd 
S16ospf6d -> ../init.d/ospf6d 
S16ospfd -> ../init.d/ospfd 
S16ripd -> ../init.d/ripd 
S16ripngd -> ../init.d/ripngd 
S20random -> ../init.d/random 
S24pcmcia -> ../init.d/pcmcia 
S25netfs -> ../init.d/netfs 
S26apmd -> ../init.d/apmd 
S27ypbind -> ../init.d/ypbind 
S28autofs -> ../init.d/autofs 
S40smartd -> ../init.d/smartd 
S44acpid -> ../init.d/acpid 
S54hpoj -> ../init.d/hpoj 
S55cups -> ../init.d/cups 
S55sshd -> ../init.d/sshd 
S56rawdevices -> ../init.d/rawdevices 
S56xinetd -> ../init.d/xinetd 
S58ntpd -> ../init.d/ntpd 
S75postgresql -> ../init.d/postgresql 
S80sendmail -> ../init.d/sendmail 
S85gpm -> ../init.d/gpm 
S87iiim -> ../init.d/iiim 
S90canna -> ../init.d/canna 
S90crond -> ../init.d/crond 
S90xfs -> ../init.d/xfs 
S95atd -> ../init.d/atd 
S96readahead -> ../init.d/readahead 
S97messagebus -> ../init.d/messagebus 
S97rhnsd -> ../init.d/rhnsd 
S99local -> ../rc.local
De acordo com esta listagem, nenhum dos scripts que na verdade iniciam e param os serviços encontram-se no diretório /etc/rc.d/rc5.d/. Ao invés disso, todos os arquivos em /etc/rc.d/rc5.d/ são links simbólicos apontando para scripts localizados no diretório /etc/rc.d/init.d/. Links simbólicos são usados em cada um dos diretórios rc, e portanto os níveis de execução podem ser reconfigurados através da criação, modificação, e remoção dos links simbólicos sem afetar os scripts aos quais eles fazem referência.
O nome de cada link simbólico começa com um K ou um S. Os links K são processos que são eliminados naquele nível de execução, enquanto que aqueles começando com um S são iniciados.
O comando init primeiro pára todos os links simbólicos K no diretório através do comando /etc/rc.d/init.d/<comando> stop, onde <comando> é o processo a ser eliminado. Ele então inicia todos os links simbólicos S através do comando /etc/rc.d/init.d/<comando> start.

Nota

Após o sistema ter terminado de inicializar, é possível autenticar-se como root e executar estes mesmos scripts para iniciar e parar serviços. Por exemplo, o comando /etc/rc.d/init.d/httpd stop para o servidor de HTTP Apache.
A numeração dos links simbólicos indica a ordem de inicialização. Este número pode ser usado para alterar a ordem em que serviços são iniciados ou parados. Quanto menor o número, mais cedo a inicialização. Links simbólicos com o mesmo número são iniciados em ordem alfabética.

Nota

Uma das últimas coisas executadas pelo programa init é o arquivo /etc/rc.d/rc.local. Este arquivo é útil para a personalização do sistema. Consulte a Seção F.3, “Rodando Programas Adicionais Durante a Inicialização” para maiores informações sobre como usar o arquivo rc.local.
Depois do comando init ter avançado para o diretório rc apropriado ao nível de execução (runlevel), o Upstart divide um processo /sbin/mingettypara cada console virtual (janela do login) alocado ao nível de execução pela definição do trabalho no diretório /etc/event.d. Os Níveis de execução entre 2 e 5 possuem todos os seis consoles virtuais, enquanto o nível 1 (modo de usuário único) possui um, e níveis 0 e 6 não possuem nenhum. O processo /sbin/mingetty abre os caminhos de comunicação para os dispositivos do tty [16], define seus módulos, imprime a janela de login, aceita o nome de usuário e senha do usuário e inicia o processso de login.
No nível de execução 5, o Upstart executa um script chamado /etc/X11/prefdm. O script prefdm executa o gerenciador de exibição X preferido[17]gdm, kdm, ou xdm, dependendo do conteúdo do arquivo /etc/sysconfig/desktop.
Uma vez concluído o processo, o sistema opera em nível de execução 5 e exibe uma tela de autenticação.


[16] Consulte o Guia de Implementação do Red Hat Enterprise Linux para obter mais informações sobre os dispositivos tty.
[17] Consulte o Guia de Implementação do Red Hat Enterprise Linux para obter mais informações sobre os gerenciadores de exibição.