Odpowiednik aktualizacji-grub dla systemów RHEL / Fedora / CentOS?

36

W Ubuntu (i chyba również w Debianie) istnieje skrypt systemowy o nazwie, update-grubktóry automatycznie wykonuje się grub-mkconfig -oz prawidłową ścieżką do pliku konfiguracyjnego grub.

Czy istnieje podobne polecenie dla dystrybucji opartych na Red Hat?

Jeśli nie, to skąd system wie, gdzie plik konfiguracyjny gruba należy zaktualizować po zainstalowaniu nowej wersji jądra?

pqnet
źródło

Odpowiedzi:

14

Konkretne działania, które muszą się zdarzyć, gdy pakiet RPM jest instalowany lub usuwany, są zawarte w samym pakiecie RPM w sekcjach przedinstalacyjnej, po instalacji, przed deinstalacją i po deinstalacji.

Dla każdego zainstalowanego pakietu RPM możesz zapytać bazę danych RPM o dokładne skrypty zawarte w rpmpoleceniu:

rpm -q --scripts <package-name>

Uruchomienie tej komendy na pakiecie jądra dla CentOS 6 zwraca między innymi:

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

Z instrukcji:

new-kernel-package - narzędzie do instalacji jądra skryptu

HBruijn
źródło
2
uruchomienie tego samego polecenia na Fedorze 20 daje /bin/kernel-installzamiast tego. Edytuj swoją odpowiedź, aby dołączyć te informacje do wykorzystania w przyszłości
pqnet
3
Właśnie dlatego zacząłem swoją odpowiedź od kroków potrzebnych do dowiedzenia się. Sądzę, że odpytywanie skryptów instalacyjnych może być dość uniwersalne w świecie RPM, pomagając zrozumieć, w jaki sposób odbywa się aktualizacja jądra. W ten sposób moja odpowiedź wytrzyma próbę czasu znacznie lepiej niż tylko nazywanie narzędzia / polecenia / skryptu wsparcia, który już pokazałeś, jest bardzo zależny od wydania i dystrybucji.
HBruijn
3
Tak @ HBruijn ma rację. Istnieje zbyt duża zmienność między Fedorą, RHEL i CentOS, aby dać jedną odpowiedź, lepiej pokazać, jak ją znaleźć.
slm
24

Po przeanalizowaniu skryptów w Fedorze, zdaję sobie sprawę, że ścieżka pliku konfiguracyjnego jest odczytywana z dowiązania symbolicznego /etc/grub2.conf. Prawidłowa grub2-mkconfiglinia to:

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

Jak zauważył w komentarzach, to może być /etc/grub2.cfg, lub /etc/grub2-efi.cfgw systemie UEFI. W rzeczywistości oba linki mogą być obecne w tym samym czasie i wskazują różne lokalizacje . -eFlagę readlinkbędzie błędu, jeśli plik docelowy nie istnieje, ale w moim systemie zarówno istniał ... Sprawdź swoje polecenia, myślę.

pqnet
źródło
5
W CentOS 7 linki wydają się być/etc/grub2.cfg
Anthon
6
grub2-mkconfig --output = / boot / grub2 / grub.cfg wydaje się być zatwierdzonym sposobem w podręczniku fedora
Kendrick
1
Więcej kroków dotyczących gruba związanych z CentOS 7 znajduje się na oficjalnej wiki: wiki.centos.org/HowTos/Grub2
sshow
2
Jeśli masz system UEFI, będziesz chciałsudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer
10

W Fedorze używam:

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

ponieważ wykonywanie bez opcji readlinkzwraca ścieżkę względną i grub2-mkconfigpowoduje błąd:

$ 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

Korzystam z tej -eopcji, aby jeśli dowiązanie symboliczne nie przekształciło się w istniejący plik, dane wyjściowe są wyświetlane na standardowym wyjściu, więc wiem, że coś poszło nie tak.

Ze strony podręcznika użytkownika dla readlink:

      -e, --canonicalize-existing
          canonicalize  by  following  every symlink in every component of
          the given name recursively, all components must exist
Setaa
źródło
6

W Fedorze dowiązanie symboliczne /etc/grub2.cfg wskazuje na wersję BIOS-u. W systemie UEFI użyj:

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

W CentOS:

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

Ogólnie możesz zamiast tego użyć:

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

Zobacz 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
źródło
2

edytuj plik grub za pomocą vilub vim, zapisz zmiany i zamknij edytor za pomocą: wq!

Oto, co musisz uruchomić, aby zaktualizować gruba w RedHat lub CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg
EugeneVM
źródło
0

update-grubSkrypt w Ubuntu jest właściwie tylko stub zagrub-mkconfig , a to może być przystosowana do innych dystrybucji bez zbytniego bólu. Oto w całości:

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

To skutecznie robi to, co jest zalecane w wiki CentOS , aw innych odpowiedzi tutaj - jedyną różnicą jest to, że trzeba zmienić grub, aby grub2w poleceniu i ścieżki wyjściowej.

mwfearnley
źródło