Вы находитесь на странице: 1из 10

7

O processo init
O processo init o primeiro programa executado pelo kernel de qualquer sistema operacional Linux/Unix na sua inicializao. Neste captulo sero mostradas as diferenas de inicializao que existem entre as diversas distribuies Linux/Unix e como podemos personalizar a inicializao de um sistema Linux.

O processo init
No momento em que o computador ligado ou reinicializado (boot), o BIOS procura no primeiro setor do disco (master boot record) selecionado para carga do sistema operacional (que pode ser um disco rgido, um disquete, um CD-ROM, um ZIP-DRIVE ou um LS-120, e isto definido no SETUP) um programa para executar, que ser o carregador do sistema operacional (boot loader). O LILO e o GRUB so os programas de carga de sistema operacional mais comuns no Linux. Eles permitem selecionar qual partio ser utilizada para carga do sistema operacional, possibilitando assim a escolha de mltiplos sistemas operacionais, ou mesmo verses diferentes do kernel do Linux, ou configuraes dos discos. Posteriormente, no Captulo 19 Gerenciamento do kernel do Linux, veremos como configurar e personalizar o LILO e o GRUB de acordo com as nossas necessidades. Depois de carregado na memria, o kernel do Linux, normalmente compactado, descompactado antes de iniciar a sua execuo (isso feito por meio de um pequeno programa colocado no incio do arquivo do kernel do Linux). Logo em seguida, exibida uma srie de mensagens enviadas pelo kernel, durante a deteco e configurao do hardware existente no computador. Depois de concluir a deteco e configurao do hardware, o kernel monta o root filesystem (o diretrio /) a partir de um parmetro fornecido ao LILO, pelo seu arquivo de configurao, /etc/lilo.conf, ou ao GRUB, pelo seu arquivo de inicializao /boot/grub/menu.lst, e executa o processo init, que o pai de todos os processos, carregando o programa /sbin/init. Todos os outros processos so denominados como sendo filhos deste e so monitorados pelo init. Este o nico processo que no pode ser abortado. Existem dois estilos de inicializao para os sistemas operacionais Linux/Unix: SysV init e BSD init. A maioria das distribuies Linux utiliza inicializao estilo SysV init em virtude do maior nmero de recursos e da maior flexibilidade do que o BSD init.

99

Linux Guia do Administrador do Sistema

SysV init
Na inicializao SysV init, o processo init troca o estado do kernel para multitarefa e l o arquivo /etc/inittab. Esse arquivo define em que nvel de execuo (runlevel) o Linux inicializar a seqncia de shell scripts que sero executados para inicializar todos os servidores e o programa mingetty, que configura os terminais e viabiliza o login. Os nveis de execuo definem como o sistema operacional inicializar e subdividem-se de 0 a 6, s e S. Os shell scripts (ou programas) de inicializao esto definidos em /etc/inittab, com o seguinte formato:
[id]:[nveis_de_execuo]:[ao]:[processo]

Onde o id uma seqncia de 1 a 4 caracteres para nomear esta linha; os nveis de execuo so um ou mais dos valores que falamos anteriormente; a ao um dos valores: respawn, wait, once, boot, bootwait, off, ondemand, initdefault, sysinit, powerwait, powerfail, powerokwait, ctrlaltdel, kbrequest; e por ltimo, processo o programa a ser executado. Nvel de execuo
0 1 2 3 4 5 6 S ou s

Red Hat, Conectiva


halt Monousurio Multiusurio, sem NFS (Veja o Captulo 34 Congurando um servidor de NFS) Multiusurio com NFS Reservado X11 Reboot No usado diretamente, mas sim para programas que so executados durante o incio do nvel 1.

Os scripts de inicializao do Linux esto localizados no diretrio /etc/rc.d (ou /etc em outras distribuies como a Debian). Nesse diretrio so encontrados os scripts de inicializao: rc.sysinit, rc, rc.serial e rc.local e os diretrios: init.d, rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d e rc6.d. O diretrio init.d contm vrios scripts de inicializao; j os diretrios rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d e rc6.d contm links simblicos para os scripts de inicializao existentes no diretrio init.d. Cada script do diretrio /etc/rc.d/init.d escrito para aceitar argumentos como start, stop, restart, status e pode ser executado manualmente, se necessrio. Por exemplo, para inicializar, parar e reinicializar o servidor httpd, digita-se:
# /etc/rc.d/init.d/httpd # /etc/rc.d/init.d/httpd # /etc/rc.d/init.d/httpd start stop restart

Exemplo do arquivo /etc/inittab:


# # # # # # # # /etc/inittab inittab This le describes how the INIT process should set up the system in a certain run-level. Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org> Modied for RHS Linux by Marc Ewing and Donnie Barnes

