链式加载 iPXE¶
如果你有大量已经带有 PXE 实现的机器(例如带有现有 Intel PXE ROM 的网卡),那么你可能希望避免逐一重新刷写每台机器的网卡。你可以通过使用链式加载来实现这一点。
要启用链式加载,你需要在你的 TFTP 服务器上放置一份 iPXE 副本。你的机器每次启动时都会从 TFTP 服务器下载这份 iPXE 副本。
设置 PXE 链式加载¶

下载 http://boot.ipxe.org/undionly.kpxe 并把它保存到你的 TFTP 服务器目录。
配置你的 DHCP 服务器分发 undionly.kpxe 作为启动文件。如果你使用 ISC dhcpd,则需要编辑 /etc/dhcpd.conf,使其包含:
next-server X.X.X.X;
filename "undionly.kpxe";
其中 X.X.X.X 是你的 TFTP 服务器的 IP 地址。
此时,你应该能够启动你的一台支持 PXE 的机器,并看到它从 TFTP 服务器下载 iPXE。如果一切正常,你应该会看到 iPXE 启动横幅出现:
iPXE -- Open Source Boot Firmware -- http://ipxe.org
打破无限循环¶
当链式加载的 iPXE 启动时,它会发出一个新的 DHCP 请求,并启动 DHCP 服务器分发的任何内容。DHCP 服务器目前设置为分发 iPXE 镜像,这意味着你将陷入无限循环:PXE 加载 iPXE,iPXE 又加载 iPXE,再加载 iPXE……
用 autoexec 脚本打破循环¶
打破无限循环的最简单方法是在 TFTP 服务器上,在你的 iPXE 二进制文件旁边放置一个文件名为 autoexec.ipxe 的 iPXE 脚本。iPXE 会自动下载并执行这个脚本。
你可以把 autoexec.ipxe 脚本放在与 iPXE 二进制文件相同的目录中,或者放在 TFTP 服务器的根目录中。
如果你想消除服务器上没有 autoexec.ipxe 脚本时出现的 Not found 消息,可以把 autoexec.ipxe 创建为零长度文件。这将消除错误消息,但 iPXE 随后会继续正常启动,就像不存在 autoexec.ipxe 脚本一样。
并非所有平台都支持使用 autoexec.ipxe 脚本。你可能需要使用下面的其他方法之一。
用 DHCP 服务器打破循环¶
打破这个无限循环的另一种方法是配置 DHCP 服务器,使其只对第一个 DHCP 请求分发 iPXE;第二个 DHCP 请求将返回"真正的"启动文件名。
用嵌入式脚本打破循环¶
打破无限循环的另一种方法是构建一个带有嵌入式脚本的 iPXE,该脚本指示 iPXE 从固定的 URL 启动。例如,如果你创建脚本文件 demo.ipxe,内容如下:
#!ipxe
dhcp
chain http://boot.ipxe.org/demo/boot.php
然后构建你自己的嵌入此脚本的 iPXE 版本:
make bin/undionly.kpxe EMBED=demo.ipxe
那么链式加载的 iPXE 将始终从 http://boot.ipxe.org/demo/boot.php 启动,无论 DHCP 服务器如何配置。
UEFI¶
如果你有尝试执行 UEFI 网络启动的机器,那么下载 http://boot.ipxe.org/ipxe.efi 并把它保存到你的 TFTP 服务器目录。
你需要配置你的 DHCP 服务器,使其向 BIOS 机器分发 undionly.kpxe 作为启动文件,向 UEFI 机器分发 ipxe.efi 作为启动文件。如果你使用 ISC dhcpd,则编辑 /etc/dhcpd.conf,使其包含:
option client-arch code 93 = unsigned integer 16;
if option client-arch != 00:00 {
filename "ipxe.efi";
} else {
filename "undionly.kpxe";
}
next-server X.X.X.X;
其中 X.X.X.X 是你的 TFTP 服务器的 IP 地址。
请注意,由于 UEFI 的根本架构限制,UEFI 网络启动往往比 BIOS 网络启动慢得多。大多数 UEFI 系统提供在 BIOS 兼容模式下执行网络启动的能力。你可能希望把你的系统升级为使用 BIOS 模式进行网络启动。