O que falta na minha configuração do grub2 para o PxE

0

Estou tentando automatizar a instalação de servidores físicos usando o PxE. Neste caso estou instalando Oracle Virtual Servers (OVS para sistemas curtos, RHEL / Centos-like com Xen e kernel Linux customizado). Eu segui as etapas descritas em a documentação oficial e as implementou usando ansible.

Para resumir, levei em conta algumas notas importantes:

  • Estou usando a versão 3.4.2, portanto estou construindo meu próprio gerenciador de inicialização para clientes PXE baseados em UEFI.
  • Estou usando o Oracle Linux 7.3, já que ele fornece o pacote grub2-tools necessário para construir o carregador de inicialização GRUB2.

Com ansible eu configurei meus servidores tftp, dhcp e http (para simplificar todos eles na mesma caixa) que todos parecem estar funcionando como esperado (testei arquivos de download e atribuições de IP e tudo funciona). Aqui está como eu estou construindo o gerenciador de inicialização

$ grub2-mkimage -p '(tftp,<tftp server IP>)' -O x86_64-efi -d <path to grub2 modules taken from installation iso> -c <path to grub2.cfg file> -o <path to tftp-server dir>/core.efi <embeded modules: net efinet tftp gzio part_gpt efi_gop efi_uga video_bochs video_cirrus all_video ext2 multiboot2 normal>

Aqui está o estado atual do meu arquivo grub2.cfg:

set timeout=60

# Load modules
insmod net
insmod efinet
insmod tftp
insmod gzio
insmod part_gpt
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
insmod ext2
insmod multiboot2
insmod normal

menuentry 'Install Oracle VM Server 3.4.2' --class fedora --class gnu-linux --class gnu --class os {

    # dhcp, tftp server in my network
    set net_default_server=<tftp IP>

    # This is for testing
    echo 'Network status: '
    net_ls_addr
    net_ls_routes

    echo 'Loading Xen...'
    multiboot2 /isolinux/xen.gz dom0_mem=max:11582M dom0_max_vcpus=20 noreboot
    echo 'Loading Linux Kernel...'
      module2 /isolinux/vmlinuz ip=dhcp vlanid=<vlan> repo=http://<Http server IP>/pxelinux/ISOs/OVS3.4.2 ks=http://<http server IP>/pxelinux/kickstart/ovs-3.4.2.ks ksdevice=<mac address of the dhcp configured nic>
      echo 'Loading initrd...'
    module2 /isolinux/initrd.img
}

O servidor inicializa corretamente, o IP está sendo configurado, a imagem core.efi e o arquivo grub2.cfg estão sendo baixados do servidor tftp e eu recebo o "Bem-vindo ao Grub!" mensagem, mas apenas quando ele deve executar o que está configurado no arquivo grub2.cfg , isso acontece:

//Start PXE Over IPv4
Station IP Address is X.X.X.X

Server IP Address is X.X.X.X
NBP filename is /boot/grub2/core.efi
NBP filesize is 397824 Bytes
Downloading NBP file...

  Succeed to download NBP file.

Downloading NBP file...

  Succeed to download NBP file.

Welcome to GRUB!

Unknown command 'menuentry'.
Unknown command '#'.
Unknown command '#'.
Unknown command 'echo'.
efinet0 <mac address> <dhcp delivered ip>
efinet0:local <net segment>/<netmask> efinet0
efinet0:default 0.0.0.0/0 gw <network gateway>
Unknown command 'echo'.
Unknown command 'echo'.
Unknown command 'echo'.
Unknown command '}'.

E finalmente sou direcionado para o prompt do grub, onde eu posso digitar todos os comandos no arquivo grub2.cfg corretamente e realmente inicializar e instalar meu sistema com o kickstart. Então eu estou supondo que estou faltando alguma coisa na criação da imagem do grub2 porque é como se alguns módulos não estivessem sendo importados antes de executar o arquivo grub2.cfg ?? Apenas certos comandos estão sendo executados, o restante é "Desconhecido".

    
por Nocturn 08.09.2017 / 19:38

1 resposta

1

Bem, depois de brincar com essa questão por semanas, eu finalmente consegui pegar o jeito. Eu tentei o que estava nos documentos do Oracle, até tentei atualizar para uma versão mais nova do OVS ISO desde que eu encontrei isso no changelog da próxima atualização (3.4.3 e 3.4.4).

Simplified UEFI PXE Boot for Oracle VM Server

As of this release, you do not need to manually build the GRUB 2 boot loader to install Oracle VM Server on UEFI-based systems in a PXE boot environment. The Oracle VM Server ISO image file provides the /EFI/BOOT/grubx64.efi boot loader for UEFI-based systems. See Installing Oracle VM Server for x86 from PXE Boot in the Oracle VM Installation and Upgrade Guide.

Usar essa versão da imagem do grub também não funcionou, não importando onde eu configurei o arquivo grub.cfg ou como eu o nomeei.

Voltei a criar minha própria imagem do grub e essas instruções funcionaram como um encanto:

  • Crie a imagem do grub com este comando:

    grub2-mkimage -p '(tftp,) /' -O x86_64-efi -d / grub2 / lib / grub / x86_64-efi -o /mycore.efi efinet tftp

  • Crie o "grub.cfg" com o seguinte (não altere o nome deste arquivo) e coloque-o ao lado da imagem principal e de um subdiretório com todos os módulos do grub2:

set default="1"

function load_video {
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod all_video
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2

set timeout=60

'### END /etc/grub.d/00_header ###

echo "Setting root with device lable Oracle VM Server"
search --no-floppy --set=root -l 'Oracle VM Server'

'### BEGIN /etc/grub.d/10_linux ###

menuentry 'Install Oracle VM Server 3.4.4' --class fedora --class gnu-linux --class gnu --class os {
  echo 'Loading Xen...'
  multiboot2 /isolinux/xen.gz dom0_mem=max:11582M dom0_max_vcpus=20 noreboot
  echo 'Loading Linux Kernel...'
  module2 /isolinux/vmlinuz ip=dhcp vlanid=<vlan> repo=http://<path to ISO> ks=http://<path to kickstart> ksdevice=<device mac address>
  echo 'Loading initrd...'
  module2 /isolinux/initrd.img
}
  • Certifique-se também de apontar para /mycore.efi na diretiva "filename" do seu dhcp, é claro.

  • No final, meus arquivos tftp ficaram assim:

tftproot
 grub2
  grub.cfg
  mycore.efi
  x86_64-efi
      *.mod
 isolinux
  initrd.img
  TRANS.TBL
  vmlinuz
  xen.gz

Meu erro crucial foi que eu estava nomeando o arquivo "grub2.cfg" em vez de "grub.cfg". Se eu tivesse visto isso desde o começo, talvez eu tivesse terminado isso mais rápido.

Esta resposta ajudou muito.

    
por 15.09.2017 / 18:21