O processo init

O programa init tem ID de processo 1. Ele é responsável por inicializar o sistema da maneira necessária. O init é iniciado diretamente pelo kernel e resiste ao sinal 9, que normalmente elimina processos. Todos os outros programas são iniciados diretamente pelo init ou por um de seus processos-filho.

O init é configurado centralmente no arquivo /etc/inittab em que os níveis de execução são definidos (consulte a Seção 9.2.1, “Níveis de execução”). O arquivo também especifica os serviços e os daemons disponíveis em cada um dos níveis de execução. Dependendo das entradas em /etc/inittab, vários scripts são executados pelo init. Por padrão, o primeiro script iniciado após o boot é o /etc/init.d/boot. Após concluída a fase de inicialização do sistema, o nível de execução do sistema muda para o padrão com o script /etc/init.d/rc. Para fins de clareza, esses scripts, chamados scripts init, residem no diretório /etc/init.d (consulte a Seção 9.2.2, “Scripts Init”).

Todo o processo de inicialização e encerramento do sistema é mantido pelo init. Desse ponto de vista, o kernel pode ser considerado um processo em segundo plano para manter todos os outros processos e ajustar o horário da CPU e o acesso ao hardware de acordo com as solicitações de outros programas.

Níveis de execução

No Linux, os níveis de execução definem como o sistema é iniciado e quais serviços estão disponíveis no sistema em execução. Após o boot, o sistema é iniciado conforme definido em /etc/inittab na linha initdefault. Normalmente, é 3 ou 5. Consulte a Tabela 9.1, “Níveis de execução disponíveis”. Como alternativa, é possível especificar o nível de execução durante o boot (adicionando o número do nível de execução no prompt de boot, por exemplo). Os parâmetros que não forem avaliados diretamente pelo próprio kernel serão passados para o init. Para inicializar no nível de execução 3, basta adicionar o número 3 ao prompt de boot.

Tabela 9.1. Níveis de execução disponíveis

Nível de execução

Descrição

0

Desligamento do sistema

S ou 1

Modo de usuário único

2

Modo multiusuário local sem rede remota (NFS, etc.)

3

Modo multiusuário completo com rede

4

Definido pelo Usuário, não usado a menos que o administrador configure este nível de execução.

5

Modo multiusuário completo com rede e gerenciador de exibição X — KDM, GDM ou XDM

6

Reinicialização do sistema


[Important]evite o Nível de execução 2 com uma partição montada via NFS

Você não deverá usar o nível de execução 2 se seu sistema montar uma partição como /usr através do NFS. O sistema pode comportar-se de forma inesperada se as bibliotecas ou arquivos de programa estiverem ausentes pois o serviço NFS não está disponível no nível de execução 2 (modo multiusuário local sem rede remota).

Para mudar os níveis de execução durante a execução do sistema, digite telinit e o número correspondente como um argumento. Somente o administrador do sistema pode fazer isso. A lista a seguir resume os comandos mais importantes na área de nível de execução.

telinit 1 ou shutdown now

O sistema muda para o modo de usuário único. Esse modo é usado para manutenção do sistema e tarefas de administração.

telinit 3

Todos os programas e serviços essenciais (incluindo a rede) são iniciados, e os usuários comuns podem efetuar login e trabalhar no sistema sem um ambiente gráfico.

telinit 5

O ambiente gráfico é habilitado. Geralmente um gerenciador de exibição como XDM, GDM ou KDM é iniciado. Se o login automático estiver habilitado, o usuário local será conectado ao gerenciador de janelas pré-selecionado (GNOME ou KDE ou qualquer outro gerenciador de janelas).

telinit 0 ou shutdown -h now

O sistema é desligado.

telinit 6 ou shutdown -r now

O sistema é desligado e, em seguida, reinicializado.

O nível de execução 5 é o nível de execução padrão em todas as instalações padrão do SUSE Linux Enterprise Desktop. É solicitado o login dos usuários com uma interface gráfica ou o usuário padrão está conectado automaticamente.

[Warning]os erros em /etc/inittab podem resultar em uma falha de boot do sistema