Author:

Default runlevel. The runlevels used by RHS are:

100

Captulo 7 O processo init


# 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc l1:1:wait:/etc/rc.d/rc l2:2:wait:/etc/rc.d/rc l3:3:wait:/etc/rc.d/rc l4:4:wait:/etc/rc.d/rc l5:5:wait:/etc/rc.d/rc l6:6:wait:/etc/rc.d/rc 0 1 2 3 4 5 6

# Things to run in every runlevel. ud::once:/sbin/update # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. Pf::powerfail:/sbin/shutdown -f -h +2 Power Failure; System Shutting Down # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c Power Restored; Shutdown Cancelled # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run prefdm (which can points to xdm, kdm, gdm) in runlevel 5 x:5:respawn:/etc/X11/prefdm nodaemon

Tenha bastante cuidado ao editar esse arquivo, porque ele pode variar bastante nas diversas distribuies Linux. Tenha bastante cuidado ao verificar as referncias que ele faz a outros arquivos. O que se demonstrou aqui foi baseado no Red Hat Linux. Os caracteres # (quase sempre), ; e ! (algumas vezes) so usados para fazer comentrios, sendo ignorados todos os caracteres seguintes a eles que se encontram na mesma linha. No Linux/Unix, isto se aplica a todos os arquivos de configurao, scripts e programas-fonte. O nvel de execuo atual do sistema pode ser visualizado pelo comando runlevel e modificado pelo comando init <n>, onde n o runlevel.

Seqncia de inicializao SysV init


1. O processo init l o arquivo /etc/inittab e define o nvel de execuo do sistema. 2. O processo init executa o script /etc/rc.d/rc.sysinit.

101

Linux Guia do Administrador do Sistema


3. O script /etc/rc.d/rc.sysinit executa o script /etc/rc.d/rc.serial (caso exista). 4. O processo init executa o script /etc/rc.d/rc que recebe o nvel de execuo do init como parmetro. 5. O script /etc/rc.d/rc executar os scripts de um dos diretrios: /etc/rc.d/rc0.d; /etc/rc.d/rc1.d; /etc/rc.d/rc2.d; /etc/rc.d/rc3.d; /etc/rc.d/rc4.d; /etc/rc.d/rc5.d; /etc/rc.d/rc6.d, de acordo com o nvel de execuo recebido como parmetro. 6. O processo init executa o script /etc/rc.d/rc.local. 7. O processo init executa processos mingetty para configurar os terminais.

Editando os scripts de inicializao


Como vimos anteriormente, os diretrios /etc/rc.d/rc[0-6].d contm links simblicos para os scripts de inicializao presentes no diretrio /etc/rc.d/init.d. Agora chegou o momento de entender como funcionam esses links e como utiliz-los.

Entendendo os links simblicos existentes em /etc/rc.d/rc[0-6].d


A maioria das distribuies Linux segue o seguinte padro para definir se um link simblico em /etc/rc.d/rc[0-6].d iniciar ou interromper a execuo de um servio em /etc/rc.d/init.d: Se um link iniciado com a letra K (kill), quer dizer que o servio ser interrompido naquele nvel de execuo. O que ele faz executar o servio em /etc/rc.d/init.d seguido de stop. Se um link iniciado com a letra S (start), quer dizer que o servio ser inicializado naquele nvel de execuo. O que ele faz executar o servio em /etc/rc.d/init.d seguido de start. So executados primeiramente os links com a letra K e depois com S. A ordem que os links so executados depende do nmero que se segue a letra K ou S; por exemplo, os seguintes links em /etc/rc.d/rc3.d so executados em seqncia:

102

Captulo 7 O processo init


Os arquivos que iniciam com o mesmo nmero so executados em ordem alfabtica. Exemplo: Inicializando o servidor de impresso
Edite o arquivo /etc/rc.d/init.d/lpd da seguinte forma:
#!/bin/sh # /etc/rc.d/init.d/lpd # chkcong: 2345 60 50 # description: o lpd e o daemon de impressao # processname: lpd # cong: /etc/printcap . /etc/rc.d/init.d/functions . /etc/syscong/network [ ${NETWORKING} = no ] && exit 0 [ -f /usr/sbin/lpd ] || exit 0 [ -f /etc/printcap ] || exit 0 prog=lpd case $1 in start) echo -n $Starting $prog: daemon lpd echo touch /var/lock/subsys/lpd ;; stop) echo -n $Stopping $prog: killproc lpd echo rm -f /var/lock/subsys/lpd ;; status) status lpd ;; restart|reload) $0 stop $0 start ;; *) echo -n $Usage: $0 {start|stop|restart|reload|status} echo ;; exit 1 esac

