Como instalar e atualizar manualmente um novo kernel no Gentoo

Visão geral

Quando o emerge @world ou a instalação de sys-kernel/gentoo-sources traz novas kernel sources, isso não troca automaticamente o kernel em execução. Instalar as fontes é só a primeira parte. Para realmente usar o kernel novo, você precisa:

  1. apontar /usr/src/linux para as fontes novas;
  2. reaproveitar a configuração antiga;
  3. ajustar as novas opções;
  4. compilar e instalar o kernel;
  5. atualizar o bootloader;
  6. reiniciar e testar.

Esse é o fluxo manual. Simples no conceito, mas cheio de detalhes que, se você ignorar, quebram o boot.

Antes de começar

Confira estas coisas antes de mexer:

  • você precisa estar como root;
  • se /boot for uma partição separada, ela precisa estar montada antes de instalar o kernel;
  • se você usa initramfs, ele precisa ser recriado;
  • se você usa módulos externos como NVIDIA, VirtualBox, ZFS ou similares, eles podem precisar ser recompilados para o kernel novo;
  • não remova o kernel antigo antes de confirmar que o novo inicializa corretamente.

Também vale salvar a versão atual do kernel para referência:

uname -r

1) Instale ou confirme as novas fontes do kernel

Na prática, novas versões costumam aparecer quando você atualiza o sistema:

emerge --ask --update --deep --with-bdeps=y --newuse @world

Se quiser instalar ou atualizar diretamente as fontes do kernel:

emerge --ask sys-kernel/gentoo-sources

Observação: o pacote sys-kernel/gentoo-sources oferece as fontes do kernel com os patches do Gentoo. Ele também possui a USE flag symlink, que pode atualizar automaticamente o link /usr/src/linux para a versão recém-instalada.

2) Aponte /usr/src/linux para o kernel novo

Liste as fontes disponíveis:

eselect kernel list

Saída típica:

Available kernel symlink targets:
  [1] linux-6.6.130-gentoo *
  [2] linux-6.6.134-gentoo

O asterisco marca o kernel atualmente selecionado pelo link simbólico.

Agora troque para a nova versão:

eselect kernel set 2

Se preferir fazer isso manualmente:

ln -sf /usr/src/linux-6.6.134-gentoo /usr/src/linux
ls -l /usr/src/linux

3) Entre no diretório correto

Isso aqui parece banal, mas não é. Mesmo que você já esteja em /usr/src/linux, entre de novo depois de mudar o symlink. Caso contrário, seu shell pode continuar apontando para o diretório antigo.

cd /usr/src/linux
pwd

4) Copie a configuração do kernel antigo

A forma mais prática é reaproveitar a configuração do kernel atual.

Opção A — a partir do kernel em execução

Se o kernel atual expõe a configuração em /proc/config.gz:

zcat /proc/config.gz > /usr/src/linux/.config

Opção B — a partir do diretório das fontes antigas

cp /usr/src/linux-OLD/.config /usr/src/linux/.config

Opção C — a partir de /boot

cp /boot/config-$(uname -r) /usr/src/linux/.config

Faça backup antes de continuar

cp /usr/src/linux/.config /usr/src/linux/.config.backup

Sem backup, você está pedindo para perder horas de ajuste fino por burrice evitável.

5) Adapte a configuração antiga para o kernel novo

Aqui está um ponto em que muito tutorial velho erra.

Método interativo: make oldconfig

Use isso se quiser responder manualmente às novas opções:

make oldconfig

Quando aparecer algo como:

Some new option (CONFIG_EXEMPLO) [Y/n/m/?] (NEW)

significa:

  • Y = embutir no kernel;
  • n = desativar;
  • m = compilar como módulo;
  • ? = mostrar ajuda.

A opção em maiúsculo é a padrão.

Método automático: make olddefconfig

Use isso se quiser aceitar automaticamente os padrões para todas as opções novas:

make olddefconfig

Ver só as opções novas

Antes de decidir, você pode listar o que é novo:

make listnewconfig

Revisar com interface de menu

Depois da conversão, revise o resultado:

make menuconfig

Isso é importante porque às vezes o kernel adiciona ou remove opções, altera dependências internas e muda o contexto de alguns drivers.

Comparar configurações antiga e nova

Se você quiser ver o que mudou com precisão:

cp .config .config.new
cp .config.backup .config.old
/usr/src/linux/scripts/diffconfig .config.old .config.new

6) Compile o kernel

Se você usa módulos externos, pode ser útil preparar a árvore antes:

make modules_prepare

Agora compile o kernel:

make -j$(nproc)

Instale os módulos:

make modules_install

Instale o kernel:

make install

O que make install faz de verdade?