Se /etc/inittab for danificado, o sistema poderá não ser inicializado adequadamente. Portanto, seja extremamente cuidadoso ao editar /etc/inittab. Sempre deixe que o init releia /etc/inittab com o comando telinit q antes de reinicializar a máquina.

Geralmente, há duas situações quando os níveis de execução são mudados. Primeiro, os scripts de parada do nível de execução atual são iniciados, fechando alguns programas essenciais ao nível de execução atual. Em seguida, os scripts do novo nível de execução são iniciados. Na maioria dos casos, vários programas são iniciados. Por exemplo, ocorre o seguinte quando o nível de execução 3 muda para 5:

  1. O administrador (root) solicita que o init mude para um nível de execução diferente digitando telinit 5.

  2. O init verifica o nível de execução atual (runlevel) e determina se ele deve iniciar /etc/init.d/rc com o novo nível de execução como parâmetro.

  3. Agora, rc chama os scripts de parada do nível de execução atual para os quais não há script de início no novo nível de execução. Neste exemplo, todos os scripts residem em /etc/init.d/rc3.d (o nível de execução antigo era 3) e iniciam com K. O número após K especifica a ordem de execução dos scripts com o parâmetro stop, pois algumas dependências devem ser consideradas.

  4. Os scripts do novo nível de execução são os últimos a serem iniciados. Neste exemplo, eles estão em /etc/init.d/rc5.d e começam com S. Mais uma vez, o número após S determina a seqüência de início dos scripts.

Ao mudar para o mesmo nível de execução que o atual, o init somente verifica as mudanças em /etc/inittab e inicia as etapas adequadas, por exemplo, para iniciar um getty em outra interface. A mesma funcionalidade pode ser obtida com o comando telinit q.

Scripts Init

Há dois tipos de scripts em /etc/init.d:

Scripts executados diretamente pelo init

Isso só ocorrerá durante o processo de boot ou se for iniciado um encerramento imediato do sistema (falha de energia ou pressionamento de Ctrl+Alt+Del pelo usuário). A execução desses scripts é definida em /etc/inittab.

Scripts executados indiretamente pelo init

São executados durante a mudança do nível de execução e sempre chamam o script master /etc/init.d/rc, que garante a ordem correta dos scripts relevantes.

Todos os scripts estão localizados em /etc/init.d. Scripts que são executados durante o boot são chamados através de links simbólicos de /etc/init.d/boot.d. Os scripts para mudança do nível de execução são chamados através de links simbólicos em um dos subdiretórios (/etc/init.d/rc0.d para /etc/init.d/rc6.d). Isso só serve para fins de clareza, além de evitar scripts duplicados se forem usados em vários níveis de execução. Como todos os scripts podem ser executados como de início ou de parada, eles devem entender os parâmetros start e stop. Os scripts também entendem as opções restart, reload, force-reload e status. Essas diversas opções são explicadas na Tabela 9.2, “Opções possíveis do script init”. Os scripts executados diretamente pelo init não têm esses links. Eles são executados independentemente do nível de execução, quando necessário.

Tabela 9.2. Opções possíveis do script init

Opção

Descrição

iniciar

Iniciar serviço.

parar

Interromper serviço.

restart

Se o serviço estiver sendo executado, o pára e o reinicia. Se não estiver, o inicia.

reload

Recarregar a configuração sem parar e reiniciar o serviço.

force-reload

Recarregar a configuração se o serviço suportá-la. Caso contrário, age como se restart tivesse sido ativado.

status

Mostrar o status atual do serviço.


Os links em cada subdiretório específico de nível de execução possibilitam a associação de scripts a diferentes níveis de execução. Durante a instalação ou desinstalação de pacotes, esses links são adicionados e removidos com a ajuda do programa insserv (ou usando /usr/lib/lsb/install_initd, que é um script que chama esse programa). Consulte a página de manual insserv(8) para obter detalhes.

Todas essas configurações também podem ser mudadas com a ajuda do módulo do YaST. Se precisar verificar o status na linha de comando, use a ferramenta chkconfig, descrita na página de manual chkconfig(8).

Veja a seguir uma pequena apresentação dos scripts de boot e de parada iniciados primeiro e por último, respectivamente, bem como uma explicação do script de manutenção.

