Dica rápida para os colegas que sofrem para solucionar problemas complexos remotamente.
Recentemente, tive que trocar remotamente o kernel de um servidor
GNU/Linux, só que todos que já trocaram alguma vez o kernel, sabem que nem sempre as coisas ocorrem como previsto, pode ocorrer um kernel panic ou coisas do tipo.
Vamos à estratégia para contornar a situação. Supomos então:
- Que você saiba instalar o kernel;
- Possua acesso via SSH ao servidor e você saiba como acessar;
- Bootloader: LILO;
- Kernel atual: 2.6.XX;
- Kernel novo: 2.6.ZZ;
- Boot padrão: 2.6.XX;
- Queremos trocar do kernel 2.6.XX para o kernel 2.6.ZZ.
Passos a seguir:
1. Instalaremos o kernel 2.6.ZZ e configuraremos o LILO para ter a opção do kernel 2.6.ZZ.
Quando eu digitar
lilo, deve aparecer algo parecido com as 2 linhas abaixo com o "*" (asterisco)) no
2.6.XX, que já é a opção de boot atual, ou seja, somente adicionamos a opção
2.6.ZZ:
# lilo
2.6.XX + *
2.6.ZZ +
2. Vamos configurar agora, para o nosso próximo boot e somente o próximo boot ocorrer pelo kernel
2.6.ZZ:
# lilo -R 2.6.ZZ
3. Legal, e se a máquina travar? Bom, para isso vamos configurar para o servidor rebootar caso ocorra kernel panic.
Edite o arquivo "/etc/sysctl.conf":
# mcedit /etc/sysctl.conf
E adicione ao final, a opção:
kernel.panic=5
O que faz com que a máquina reinicie 5 segundos após um kernel panic.
4. Legal, se acontecer um kernel panic, tudo bem. Mas, e se a placa de rede não subir?
Para contornar, faremos o seguinte:
Vamos criar um arquivo vazio chamado "/rebootnow":
# touch /rebootnow
Agora, dentro do "/etc/rc.local", vamos adicionar uma verificação que vai ocorrer 5 minutos após o servidor ter reiniciado e, caso este arquivo exista, o servidor vai rebootar.
Dentro de "/etc/rc.local", adicione:
(sleep 300; [ -e /rebootnow ] && reboot ) &
Troque os
300, se achar que 5 minutos é muito ou pouco. Em geral, eu utilizo mesmo é 3 minutos, no caso 180.
5. Legal, precavido de quase tudo. Agora digite
reboot e fique pingando o servidor para ver se ele volta.
Assim que voltar, se conseguir pegá-lo com o novo kernel, remova o arquivo "/rebootnow" para evitar que ele reboote, caso ocorra kernel panic ou não consiga pegá-lo novamente.
Na pior das hipóteses, em 7 minutos ele deve voltar do mesmo jeito que estava antes.
* Importante: caso consiga pegá-lo, altere o LILO para ele bootar pelo novo kernel 2.6.ZZ.
Boa sorte!