![如何在 ipxe 设置中使用菜单加载 grub](https://linux22.com/image/767566/%E5%A6%82%E4%BD%95%E5%9C%A8%20ipxe%20%E8%AE%BE%E7%BD%AE%E4%B8%AD%E4%BD%BF%E7%94%A8%E8%8F%9C%E5%8D%95%E5%8A%A0%E8%BD%BD%20grub.png)
我正在尝试在 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 之间做出选择,而不是尝试同时使用两者。