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"として指定したことです。これを最初から見つけたらもっと早く終わらせたはずなのに。
この回答多くの助けになりました。