Como usar o kexec no Fedora para usar automaticamente o kernel instalado mais recente?

Como usar o kexec no Fedora para usar automaticamente o kernel instalado mais recente?

Como usar kexecno Fedora Linux para reinicializar rapidamente automaticamente para o kernel instalado mais recente?

kexec --loado uso da linha de comando é bastante detalhado - você deve fornecer:

  • imagem do kernel, como /boot/vmlinuz-3.18.8-201.fc21.x86_64,
  • arquivo initrd correspondente, como --initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img,
  • argumentos de linha de comando do kernel, como --append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8", from /proc/cmdline.

É tedioso digitar tudo, pois mesmo o preenchimento de tabulação não ajuda muito, porque geralmente há vários kernels instalados.

Com sistemas UEFI e laptop de inicialização dupla com Windows 8, é fácil perder o momento certo para interromper a reinicialização e selecionar um sistema não padrão. Se você errar, terá que esperar o Windows 8 iniciar, talvez fazer login automaticamente, reiniciar e tentar novamente.

Responder1

Não acho que seja uma boa ideia reutilizar os argumentos atuais da linha de comando como você tem agora. Eu recomendo verificar a configuração do GRUB, supondo que você tenha o GRUB configurado. O grubbycomando pode fornecer as informações necessárias. O formato exato de saída grubby --infoé um pouco inconsistente, mas é suficiente para ser utilizável.

# 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"
}

Isso não usa o kernel mais recente disponível, ele usa aquele que está configurado no Grub como o kernel a ser usado por padrão. Você já tem o código para determinar o kernel instalado mais recente e pode facilmente alterá-lo --info="$index"para --info=$latestkernelse for isso que deseja usar.

Responder2

Resolvi isso criando um script /usr/local/bin/kexec-load-latestque seleciona automaticamente o kernel mais recente e o carrega no arquivo 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"

Defina-o como executável chmod a+x /usr/local/bin/kexec-load-latestpara que eu possa simplesmente:

  • correr sudo /usr/local/bin/kexec-load-latest,
  • então sudo rebootou use a função de reinicialização do meu ambiente de área de trabalho.

Testado no Fedora 21. Isso também deve funcionar em outras rpmdistribuições recentes, como RHEL ou CentOS.

informação relacionada