W Ubuntu (i chyba także w Debianie) jest skrypt systemowy o nazwie update-grub
, który automatycznie wykonuje grub-mkconfig -o
z poprawną ścieżką do pliku konfiguracyjnego GRUBA.
Czy istnieje podobne polecenie dla dystrybucji opartych na Red Hacie?
Jeśli nie, w jaki sposób czy system wie, gdzie jest plik konfiguracyjny grub do aktualizacji po zainstalowaniu nowej wersji jądra?
Odpowiedź
Konkretne działania, które musi się zdarzyć, gdy pakiet RPM jest instalowany lub usuwany, są zawarte w samym pakiecie RPM w fazie przedinstalacyjnej, poinstalacyjnej, przed odinstalowaniem i po odinstalowaniu Sekcje.
Dla każdego zainstalowanego pakietu RPM możesz wysłać zapytanie do bazy danych RPM o dokładne skrypty zawarte w poleceniu rpm
:
rpm -q --scripts <package-name>
Uruchomienie tego polecenia 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 skryptów
Komentarze
Odpowiedź
Po przeanalizowaniu skryptów w Fedorze zdaję sobie sprawę, że ścieżka do pliku konfiguracyjnego jest odczytywana z linku symbolicznego /etc/grub2.conf
. Prawidłowa linia grub2-mkconfig
to:
grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"
Jak zauważono w komentarzach, może to być /etc/grub2.cfg
lub /etc/grub2-efi.cfg
w systemie UEFI. W rzeczywistości oba linki mogą być obecne w tym samym czasie i wskazywać na różne lokalizacje . Flaga -e
do readlink
spowoduje błąd, jeśli plik docelowy nie istnieje, ale w moim systemie oba istnieją … Sprawdź swoje polecenia Chyba.
Komentarze
- W CentOS 7 linki wydają się być
/etc/grub2.cfg
- grub2-mkconfig –output = / boot / grub2 / grub.cfg wydaje się być zatwierdzonym sposobem w podręczniku Fedory
- Więcej informacji o krokach grubych specyficznych dla CentOS 7 znajdziesz na oficjalnej wiki: wiki.centos.org/HowTos/Grub2
- Jeśli masz system UEFI, ' Chcę
sudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
- Nie widzę sensu robienia readlink
Odpowiedz
W Fedorze używam:
grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"
ponieważ wykonuję bez opcji readlink
zwraca ścieżkę względną, a grub2-mkconfig
zwraca 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
Używam -e
tak że jeśli dowiązanie symboliczne nie „t rozwiązuje się do istniejącego pliku, wyjście jest wyświetlane na standardowym wyjściu, więc wiem, że coś poszło nie tak.
Ze strony podręcznika readlink:
-e, --canonicalize-existing canonicalize by following every symlink in every component of the given name recursively, all components must exist
Odpowiedź
W Fedorze dowiązanie symboliczne /etc/grub2.cfg wskazuje na wersję BIOS. 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)
Odpowiedź
edytuj plik grub za pomocą vi
lub vim
, zapisz zmiany i zamknij edytor za pomocą: wq!
Oto, co musisz uruchomić, aby zaktualizować grub w RedHacie lub CentOS:
grub2-mkconfig -o /boot/grub2/grub.cfg
Odpowiedź
Zgodnie z dokumentacją RedHat :
Zmiany w
/etc/default/grub
wymagają przebudowania plikugrub.cfg
w następujący sposób:
W systemie BIOS- na komputerach opartych na systemie UEFI wydaj następującą komendę jako root:
~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Na komputerach z systemem UEFI następujące polecenie jako root:
~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Odpowiedź
Skrypt update-grub
w Ubuntu to w rzeczywistości tylko stub dla grub-mkconfig
i można go bez problemu zaadaptować do innych dystrybucji. Oto całość:
#!/bin/sh set -e exec grub-mkconfig -o /boot/grub/grub.cfg "$@"
To skutecznie robi to, co jest zalecane w CentOS wiki iw innych odpowiedziach tutaj – jedyna różnica polega na tym, że musisz zmienić grub
na grub2
w poleceniu i ścieżce wyjściowej .
Odpowiedź
W Fedorze 32:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Odpowiedź
Pracowałem na CentOS Linux 8 –
sudo grub2-mkconfig --output=/boot/grub2/grub.cfg
Odpowiedź
W wytycznych Fedory 33 po zmianie Gruba
$ sudo grub2-mkconfig --output=/boot/grub2/grub.cfg
I tak, wiem, że ten post ma 6 lat
/bin/kernel-install
. Zmień swoją odpowiedź, tak aby zawierała te informacje do wykorzystania w przyszłości.