Grande parte das pessoas não sabem como funciona o sistema de inicialização do Linux, por isso resolvi descrevê-lo aqui. A explicação não será muito profunda, mas servirá para introduzir o assunto.
O boot do sistema é baseado em fases, cada fase tem uma função específica, por isso nenhuma fase deve ser repetida e a próxima fase sempre levará em conta que as tarefas da fase anterior foram executadas com sucesso.
A primeira fase, depois da escolha do kernel a ser carregado (geralmente via LILO), é a descompressão e carregamento do kernel. O kernel do Linux é comprimido, o que possibilita, entre outras coisas, a ocupação de menos espaço em disco. Não vou entrar em detalhes sobre o sistema de baixo nível do boot, apenas as partes "influenciáveis", onde podemos alterar o comportamento do sistema para um maior conforto.
Depois da descompressão e carregamento do sistema, começarão a surgir mensagens do kernel, avisando sobre o que está acontecendo, como testes de portas seriais, entre outros. Todas as mensagens do kernel são úteis e devem sempre ser observadas. Caso você precise ver as mensagens do kernel após o boot completo do sistema, não precisa reiniciá-lo, basta digitar dmesg no shell.
Após a inicialização completa do kernel, o sistema passa o controle para alguns scripts, conhecidos como scripts de inicialização ao estilo Sys V. Os scripts podem ser encontrados geralmente no diretório /etc/rc.d, são normalmente três:
rc.sysinit: executado apenas uma vez, durante o boot do sistema. Ajusta algumas coisas, como o relógio e data do sistema, entre outras coisas.
rc: executado quando o runlevel é alterado. Runlevels serão explicados posteriormente. O rc "mata" os processos do atual runlevel, levando em consideração alguns detalhes que serão descritos posteriormente, e inicia os novos processos, característicos do runlevel atual.
rc.local: executado logo após todos os outros scripts de inicialização. É útil para ajustar alguns parâmetros do sistema que devem ser inicializados mas não necessitam da criação de um script completo ao estilo Sys V. Alguns exemplos de programas normalmente incializados nesse script são servidores de fontes "incomuns", restauradores de som, entre outros. Outra função desse script é recriar os arquivos /etc/issue e /etc/issue.net, que são responsáveis pelas mensagens exibidas enquanto o sistema aguarda o login e senha do usuário (nos sistemas Conectiva é comum a presença da imagem gerada pelo linux_logo, com algumas informações sobre o sistema).
Agora o sistema já está inicializado, então o controle é passado para o gerenciador de login, que ficará aguardando a ação do usuário. Se algum usuário realizar o login no sistema, o controle será passado para o shell padrão do usuário, por exemplo o bash. Outras formas de login são discutidas abaixo, junto com a explicação sobre os runlevels.
RunlevelsToda a inicialização do sistema é baseada em runlevels, ou seja, níveis de execução. Os sistemas Linux possuem 6 runlevels:
0 - conhecido como halt, é o runlevel que desliga o sistema;1 - monousuário, inicilializa o sistema sem opções de segurança, no modo monousuário sem rede;
2 - multiusuário, inicializa o sistema com todas as opções de multiusuários e segurança;
3 - multiusuário com rede, o mesmo do runlevel 2, mas com opções de rede ativas, o runlevel mais comum;
4 - não utilizado;
5 - multiusuário em modo gráfico, igual ao runlevel 3, mas inicia o servidor X automaticamente;
6 - reboot, reinicializa o sistema.
Alguns sistemas podem variar, mas o padrão Conectiva é esse. A descrição do sistema de runlevels normalmente pode ser encontrada no arquivo /etc/inittab, onde você também poderá alterar o runlevel padrão do sistema.
Alguns runlevels que merecem destaque são o 1, 3 e 5.
O runlevel 1 nunca deve ser utilizado, a não ser para manutenção do sistema, devido a falta total de segurança.
O runlevel 3 é o mais comum e eu pessoalmente aconselho o seu uso.
O runlevel 5 é o mais indicado para usuários novatos, que dependem completamente do sistema gráfico para trabalhar. Não aconselho o uso do runlevel 5, pois além de gastar recursos de máquina ainda, se a sua placa de vídeo estiver configurada incorretamente, o servidor X tentará forçar a inicialização gráfica e sua tela no mínimo ficará piscando, tornando impossível qualquer comunicação com o sistema, o que também dificultará a reconfiguração da placa de vídeo. A escolha fica por sua conta.
O sistema de init, como foi citado anteriormente, procurará os scripts de incialização em /etc/rc.d. Existem, além dos scripts já citados, muitos outros, dentro do diretório /etc/rc.d/init.d. Existe um alias pré-definido que move o seu diretório atual para o diretório dos scripts do sistema, é o cds, ele é um resumo dos comandos "cd /etc/rc.d/init.d && ls", portanto esse alias é muito prático, acostume-se a usá-lo sempre que precisar alterar alguma coisa a ver com os runlevels.
Os scripts encontrados dentro do diretório /etc/rc.d/init.d possuem um modelo a ser seguido, onde eles devem aceitar no mínimo quatro parâmetros, a saber: stop, start, restart, status. A explicação sobre como escrever scripts Sys V está no documento VIM/BASH (originalmente esse documento se encontra do meu site, mas como o meu site está sofrendo várias reformulações eu resolví diponibilizá-lo neste site também).
O init possui um sistema interessante para verificar quais os scripts que devem ser executados em cada runlevel. Dentro do diretório /etc/rc.d existem vários subdiretórios, com os nomes seguindo o modelo rcX.d, onde X é o numero do runlevel atendido pelo diretório. Isso significa que normalmente temos 6 diretórios seguindo esse modelo, de rc0.d a rc6.d. O script de inicialização, rc, verificará o runlevel atual e, segundo ele, entrará no diretório correto, por exemplo, para um runlevel 3, o diretório rc3.d. Dentro dos diretórios estão links simbólicos para os scripts em init.d que devem ser executados no runlevel. Os links simbólicos possuem a seguinte nomenclatura: EXXnome, onde E pode ser S, de start ou K, de kill, XX indica qual a ordem de execução do script na hierarquia de scripts e nome indica o nome do script na pasta init.d. Quem cria ou destrói os links é um aplicativo, chamado chkconfig.
O chkconfig lê algumas informações no cabeçalho dos scripts Sys V e determina qual a ordem de execução do script, quais os runlevels onde o script será executado com o parâmetro start e quais os runlevels onde o parâmetro utilizado será stop. Para indicar qual parâmetro usar ele cria o link com um prefixo K, de kill, para o parâmetro stop, e S, de start, para o parâmetro start. As páginas do manual do chkconfig explicam corretamente cada parâmetro do mesmo e como utilizá-lo corretamente.
Outro aplicativo normalmente encontrado é o ntsysv, que é uma espécie de front-end para o chkconfig, por meio dele podemos ver quais os serviços estão ativos e quais estão inativos de uma forma bem mais simples que pelo chkconfig.
Observe que não é porque você possui um script em /etc/rc.d/init.d que ele será executado, para ele ser executado, deve ser adicionado ao init via chkconfig ou ntsysv (ou outro aplicativo equivalente). Algumas informações sobre os serviços também podem ser visualizadas, essas informações são inseridas no cabeçalho dos scripts e normalmente tem suporte a vários idiomas, descrevendo o que aquele serviço inicializado pelo script fará no seu sistema.
O shutdown do sistema também é determinado por um runlevel, ou o runlevel 0 (halt) ou o 6 (reboot), permitindo assim que alguns serviços possam ser devidamente desligados antes da queda do sistema, como por exemplo um servidor em impressão ou um gravador de configurações do misturador de som.
Agora que já conhecemos as fases básicas do boot do sistema e também o sistema de inicialização por scripts conhecido como Sys V, podemos personalizar alguns scripts segundo as nossas necessidades, criar alguns serviços e selecionar corretamente aqueles que serão inicializados ou não durante os vários runlevels. Uma última dica: se você quiser alterar o runlevel com o sistema ligado, basta utilizar, como root, init X, onde X é o runlevel que você quer iniciar, ou seja, se você quiser reiniciar o sistema sem usar shutdown, basta digitar "init 6".
Para personalizar, escrever ou entender os scripts Sys V devemos conhecer um mínimo sobre scrips SH. Você poderá obter algumas informações sobre scripts SH/BASH na seção VIM/BASH, além de um modelo de script Sys V e algumas informações valiosas. Outro requisito básico é o domínio de algum editor de textos no modo texto do shell, para que as configurações dos scripts sejam efetuadas com eficiência. Um editor de textos que aconselho é o VIM, fornecido com a grande maioria das distribuições Linux. Você poderá encontrar informações úteis sobre ele na seção VIM/BASH.
Espero que as informações contidas aqui sejam de grande utilidade para você. Boa sorte!
Por Willian Eduardo de Moura Casante.
Distribuição permitida contanto que esta notificação esteja preservada.
Nenhum comentário:
Postar um comentário