在Linux系统中搭建PXE(Preboot Execution Environment)服务器,可以实现通过网络启动客户端计算机并自动安装操作系统,极大简化大规模部署工作,以下是详细的搭建步骤及配置方法,以CentOS 7系统为例,所需服务包括TFTP、DHCP、HTTP和Kickstart。

确保服务器已安装基础系统并更新软件包,执行yum update -y更新系统,然后安装必要的服务组件:yum install -y xinetd tftp-server httpd syslinux dhcpd,xinetd用于管理TFTP服务,httpd提供Kickstart安装文件的HTTP访问,syslinux包含PXE启动所需的引导文件,dhcpd为客户端分配IP地址。
配置TFTP服务是关键步骤之一,编辑/etc/xinetd.d/tftp文件,将disable = yes改为disable = no,并确保server_args = -s /var/lib/tftpboot指向TFTP根目录,创建/var/lib/tftpboot目录并设置权限:mkdir -p /var/lib/tftpboot && chmod 777 /var/lib/tftpboot,从/usr/share/syslinux目录复制PXE启动所需文件到TFTP根目录:cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/、cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/、cp /usr/share/syslinux/memdisk /var/lib/tftpboot/,创建PXE配置目录:mkdir -p /var/lib/tftpboot/pxelinux.cfg,并在其中生成默认配置文件default如下:
default menu.c32
timeout 300PXE Boot Menu
label centos7
menu label Install CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img inst.repo=http://服务器IP地址/centos7/ ks=http://服务器IP地址/ks.cfg
label local
menu label Boot from local disk
localboot 0
配置HTTP服务以提供Kickstart安装文件和ISO镜像,将CentOS 7的ISO镜像挂载到/var/www/html/centos7目录:mkdir -p /var/www/html/centos7 && mount -o loop /path/to/CentOS-7-x86_64-DVD.iso /var/www/html/centos7,并设置开机自动挂载(编辑/etc/fstab添加/path/to/CentOS-7-x86_64-DVD.iso /var/www/html/centos7 iso9660 loop 0 0),创建Kickstart自动化安装脚本/var/www/html/ks.cfg如下:
#version=DEVEL
install
text
network --bootproto=dhcp --onboot=on
rootpw --iscrypted $1$密码加密串
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
clearpart --all --initlabel
part /boot --fstype="ext4" --size=500
part swap --size=2048
part / --fstype="ext4" --grow
firstboot --disable
reboot
%packages
@base
@development
%end
使用openssl passwd -1生成加密密码串替换$1$密码加密串。
配置DHCP服务以分配IP地址并指定引导文件,编辑/etc/dhcp/dhcpd.conf文件,添加以下配置(根据实际网络环境调整):
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
next-server 192.168.1.10; # 服务器IP地址
filename "pxelinux.0";
}
启动并设置开机自启:systemctl enable --now xinetd httpd dhcpd。
将客户端计算机设置为网络启动(BIOS/UEFI中调整启动顺序),客户端将从PXE服务器获取IP地址并加载安装菜单,选择对应选项即可开始自动化安装,若需支持UEFI启动,需额外复制/usr/share/syslinux/efi64/syslinux.efi到/var/lib/tftpboot/,并在pxelinux.cfg/default中添加UEFI引导项。
| 服务组件 | 功能说明 | 关键配置文件/目录 |
|---|---|---|
| TFTP (xinetd) | 提供PXE引导文件传输 | /etc/xinetd.d/tftp、/var/lib/tftpboot |
| HTTPd | 提供ISO镜像和Kickstart脚本访问 | /etc/httpd/conf/httpd.conf、/var/www/html |
| DHCPd | 分配IP地址并指定引导文件路径 | /etc/dhcp/dhcpd.conf |
| syslinux | 提供PXE启动内核和引导程序 | /usr/share/syslinux/ |
相关问答FAQs
Q1: 客户端无法获取IP地址或连接PXE服务器怎么办?
A1: 首先检查DHCP服务是否正常运行(systemctl status dhcpd),确认防火墙是否放行UDP 67(DHCP)和UDP 69(TFTP)端口,使用firewall-cmd --permanent --add-service=dhcp --add-service=tftp && firewall-cmd --reload添加规则,确保客户端与服务器在同一网段,且DHCP配置中的next-server参数指向正确的PXE服务器IP地址。
Q2: 如何实现多操作系统的PXE安装选项?
A2: 在/var/lib/tftpboot/pxelinux.cfg/default文件中添加多个label项,每个标签对应一个操作系统的引导配置,添加Ubuntu安装项:label ubuntu、menu label Install Ubuntu、kernel ubuntu/install/netboot/ubuntu-installer/amd64/linux、append initrd=ubuntu/install/netboot/ubuntu-installer/amd64/initrd.gz ks=http://服务器IP地址/ubuntu-ks.cfg,同时需为不同操作系统准备对应的TFTP文件和Kickstart脚本,并将ISO镜像挂载到HTTP服务的不同目录(如/var/www/html/ubuntu)。
