Índice das dicas

Atualizando o kernel no Debian

Por Carlos E. Morimoto em 30 de abril de 2009 às 18h33

14

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 recentes, que são suportados adequadamente apenas por versões recentes do kernel. Um bom exemplo é o bug com relação ao HAL que afeta o Debian Lenny nos vários modelos do Eee PC (fazendo com que o som pule a cada 5 segundos, tornando quanse inviável assistir filmes ou ouvir música), que foi corrigido 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.

Por ser o principal componente do sistema, as atualizações de kernel 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 em caso de problemas.

O primeiro passo é verificar quais são as versões disponíveis. Para isso, você poe fazer uma busca por "linux-image" no gerenciador de pacotes, ou simplesmente digitar "apt-get install linux-image" 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 ao 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, e passar a atualizar o sistema em relação a ele, ou comentar a linha e voltar a usar o Stable, ou Testing.

É 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 aos 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.

14 comentáriosPor Carlos E. Morimoto. Revisado 21 de março de 2011 às 16h43

Comentários

agradecimentos
por jho-rick em 2 de dezembro de 2011 às 21h04
Cara Parabens muito obrigado segui o seu artigo e consegui atualizar o kernel,

muito obrigado e continue assim,

abraço.
 
por luizlmarins (anônimo) em 17 de outubro de 2009 às 20h52
Faltou dizer qual é o parâmetro a ser usado ...

"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 ao 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"."

Veja a saida do konsole:

debian:/home/luiz# update-initramfs
You must specify at least one of -c, -u, or -d.

Usage: /usr/sbin/update-initramfs [OPTION]...

Options:
-k [version] Specify kernel version or 'all'
-c Create a new initramfs
-u Update an existing initramfs
-d Remove an existing initramfs
-t Take over a custom initramfs with this one
-b Set alternate boot directory
-v Be verbose
-h This message

debian:/home/luiz# E aí, qual usar?
 
por Mark (anônimo) em 17 de setembro de 2009 às 12h48
Olá.
Muito bom saber isso.
Mas eu usei esse repositorio no debian lenny e ao dar update ele falou :
Falhou ao buscar http://ftp.br.debian.org/debian/sid/dists/main/contrib/binary-i386/Packages 404 Not Found [ip: 200.236.31.1 80]
Tem outro repositório ?
 
por Deusdara (anônimo) em 6 de maio de 2009 às 10h28
Olá

No Debian e outras distribuições de origem Debian este scipt funciona muito bem para atualizar kernel, instalar e cofigurar nVida/Ati, atualizações e outras instalações.

Uso no Debian Sid e Debian Testing e sidux

www.smxi.org
 
por Gortchial (anônimo) em 5 de maio de 2009 às 21h39
Eu tentei fazer a atualização do kernel como na dica, mas meu X foi pro espaço. Será que minha pobre placa de vídeo integrada do meu notebook não tem suporte no kernel 2.6.29?
 
por samuel (anônimo) em 5 de maio de 2009 às 21h05
Mais uma vez muito obrigado Morimoto, estava louco para usar o novo kernel 2.6.29, já que ouvi falar tão bem dele e sua dica me ajudou a fazê-lo! :)
 
por Tony 13 (anônimo) em 4 de maio de 2009 às 09h03
O kernel é algo para lá de complexo. Quem quer brincar ou mesmo levar a sério neste mundo que envolve o conhecimento profundo de drivers de dispositivos, memórias, processadores etc. é preciso praticamente "viver" disto, dispor de muiiito tempo.
Quando eu achei que tinha tempo, até "brinquei" de dono do mundo do software - hardware. Hoje prefiro gastar meu tempo com configurações mais ligada ao visual. Criar interfaces para meus scripts ou para softwares que ainda venham em modo texto para facilitar a vida de usuários iniciantes. Mas apesar de fazer tudo isto, nunca fui e acredito que não vou ser programador de profissão...
 
por GoGoBoy (anônimo) em 1 de maio de 2009 às 17h47
Parágrafo 2:
"tornando QUANSE inviável"

abraços
 
por leozin (anônimo) em 1 de maio de 2009 às 07h59
Diniz eu já tive sorte com a placa ATI , compilei para o kernel 2.6.26-2-486 e detectou minha placa ATI. Hoje em dia já estou mais do que cansado de saber como compilar o kernel , meu kurumin 7 já sofreu tantas atualizações que tenho pra mais de 9 kerneis nele , na tela de boot aparece uma lista hahaha mas isso tudo foi base para aprender sobre o MENUCONFING , na internet vc encontra muitos tutos sobre como compilar o kernel mas o autor nunca fala nada sobre o MENUCONFIG .
 
por Diniz (anônimo) em 1 de maio de 2009 às 00h28
Cara, lembro que na época do kuruma 7 eu compilei kernel para tentar fazer minha ATI pegar ( perda de tempo) hoje eu, no máximo, uso o script BDMod para melhorar o desempenho do ubuntu ( e é com muita preguiça)