如何在 ipxe 设置中使用菜单加载 grub

如何在 ipxe 设置中使用菜单加载 grub

我正在尝试在 vmware 上设置 ipxe 环境。

我想使用 UEFI 配置设置。

我已经设置了一个 ubuntu 服务器并将其配置为 pxe 服务器。

通过下载 ipxe、isc-dhcpd、tftp-hpa 和 ngnix。

dhcp isc-dhcp.conf 看起来像

subnet 192.168.101.0 netmask 255.255.255.0 {
 range 192.168.101.50 192.168.101.100;
}

# add the following to /usr/local/etc/dhcpd.conf 
option client-arch code 93 = unsigned integer 16;

if exists user-class and option user-class = "iPXE" {
  filename "http://192.168.101.10/test.ipxe";
} else {
  if exists client-arch {
     if option client-arch = 00:00 {
       filename "undionly.kpxe";
     } elsif option client-arch = 00:07 {
       filename "grubx64.efi";
     } elsif option client-arch = 00:09 {
       filename "grubx64.efi";
     }
  }
}

并且 tftp root 已配置为服务 grubx64.efi。

当我启动网络客户端时,我得到了 grub 命令提示符,我希望得到一个 grub 菜单并选择要启动的操作系统。

在此处输入图片描述

(echo $prefix,指向文件夹 /EFI/ubuntu,我也尝试在该文件夹中配置 grub 以及 tftpfolder 根目录中的 grub.cfg。即。

我在这里缺少什么请提出建议,一旦我开始获取菜单,我将配置 grub.cfg 来加载操作系统。

答案1

这是由 iPXE 的工作方式决定的。有几种不同的解决方法。其中一个答案可以在https://serverfault.com/a/1069487/187998其中 iPXE 构建时禁用/启用了一些功能,以允许 grub 找到它在世界中的位置。

另一种方法是使用一些 hack,例如通过 wimboot,为 grub 提供一个虚拟文件系统,grub 可以使用它来加载其配置,请参阅https://forum.ipxe.org/showthread.php?tid=10739&pid=18277#pid18277

但是,有一种可行的办法,使用 wimboot,您要做的就是 imgfetch 您需要的所有文件,您想要启动的可启动文件需要在本地命名为 bootx64.efi,可以使用 imgfetch -n bootx64.efi file://grubx64.efi 来完成,最后您链接到 wimboot,这样应该会创建一个虚拟 VFAT fs(grub 可以读取),然后启动 bootx64.efi,也就是您的 grub。

imgfetch 与 initrd 相同,-n 是 --name 的简写选项,您可以在文档中找到。

综上所述,您应该在 iPXE 和 grub 之间做出选择,而不是尝试同时使用两者。

相关内容