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
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)
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 hetgrub.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
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
/bin/kernel-install
op. Bewerk uw antwoord om deze informatie op te nemen voor toekomstig gebruik.