Introdução

Manual do KSysV
Anterior |  | Próxima

# Capítulo 1. Introdução

Bem-vindo ao meu editor de níveis de execução System V, comumente conhecido e referenciado doravante como KSysV. Esta seção introduz alguns conceitos e explica o que você pode fazer com o KSysV.

A explanação a seguir foi tomada emprestada do `tksysv`, que inspirou o KSysV:

# 1.1. Uma breve descrição da Iniciação do Sistema V

O estilo de iniciação do Sistema V está tornando-se rapidamente o padrão no mundo Linux, como modelo de controle da partida da máquina. Isso porque é mais fácil de usar, poderoso e flexível que a iniciação BSD tradicional.

Não vou contar a história toda aqui (até porque eu não sei :-).

O programa executável `init` está localizado no diretório `/sbin` e não no `/etc`. Isso é importante, pois permite atualizar uma máquina de modo que inicie no estilo System V, sem precisar reinstalar todo o sistema, e sem formatar nada. O kernel do Linux procura pelo `init` no diretório `/etc` em primeiro lugar, portanto certifique-se de que você removeu seu `init` velho de lá, se ainda havia um.

A iniciação SysV também difere da iniciação BSD na medida em que seus arquivos de configuração estão num subdiretório de `/etc`, ao invés de residirem diretamente em `/etc`. Este diretório é chamado `rc.d`. Lá você encontrará o arquivo `rc.sysinit` e os seguintes subdiretórios:

     init.d/
     rc0.d/
     rc1.d/
     rc2.d/
     rc3.d/
     rc4.d/
     rc5.d/
     rc6.d/

`init.d` contém uma coleção de scripts. Basicamente, você precisa um script para cada serviço que você possa precisar iniciar na partida da máquina, ou ao entrar em outro nível de execução. Os serviços incluem coisas como serviços de rede, NFS, sendmail, http etc. Não incluem coisas como `setserial` que devem ser executados somente uma vez. Esse tipo de programa deve constar no arquivo `rc.local`.

`rc.local` deve estar no diretório `/etc/rc.d` se você tiver um. A maioria dos sistemas possuem esse arquivo mesmo que ele não faça muita coisa. Você também pode incluir um arquivo `rc.serial` no diretório `/etc/rc.d`, se você precisa executar quaisquer procedimentos de configuração das portas seriais na partida da máquina.

A cadeia de eventos ocorre assim:

- o kernel procura pelo `init` em diversos lugares e executa o primeiro que encontrar;

- o `init` executa o script `/etc/rc.d/rc.sysinit`

- `rc.sysinit` executa algumas tarefas necessárias e então executa o script `rc.serial`, se ele existir;

- `init` executa o script `rc.local`;

- `init` executa todos os scripts do nível de execução padrão.

O nível de execução padrão é decidido em `/etc/inittab`. Você deve ter uma linha próxima ao início do arquivo, parecida com esta:

     id:3:initdefault:

Aqui você olha para o segundo parâmetro e vê que o nível de execução padrão é 3, que deve ser o caso de muitos sistemas. Se você quer mudá-lo, você pode editar o arquivo `/etc/inittab` manualmente e mudar o número 3. Tenha cuidado ao fazer isso.

Se você bagunçar esse arquivo, poderá ter uma chance de consertá-lo, logo ao início da partida da máquina, perfazendo os seguintes passos:

     LILO boot: linux single

Isto *deve* permitir a você entrar em modo monousuário, de modo que você possa pelo menos editar e consertar o arquivo.

Agora, como é que ele executa todos os scripts ? Se você executar o comando '`ls -l`' no diretório `/etc/rc.d/rc3.d`, verá algo como

     lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network
     lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog
     lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
     lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
     lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
     lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
     lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
     lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
     lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
     lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local

O que você vai notar é que não há arquivos reais no diretório. Todos eles são links para scripts que estão de fato no diretório init.d. Os links também tem um "S" e um número no começo do nome. A letra "S" significa que o serviço correspondente deve ser iniciado, enquanto um "K" significaria que ele deve ser parado. O número serve apenas para estabelecer uma ordem de execução entre os scripts. O `init` iniciará todos os serviços baseado na ordem em que eles aparecem. Você pode duplicar números, mas isso apenas deixaria você confuso. Você precisa apenas de um número de dois dígitos, e uma letra maiúscula "S" ou "K" para iniciar e parar os serviços.

Como ele inicia e pára os serviços ? Simples. Cada um dos scripts é escrito de modo a aceitar um argumento que pode ser "start" ou "stop". Você pode executar esses scripts manualmente via linha de comando:

     /etc/rc.d/init.d/httpd.init stop

para parar o servidor httpd. O Init lê o nome, e se ele tem um "K", chama o script com o argumento "stop". Se ele tem um "S", chama o script com o argumento "start".

## 1.1.1. Por que tantos níveis de execução ?

Algumas pessoas precisam de uma forma fácil de configurar máquinas para múltiplos propósitos. Eu poderia ter um nível de execução "servidor" que executa somente httpd, sendmail, serviços de rede etc. Então eu posso ter outro nível de execução, "usuário", que rode xdm, serviços de rede etc.

Anterior | Principal | Próxima
Manual do KSysV |  | Fundamentos de Uso