我正在开发一个旨在部署裸机基础设施的开源项目bluebanquise,现在我们支持 RHEL/CentOS 8 发行版,我希望添加其他 RHEL 衍生发行版(Rocky Linux、Oracle Linux、Cloud Linux 等),将来还会有其他非 RHEL 发行版(Ubuntu、OpenSuse 等)。
默认情况下,在我们的基础架构上,所有服务器都默认通过 PXE 启动。DHCP 提供了一个 iPXE rom,它链接到其他 ipxe 文件等。在这个链中的某个点,如果服务器必须在磁盘上启动(所以不要在无盘中部署或启动),并且如果服务器在 EFI 中,iPXE 链到 grub2带有嵌入脚本的图像,该脚本尝试检测已安装的操作系统并启动找到的第一个操作系统。
注意:也许这不是在 EFI 中从 iPXE 引导到磁盘的最佳解决方案。但我什么也没找到。
基本上,它会为 RedHat 或 CentOS Linux 搜索 grub.cfg 文件,如果找到则使用它们进行引导。但现在,我想让这个脚本更“通用”,这样它就可以绕过发行版名称的需要,只查找任何 /efi/*/grub.cfg 文件。
但是,我无法创建一个能够做到这一点的脚本:-(
我在此页面上找到了一个有趣的脚本,但我无法使 for 循环适应我的需要。我尝试单独使用它:
for efi in (*,gpt*)/efi/*/grub.cfg ; do
regexp --set=1:efi_device '^\((.*)\)/' "${efi}"
echo found efi
echo "${efi}"
echo "${efi_device}"
echo "${2}"
echo "${1}"
sleep --interruptible --verbose 10
done
但这不会输出任何东西,除了 "( ,gpt )/efi/*/grub.cfg"
我尝试使用此页面的纯代码,它确实检测到了文件,但是在自动菜单中进行了几次迭代之后(我需要在 Detect EFI bootloaders 上按两次才能获得正确的路径)。这不是自动的。
GRUB2 文档中并没有很多与此相关的示例,我也没有在网上找到很多关于此问题的交流。
如果你们中的某个人知道从 iPXE rom 引导磁盘上的 EFI 系统的更好方法,或者如果您知道如何通过一般检测 efi 分区中的任何 grub.cfg 的方式将 search.file 替换为静态路径,我很高兴读到它!:-)
非常感谢您阅读本文,即使您没有答案。
我最好的问候
牛