boot

Executado na inicialização do sistema usando diretamente o init. É independente do nível de execução escolhido e só é executado uma vez. Nesse momento, os sistemas de arquivos /proc e /dev/pts são montados e blogd (boot logging daemon - daemon de registro de boot) é ativado. Se o sistema for inicializado pela primeira vez após uma atualização ou instalação, a configuração inicial do sistema será iniciada.

O daemon blogd é um serviço iniciado por boot e rc antes de qualquer outro. Ele pára após a conclusão do acionamento das ações por esses scripts (que executam vários subscripts, por exemplo, disponibilizando arquivos especiais de bloco). blogd grava qualquer saída de tela no arquivo de registro /var/log/boot.msg, mas somente se e quando /var for montado como leitura-gravação. Caso contrário, o blogd armazenará no buffer todos os dados de tela até que /var se torne disponível. Obtenha mais informações sobre o blogd na página de manual blogd(8).

O script boot também é responsável pela inicialização de todos os scripts em /etc/init.d/boot.d cujos nomes começam com S. Nesse local, todos os sistemas de arquivos são verificados e os dispositivos de loop são configurados se necessário. O horário do sistema também é definido. Se ocorrer um erro durante a verificação e o reparo automáticos do sistema de arquivos, o administrador do sistema poderá intervir após digitar a senha raiz. O último script executado é boot.local.

boot.local

Digite aqui comandos adicionais a serem executados no boot antes de mudar para um nível de execução. Ele se assemelha ao AUTOEXEC.BAT nos sistemas DOS.

halt

Este script é executado somente durante a mudança para o nível de execução 0 ou 6. Aqui, ele é executado como halt ou reboot. O modo como halt é chamado determina se o sistema deve ser encerrado ou reinicializado. Se houver necessidade de comandos especiais durante o encerramento, adicione-os ao script halt.local.

rc

Este script chama os scripts de parada adequados do nível de execução atual e os scripts de início do nível de execução recém-selecionado. Assim como o script /etc/init.d/boot, esse script é chamado de /etc/inittab com o nível de execução desejado como parâmetro.

Você pode criar seus próprios scripts e integrá-los facilmente no esquema descrito acima. Para obter instruções sobre como formatar, nomear e organizar scripts personalizados, consulte as especificações do LSB e as páginas de manual de init, init.d, chkconfig e insserv. Além disso, consulte as páginas de manual do startproc e killproc.

[Warning]scripts init defeituosos podem desligar o seu sistema

Scripts init defeituosos podem travar sua máquina. Edite esses scripts com muito cuidado e, se possível, submeta-os a testes detalhados no ambiente multiusuário. Informações úteis sobre scripts init são encontradas na Seção 9.2.1, “Níveis de execução”.

Para criar um script init personalizado para determinado programa ou serviço, use o arquivo /etc/init.d/skeleton como gabarito. Grave uma cópia desse arquivo com o novo nome e edite o programa relevante e nomes de arquivos, caminhos e outros detalhes necessários. Você também pode precisar aprimorar o script com suas próprias partes, de modo que os acionamentos corretos sejam feitos pelo procedimento init.

O bloco INIT INFO na parte superior é uma parte necessária do script e deve ser editada. Consulte o Exemplo 9.1, “Um bloco INIT INFO mínimo”.

Exemplo 9.1. Um bloco INIT INFO mínimo

### BEGIN INIT INFO
# Provides:          FOO
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Start FOO to allow XY and provide YZ
### END INIT INFO

Na primeira linha do bloco INFO, após Provides:, especifique o nome do programa ou serviço controlado pelo script init. Nas linhas Required-Start: e Required-Stop:, especifique todos os serviços que precisam ser iniciados ou parados antes do próprio serviço ser iniciado ou parado. Essas informações são usadas posteriormente para gerar a numeração dos nomes de script, como encontrada nos diretórios de nível de execução. Depois de Default-Start: e Default-Stop:, especifique os níveis de execução em que o serviço deve ser iniciado ou parado automaticamente. Por fim, para Description:, forneça uma breve descrição do serviço em questão.

