Entspricht Update-Grub für RHEL / Fedora / CentOS-Systeme?

36

In Ubuntu (und ich denke auch in Debian) gibt es ein System-Skript mit dem Namen, update-grubdas automatisch grub-mkconfig -omit dem richtigen Pfad für die Grub-Konfigurationsdatei ausgeführt wird.

Gibt es einen ähnlichen Befehl für Red Hat-basierte Distributionen?

Wenn nicht, woher weiß das System, wo sich die zu aktualisierende Grub-Konfigurationsdatei befindet, wenn eine neue Kernelversion installiert wird?

pqnet
quelle

Antworten:

14

Bestimmte Aktionen, die beim Installieren oder Entfernen eines RPM-Pakets ausgeführt werden müssen, sind im RPM-Paket selbst in den Abschnitten vor der Installation, nach der Installation, vor der Deinstallation und nach der Deinstallation enthalten.

Für jedes installierte RPM-Paket können Sie die RPM-Datenbank nach den genauen Skripten abfragen, die im rpmBefehl enthalten sind:

rpm -q --scripts <package-name>

Das Ausführen dieses Befehls auf einem Kernel-Paket für CentOS 6 gibt unter anderem Folgendes zurück:

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

Aus dem Handbuch:

new-kernel-package - Tool zur Skript-Kernel-Installation

HBruijn
quelle
2
Wenn Sie den gleichen Befehl auf Fedora 20 ausführen, erhalten Sie /bin/kernel-installstattdessen. Bitte bearbeiten Sie Ihre Antwort, um diese Informationen als zukünftige Referenz aufzunehmen
pqnet
3
Genau deshalb habe ich meine Antwort mit den Schritten begonnen, die nötig sind, um es herauszufinden. Ich denke, dass das Abfragen der Installationsskripte in der RPM-Welt ziemlich universell ist, um zu verstehen, wie das Kernel-Update ausgeführt wird. Auf diese Weise übersteht meine Antwort den Test der Zeit viel besser, als nur ein Tool / Befehl / Support-Skript zu benennen, das Sie bereits demonstriert haben und das sehr von der Veröffentlichung und Distribution abhängig ist.
HBruijn
3
Yeah @ HBruijn hat recht. Die Unterschiede zwischen Fedora, RHEL und CentOS sind zu groß, um eine einzige Antwort zu liefern, um besser zu zeigen, wie man sie findet.
slm
24

Nach der Analyse der Skripte in Fedora stelle ich fest, dass der Pfad der Konfigurationsdatei aus dem Symlink gelesen wird /etc/grub2.conf. Die richtige grub2-mkconfigZeile lautet also:

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

Wie in den Kommentaren erwähnt, könnte es sein /etc/grub2.cfg, oder /etc/grub2-efi.cfgauf einem UEFI - System. Tatsächlich können beide Links gleichzeitig vorhanden sein und auf unterschiedliche Stellen verweisen . Das -eFlag to readlinkwird fehlschlagen, wenn die Zieldatei nicht vorhanden ist, aber auf meinem System beide vorhanden sind ... Überprüfen Sie Ihre Befehle, denke ich.

pqnet
quelle
5
Auf CentOS 7 scheinen die Links zu sein/etc/grub2.cfg
Anthon
6
grub2-mkconfig --output = / boot / grub2 / grub.cfg scheint der genehmigte Weg im Fedora-Handbuch zu sein
Kendrick
1
Weitere CentOS 7-spezifische Grub-Schritte finden Sie im offiziellen Wiki: wiki.centos.org/HowTos/Grub2
sshow
2
Wenn Sie ein UEFI-System haben, wollen Siesudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer
10

Auf Fedora verwende ich:

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

da die Ausführung ohne Option readlinkeinen relativen Pfad zurückgibt und grub2-mkconfigeinen Fehler ausgibt:

$ 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

Ich verwende die -eOption, damit die Ausgabe auf stdout angezeigt wird, wenn der Symlink nicht in eine vorhandene Datei aufgelöst wird, damit ich weiß, dass ein Fehler aufgetreten ist.

Von der Manpage für Readlink:

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

In Fedora verweist der Symlink /etc/grub2.cfg auf die BIOS-Version. Verwenden Sie auf einem UEFI-System:

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

In CentOS:

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

Im Allgemeinen können Sie stattdessen Folgendes verwenden:

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

Siehe 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
quelle
2

editiere die grub Datei mit vioder vim, speichere die Änderungen und schließe den Editor mit: wq!

Folgendes müssen Sie ausführen, um grub in RedHat oder CentOS zu aktualisieren:

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

Das update-grubSkript in Ubuntu ist eigentlich nur ein Stummelgrub-mkconfig und kann ohne allzu große Schmerzen an andere Distributionen angepasst werden. Hier ist es in seiner Gesamtheit:

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

Diese effektiv tut , was in dem empfohlene CentOS Wiki , und in anderen Antworten hier - der einzige Unterschied ist , dass Sie ändern müssen , grubum grub2in dem Befehl und der Ausgangspfad.

mwfearnley
quelle