Obs.: O script /etc/rc.d/init.d/lpd instalado com os pacotes lpr ou LPRng.

Torne este arquivo executvel da seguinte forma:


# chmod 755 /etc/rc.d/init.d/lpd

Execute os seguintes comandos para criar os links simblicos:


# # # # # # # # ls ls ls ls ls ls ls ls -s -s -s -s -s -s -s -s /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/init.d/lpd /etc/rc.d/rc2.d/S60lpd /etc/rc.d/rc3.d/S60lpd /etc/rc.d/rc4.d/S60lpd /etc/rc.d/rc5.d/S60lpd /etc/rc.d/rc2.d/K50lpd /etc/rc.d/rc3.d/K50lpd /etc/rc.d/rc4.d/K50lpd /etc/rc.d/rc5.d/K50lpd

Este procedimento inicializar o servidor de impresso toda vez que o Linux for inicializado, nos nveis de execuo 2345.

103

Linux Guia do Administrador do Sistema


Execute o comando:
# /etc/rc.d/init.d/lpd start

Esse procedimento inicializar o servidor de impresso imediatamente.

Os comandos service, chkcong e ntsysv service


Inicializa, interrompe e reinicializa um servio. O servio o nome de qualquer shell script presente em /etc/rc.d/init.d. uma alternativa ao mtodo de executar diretamente os scripts de inicializao do diretrio /etc/rc.d/init.d. service <servio> <ao>

Ao
start stop restart status

Descrio
Inicializa um servio. Interrompe um servio. Reinicializa um servio. Fornece o estado de operao do servio.

Exemplos:
# /etc/rc.d/init.d/lpd

Inicializa o servio lpd.


# service

start

Inicializa o servio lpd.

lpd

start

chkcong
Gerencia os scripts de inicializao dos servios e seus links simblicos localizados nos diretrios /etc/rc.d/init.d e /etc/rc.d/rc[0-6].d. O comando chkcong requer algumas linhas de comentrios adicionais nos scripts de inicializao dos servios, para inform-los em que nveis de execuo devem inicializar e nalizar (criando os links simblicos). Essas linhas tiradas do script /etc/rc.d/init. d/lpd so as seguintes:
# chkcong: 2345 60 50 # description: lpd e o daemon de impressao

A primeira linha, que um marcador para o chkcong, informa que o script dado deve ser inicializado nos nveis de execuo 2, 3, 4 e 5, com uma ordem de inicializao de 60 e uma ordem de nalizao de 50. A segunda linha uma descrio do que o servio em questo realiza. chkcong <opo> <servio>

Opo
--add --del --levels <nveis> <servio> <off|on>

Descrio
Adiciona um servio. Remove um servio. Especica os nveis de execuo.

Exemplos:
# chkcong # chkcong # chkcong

Acrescenta o servio lpd Remove o servio lpd

--add --del --level

lpd lpd 2345 lpd on

Acrescenta o servio lpd nos nveis de execuo 2345

104

Captulo 7 O processo init ntsysv


Gerenciador de servios de inicializao em forma de menu. Para que um servio seja includo no menu do ntsysv, ele deve possuir linhas de comentrios idnticas s requeridas pelo comando chkcong e os links simblicos devem ser criados por um dos comandos:
# chkcong --add <servio> ou # chkcong --level 2345 <servio> on Cria os links simblicos para o servio, acrescenta o servio no menu do comando ntsysv e o seleciona. # chkcong --level 2345 <servio> off Cria os links simblicos para o servio, acrescenta o servio no menu do comando ntsysv mas no o seleciona.

ntsysv

Exemplo:
# ntsysv

Executando programas na inicializao do sistema


O script /etc/rc.d/rc.local o ltimo script a ser executado, sendo possvel incluir comandos ou scripts adicionais neste. Por exemplo, caso deseje inicializar servidores adicionais. Adicionalmente, caso se queira configurar uma porta serial, pode-se editar o script /etc/rc.d/rc. serial e este ser executado automaticamente durante a inicializao do sistema. Por padro, /etc/rc.d/rc.local simplesmente cria uma mensagem de acesso ao sistema com a verso do kernel e o tipo da mquina.

BSD init
O estilo de inicializao BSD init bem mais simples que o SysV init. Suas caractersticas principais so: No possui arquivo /etc/inittab. O arquivo /etc/rc usado no seu lugar. No tem nveis de execuo. Os arquivos e/ou scripts de inicializao em sistemas BSD esto localizados no diretrio /etc. Outros arquivos so /etc/rc.serial e /etc/rc.local. O Linux Slackware utiliza um estilo de inicializao BSD init modificado, no qual existe um arquivo /etc/inittab no lugar de /etc/rc e aceita nveis de execuo.

