segunda-feira, 20 de julho de 2009

Ativando e Desativando Serviços no Linux e no Ubuntu Com Upstart

  • Atenção!! - Acrescentado em 10/12/2009
Se você roda Ubuntu/Kubuntu 9.10, este artigo não vai te ajudar tanto, mas os comentários sim. Vá direto a eles. Para versões anteriores do Ubuntu e outras tantas distribuições, mesmo as mais recentes, o artigo mantém-se válido e certo.


  • Como desligar o modo gráfico nos sistemas Linux tradicionais??
"No início, não havia nada. Então, Deus carregou o INIT..."

Desligar o modo gráfico é uma das coisas mais antigas de sistemas linux e pode ser feito tradicionalmente no arquivo /etc/inittab. Ou podia... já que nas versões mais novas do Ubuntu a coisa mudou de figura!! Como é isso?? Bom, vamos aos poucos...
Primeiro, é preciso saber como isto tudo funciona. No Linux, o primeiro processo a rodar é um programa chamado INIT. O INIT é o responsável por carregar todo o sistema, roda com prioridade de root e é o primeiro a iniciar e o último a terminar. Se você tem dúvidas, digite:

ps -e | grep in


e veja quem é o processo de número "1". Isto mesmo, o INIT!! É Deus no céu e o INIT na Terra.
O INIT opera tradicionalmente em 7 diferentes modos, chamados runlevels, a saber:

0 - halt;
1 - Inicia normalmente, porém em monousuário. Usado para manutenção pesada na máquina;
2-5 - Multiusuário, sendo 3 = modo texto e 5 = modo gráfico;
6 - Encerra todos os aplicativos e reinicia a máquina.

Quando queremos mudar o modo em que o INIT está rodando, basta digitar "init [modo]". Assim, se queremos desligar a máquina, basta digitar "init 6", por exemplo!! Bem simples e fácil!!
Existe uma maneira de se selecionar um modo padrão para a inicialização do sistema. Basta irmos no arquivo /etc/inittab e vermos o que tem nele. Ali se encontram uma série de informações para configurar cada modo. É possível que se encontre uma linha parecida com esta:

# The default runlevel.
id:5:initdefault:

Isto indica que o padrão do sistema é iniciar em modo 5 (multiusuário e modo gráfico). Imagine que queremos configurar um servidor e, portanto, não precisamos do modo gráfico, mas apenas modo texto (o servidor vai ser acessado remotamente, sem necessidade da telinha bonitinha de login do KDM ou GDM). Basta trocar o modo de "5" para "3":

# The default runlevel.
id:3:initdefault:

Antigamente bastava isto e pumba: estamos em modo texto!! Mas observe que isto não funciona diretamente no Debian (ou distros baseadas nele)... por quê??


  • Onde Estão os Scripts do INIT?

O INIT tem, para cada modo, uma série de links simbólicos para os executáveis de serviços do sistema. Estes executáveis ficam todos amontoados no diretório:

/etc/init.d/


Mas cada modo (runlevel) do init tem um diretório a parte, contendo os seus links para suas configurações próprias dos executáveis de serviços do sistema. Estes diretórios são:

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

Até aí, tudo certo. O problema é que, no Debian, estes links simbólicos dizem algo mais: se eles começam com a letra "S", significa "Start", ou seja, o serviço será forçosamente iniciado. Para pará-lo, é preciso renomear o arquivo do link simbólico de modo que ele inicie com a letra "K" (de "Kill").
Assim, simplesmente mudar para o modo 3 não retira o carregamento do KDM (ou GDM), por exemplo... é preciso, além disto, renomear o link simbólico respectivo (algo como "S30kdm") para "K30kdm".
Fazendo isto, você acaba de configurar seu sistema para iniciar em modo texto. Parabéns!!


  • O Ubuntu e Outros Com Upstart

A partir das novas versões do Ubuntu (e Kubuntu, etc.), o iniciador não é mais o nosso bom e velho conhecido e camarada, o INIT, mas sim o novo Upstart. Desenvolvido inicialmente para o Ubuntu, o Upstart se propõe a ser mais eficiente e seguro que o INIT. Isto muda algumas coisas... a primeira delas é que não há mais o arquivo /etc/inittab, obviamente, já que não temos INIT nenhum. Outro problema é como ativar ou desativar o carregamento automático de serviços durante o boot.
Para resolver estes problemas insanos, apresento um comando muito simples e amigo de todas as horas, o update-rc.d, que não é exclusivo destas distros e já existe mesmo no Debian.
O update-rc.d se propõe a ativar ou desativar serviços dos scripts de inicialização do sistema de maneira mais fácil e automática. Seu uso é feito da seguinte maneira:

update-rc.d -f [servico] remove


Imagine que instalamos o SSH no Debian. Por padrão, qualquer serviço instalado no Debian é ativado automaticamente para inicialização nos modos 2-5. Assim, para que ele não carregue no boot, precisamos digitar:

update-rc.d -f ssh remove


O parâmetro "-f" significa "force" e força a remoção do link simbólico, mesmo existindo seu alvo correspondente em /etc/init.d.
Para reativar o carregamento do serviço durante o boot, basta digitar:

update-rc.d ssh defaults


