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:
/usr/src/linux para as fontes novas;Esse é o fluxo manual. Simples no conceito, mas cheio de detalhes que, se você ignorar, quebram o boot.
Confira estas coisas antes de mexer:
root;/boot for uma partição separada, ela precisa estar montada antes de instalar o kernel;Também vale salvar a versão atual do kernel para referência:
uname -r
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-sourcesoferece as fontes do kernel com os patches do Gentoo. Ele também possui a USE flagsymlink, que pode atualizar automaticamente o link/usr/src/linuxpara a versão recém-instalada.
/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
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
A forma mais prática é reaproveitar a configuração do kernel atual.
Se o kernel atual expõe a configuração em /proc/config.gz:
zcat /proc/config.gz > /usr/src/linux/.config
cp /usr/src/linux-OLD/.config /usr/src/linux/.config
/boot¶cp /boot/config-$(uname -r) /usr/src/linux/.config
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.
Aqui está um ponto em que muito tutorial velho erra.
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.
make olddefconfig¶Use isso se quiser aceitar automaticamente os padrões para todas as opções novas:
make olddefconfig
Antes de decidir, você pode listar o que é novo:
make listnewconfig
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.
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
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
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:
Nem todo sistema Gentoo precisa de initramfs, mas muitos precisam. Exemplos comuns:
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.
Se /boot for separado, monte antes:
mount /boot
Depois gere a configuração:
grub-mkconfig -o /boot/grub/grub.cfg
Em alguns cenários, a entrada do novo kernel pode ser gerada automaticamente durante a instalação.
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.
Verifique pelo menos:
dmesg --level=err,warn
Se tudo estiver funcionando, aí sim você pode limpar o que sobrou.
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.
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.Ter um novo gentoo-sources no sistema não muda o kernel carregado no boot. Você precisa compilar, instalar e reiniciar.
Compilar o kernel e esquecer o GRUB é erro clássico. O sistema vai continuar inicializando o kernel antigo ou simplesmente falhar.
Se o seu sistema depende de initramfs e você não gerar um compatível com o kernel novo, o boot pode quebrar.
Se você usa drivers ou módulos fora da árvore principal do kernel, eles podem precisar ser recompilados para a nova versão.
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
Atualizar o kernel manualmente no Gentoo não é difícil. O que existe é espaço demais para erro bobo:
.config errada;Se você seguir a ordem certa e validar o boot antes da limpeza, o processo fica previsível e repetível.