Seqncia de inicializao BSD init


O processo init l o arquivo /etc/rc ou /etc/inittab (no Linux Slackware) para inicializao, que invoca vrios scripts que configuram o sistema. O ltimo script executado o /etc/rc.local ou /etc/rc.d/rc.local (no Linux Slackware).

Executando programas na inicializao do sistema


Como no SysV init podemos utilizar o arquivo /etc/rc.local ou /etc/rc.d/rc.local (no Linux Slackware) para incluir comandos ou scripts adicionais.

105

Linux Guia do Administrador do Sistema

Inicializando e terminando a sesso


Quando uma conexo com um terminal local ou remoto realizada, aparece no terminal uma mensagem de saudao como a mostrada a seguir:
Benvindo ao sistema Linux 2.4.18 login:

Essa mensagem, que pode ser modificada, encontra-se no arquivo /etc/issue. Aps introduzidos o nome do usurio e, em seguida, a senha (password), o comando login testa se os dados introduzidos so corretos e o shell destinado a esse usurio inicializado. Normalmente, o shell-padro o bash, mas pode ser modificado no arquivo /etc/passwd. Toda a sesso deste usurio consiste neste processo shell e os subprocessos criados a partir deste. Para sair da sesso, utilizamos os comandos logout ou exit.

Desligando o sistema
No correto desligar o sistema de qualquer forma, pois muitos arquivos podem estar abertos para escrita e usurios podem estar logados em terminais do sistema. O comando shutdown usado para parar o sistema (opo -h) ou reinicializ-lo (opo -r). Essa parada ou reinicializao do sistema pode ser: (1) imediatamente (opo now), (2) na hora programada (introduzindo hh:ss), (3) daqui a n minutos (+minutos). Alguns exemplos: Parada imediata
# shutdown -h now

ou
# init 0

ou
# halt

Reboot imediato
# shutdown -r now

ou
# init 6

ou
# reboot

Reboot daqui a 5 minutos


# shutdown -r +5

Somente um alerta para os usurios


# shutdown -k now

Com uma mensagem personalizada para os usurios


# shutdown -h +15 O sistema sair do ar daqui a 15 minutos. Obrigado pela compreenso.

106

Captulo 7 O processo init

Perdi a senha do superusurio (root). O que fazer?


No LILO
Ao ligar-se a mquina, quando aparecer o prompt LILO boot: , digite:
linux single

Pressione <Enter>, o sistema inicializar em modo monousurio e o superusurio root ser "logado" automaticamente sem pedir senha, e ento basta executar o comando:
# passwd

Para definir uma senha nova ao superusurio.

No GRUB
Ao ligar-se a mquina, quando aparecer a tela do GRUB, selecione o Linux e pressione <e>. Ento aparecer a linha de comando de inicializao, onde dever ser includo o nmero 1 ao final da linha. Para isso, pressione <e> novamente para editar a linha de comando e adicione um espao e o nmero 1 no final da linha. Agora basta pressionar <Enter> e depois <b>, que o computador ir inicializar em modo monousurio e o superusurio root ser logado automaticamente sem pedir senha, e ento ser suficiente executar o comando:
# passwd

Para definir uma senha nova ao superusurio.


Obs.: No possvel realizar este procedimento, seja ele no LILO ou no GRUB, em todas as distribuies Linux, porque algumas delas, por razes de segurana, pedem senha quando inicializadas no modo linux single (monousurio). Por outro lado, o procedimento mostrado anteriormente permite que qualquer usurio, sendo ele o superusurio root ou um outro usurio qualquer, modique a senha do superusurio root.

Colocando uma senha no runlevel 1


Edite o arquivo /etc/inittab da seguinte forma: Depois da linha:
id:3:initdefault:

Inclua a linha:
su:S:wait:/sbin/sulogin

Inicializando o Linux no X11


Edite o arquivo /etc/inittab da seguinte forma: Mude a linha:
id:3:initdefault:

107

Linux Guia do Administrador do Sistema


Para:
id:5:initdefault:

Desligando o sistema com as teclas <Ctrl>, <Alt> e <Del>


Edite o arquivo /etc/inittab da seguinte forma: Mude a linha:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Para:
ca::ctrlaltdel:/sbin/halt

Desabilitando as teclas <Ctrl>, <Alt> e <Del>


Edite o arquivo /etc/inittab e remova o comentrio (o caractere "#") da linha a seguir:
# ca::ctrlaltdel:/sbin/shutdown -t3 -r now

108

Вам также может понравиться