Simples, né?? Vamos complicar um pouquinho então... imagine que você agora quer reativar o serviço, mas quer definir exatamente o momento em que ele vai ser carregado. Isto é definido pelo número inteiro de 2 dígitos logo após a letra "S", no nome do link simbólico. Este número define a prioridade, ordem de carregamento dos serviços. Assim, se o nosso SSH deverá ser carregado na posição 20 (antes do item de posição 21 e após o de posição 19), basta digitar:

update-rc.d ssh defaults 20

Isto criará o arquivo "S20ssh" em todos os /etc/rcX.d, sendo X entre 2 e 5 (inclusive).
Nota: para o SSH, que não é um serviço tão essencial e usualmente pode necessitar de outros serviços, isto pode ser um número muito pequeno. Tente 40 ou 50. ;-)
É possível também se definir uma prioridade diferente para a ativação e desativação do serviço. Imagine que nosso serviço deverá ser ativado na posição 20, mas desativado na posição 70 (para desativação, é considerada a ordem inversa, ou seja, são desativados os itens dos números maiores para os menores). Assim, definimos:

update-rc.d ssh defaults 20 70

Podemos ainda definir quais modos (runlevels) terão nosso serviço ativo ou não, informando os números dos modos e a nossa opção de Start ou Kill, conforme a seguir:

update-rc.d ssh start 20 2 3 4 5 . kill 70 0 1 6 .


Ou ainda, mudando de prioridade (ordem) entre os modos:

update-rc.d ssh start 20 2 4 . start 50 3 5 . kill 70 0 1 . kill 90 6 .

Isto inicia o SSH nos modos 2 a 5 e o pára nos modos 0, 1 e 6. No segundo comando, a prioridade não é a mesma para todos os modos. Serão iniciados com maior prioridade (20) apenas os modos 2 e 4, enquanto o 3 e 5 serão iniciados na posição 50, ou seja, posteriormente. Pode ser que estes modos tenham mais serviços, e acabem "empurrando" o SSH mais para a frente. Analogamente, nos modos 0 e 1, o SSH morre com prioridade 70, enquanto que no modo 6, onde talvez mais serviços serão desativados, ele morre com prioridade 90.


  • Enfim, Como Desativar o Modo Gráfico no Linux?

Como o modo gráfico é um serviço, basta desativar este serviço. Se seu Gerenciador de Janelas é o KDE, o serviço é o KDM (K Desktop Manager). Se é o Gnome, então o serviço será o GDM (Gnome Desktop Manager). Se não é nenhum destes, então informe-se com sua distro qual é o seu gerenciador de janelas e qual o serviço que ele dispara... Mas, para desativá-lo, utilize, genericamente, o comando:

update-rc.d -f kdm remove [ou]
update-rc.d -f gdm remove


  • Conclusão

Ativar ou desativar o modo gráfico no Linux é apenas compreender que o modo gráfico é um serviço, e este pode ser cadastrado via links simbólicos nos diversos modos de carregamento do sistema, assim como todos os outros serviços (como o ssh, seu servidor de e-mail, de impressão, de som, banco de dados, firewall, DHCP, FTP, servidor HTTP, etc.). Se seu gerenciador de inicialização é o INIT, isto pode ser feito de duas maneiras: manualmente, ou com o comando update-rc.d. Se você usa o Upstart em lugar do INIT (que é opção padrão no Ubuntu 9.04), então o melhor e mais prático é usar o comando update-rc.d.
O Upstart é uma opção ao INIT, desenvolvida para o (e pelo pessoal do) Ubuntu. É mais moderno e seguro, de arquitetura orientada a eventos. Está presente desde o Ubuntu 6.10, Fedora 9, no Debian (como opção), dentre outras distros. Porém, é mais chatinho de configurar os serviços. Assim, a melhor opção é utilizar o comando update-rc.d.

O objetivo deste artigo é ajudar tanto a quem está configurando seus serviços pela primeira vez quanto àqueles que sempre o fizeram manualmente e, de repente, sentiram-se inseguros com o Upstart.
Espero ter ajudado a todos!! E, como sempre, não fique calado diante do Pajé!!!! COMENTE!!!!!

4 comentários:

Charles Albert disse...

Nada disso funciona para o Ubunntu 9.10.
Solução aqui:
http://ubuntuforums.org/showthread.php?t=1322949

Explicação detalhada aqui:
http://newyork.ubuntuforums.org/showthread.php?t=1305659

Documentação Upstart aqui:
http://upstart.ubuntu.com/getting-started.html

O Pajé disse...

Olá Charles!!

Obrigado pela sua contribuição!! Quando este artigo foi escrito, o Ubuntu 9.10 ainda não tinha sido lançado. No afã de cumprir o prometido (ou seja, diminuir o tempo de inicialização do Ubuntu para, no máximo, 5 segundos, em uma máquina razoável), o gerenciamento de inicialização foi modificado de novo. O Upstart, já presente no Ubuntu 9.04, ainda tinha os modos do INIT. Agora a coisa mudou um pouco e, creio, das versões 9.10 para frente talvez este artigo ajude pouco. No entanto, ele ainda é válido para diversas distribuições.

Alexandre Gomes disse...

Parabéns pelo post, bem explicado e objetivo.

O Pajé disse...

Muito obrigado, Alexandre!! Fico grato e desejo que retorne sempre ao Pajé!!