segunda-feira, 17 de novembro de 2008

Optimizações para o arranque (versão antiga)

AVISO: Com o novo sistema de init do Debian Squeeze as indicações neste post são desnecessárias. Por ainda poderem ser úteis em Debian Lenny e anteriores ficam aqui por tempo indeterminado.


Quando o Debian arranca, com todos os serviços necessários (e outros que nem tanto), é possível observar que o ambiente gráfico é das últimas coisas a ser iniciadas. Isto dá uma sensação de grande demora no arranque do sistema, agravada quando a ligação à rede não está disponível: "tem" de se esperar que o sistema detecte isso, podendo levar alguns minutos até que desista e se dê por vencido.
No extremo oposto, p.ex. em Windows, nota-se bem que quando o ambiente gráfico inicia, ainda há muita coisa a acontecer. O disco ainda está a fazer leituras, e até a ligação à rede é configurada depois de terem aparecido os ícones no desktop.

Em Debian é possível configurar o sistema de arranque dos programas, sendo possível ao utilizador configurar exactamente por que ordem quer que cada programa seja iniciado. Trata-se da manipulação de simples configurações, que não desaparecem com um apt-get remove (mas desaparecem com --purge), sem ser preciso estar a compilar ou modificar os programas em si.

Para se fazer o que se segue em consciência, talvez seja conveniente ler-se o Debian Policy Manual, o manual do sistema init (também acessível através de man init) e o manual do comando sysv-rc-conf (com man sysv-rc-conf).

ATENÇÃO: As alterações feitas no interface do programa sysv-rc-conf têm efeito IMEDIATO. Não há undos e ao sair do programa as modificações já foram aplicadas.

  1. # apt-get install sysv-rc-conf
    # man sysv-rc-conf
    # sysv-rc-conf -p

  2. Alterar, no runlevel 2, na linha do gdm, a sua prioridade para S13

  3. Alterar, no runlevel 2, na linha do hal, a sua prioridade para S14 - este serviço é usado por algumas partes do Gnome, mas vamos fazê-lo iniciar um pouco depois do gdm porque demora algum tempo a inciar - talvez não seja uma muito boa ideia para todos os sistemas, mas aqui funciona

  4. Retirar o serviço networking da coluna do runlevel S. Para que inicie só depois do ambiente gráfico, passa-se para a coluna do runlevel 2, com prioridade S15



Já agora, para evitar que as letras pisquem durante o arranque, quando aparece a frase Setting console screen modes and fonts, basta comentar as últimas linhas do ficheiro /etc/console-tools/config (adicionar um # ao início das linhas com SCREEN_FONT=...).

Inspirado no artigo: Booting Debian in 14 seconds

6 comentários:

Anónimo disse...

Boa dica! Muito útil, vou estudar o assunto um dia destes. Mas fazendo a rede iniciar só após o GDM poderá deixar-nos sem rede se o X, por alguma razão, estiver quebrado? É só uma coisa que me passou pela cabeça :)

Pitxyoki disse...

Não me parece. Quando no arranque um dos serviços falha, fica apenas com um aviso de "Failed". Nunca vi o sistema parar de iniciar os restantes serviços por isso.

Isso é o mesmo que perguntar se quando a rede ou outro serviço falha no arranque, o X deixa de iniciar. Não faz sentido. :)

Anónimo disse...

Pois, não faz sentido :)

Rui Maldonado disse...

parece-me bem, mas...
para já em dois boots apanhei o seguinte problema (ainda não tive tempo para o terceiro boot!):
O teclado nada escrevia no GDM. Saudação dos 3 dedos, e volto a tentar.
Nada escrevia na mesma.
Passado um bocadinho o GDM reinicia sozinho, e maravilha, o teclado funciona!!!!!
Mas... Ainda estou para ver se a situação se mantém durante os próximos boots.
Outro pormenor esquisito que nunca me tinha aparecido até este pequeno tweak, foram dois pontos no cimo do ecrã, igualmente espaçados como que a dividir-mo em 3 para dobrar...
No segundo monitor, fica-me apenas um a meio.
Tem cerca de 4 pixeis de largura por 3 de altura, e ficam a pouco mais de uns 8 pixeis do topo do ecrã.
Que me está a escapar?
Desde já o meu obrigado.

Pitxyoki disse...

maldonador: Como disse no post, convém saber-se bem o que se está a fazer antes de fazer este tipo de alterações.
Não faço ideia de qual pode ser o problema no teu caso, mas parece-me estar relacionado com qualquer coisa que o GDM precisa e que não está a ser iniciada a tempo. Tenta ver que serviços são iniciados depois e que podem estar relacionados com algo de que o GDM precise.

Uma possível forma de descobrir o que pode estar a provocar essa situação é fazer o GDM iniciar mais cedo, mas gradualmente. Podes ver em /etc/rc2.d/ a ordem pela qual os processão são iniciados. Começas por reduzir a prioridade do GDM, para ficar apenas atrás de um dos processos no runlevel 2. Se tudo correr bem, voltas a diminuir, para ficar atrás do seguinte, e assim sucessivamente, até ao ponto em que te der problemas: um dos serviços que ficaram para depois do GDM provavelmente será aquele de que ele precisa.

Posso dizer-te que tenho apenas os processos
sysklogd, klogd, acpid e dbus a iniciar antes do gdm. O hal aqui começa imediatamente depois do gdm, mas como também disse no post será menos arriscado se começar antes. Desde anteontem que tenho esta configuração a funcionar e ainda não tive qualquer problema. Quando/se resolveres isso, diz aqui qual era o problema!

Obrigado

Rui Maldonado disse...

Boas notícias!!!
Bastou trocar o HAL de sitio com o GDM e voltou a portar-se direitinho! (mesmo a questão dos pontinhos no cimo do ecrã!).
Obrigado pela ajuda!