Équivalent de update-grub pour les systèmes RHEL / Fedora / CentOS?

36

Dans Ubuntu (et j'imagine aussi dans Debian), il existe un script système nommé update-grubqui s'exécute automatiquement grub-mkconfig -oavec le chemin correct pour le fichier de configuration grub.

Existe-t-il une commande similaire pour les distributions basées sur Red Hat?

Sinon, comment le système sait-il où se trouve le fichier de configuration grub à mettre à jour lorsqu'une nouvelle version du noyau est installée?

pqnet
la source

Réponses:

14

Les actions spécifiques devant être effectuées lors de l'installation ou de la suppression d'un package RPM sont incluses dans le package RPM lui-même dans les sections de pré-installation, de post-installation, de pré-désinstallation et de post-désinstallation.

Pour chaque package RPM installé, vous pouvez interroger la base de données RPM pour connaître les scripts exacts inclus dans la rpmcommande:

rpm -q --scripts <package-name>

L'exécution de cette commande sur un package de noyau pour CentOS 6 renvoie entre autres:

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

Du manuel:

new-kernel-package - outil pour écrire le script d'installation du noyau

HBruijn
la source
2
exécuter à la place la même commande sur Fedora 20 /bin/kernel-install. Veuillez modifier votre réponse pour inclure ces informations à titre de référence
pqnet
3
C'est exactement pourquoi j'ai commencé ma réponse avec les étapes nécessaires pour le savoir. Je pense que l'interrogation des scripts d'installation sera probablement assez universelle dans le monde RPM pour vous aider à comprendre comment la mise à jour du noyau est effectuée. De cette façon, ma réponse résistera mieux à l'épreuve du temps que la simple nomination d'un outil / commande / script de support dont vous avez déjà démontré qu'il dépendait beaucoup de la version et de la distribution.
HBruijn
3
Ouais @ HBruijn a raison. Il y a trop de variabilité dans Fedora, RHEL et CentOS pour fournir une réponse unique, mieux montrer comment la trouver.
slm
24

Après avoir analysé les scripts dans Fedora, je me rends compte que le chemin du fichier de configuration est lu à partir du lien symbolique /etc/grub2.conf. La bonne grub2-mkconfigligne est donc:

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

Comme indiqué dans les commentaires, cela pourrait être le cas /etc/grub2.cfg, ou /etc/grub2-efi.cfgsur un système UEFI. En fait, les deux liens peuvent être présents en même temps et pointer vers des emplacements différents . L’ -eindicateur to readlinkaffichera une erreur si le fichier cible n’existe pas, mais que sur mon système, les deux existaient ... Vérifiez vos commandes, je suppose.

pqnet
la source
5
Sur CentOS 7, les liens semblent être/etc/grub2.cfg
Anthon
6
grub2-mkconfig --output = / boot / grub2 / grub.cfg semble être la méthode approuvée dans le manuel de fedora
Kendrick
1
Pour plus d’étapes de grub spécifiques à CentOS 7, consultez le wiki officiel: wiki.centos.org/HowTos/Grub2
sshow
2
Si vous avez un système UEFI, vous voudrezsudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer
10

Sur Fedora j'utilise:

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

car exécuter sans option readlinkrenvoie un chemin relatif et grub2-mkconfigdonne une erreur:

$ 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

J'utilise l' -eoption de sorte que si le lien symbolique ne résout pas en un fichier existant, la sortie s'affiche sur la sortie standard afin que je sache que quelque chose s'est mal passé.

Depuis la page de manuel de readlink:

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

Dans Fedora, le lien symbolique /etc/grub2.cfg pointe vers la version du BIOS. Sur un système UEFI, utilisez:

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

En CentOS:

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

Généralement, vous pouvez utiliser à la place:

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

Voir 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

le Jpster
la source
2

éditez le fichier grub avec viou vim, enregistrez les modifications et fermez l'éditeur avec: wq!

Voici ce que vous devez exécuter pour mettre à jour grub dans RedHat ou CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg
EugeneVM
la source
0

Le update-grubscript sous Ubuntu n’est en réalité qu’un condenségrub-mkconfig , et il peut être adapté à d’autres distributions sans trop de peine. La voici dans son intégralité:

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

Cela correspond effectivement à ce qui est recommandé dans le wiki CentOS et dans d’autres réponses: la seule différence est que vous devez passer grubà grub2dans la commande et le chemin de sortie.

Mwfearnley
la source