PXE 安装系统配置 Howto ====================== .. versionadded:: @2013-08-21 创建 :wiki:`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 文件挂载在该目录下。 下图是配置成功后的系统截图。 .. image:: pxe-menu.png 关于 ESXi, Ubuntu 等系统 PXE 安装的配置文件请参考相应的官方文档。