过去,我曾管理过数十台带有 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 地址命名的文件中,以便动态加载它们。