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 roda o script
/etc/inittab
, o qual descreve como o sistema deve ser configurado em cada
Nível de Execução SysV init. Níveis de execução são um estado, ou modo, definidos pelos serviços listados no diretório SysV
/etc/rc.d/rc<x>
.d/
, onde
<x>
é o número do nível de execução. Para mais informações sobre níveis de execução SysV init, consulte a
Seção F.4, “Níveis de Execução SysV Init”.
A seguir, o comando init
configura 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
.
Note
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.
After the init
command has progressed through the appropriate rc
directory for the runlevel, the /etc/inittab
script forks an /sbin/mingetty
process for each virtual console (login prompt) allocated to the runlevel. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty
process opens communication pathways to tty devices[], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
In runlevel 5, the /etc/inittab
runs a script called /etc/X11/prefdm
. The prefdm
script executes the preferred X display manager[] — gdm
, kdm
, or xdm
, depending on the contents of the /etc/sysconfig/desktop
file.
Uma vez concluído o processo, o sistema opera em nível de execução 5 e exibe uma tela de autenticação.