如何使用 EFI 和 PXE 自动执行多个 Ubuntu 18.04 系统的网络安装?

如何使用 EFI 和 PXE 自动执行多个 Ubuntu 18.04 系统的网络安装?

过去,我曾管理过数十台带有 PXE 启动和 pxelinux 的 Ubuntu 18.04 服务器的安装。这种方法效果很好,因为每个系统都有自己的文件,该文件以将使用 DHCP/PXE 的接口的 mac 地址命名。然后,这些文件将指向各自的预置 URL 以开始安装。

我们的新机器只支持 EFI 启动。http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/uefi/grub2-amd64/current/grubnetx64.efi它可以执行相同的角色,只是它不再查找单个机器的文件;它只是调用一个通用的 grub.cfg。

我查看了 CentOS7 grub-x86_64.efi遵循基于 MAC 地址查找的老方法,但不幸的是这个版本无法启动 Ubuntu 安装内核(基本上在加载内核和 initrd 后就挂起了)。

我该如何设置才能自动安装所有机器?

答案1

如果你真的想根据 mac 地址创建单独的配置文件,你可以将文件内容制作成grub.cfg类似

if [ -s ${prefix}/${net_default_mac} ]; then
    source ${prefix}/${net_default_mac}
fi

就我个人而言,我发现 grub 比 pxelinux 灵活得多,因为 grub 配置可以使用变量和逻辑分支。我倾向于保留一个通用的,grub.cfg它使用可以根据机器属性设置的变量。

这是一个小例子

set my_interface="auto"
if [ "x${net_default_mac}" = "x01:23:45:67:89:ab" ]; then
    echo "using variables for template"
    set my_label="template"
    set my_preseed=tftp://${pxe_default_server}/preseed/preseed.cfg
fi

if [ -n "${my_preseed}" ]; then
menuentry "Xenial Install - automated - ${my_label}" --id=install_xenial_unattended {
    set gfxpayload=keep
    echo "ANY EXISTING INSTALL WILL NOW BE OVERWRITTEN"
    echo "THERE WILL BE NO PROMPTS"
    echo "LAST CHANCE TO ABORT (poweroff to abort, wait or hit esc to continue)"
    sleep 10 --verbose --interruptible
    echo "Loading Kernel..."
    linux /ubuntu/xenial/amd64/ubuntu-installer/amd64/linux netcfg/choose_interface=${my_interface} auto=true priority=critical url=${my_preseed} ${my_kernel_install_args} DEBCONF_DEBUG=5 ---
    echo "Loading Ram Disk..."
    initrd /ubuntu/xenial/amd64/ubuntu-installer/amd64/initrd.gz
}
fi

您还可以组合这些技术,以便将变量分配放入以 mac 地址命名的文件中,以便动态加载它们。

相关内容