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

1

Como usar kexec no Fedora Linux para reinicializar rapidamente o novo kernel instalado?

O uso da linha de comando

kexec --load é bastante detalhado - você precisa 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 da linha de comando do kernel, como --append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8" , de /proc/cmdline .

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

Com os sistemas UEFI e o laptop de inicialização dupla do Windows 8, é fácil não perceber o momento certo de interromper a reinicialização para selecionar o sistema não padrão. Se você perder, terá que esperar que o Windows 8 seja iniciado, talvez faça login automaticamente, reinicialize e tente novamente.

    
por Tometzky 11.03.2015 / 13:21

2 respostas

1

Eu não acho que seja uma boa idéia reutilizar os argumentos atuais da linha de comando como você tem agora. Eu recomendo verificar a configuração do GRUB, assumindo que você tenha o GRUB configurado. O comando grubby pode obter as informações necessárias. O formato de saída exato de 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"
}

Isto não usa o último kernel disponível, ele usa qualquer um que esteja configurado no Grub como o kernel a ser usado por padrão. Você já tem código para determinar o último kernel instalado, e você pode facilmente alterar o --info="$index" para --info=$latestkernel se é isso que você deseja usar.

    
por 22.07.2015 / 21:33
0

Eu resolvi isso criando um script /usr/local/bin/kexec-load-latest que seleciona automaticamente o kernel mais recente e o carrega em 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 como executável chmod a+x /usr/local/bin/kexec-load-latest para que eu possa simplesmente:

  • executar sudo /usr/local/bin/kexec-load-latest ,
  • , em seguida, sudo reboot ou use a função de reinicialização do meu ambiente de trabalho.

Testado no Fedora 21. Isso também deve funcionar em outras distribuições baseadas em rpm , como o RHEL ou o CentOS.

    
por 11.03.2015 / 13:49