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.