Equivalente di update-grub per sistemi RHEL / Fedora / CentOS?


36

In Ubuntu (e immagino anche in Debian) c'è uno script di sistema chiamato update-grubche si esegue automaticamente grub-mkconfig -ocon il percorso corretto per il file di configurazione di grub.

Esiste un comando simile per le distribuzioni basate su Red Hat?

In caso contrario, come fa il sistema a sapere dove deve essere aggiornato il file di configurazione di grub quando è installata una nuova versione del kernel?

Risposte:


14

Le azioni specifiche che devono verificarsi quando un pacchetto RPM viene installato o rimosso sono incluse nel pacchetto RPM stesso nelle sezioni pre-installazione, post-installazione, pre-disinstallazione e post-disinstallazione.

Per ogni pacchetto RPM installato è possibile eseguire una query nel database RPM per gli script esatti inclusi con il rpmcomando:

rpm -q --scripts <package-name>

L'esecuzione di quel comando su un pacchetto del kernel per CentOS 6 restituisce tra l'altro:

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

Dal manuale:

new-kernel-package - strumento per l'installazione del kernel di script


2
eseguendo invece lo stesso comando su Fedora 20 rendimenti /bin/kernel-install. Modifica la tua risposta per includere queste informazioni per riferimento futuro
— pqnet,

3
Questo è esattamente il motivo per cui ho iniziato la mia risposta con i passaggi necessari per scoprirlo. Penso che interrogare gli script di installazione sia probabilmente abbastanza universale nel mondo RPM per aiutarti a capire come viene effettuato l'aggiornamento del kernel. In questo modo la mia risposta resisterà alla prova del tempo molto meglio che nominare solo uno strumento / comando / supporto-script che hai già dimostrato dipende molto dal rilascio e dalla distribuzione.
— HBruijn,

3
Sì @ HBruijn ha ragione. C'è troppa variabilità tra Fedora, RHEL e CentOS per fornire un'unica risposta, meglio per mostrare come trovarla.
— slm

24

Dopo aver analizzato gli script in Fedora, mi rendo conto che il percorso del file di configurazione viene letto dal link simbolico /etc/grub2.conf. La grub2-mkconfiglinea corretta è quindi:

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

Come notato nei commenti, potrebbe essere /etc/grub2.cfgo /etc/grub2-efi.cfgsu un sistema UEFI. In realtà, entrambi i collegamenti potrebbero essere presenti contemporaneamente e puntare a posizioni diverse . La -ebandiera su readlinksbaglierà se il file di destinazione non esiste, ma sul mio sistema esistevano entrambi ... Controlla i tuoi comandi, immagino.


5
Su CentOS 7 i collegamenti sembrano essere/etc/grub2.cfg
— Anthon,

6
grub2-mkconfig --output = / boot / grub2 / grub.cfg sembra essere il modo approvato nel manuale di fedora
— Kendrick,

1
Per ulteriori passaggi GRUB specifici di CentOS 7, consulta il wiki ufficiale: wiki.centos.org/HowTos/Grub2
— sshow

2
Se si dispone di un sistema UEFI si vorràsudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
— Craig Ringer

10

Su Fedora uso:

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

perché l'esecuzione senza alcuna opzione readlinkrestituisce un percorso relativo e grub2-mkconfiggenera un errore:

$ 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

Uso l' -eopzione in modo che se il collegamento simbolico non si risolve in un file esistente, l'output viene visualizzato su stdout, quindi so che qualcosa è andato storto.

Dalla pagina man per readlink:

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

6

In Fedora, il link simbolico /etc/grub2.cfg punta alla versione del BIOS. Su un sistema UEFI, utilizzare:

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

In CentOS:

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

In generale, è possibile utilizzare invece:

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

Vedi 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


2

modifica il file grub con vio vim, salva le modifiche e chiudi l'editor con: wq!

Questo è ciò che devi eseguire per aggiornare grub in RedHat o CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

0

Lo update-grubscript in Ubuntu è in realtà solo uno stub pergrub-mkconfig , e può essere adattato ad altre distro senza troppo dolore. Eccolo nella sua interezza:

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

Questo fa in modo efficace ciò che è raccomandato nel CentOS wiki , e in altre risposte qui - l'unica differenza è che è necessario modificare grubper grub2il comando e il percorso di uscita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.