我刚刚发现了 iPXE 的奇妙之处。
我在许多不同的计算机上运行着各种版本的 Debian,想远程告诉它们重新启动到 iPXE,并让 iPXE 自动启动到我拥有的 clonezilla 自动部署 .iso。
有没有办法告诉 Linux 在下次启动时自动启动到 iPXE,然后让 iPXE 自动从服务器启动到 .iso?
答案1
我使用类似的设置,但是相反.最后,我可以从服务器控制目标机器如何启动。
但是,我不依赖目标机器上的 grub,也不使用 iPXE。
相反,我安装了一个 PXE 启动服务器。如今,很难找到一台 PXE 启动不工作的计算机。因此,我配置了所有需要通过这种方式控制的计算机,使其通过 PXE 从网络启动。
顺便说一句,这在旧式 BIOS 和现代 UEFI 机器上同样可能,DHCP 服务器会区分这些情况并向机器建议适当的引导加载程序。
无论如何,机器都会加载一些 PXELinux 变体。它有一个巧妙的特性,即它如何搜索配置文件。它首先请求一个以机器 SMBIOS UUID 命名的配置文件,如果未找到,则请求一个以启动接口的 MAC 地址、IP 地址命名的文件,如果没有任何帮助,则请求一个文件default
。
因此,您可以创建一些“基本配置”,一个从本地硬盘启动机器的配置tftp/pxelinux.cfg/harddisk
:
default harddisk
label harddisk
localboot 0
另一个启动 clonezilla tftp/pxelinux.cfg/clonezilla
:
default clonezilla
label clonezilla
# clonezilla boot instructions here
您还可以添加其他几个,例如无盘瘦客户端的配置(这是我曾经使用过的实际配置):
default stretch
label stretch
linux thinclient/vmlinuz-4.9.0-7-amd64
initrd thinclient/initrd.img-4.9.0-7-amd64
append ISCSI_INITIATOR=iqn.1993-08.org.debian:01:a4c444f2b735 ISCSI_TARGET_NAME=iqn.2018-10.ru.rterm.office.test-storage:thinclient.lvm ISCSI_TARGET_IP=192.168.168.113 ISCSI_TARGET_PORT=3260 root=UUID=344ca052-8ea2-437f-9550-a5503d0e7b21 ip=dhcp quiet
然后创建指向这些模板的符号链接:
cd tftp/pxelinux.cfg
ln -s clonezilla 01-10-32-54-76-98-ba
ln -s clonezilla 01-dc-fe-10-32-54-76
ln -s harddisk 01-98-ba-dc-fe-10-32
ln -s harddisk 01-54-76-98-ba-dc-fe
ln -s harddisk default
ln -s thinclient 00801536-e3ee-1610-9957-d68a52030736
在这个例子中,具有 MAC 地址的机器10:32:54:76:98:ba
将dc:fe:10:32:54:76
启动一个clonezilla
配置文件(01
这里文件名的开头表示“以太网”),具有 UUID 的机器00801536-e3ee-1610-9957-d68a52030736
将启动一个thinclient
配置,然后其他机器也将启动harddisk
,但是具有指定 MAC 的两台机器将更安静地执行此操作(服务器上的“文件未找到”日志更少,启动速度更快,因为下载尝试将更早成功)。
现在,如果你需要一些机器来启动,比如 clonezilla,你可以创建或更改它的符号链接在 tftp 服务器上改为clonezilla
。启动后,您可以恢复更改(例如更改为harddisk
或任何您想要的)。您可以为 Linux 网络安装创建配置 — 我甚至不记得上次从 USB 启动安装程序是什么时候,因为几年来我一直以这种方式安装。您可以使用 PXELinuxinclude
指令并创建一个简洁的通用菜单,其中包含所有这些选项,供手动选择并将其用作默认值。从技术上讲,即使是 Windows 安装也可以(曾经)通过这种方式实现。该方案非常灵活,它唯一依赖于客户端计算机的是它首先从网络启动。
答案2
我只是添加了一个 iPXE 条目(在 initrd 文件中有一个 iPXE“脚本”)/etc/grub.d/
(以“99”开头,以便它位于列表的末尾),然后运行update-grub
,然后运行
grub-reboot `egrep '^menuen' /boot/grub/grub.cfg |wc -l`; reboot;
这只是menuentries
在 grub.cfg 文件中进行计数,并告诉 grub-reboot 在下次重启时启动到最后一个选项。