PXE 安装系统配置 Howto

@2013-08-21 新版功能: 创建

PXE 使用 DHCP 和 TFTP(简单文件传输协议)通过网络来引导操作系统。利用这个技术可以从网络接口 运行系统安装程序或启动系统(如无盘系统)。

通过 PXE 方式启动程序时 DHCP 服务器需要额外发送 TFTP 服务器的地址和 pxelinux.0 或 gpxelinux.0 文件的位置给目标计算机。PXELINUX 是 SYSLINUX 软件的一部分。gpxelinux.0(gPXE)相比 pxelinux.0 有一些额外的特性,如通过 HTTP, iSCSI, AoE 来引导系统。由于 TFTP 使用 UDP 作为传输协议,理论上, 在高负载网络上引导系统和传输大量数据时不使用 gPXE 时可能会遇到问题。 如果使用 gPXE,则只有 gpxelinux.0 二进制文件和配置文件将通过 TFTP 传输。 不过在实践上,在 ESXi 上的虚拟机上使用 gPXE 通过 HTTP 下载文件的速度反而很慢。

dhcpd 服务的配置如下:

# gPXE options
#option space gpxe;
#option gpxe-encap-opts code 175 = encapsulate gpxe;
#option gpxe.bus-id code 177 = string;

class "pxe" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    filename "/gpxelinux.0";
}

subnet 10.0.0.0 netmask 255.255.255.0 {
    authoritative;
    range 10.0.0.200 10.0.0.220;
    option domain-name-servers 10.0.0.2;
    option routers 10.0.0.254;
}

其中 gPXE 相关的选项设置的作用待补充,在测试之中不需要这些选项也能正常工作。 另外,如果 tftp 服务器和 dhcp 服务器不是同一台机器的情况下,则需要相应的 配置 next-server 选项。

我们采用软件 tftp-hpa 来作为 tftp 服务器。配置 tftpd 启动参数为 "-R 4096:32767 -s /home/pxe/"。 从 syslinux 软件中拷贝 pxelinux.0 或 gpxelinux.0 文件到 /home/pxe/ 目录下。 如果需要用到 HTTP 方式的下载(如用到了 gPXE 或需要支持 Linux 系统的无人值守安装),则相应的需要配置 nginx (或其他WEB服务器)。

接下来需要编辑 PXE 的配置文件,配置完成后的目录结构如下:

.
|-- gpxelinux.0
|-- menu.c32
|-- pxelinux.cfg/
|   `-- default
`-- ubuntu/
    |-- 12.04/
    |-- ks.cfg
    `-- ubuntu.cfg

menu.c32 是引导加载程序,在 syslinux 软件中可以找到该文件。

pxelinuc.cfg 是 PXE 的配置文件所在目录。通过PXE引导系统时,配置文件的文件名 搜索顺序如下:

  • 网络接口硬件类型和地址(字母小写),如,01-23-45-67-89-0a-bc。其中 01 对应以太网。
  • 以十六进制(字母大写)表示的主机 IP 地址。
  • default

例如,假设主机网卡为以太网,MAC 地址为 88:99:AA:BB:CC:DD,通过 DHCP 拿到的 IP 地址为 192.0.2.91,则配置文件的搜索顺序如下:

/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/pxelinux.cfg/C000025B
/pxelinux.cfg/C000025
/pxelinux.cfg/C00002
/pxelinux.cfg/C0000
/pxelinux.cfg/C000
/pxelinux.cfg/C00
/pxelinux.cfg/C0
/pxelinux.cfg/C
/pxelinux.cfg/default

了解这个特性后,我们可以针对指定的主机进行个性化的配置。

pxelinux.cfg/default 文件的内容如下:

DEFAULT menu.c32
MENU TITLE PXE

INCLUDE ubuntu/ubuntu.cfg

LABEL localboot
    LOCALBOOT 0x80
    MENU LABEL ^Boot from local disk

ububtu/ububtu.cfg 文件的内容如下:

MENU BEGIN

MENU TITLE LINUX/Ubuntu

LABEL Ubuntu/12.04
    MENU LABEL Ububtu/12.04
    MENU INDENT 1
    KERNEL menu.c32
    KERNEL ubuntu/12.04/install/netboot/ubuntu-installer/amd64/linux
    APPEND vga=normal initrd=ubuntu/12.04/install/netboot/ubuntu-installer/amd64/initrd.gz ks=http://a.b.c.d/ubuntu/ks.cfg --

MENU SEPARATOR

LABEL return
    MENU LABEL ^Esc - Return to Main Menu
    MENU INDENT 1
    MENU EXIT

MENU END

ububtu/ks.cfg 文件的内容如下:

install
url --url http://a.b.c.d/ubuntu/12.04/

ubuntu/12.04/ 对应 ububtu 的系统安装光盘,我们是直接通过 “mount -o loop” 将 ISO 文件挂载在该目录下。

下图是配置成功后的系统截图。

../_images/pxe-menu.png

关于 ESXi, Ubuntu 等系统 PXE 安装的配置文件请参考相应的官方文档。