Atualizando o kernel no Debian

As atualizações de kernel são um tema “místico” dentro do Linux, envolvendo mais mitos e lendas do que, possivelmente, qualquer outro aspecto do sistema. Até hoje perdura, por exemplo, o mito de que é possível obter um grande ganho de desempenho simplesmente por recompilar o kernel desabilitando componentes não usados, algo que deixou de fazer muita diferença desde que o kernel ganhou suporte a módulos, quase 15 anos atrás.

O principal motivo para atualizar o kernel é ter acesso a novos drivers e correções para problemas, uma necessidade comum para quem usa PCs com componentes muito atuais, que são suportados adequadamente apenas por versões recentes do kernel. Um bom exemplo é o bug com relação ao HAL que comentei no tópico sobre o DebianEeePC, que foi solucionado a partir do kernel 2.6.28.

Você pode encontrar detalhes sobre as atualizações e mudanças incluídas em cada versão do kernel (e poder ver se seu problema já foi corrigido) no:
http://wiki.kernelnewbies.org/LinuxChanges

Em resumo, instalar uma nova versão do kernel envolve: instalar o executável principal na pasta “/boot” (gerando também um arquivo initrd, caso utilizado), instalar os módulos em uma pasta no diretório “/lib/modules” (criando uma nova pasta, com uma numeração correspondente à versão do kernel) e atualizar o gerenciador de boot, incluindo a opção de inicializar o novo kernel.

Como o kernel é o principal componente do sistema, as atualizações são algumas vezes problemáticas (como ao atualizar alguma instalação antiga, que ainda utilize um kernel da série 2.4 para um kernel da série 2.6), mas, nas versões atuais do Debian (e da maioria das outras distribuições), atualizar o kernel é uma tarefa bastante simples, não muito diferente de atualizar qualquer outro pacote do sistema.

Ao instalar o novo kernel, um script de pós instalação se encarrega de ativar os novos módulos e adicionar uma entrada no menu do grub. Concluída a instalação, basta reiniciar o micro e você tem a opção de dar boot usando a nova versão. O kernel antigo continua disponível até ser manualmente removido, o que permite que você volte a ele caso tenha problemas.

O primeiro passo é verificar quais são as versões disponíveis. Para isso, você pode fazer uma busca por “linux-image” no gerenciador de pacotes, ou simplesmente digitar “apt-get install linux-image<tab><tab>” no terminal para ver as possibilidades.

De uma forma geral, as atualizações de kernel disponíveis no Debian estável são bem espaçadas. Em geral são disponibilizadas apenas atualizações menores, destinadas a corrigirem bugs. Entretanto, você pode ter acesso a versões bem mais atualizadas ao ativar o repositório do Sid no “/etc/apt/sources.list”, adicionando a linha:

deb http://ftp.br.debian.org/debian/ sid main contrib non-free

Após rodar o “apt-get update”, você pode instalar o novo kernel a partir do repositório instável, como em:

# apt-get install linux-image-2.6.29-1-686

No final da instalação do pacote, você verá uma série de mensagens exibidas pelo script de pós instalação, como em:

Configurando linux-image-2.6.29-1-686 (2.6.29-3) ...
Running depmod.
Running update-initramfs.
update-initramfs: Generating /boot/initrd.img-2.6.29-1-686

Running update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.29-1-686
Found kernel: /boot/vmlinuz-2.6.26-2-686
Updating /boot/grub/menu.lst ... done

Estes são justamente os passos de instalação de um novo kernel, que são executados automaticamente pelo script.

Tudo começa com a instalação dos pacotes propriamente ditos, que instalam o executável principal do kernel e os módulos. Em seguida, o script executa o comando “depmod -a”, que verifica os módulos instalados e gera a tabela com as dependências entre eles.

O terceiro passo é executar o script “update-initramfs”, que verifica os módulos atualmente em uso (do kernel antigo), gera uma lista dos módulos que são necessários na etapa inicial do boot e, a partir dela, gera um arquivo “initrd.img” correspondente à nova versão do kernel, que é salvo na pasta “/boot”.

As mensagens seguintes são executadas pelo “update-grub”, o script responsável por atualizar o gerenciador de boot, que é também executado automaticamente. Ele adicionará novas entradas no início do arquivo “/boot/grub/menu.lst”, correspondentes ao novo kernel, como em:

title Debian GNU/Linux, kernel 2.6.29-1-686
root (hd0,2)
kernel /boot/vmlinuz-2.6.29-1-686 root=/dev/sda3 ro quiet
initrd /boot/initrd.img-2.6.29-1-686

Em geral, versões próximas do kernel não possuem dependências externas o que permite que você atualize apenas o kernel em relação ao Unstable, sem precisar necessariamente migrar todo o sistema. A partir daí, você tem a opção de manter a linha do Sid no sources.list, e passar a atualizar o sistema em relação a ele, ou comentar a linha e voltar a usar o Stable.

É interessante instalar também o pacote correspondente do “linux-headers”, que inclui os headers do kernel, necessários para compilar módulos adicionais:

# apt-get install linux-headers-2.6.29-1-686 

Atualizar o kernel faz com que todos os drivers instalados manualmente (como os drivers da nVidia, driver para placas wireless com chipset Atheros, etc) e também aplicativos que utilizem módulos de kernel (como o VMware) deixem de funcionar, uma vez que eles precisam ser compilados especificamente para o kernel em uso.

Se você estiver usando o driver 3D da nVidia, por exemplo, o vídeo deixará de abrir ao dar boot com o novo kernel, fazendo com que você precise reinstalar o driver manualmente a partir do terminal de texto. Para evitar isso, uma opção seria mudar o driver de vídeo na configuração do X de “nvidia” para “nv” antes da atualização, deixando para desfazer a mudança depois de reinstalar o driver.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X