GDH Press: Blog » Atualizando o kernel no Debian
 
RSS

Atualizando o kernel no Debian

Publicado em 30/04/2009 – 18:33
por Carlos Morimoto

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.

» Mais posts

  1. 13 respostas para “Atualizando o kernel no Debian”

  2. Sérgio em 30 abr, 2009

    HA! Agora sim vou consegui usar o novo kernel, quando lanço o Debian 5 eu finalmente resolvi instalar a distro, corri o risco de sair do Fedora, então beleza, estou feliz com o Debian 5, mas quando saiu um novo kernel, eu atualizei e não funciona =/ não sabia deste detalhe; obrigado Morimoto.

    Abraço, Sérgio.

  3. Marcos FRM em 30 abr, 2009

    Um detalhe que não ficou claro é que muitas distribuições não atualizam a versão em si do kernel, porém aplicam patches com backports de diversas correções das versões posteriores. Por exemplo, sua distrbuição pode usar o kernel 2.6.27 já com um patch para arrumar o problema do HAL citado pelo Morimoto, que originalmente foi corrigido no 2.6.28.

    Eu já achei o máximo compilar kernel. Hoje fujo de qualquer compilação manual como o diabo foge da cruz. Que os desenvolvedores do Ubuntu, do Mandriva, do Fedora, …, se preocupem com isso.

  4. Moop em 30 abr, 2009

    Acho que faltou uma parte do texto aqui:
    "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)."
    Provavelmente um "deixem de funcionar" escapou do final da frase :).

  5. MaxRaven em 30 abr, 2009

    "Eu já achei o máximo compilar kernel. Hoje fujo de qualquer compilação manual como o diabo foge da cruz. Que os desenvolvedores do Ubuntu, do Mandriva, do Fedora, …, se preocupem com isso."

    Eu nunca achei o máximo, mas até que gostava, quando valia a pena fazer isso, hoje nem no slack vale a pena, e, se por algum motivo, a distribuição me obrigar a compilar um kernel eu deixo de usa-la no mesmo instante.
    Também sou da opinião que quem tem de se preocupar com isso é a distribuição.

  6. Diniz em 1 mai, 2009

    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)

  7. leozin em 1 mai, 2009

    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 .

  8. GoGoBoy em 1 mai, 2009

    Parágrafo 2:
    "tornando QUANSE inviável"

    abraços

  9. Tony 13 em 4 mai, 2009

    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…

  10. samuel em 5 mai, 2009

    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! :)

  11. Gortchial em 5 mai, 2009

    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?

  12. Deusdara em 6 mai, 2009

    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

    http://www.smxi.org

  13. Mark em 17 set, 2009

    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 ?

  14. luizlmarins em 17 out, 2009

    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?


Comente: