O Slackware mantém até os dias atuais um sistema de inicialização simples e rápido baseado no estilo do BSD, todos os arquivos responsáveis pela inicialização são armazenados no diretório /etc/rc.d/. O Slackware também incluí compatibilidade com scripts System V, muitas distribuições linux utilizam este estilo de inicialização em que separam-se os scripts init em diferentes subdiretórios para cada runlevel (nível de execução), enquanto no estilo BSD usa-se um init script para cada runlevel.
Para que um script não seja executado durante a inicialização basta remover a permissão de execução. As permissões são manipuladas através do comando chmod, lembre-se de utilizar o usuário root.
# Shell
# Adicionando a permissão de execução chmod +x rc.cups ls -lh rc.cups -rwxr-xr-x 1 root root 3.6K Apr 26 2015 rc.cups # Removendo a permissão de execução chmod -x rc.cups ls -lh rc.cups -rw-r--r-- 1 root root 3.6K Apr 26 2015 rc.cups
Inicialização do sistema
Após o kernel o primeiro programa a ser executado é o init. Este usa as informações do arquivo /etc/inittab para saber como executar o sistema e a primeira coisa a se fazer é executar o script /etc/rc.d/rc.S que irá habilitar a memória virtual, montar os sistemas de arquivos, limpar alguns diretórios de log, inicializar dispositivos Plug and Play, carregar módulos do kernel, configurar portas seriais e executar System V init scripts se houverem.
O script rc.S irá utilizar outros scripts para completar sua tarefa:
- rc.S - Script de inicialização do Slackware.
- rc.udev - Inicializa o udev para gerenciar dispositivos hotplug.
- rc.modules - Atualiza as dependências do módulo do kernel e também suporta carregamento manual de módulos através do rc.modules.local.
- rc.serial - Configura as portas seriais.
- rc.sysvinit - Executa SystemV init scripts se houverem.
Entres outros.
Runlevels
Depois de inicialização do sistema o init irá verificar se irá aceitar múltiplos logins ou um único usuário, se irá usar serviços de rede, se irá iniciar direto em um sistema gráfico ou em modo terminal. Isso tudo é definido através da escolha do runlevel.
- rc.0 - Desliga o computador(runlevel 0), é um link para o arquivo rc.6.
- rc.K - Inicialização com suporte a um único usuário (runlevel 1).
- rc.M - Inicialização multiusuário com login baseado em texto (runlevels 2 e 3), este é o runlevel padrão do slackware.
- rc.4 - Inicialização multiusuário com login gráfico (runlevel 4).
- rc.6 Reinicia o computador (runlevel 6).
Inicialização da rede
Os runlevels 2, 3 e 4 irão iniciar os serviços de rede se estes estiverem habilitados, isso será feitos através dos scripts:
- rc.inetd - Aciona serviços de rede por demanda. Para alguns serviços usados com baixa frequência como pode ser o caso do ftp, telnet, tftp, rlogin, pode ser interessante já que a memória só será alocada se houver uma requisição. O inetd lida com as conexões de entrada, monitora todas as portas de rede e quando uma requisição chega se estiver configurado responde disponibilizando o serviço adequado. Se o serviço for usado frequentemente, como httpd, não é uma boa ideia usar o inted já que irá gerar sobrecarga tendo que iniciar o serviço para cada requisição.
- rc.inet1 - Habilita as interfaces de rede.
- rc.inet1.conf - Armazena as informações das interfaces de rede(IP, mascara, gateway etc), informações que serão utilizadas pelo script rc.inet1.
- rc.inet2 - Executado após o script rc.inet1, responsável por iniciar serviços básicos de rede.
- rc.ip_forward - Ativa o IP packet forwarding, encaminhamento de pacotes como por exemplo para compartilhar uma conexão de internet.
- rc.firewall - Regras de firewall. O arquivo não existe por padrão apesar de haver uma chamada no rc.inet2. Basta criá-lo e dar permissão de execução para que seja executado na inicialização.
- rc.wireless - Responsável pela configuração das interfaces de rede wireless, é iniciado pelo rc.inet1.
- rc.wireless.conf - Armazena as informações utilizadas pelo script rc.wireless.
Scripts de serviços
Todos os outros serviços que serão utilizado no sistema, normalmente estes possuem o o nome rc.nome_do_serviço, por exemplo rc.httpd será responsável por iniciar o serviço httpd. Alguns exemplos:
- rc.atalk - Adiciona suporte a redes AppleTalk.
- rc.bind - Inicia um dos servidores de resolução de nomes(DNS) mais conhecidos (named).
- rc.httpd - Inicia o servidor Web Apache, responsável por disponibilizar páginas na rede.
- rc.mysqld - Inicia o servidor de banco de dados, atualmente o Slackware utiliza o programa MariaDB que é uma versão alternativa do MySQL.
- rc.nfsd - Serviço responsável pelo compartilhamento de arquivos em redes Unix.
- rc.samba - Adicione suporte a compartilhamento de arquivos com redes Windows.
- rc.sshd - Fornece acesso a uma shell remotamente de forma segura.
- rc.alsa - Configura o volume do som e carrega alguns módulos.
- rc.acpid - Sistema de gerenciamento de energia.
- rc.font - Carrega a fonte de a ser utilizada terminal.
- rc.gpm - Habilita o mouse no modo texto.
- rc.keymap - Ativa o mapa de teclado apropriado.
Serviços de terceiros
Todos os programas oficiais da distribuição possuem as chamadas apropriadas nos arquivos de inicialização como pode-se ver parcialmente no texto acima. Ao instalar programas que são disponibilizados a partir de outros repositórios será preciso adicionar a chamada manualmente. O local para se fazer isso é o script rc.local.
rc.local
# Inicia o serviço radius se houver permissão
if [ -x /etc/rc.d/radiusd ]; then
. /etc/rc.d/rc.radiusd start
fi
Programas como o FreeRADIUS e o VirtualBox são exemplos, não são disponibilizados junto ao slackware mas podem ser instalados a partir de repositórios como slackbuilds ou usando repositórios não oficiais com o plugin slackpkg+. Os programas geralmente criam o script de inicialização rc.nome_do_serviço durante a instalação, bastando adicionar a entrada no arquivo rc.local. Quando isso não ocorre pode-se achar este arquivo junto ao source do programa e copiá-lo para a pasta /etc/rc.d. É importante ler as informações dos arquivos README ou INSTALL que normalmente acompanham o source.
Alguns programas também precisam que seu encerramento seja feito corretamente durante o desligamento do sistema, neste caso é usado o arquivo rc.local_shutdown, um exemplo é o VirtualBox.
rc.local_shutdown
# Interrompe o VirtualBox
if [ -x /etc/rc.d/rc.vboxdrv ]; then
/etc/rc.d/rc.vboxdrv stop
fi
- rc.local - É o último script a ser executado durante a inicialização, utilizado para chamar a execução de outros scripts e adicionar comandos para personalizar o sistema quando iniciado.
- rc.local_shutdown - Usado para para executar comandos ou interromper scripts durante o desligamento da maquina.