Se sys-kernel/installkernel estiver instalado, o make install delega a instalação para ele. Isso é melhor do que simplesmente copiar o arquivo manualmente, porque o installkernel pode:

  • instalar o kernel com nome versionado;
  • integrar a geração de initramfs;
  • ajudar na atualização do bootloader;
  • trabalhar com UKI e outros fluxos modernos.

7) Recrie o initramfs, se você usa um

Nem todo sistema Gentoo precisa de initramfs, mas muitos precisam. Exemplos comuns:

  • root em LUKS;
  • LVM;
  • RAID;
  • ZFS;
  • drivers essenciais compilados como módulo.

Se o seu sistema depende disso, recrie o initramfs do kernel novo com a ferramenta que você já usa, como dracut, genkernel ou outra.

Exemplo simples com dracut:

dracut

Se você usa um fluxo mais enxuto, também pode haver casos em que dracut --host-only --no-kernel faça mais sentido. Isso depende de como seu sistema foi montado e do que precisa entrar no initramfs.

Se você não sabe se usa initramfs, descubra antes de reiniciar. Adivinhar aqui é a forma mais idiota de transformar uma atualização simples em rescue boot.

8) Atualize o bootloader

GRUB

Se /boot for separado, monte antes:

mount /boot

Depois gere a configuração:

grub-mkconfig -o /boot/grub/grub.cfg

systemd-boot

Em alguns cenários, a entrada do novo kernel pode ser gerada automaticamente durante a instalação.

9) Reinicie e confirme

Reinicie a máquina:

reboot

Depois confirme:

uname -r

Se a versão mostrada for a nova, ótimo.

Mas não seja precipitado: ainda falta validar tudo que importa.

Checklist pós-boot

Verifique pelo menos:

  • rede funcionando;
  • sistema de arquivos montando corretamente;
  • vídeo e aceleração, se aplicável;
  • áudio;
  • Wi-Fi/Bluetooth, se aplicável;
  • módulos externos carregando sem erro;
  • logs sem explosão de erro:
dmesg --level=err,warn

10) Só depois limpe o kernel antigo

Se tudo estiver funcionando, aí sim você pode limpar o que sobrou.

Remover sobras construídas com eclean-kernel

Instale a ferramenta:

emerge --ask app-admin/eclean-kernel

Primeiro veja o que seria removido:

eclean-kernel -n 2 -p

Se a prévia estiver correta, remova de fato:

eclean-kernel -n 2

Isso costuma ser mais seguro do que apagar arquivos na mão, porque a ferramenta também tenta limpar imagens de kernel, System.map, initramfs, módulos em /lib/modules e até árvores de fontes relacionadas.

Observações importantes que faltavam no texto original

1. make silentoldconfig está obsoleto para esse fluxo

Muita documentação antiga ainda cita make silentoldconfig, mas o caminho normal hoje é:

  • make oldconfig para responder perguntas manualmente;
  • make olddefconfig para aceitar tudo no padrão.

2. Instalar as fontes não instala o kernel em execução

Ter um novo gentoo-sources no sistema não muda o kernel carregado no boot. Você precisa compilar, instalar e reiniciar.

3. O bootloader precisa ser atualizado

Compilar o kernel e esquecer o GRUB é erro clássico. O sistema vai continuar inicializando o kernel antigo ou simplesmente falhar.

4. Initramfs pode ser obrigatório

Se o seu sistema depende de initramfs e você não gerar um compatível com o kernel novo, o boot pode quebrar.

5. Módulos externos precisam de atenção

Se você usa drivers ou módulos fora da árvore principal do kernel, eles podem precisar ser recompilados para a nova versão.

Resumo rápido

Fluxo mínimo, sem enfeite:

emerge --ask sys-kernel/gentoo-sources
eselect kernel list
eselect kernel set N
cd /usr/src/linux
zcat /proc/config.gz > .config
cp .config .config.backup
make oldconfig          # ou: make olddefconfig
make menuconfig         # opcional, mas recomendado
make -j$(nproc)
make modules_install
mount /boot             # se /boot for separado
make install
grub-mkconfig -o /boot/grub/grub.cfg   # se usar GRUB
reboot
uname -r

Conclusão

Atualizar o kernel manualmente no Gentoo não é difícil. O que existe é espaço demais para erro bobo:

  • esquecer de trocar o symlink;
  • copiar a .config errada;
  • aceitar opções novas sem pensar;
  • não recriar initramfs;
  • não atualizar o bootloader;
  • apagar o kernel antigo cedo demais.

Se você seguir a ordem certa e validar o boot antes da limpeza, o processo fica previsível e repetível.

Se quiser continuar nessa trilha de Gentoo, manutenção de sistema e infraestrutura, esta nota conversa naturalmente com Laboratório e com o restante do arquivo técnico em Tools.