Equivalente a update-grub para sistemas RHEL / Fedora / CentOS?

36

No Ubuntu (e acho que também no Debian), existe um script de sistema nomeado update-grubque é executado automaticamente grub-mkconfig -ocom o caminho correto para o arquivo de configuração do grub.

Existe algum comando semelhante para distribuições baseadas no Red Hat?

Caso contrário, como o sistema sabe onde está o arquivo de configuração do grub a ser atualizado quando uma nova versão do kernel é instalada?

pqnet
fonte

Respostas:

14

Ações específicas que precisam acontecer quando um pacote RPM é instalado ou removido são incluídas no próprio pacote RPM nas seções de pré-instalação, pós-instalação, pré-desinstalação e pós-desinstalação.

Para cada pacote RPM instalado, você pode consultar o banco de dados do RPM para obter os scripts exatos que estão incluídos no rpmcomando:

rpm -q --scripts <package-name>

A execução desse comando em um pacote de kernel para o CentOS 6 retorna entre outros:

postinstall scriptlet (using /bin/sh):
<snip>
/sbin/new-kernel-pkg --package kernel --install 2.6.32-431.17.1.el6.x86_64 || exit $?

Do manual:

new-kernel-package - ferramenta para script de instalação do kernel

HBruijn
fonte
2
executar o mesmo comando no Fedora 20 produz /bin/kernel-install. Por favor edite sua resposta para incluir esta informação para referência futura
pqnet
3
Foi exatamente por isso que comecei minha resposta com as etapas necessárias para descobrir. Acho que a consulta dos scripts de instalação provavelmente será bastante universal no mundo do RPM, ajudando você a entender como a atualização do kernel é realizada. Dessa forma, minha resposta resistirá ao teste do tempo muito melhor do que apenas nomear uma ferramenta / comando / script de suporte que você já demonstrou ser muito dependente da liberação e da distribuição.
precisa saber é o seguinte
3
Sim, @ HBruijn está certo. Há muita variabilidade no Fedora, RHEL e CentOS para fornecer uma resposta única, melhor para mostrar como encontrá-la.
slm
24

Após analisar os scripts no Fedora, percebo que o caminho do arquivo de configuração é lido no link simbólico /etc/grub2.conf. A grub2-mkconfiglinha correta é assim:

grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

Conforme observado nos comentários, pode ser /etc/grub2.cfg, ou /etc/grub2-efi.cfgem um sistema UEFI. Na verdade, os dois links podem estar presentes ao mesmo tempo e apontando para locais diferentes . O -esinalizador readlinkirá errar se o arquivo de destino não existir, mas no meu sistema ambos existiam ... Verifique seus comandos, eu acho.

pqnet
fonte
5
No CentOS 7 as ligações parece ser/etc/grub2.cfg
Anthon
6
grub2-mkconfig --output = / boot / grub2 / grub.cfg parece ser o modo aprovado nos fedora Manual
Kendrick
1
Para obter mais etapas do grub específicas do CentOS 7, consulte o wiki oficial: wiki.centos.org/HowTos/Grub2
sshow
2
Se você tem um sistema UEFI, vai querersudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer
10

No Fedora eu uso:

grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"

porque executar sem opção para readlinkretornar um caminho relativo e grub2-mkconfiggerar um erro:

$ ls -l /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Dec 10  2015 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

$ readlink /etc/grub2.cfg
../boot/grub2/grub.cfg

$ sudo grub2-mkconfig -o "$(readlink /etc/grub2.cfg)"
/usr/sbin/grub2-mkconfig: line 244: ../boot/grub2/grub.cfg.new: No such file or directory

Eu uso a -eopção para que, se o link simbólico não resolver para um arquivo existente, a saída seja exibida no stdout para que eu saiba que algo deu errado.

Na página de manual do readlink:

      -e, --canonicalize-existing
          canonicalize  by  following  every symlink in every component of
          the given name recursively, all components must exist
Setaa
fonte
6

No Fedora, o link simbólico /etc/grub2.cfg aponta para a versão do BIOS. Em um sistema UEFI, use:

$ sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

No CentOS:

$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Geralmente, você pode usar:

$ sudo grub2-mkconfig -o $(readlink -f /etc/grub2-efi.cfg)

Veja https://docs.fedoraproject.org/f27/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader.html#sec-Editing_a_Menu_Entry

theJPster
fonte
2

edite o arquivo grub com viou vim, salve as alterações e feche o editor com: wq!

É isso que você precisa executar para atualizar o grub no RedHat ou CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg
EugeneVM
fonte
0

O update-grubscript no Ubuntu é na verdade apenas um esboçogrub-mkconfig , e pode ser adaptado a outras distros sem muita dor. Aqui está em sua totalidade:

#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

Isso efetivamente faz o que é recomendado no wiki do CentOS e em outras respostas aqui - a única diferença é que você precisa mudar grubpara grub2o comando e o caminho de saída.

mwfearnley
fonte