私のPxE grub2設定に欠けているもの

私のPxE grub2設定に欠けているもの

PxEを使用して物理サーバーのインストールを自動化しようとしています。この場合は、Oracle Virtual Server(OVS、Xen、およびカスタムLinuxカーネルを含むRHEL / Centosのようなシステム)をインストールします。フォローするステップの概要存在する公式文書そしてansibleを使って実装します。

要約すると、いくつかの重要な考慮事項が考慮されました。

  • 私はバージョン3.4.2を使用しているので、UEFIベースのPXEクライアント用のブートローダを直接構築しています。
  • GRUB2 ブートローダの構築に必要な grub2-tools パッケージを提供するため、Oracle Linux 7.3 を使用しています。

ansibleを使用してtftp、dhcp、およびhttpサーバー(単純化のためにすべて同じボックスにあります)を設定しましたが、すべて期待どおりに動作するようです(ファイルのダウンロードとIP割り当てのテストが完了し、すべてがうまく機能します)。これが私がブートローダを作成する方法です

$ 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>

私の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
}

サーバーが正しく起動し、IPが設定され、core.efi画像とファイルがtftpサーバーからダウンロードされ、「Welcome to Grub!」grub2.cfgメッセージが表示されますが、grub2.cfgファイルで構成されたものを実行する必要がある場合は、次のことが発生します。

//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 '}'.

最後に、grub2.cfgファイルのすべてのコマンドを正しく入力し、kickstartを使用して実際にシステムを起動してインストールできるgrubプロンプトに移動しました。 grub2.cfgファイルを実行する前に一部のモジュールをインポートしないため、grub2イメージの作成から何かが欠落しているようです。特定のコマンドのみが実行され、残りは「不明」です。

答え1

数週間この問題を解決した後、ついに問題を解決しました。 Oracleのドキュメントに記載されている内容を試して、次のアップデート(3.4.3および3.4​​.4)の変更ログでこれを見つけたので、OVS ISOの最新バージョンにアップグレードすることも試みました。

Oracle VM Server用の簡略化されたUEFI PXEブート

このリリース以降、PXEブート環境のUEFIベースのシステムにOracle VM ServerをインストールするためにGRUB 2ブートローダを手動で構築する必要はありません。 Oracle VM Server ISOイメージファイルは、UEFIベースのシステム用の/EFI/BOOT/grubx64.efiブートローダを提供します。 Oracle VM インストールおよびアップグレード・ガイドの「PXE ブートでの Oracle VM Server x86 のインストール」を参照してください。

grub.cfgファイルをどこに設定したのか、名前を指定したかに関係なく、そのバージョンのgrubイメージを使用することは機能しません。

私は戻って独自のグラブイメージを作成し、このコマンドは完全に機能しました。

  • 次のコマンドを使用して grub イメージを作成します。

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

  • 次の内容で「grub.cfg」(このファイルの名前を変更しない)を作成し、それをコアイメージとすべての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
}
  • もちろん、dhcp "filename"ディレクティブで/mycore.efiを指す必要があります。

  • 最後に、私のtftpファイルは次のようになります。

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

私の決定的な間違いは、ファイル名を "grub.cfg"の代わりに "grub2.cfg"として指定したことです。これを最初から見つけたらもっと早く終わらせたはずなのに。

この回答多くの助けになりました。

関連情報