¿Cómo usar kexec en Fedora para usar automáticamente el kernel instalado más nuevo?

¿Cómo usar kexec en Fedora para usar automáticamente el kernel instalado más nuevo?

¿Cómo utilizar kexecFedora Linux para reiniciar rápidamente automáticamente al kernel instalado más reciente?

kexec --loadEl uso de la línea de comandos es bastante detallado: debes proporcionar:

  • imagen del núcleo, como /boot/vmlinuz-3.18.8-201.fc21.x86_64,
  • archivo initrd correspondiente, como --initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img,
  • argumentos de la línea de comandos del kernel, como --append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8", de /proc/cmdline.

Es tedioso escribirlo todo, ya que incluso completar tabulaciones no ayuda demasiado, porque normalmente hay varios núcleos instalados.

Con los sistemas UEFI y las computadoras portátiles con arranque dual Windows 8, es fácil perder el momento adecuado para interrumpir el reinicio y seleccionar un sistema no predeterminado. Si falla, tendrá que esperar a que se inicie Windows 8, tal vez inicie sesión automáticamente, reinicie e intente nuevamente.

Respuesta1

No creo que sea una buena idea reutilizar los argumentos actuales de la línea de comandos como los que tiene ahora. Recomiendo verificar la configuración de GRUB, asumiendo que tiene GRUB configurado. El grubbycomando puede brindarle la información requerida. El formato de salida exacto de grubby --infoes un poco inconsistente, pero es suficiente para ser utilizable.

# cat /usr/local/bin/kexec-load
#!/bin/sh
set -eu
index=$(grubby --default-index)
grubby --info="$index" | {
  IFS==
  while read field value
  do
    case $value in
    \"*\")
      eval "$field=$value" ;;
    *)
      eval "$field=\$value" ;;
    esac
  done
  unset IFS

  set -x
  kexec -l --initrd="$initrd" --append="root=$root $args" -- "$kernel"
}

Esto no utiliza el último kernel disponible, utiliza el que esté configurado en Grub como kernel a usar de forma predeterminada. Ya tiene el código para determinar el último kernel instalado y puede cambiarlo fácilmente --info="$index"si --info=$latestkerneleso es lo que desea utilizar.

Respuesta2

Resolví esto creando un script /usr/local/bin/kexec-load-latestque selecciona automáticamente el kernel más reciente y lo carga en kexec.

#!/bin/bash

set -x

NEWEST_KERNEL_VERSION="$(
  rpm --query --queryformat='%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel \
  | sort --version-sort --reverse \
  | head --lines=1
)"
kexec --load --append="`cat /proc/cmdline`" \
  --initrd="/boot/initramfs-$NEWEST_KERNEL_VERSION.img" \
  "/boot/vmlinuz-$NEWEST_KERNEL_VERSION"

Configúrelo como ejecutable chmod a+x /usr/local/bin/kexec-load-latestpara que pueda simplemente:

  • correr sudo /usr/local/bin/kexec-load-latest,
  • luego sudo rebooto usar la función de reinicio de mi entorno de escritorio.

Probado en Fedora 21. Esto también debería funcionar en otras rpmdistribuciones basadas recientemente como RHEL o CentOS.

información relacionada