Para criar os links dos diretórios de nível de execução (/etc/init.d/rc?.d/) para os scripts correspondentes em /etc/init.d/, digite o comando insserv new-script-name. O programa insserv avalia o cabeçalho INIT INFO para criar os links necessários para os scripts de início e parada nos diretórios de nível de execução (/etc/init.d/rc?.d/). O programa também se encarrega da ordem correta de início e parada para cada nível de execução, incluindo os números necessários nos nomes desses links. Se você preferir uma ferramenta gráfica para criar esses links, use o editor de nível de execução fornecido pelo YaST, conforme descrito na Seção 9.2.3, “Configurando serviços do sistema (nível de execução) com o YaST”.

Se um script já presente em /etc/init.d/ precisar ser integrado ao esquema de nível de execução existente, crie os links nos diretórios de nível de execução imediatamente com insserv ou habilitando o serviço correspondente no editor de nível de execução do YaST. As mudanças serão aplicadas durante a próxima reinicialização, e o novo serviço será iniciado automaticamente.

Não defina esses links manualmente. Se houver algum erro no bloco INFO, surgirão problemas quando insserv for executado posteriormente para algum outro serviço. O serviço adicionado manualmente será removido na próxima execução de insserv para esse script.

Configurando serviços do sistema (nível de execução) com o YaST

Depois que este módulo do YaST for iniciado com YaST+Sistema+Serviços do Sistema (Nível de Execução), ele exibirá uma visão geral que lista todos os serviços disponíveis e o status atual de cada um deles (desabilitado ou habilitado). Decida se o módulo deve ser usado no Modo Simples ou no Modo de Especialista. O Modo Simples padrão deve ser suficiente na maior parte dos casos. A coluna à esquerda mostra o nome do serviço, a coluna ao centro indica seu status atual e a coluna à direita fornece uma descrição resumida. Para o serviço selecionado, uma descrição mais detalhada é fornecida na parte inferior da janela. Para habilitar um serviço, selecione-o na tabela e, em seguida, selecione Habilitar. As mesmas etapas se aplicam para desabilitar um serviço.

Para ter mais controle sobre os níveis de execução em que um serviço é iniciado ou parado ou para mudar o nível de execução padrão, selecione primeiro Modo de Especialista. O nível de execução padrão atual ou o initdefault (o nível de execução em que o sistema é inicializado por padrão) é exibido na parte superior. Normalmente, o nível de execução padrão de um sistema SUSE Linux Enterprise Desktop é o 5 (modo multiusuário completo com rede e X). Uma alternativa adequada poderia ser o nível de execução 3 (modo multiusuário completo com rede).

Esta caixa de diálogo do YaST permite a seleção de um dos níveis de execução (conforme listado na Tabela 9.1, “Níveis de execução disponíveis”) como o novo padrão. Além disso, use a tabela mostrada nessa janela para habilitar ou desabilitar serviços e daemons individuais. A tabela lista os serviços e daemons disponíveis, mostra se eles estão habilitados no sistema e, se estiverem, para quais níveis de execução. Após selecionar uma das linhas com o mouse, clique nas caixas de seleção que representam os níveis de execução (B, 0, 1, 2, 3, 5, 6 e S) para definir os níveis de execução em que o serviço ou daemon selecionado deve estar em execução. O nível de execução 4 é indefinido para permitir a criação de um nível de execução personalizado. Uma breve descrição do serviço ou daemon selecionado no momento é fornecida abaixo da visão geral da tabela.

[Warning]Configurações de nível de execução defeituosas podem danificar o sistema

Configurações de nível de execução defeituosas podem tornar o sistema inutilizável. Antes de aplicar as mudanças, tenha absoluta certeza sobre suas conseqüências.

Figura 9.1. Serviços do Sistema (Nível de Execução)

Serviços do Sistema (Nível de Execução)

Com Iniciar, Parar ou Atualizar, decida se um serviço deve ser ativado. Situação da Renovação verifica o status atual. Inicializar/Reinicializar permite selecionar se você deseja aplicar as mudanças ao sistema ou restaurar as configurações existentes antes de inicializar o editor de nível de execução. A seleção de Concluir grava no disco as configurações mudadas.