PxEを使用して物理サーバーのインストールを自動化しようとしています。この場合、私はOracle Virtual Servers(OVS、略してXenとカスタムLinuxカーネルを備えたRHEL/Centosのようなシステム)をインストールしています。 手順の概要 in 公式ドキュメント に従い、ansibleを使用して実装しました。
要約すると、私はいくつかの重要な注意事項を考慮に入れました:
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
イメージとgrub2.cfg
ファイルの両方がtftpサーバーからダウンロードされ、「Welcome toGrub!」が表示されます。メッセージですが、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 '}'.
そして最後に、grubプロンプトに移動します。ここで、grub2.cfgファイルのすべてのコマンドを正しく入力し、キックスタートを使用してシステムを実際に起動してインストールできます。したがって、grub2.cfgファイルを実行する前に一部のモジュールがインポートされていないように見えるため、grub2イメージの作成に何かが欠けていると思いますか?特定のコマンドのみが実行されており、残りは「不明」です。
この問題を何週間も遊んだ後、ようやくコツをつかんだ。次のアップデート(3.4.3および3.4.4)の変更ログでこれを見つけたので、Oracleドキュメントにあるものを試し、OVSISOの新しいバージョンにアップグレードしようとしました。
Oracle用の簡略化されたUEFIPXEブートVMサーバー
このリリース以降、PXEブート環境のUEFIベースのシステムにOracle GRUBサーバーをインストールするために、VM 2ブートローダーを手動でビルドする必要はありません。 。OracleVMサーバーISOイメージファイルは、UEFIベースのシステム用の/EFI/BOOT/grubx64.efiブートローダーを提供します。OracleのインストールVM Server for OracleのPXEブートからのx86 VMインストールおよびアップグレードガイド。
そのバージョンのgrubイメージを使用しても、grub.cfgファイルをどこに設定したか、またはどのように名前を付けたかに関係なく、機能しませんでした。
私は自分のグラブ画像の作成に戻り、この手順は魅力のように機能しました。
次のコマンドで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」という名前を付けていたことです。もし私が最初からそれを見つけていたら、多分私はこれをもっと早く終えていただろう。
この回答 大いに役立ちました。