Equivalent van update-grub voor RHEL / Fedora / CentOS-systemen?

In Ubuntu (en ik vermoed ook in Debian) is er een systeemscript genaamd update-grub dat automatisch grub-mkconfig -o met het juiste pad voor het grub-configuratiebestand.

Is er een vergelijkbaar commando voor op Red Hat gebaseerde distributies?

Zo nee, hoe weet het systeem waar het grub-configuratiebestand is dat moet worden bijgewerkt wanneer een nieuwe kernelversie wordt geïnstalleerd?

Antwoord

Specifieke acties die moeten gebeuren wanneer een RPM-pakket is geïnstalleerd of verwijderd, zijn opgenomen in het RPM-pakket zelf in pre-installatie, post-installatie, pre-de-installatie en post-de-installatie secties.

Voor elk geïnstalleerd RPM-pakket kunt u de RPM-database opvragen voor de exacte scripts die zijn opgenomen in het rpm commando:

rpm -q --scripts <package-name> 

Het uitvoeren van dat commando op een kernelpakket voor CentOS 6 geeft onder andere het volgende terug:

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

Uit de handleiding:

new-kernel-package – tool om kernelinstallatie te scripten

Reacties

  • hetzelfde commando uitvoeren op Fedora 20 levert in plaats daarvan /bin/kernel-install op. Bewerk uw antwoord om deze informatie op te nemen voor toekomstig gebruik.
  • Dat is precies waarom ik mijn antwoord begon met de stappen die nodig zijn om erachter te komen. Ik denk dat het opvragen van de installatiescripts waarschijnlijk vrij universeel is in de RPM-wereld om u te helpen begrijpen hoe de kernel-update wordt uitgevoerd. Op die manier zal mijn antwoord de tand des tijds veel beter doorstaan dan alleen het benoemen van een tool / command / support-script waarvan je al hebt aangetoond dat het erg afhankelijk is van release en distributie.
  • Ja @HBruijn ‘ klopt. Er is ‘ s te veel variabiliteit tussen Fedora, RHEL en CentOS om een enkel antwoord te geven, beter om te laten zien hoe je het kunt vinden.

Answer

Na het analyseren van de scripts in Fedora, realiseer ik me dat het pad van het configuratiebestand wordt gelezen van de symlink /etc/grub2.conf . De juiste grub2-mkconfig regel is als volgt:

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

Zoals opgemerkt in opmerkingen, kan het , of /etc/grub2-efi.cfg op een UEFI-systeem. In feite kunnen beide links tegelijkertijd aanwezig zijn en verwijzen naar verschillende locaties . De -e vlag naar readlink zal een foutmelding geven als het doelbestand niet bestaat, maar op mijn systeem beide bestonden … Controleer je opdrachten , Denk ik.

Reacties

  • Op CentOS 7 lijken de links /etc/grub2.cfg
  • grub2-mkconfig –output = / boot / grub2 / grub.cfg lijkt de goedgekeurde manier te zijn in de fedora-handleiding
  • Voor meer CentOS 7-specifieke grub-stappen, kijk op de officiële wiki: wiki.centos.org/HowTos/Grub2
  • Als je een UEFI-systeem hebt, ‘ Ik wil sudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
  • Ik zie geen zin in readlink te doen

Antwoord

Op Fedora gebruik ik:

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

omdat het wordt uitgevoerd zonder optie voor readlink geeft een relatief pad terug, en grub2-mkconfig geeft een foutmelding:

$ 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 

Ik gebruik de -e optie dus dat als de symlink niet naar een bestaand bestand leidt, de uitvoer wordt weergegeven op stdout, dus ik weet dat er iets mis is gegaan.

Van de man-pagina voor readlink:

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

Antwoord

In Fedora verwijst de /etc/grub2.cfg symlink naar de BIOS-versie. Gebruik op een UEFI-systeem:

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

In CentOS:

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

In het algemeen je zou in plaats daarvan kunnen gebruiken:

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

Zie https://docs.fedoraproject.org/en-US/fedora/f27/system-administrators-guide/kernel-module-driver-configuration/Working_with_the_GRUB_2_Boot_Loader/index.html#sec-Editing_a_Menu_Entry

Answer

bewerk grub-bestand met vi of vim, bewaar wijzigingen en sluit de editor met: wq!

Dit is wat u moet uitvoeren om grub bij te werken in RedHat of CentOS:

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

Antwoord

Volgens de RedHat-documentatie :

Wijzigingen in /etc/default/grub vereisen het opnieuw opbouwen van het grub.cfg -bestand als volgt:

  • Op BIOS- gebaseerde machines, voer het volgende commando uit als root:

    ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

  • Op UEFI-gebaseerde machines, probleem het volgende commando als root:

    ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

Answer

Het update-grub -script in Ubuntu is eigenlijk gewoon een stub voor grub-mkconfig , en het kan zonder al te veel pijn worden aangepast aan andere distributies. Hier is het in zijn geheel:

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

Dit doet effectief wat wordt aanbevolen in de CentOS-wiki , en in andere antwoorden hier – het enige verschil is dat je grub moet veranderen in grub2 in de opdracht en het uitvoerpad .

Antwoord

Op Fedora 32:

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

Antwoord

Gewerkt aan CentOS Linux 8 –

sudo grub2-mkconfig --output=/boot/grub2/grub.cfg 

Mijn demo

Antwoord

In de Fedora 33 richtlijnen geeft het het volgende na het veranderen van Grub

$ sudo grub2-mkconfig --output=/boot/grub2/grub.cfg

En ja, ik weet dat dit bericht 6 jaar oud is

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *