Dans Ubuntu (et je suppose aussi dans Debian) il y a un script système nommé update-grub
qui exécute automatiquement grub-mkconfig -o
avec 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?
Des actions spécifiques qui doivent se produire lorsqu'un package RPM est installé ou supprimé sont incluses dans le package RPM lui-même dans les sections pré-installation, post-installation, pré-désinstallation et post-désinstallation.
Pour chaque package RPM installé, vous pouvez interroger la base de données RPM pour les scripts exacts qui sont inclus avec la commande rpm
:
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 installer le script du noyau
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-mkconfig
la ligne est donc:
grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"
Comme indiqué dans les commentaires, il pourrait être /etc/grub2.cfg
, ou /etc/grub2-efi.cfg
sur un système UEFI. En fait, les deux liens peuvent être présents en même temps et pointant vers des emplacements différents. Le -e
flag to readlink
affichera une erreur si le fichier cible n'existe pas, mais sur mon système les deux existaient ... Vérifiez vos commandes, je suppose.
Sur Fedora j'utilise:
grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"
car l'exécution sans option de readlink
renvoie un chemin relatif et grub2-mkconfig
donne 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
Je utilise l -e
option pour que si le lien symbolique ne se résout pas en un fichier qui existe, la sortie s'affiche sur stdout, donc je sais 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
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
Dans CentOS:
$ Sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
En règle générale, vous pouvez utiliser à la place:
$ Sudo grub2-mkconfig -o $(readlink -f /etc/grub2-efi.cfg)
éditez le fichier grub avec vi
ou 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
Le update-grub
le script dans Ubuntu n'est en fait qu'un stub pour grub-mkconfig
, et il peut être adapté à d'autres distributions sans trop de douleur. Le voici dans son intégralité:
#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
Cela fait effectivement ce qui est recommandé dans le wiki CentOS , et dans d'autres réponses ici - la seule différence est que vous devez changer grub
en grub2
dans la commande et le chemin de sortie.
A travaillé sur CentOS Linux 8 -
Sudo grub2-mkconfig --output=/boot/grub2/grub.cfg