¿Equivalente a update-grub para sistemas RHEL / Fedora / CentOS?

36

En Ubuntu (y supongo que también en Debian) hay un script de sistema llamado update-grubque se ejecuta automáticamente grub-mkconfig -ocon la ruta correcta para el archivo de configuración de grub.

¿Existe algún comando similar para las distribuciones basadas en Red Hat?

Si no, ¿cómo sabe el sistema dónde está el archivo de configuración de grub para actualizar cuando se instala una nueva versión del kernel?

pqnet
fuente

Respuestas:

14

Las acciones específicas que deben ocurrir cuando se instala o elimina un paquete RPM se incluyen dentro del paquete RPM en las secciones de preinstalación, post-instalación, pre-desinstalación y post-desinstalación.

Para cada paquete RPM instalado, puede consultar en la base de datos RPM los scripts exactos que se incluyen con el rpmcomando:

rpm -q --scripts <package-name>

Ejecutar ese comando en un paquete de kernel para CentOS 6 devuelve entre otros:

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

Del manual:

new-kernel-package - herramienta para la instalación del script de kernel

HBruijn
fuente
2
ejecutar el mismo comando en Fedora 20 produce en su /bin/kernel-installlugar. Edite su respuesta para incluir esta información para referencia futura
pqnet
3
Eso es exactamente por qué comencé mi respuesta con los pasos necesarios para averiguarlo. Creo que consultar los scripts de instalación probablemente sea bastante universal en el mundo de RPM para ayudarlo a comprender cómo se efectúa la actualización del kernel. De esa manera, mi respuesta resistirá la prueba del tiempo mucho mejor que solo nombrar una herramienta / comando / script de soporte que ya demostró que depende mucho de la liberación y la distribución.
HBruijn
3
Sí, @ HBruijn tiene razón. Hay demasiada variabilidad entre Fedora, RHEL y CentOS para proporcionar una respuesta única, mejor para mostrar cómo encontrarla.
slm
24

Después de analizar los scripts en Fedora, me doy cuenta de que la ruta del archivo de configuración se lee desde el enlace simbólico /etc/grub2.conf. La grub2-mkconfiglínea correcta es así:

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

Como se señaló en los comentarios, puede ser /etc/grub2.cfg, o /etc/grub2-efi.cfgen un sistema UEFI. En realidad, ambos enlaces pueden estar presentes al mismo tiempo y apuntando a diferentes ubicaciones . El -eindicador de readlinkerror aparecerá si el archivo de destino no existe, pero en mi sistema ambos existían ... Supongo que compruebe sus comandos.

pqnet
fuente
55
En CentOS 7, los enlaces parecen ser/etc/grub2.cfg
Anthon
66
grub2-mkconfig --output = / boot / grub2 / grub.cfg parece ser la forma aprobada en el manual de fedora
Kendrick
1
Para obtener más pasos de grub específicos de CentOS 7, consulte el wiki oficial: wiki.centos.org/HowTos/Grub2
sshow
2
Si tienes un sistema UEFI que querrássudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer
10

En Fedora uso:

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

porque la ejecución sin opción de readlinkdevuelve una ruta relativa y grub2-mkconfigda un error:

$ 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

Utilizo la -eopción para que si el enlace simbólico no se resuelve en un archivo que existe, la salida se muestra en stdout para que sepa que algo salió mal.

Desde la página del manual para readlink:

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

En Fedora, el enlace simbólico /etc/grub2.cfg apunta a la versión del BIOS. En un sistema UEFI, use:

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

En CentOS:

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

En general, podría usar en su lugar:

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

Ver 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

theJPster
fuente
2

edite el archivo grub con vio vim, guarde los cambios y cierre el editor con: wq!

Esto es lo que necesita ejecutar para actualizar grub en RedHat o CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg
EugeneVM
fuente
0

El update-grubscript en Ubuntu es en realidad solo un trozogrub-mkconfig , y se puede adaptar a otras distribuciones sin demasiado dolor. Aquí está en su totalidad:

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

Esto hace de manera efectiva lo que se recomienda en el CentOS wiki , y en otras respuestas aquí - la única diferencia es que se necesita un cambio grubde grub2en el comando y la ruta de salida.

mwfearnley
fuente