Atualizei do Fedora 38 para o Fedora 40 de forma mais ou menos tranquila. No entanto, quando novos kernels são instalados, a configuração do grub não é atualizada.
O comando grep vmlinuz /boot/grub2/grub.cfg
mostra
linux /boot/vmlinuz-6.8.8-300.fc40.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
linux /boot/vmlinuz-6.8.8-100.fc38.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
linux /boot/vmlinuz-6.3.12-200.fc38.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
mas não tenho o 6.3.12 instalado e ls /boot/loader/entries
me dá
vmlinuz-6.8.8-100.fc38.x86_64
vmlinuz-6.8.8-300.fc40.x86_64
vmlinuz-6.8.9-300.fc40.x86_64
concordando rpm -q kernel
também com:
kernel-6.8.8-100.fc38.x86_64
kernel-6.8.8-300.fc40.x86_64
kernel-6.8.9-300.fc40.x86_64
Sim, grub2-mkconfig -o /boot/grub2/grub.cfg
restaura a configuração, com o comando grep vmlinuz /boot/grub2/grub.cfg
agora dando
linux /boot/vmlinuz-6.8.9-300.fc40.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
linux /boot/vmlinuz-6.8.8-300.fc40.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
linux /boot/vmlinuz-6.8.8-100.fc38.x86_64 root=UUID=0e08d465-d601-478f-be17-a2663626588c ro
mas grub2-mkconfig
não deve ser executado toda vez que um kernel for instalado.
O que está acontecendo?
Com o
/boot/loader/entries
existente e atualizado, não deve haver menção a kernels individuais/boot/grub2/grub.cfg
: em vez disso, a configuração deve invocar o comando GRUBblscfg
que fará com que o GRUB leia/boot/loader/entries
e use as informações contidas nele. Em outras palavras,grep blscfg /boot/grub2/grub.cfg
deve retornar algo como:Se você
grub2-mkconfig
atualizar a lista de kernels para/boot/grub2/grub.cfg
, significa que você deve ter uma versão antiga do script/etc/grub.d/10_linux
ainda ativa ou deve ter adicionadoGRUB_ENABLE_BLSCFG=false
ao/etc/default/grub
.No entanto, desde o RHEL 8 (e versões correspondentes do Fedora), os scripts padrão de pós-instalação do kernel agora assumem que ele
blscfg
está em uso e, portanto,grub2-mkconfig
não precisa ser invocado após a instalação de um novo kernel, a menos queGRUB_ENABLE_BLSCFG=false
seja usado no/etc/default/grub
.No RHEL/Fedora, os scripts pós-transação do pacote do kernel serão invocados
/bin/kernel-install add <kernel version> ...
na instalação e/bin/kernel-install remove <kernel-version> ...
na remoção. O/bin/kernel-install
, por sua vez, invocará quaisquer scripts que encontrar nos diretórios/etc/kernel/install.d/
e/usr/lib/kernel/install.d
(com os arquivos no diretório anterior substituindo quaisquer arquivos com os mesmos nomes no último) com argumentosadd
/remove
e de versão do kernel semelhantes.O último script a ser executado na instalação e na remoção deve ser
/usr/lib/kernel/install.d/99-grub-mkconfig.install
: ele é executadogrub2-mkconfig
, mas somente se/etc/default/grub
tiver sidoGRUB_ENABLE_BLSCFG
definido com a string exatafalse
. Qualquer desvio fará com que o script assuma que o bootloader é capaz de usar/boot/loader/entries
e, portanto, o script será encerrado sem fazer nada.Se tudo isso parecer bom, dê uma olhada em seu
/etc/grub.d/
diretório. Você talvez tenha um10_linux.rpmnew
ou similar aí?Se você tiver esse arquivo, faça backup do
10_linux
arquivo antigo (possivelmente personalizado) e substitua-o pelo10_linux.rpmnew
arquivo (ou similar) e executegrub2-mkconfig -o /boot/grub2/grub.cfg
uma última vez.Aparentemente, o
/etc/grub.d/10_linux
arquivo pode vir dogrub2-tools
pacote, portanto, um arquivodnf reinstall grub2-tools
pode ser necessário se não houver10_linux.rpmnew
nenhum arquivo semelhante presente.