目录
一、PXE 原理概述
1.1 基本概念
1.2 工作流程
二、PXE 服务器搭建
2.1 环境准备
2.2 安装和配置 DHCP 服务器
2.3 安装和配置 TFTP 服务器
2.4 安装和配置 HTTP 服务器
2.5 准备启动文件和操作系统镜像
2.6 创建 Kickstart 脚本
三、客户端配置和测试
3.1 客户端 BIOS 设置
3.2 客户端测试
四、高级配置和优化
4.1 多系统支持
4.2 安全配置
4.3 性能优化
五、故障排除
5.1 DHCP 问题
5.3 HTTP 问题
PXE 是一种基于 TCP/IP 协议的网络启动技术,它允许计算机在没有本地存储设备(如硬盘)或者操作系统的情况下,通过网络接口从远程服务器获取启动信息和操作系统镜像。PXE 主要依赖于 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)、TFTP(Trivial File Transfer Protocol,简单文件传输协议)和 HTTP/FTP/NFS 等协议来实现。
在搭建 PXE 服务器之前,需要准备以下环境:
yum install -y dhcp
/etc/dhcp/dhcpd.conf
,示例配置如下:# 定义全局参数
option domain-name "example.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
# 定义子网
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;
next-server 192.168.1.20; # TFTP 服务器地址
filename "pxelinux.0"; # 启动文件名称
}
上述配置中,定义了一个子网 192.168.1.0/24
,并为客户端分配 IP 地址范围为 192.168.1.100 - 192.168.1.200
。同时,指定了 TFTP 服务器的地址和启动文件的名称。
3. 启动 DHCP 服务器
使用以下命令启动 DHCP 服务器并设置为开机自启:
systemctl start dhcpd
systemctl enable dhcpd
yum install -y tftp-server xinetd
/etc/xinetd.d/tftp
,将 disable
参数的值改为 no
,示例如下:service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
上述配置中,指定了 TFTP 服务器的根目录为 /var/lib/tftpboot
。
3. 启动 TFTP 服务器
使用以下命令启动 TFTP 服务器和 xinetd 服务并设置为开机自启:
systemctl start xinetd
systemctl enable xinetd
yum install -y httpd
systemctl start httpd
systemctl enable httpd
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg
touch /var/lib/tftpboot/pxelinux.cfg/default
编辑 default
文件,示例配置如下:
default menu.c32
prompt 0
timeout 300
menu title PXE Boot Menu
label centos7
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.1.20/centos7 ks=http://192.168.1.20/ks.cfg
上述配置中,定义了一个启动菜单,包含一个选项 Install CentOS 7
。当客户端选择该选项时,会加载内核 vmlinuz
和初始化镜像 initrd.img
,并从 HTTP 服务器获取 CentOS 7 的安装源和 Kickstart 脚本。
3. 复制内核和初始化镜像
将 CentOS 7 的内核和初始化镜像复制到 TFTP 服务器的根目录:
cp /path/to/centos7/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /path/to/centos7/images/pxeboot/initrd.img /var/lib/tftpboot/
4.挂载并复制操作系统镜像
将 CentOS 7 的安装光盘或 ISO 镜像挂载到一个临时目录,并将其中的文件复制到 HTTP 服务器的文档根目录:
mkdir /mnt/centos7
mount /dev/cdrom /mnt/centos7
cp -r /mnt/centos7 /var/www/html/
Kickstart 脚本是一个自动化安装脚本,用于指定操作系统安装过程中的各种配置选项,如分区、软件包安装、网络配置等。创建一个 Kickstart 脚本文件 ks.cfg
,示例内容如下:
# 基本配置
lang en_US.UTF-8
keyboard us
timezone Asia/Shanghai
# 安装方法
install
url --url=http://192.168.1.20/centos7
# 分区设置
clearpart --all --initlabel
part /boot --fstype=xfs --size=500
part swap --size=4096
part / --fstype=xfs --grow
# 网络配置
network --bootproto=dhcp --device=eth0
# 防火墙和 SELinux 配置
firewall --disabled
selinux --disabled
# 软件包选择
%packages
@^minimal
%end
# 安装后脚本
%post
# 可以在这里添加一些安装后需要执行的命令
%end
将 Kickstart 脚本文件复制到 HTTP 服务器的文档根目录:
cp ks.cfg /var/www/html/
确保客户端计算机的 BIOS 中启用了 PXE 网络启动选项,并将其设置为第一启动项。不同品牌和型号的计算机 BIOS 设置方法可能有所不同,一般可以在开机时按特定的按键(如 F1、F2、Del 等)进入 BIOS 设置界面进行设置。
将客户端计算机连接到与 PXE 服务器相同的网络,开机后客户端会自动发送 DHCP 请求,从 DHCP 服务器获取 IP 地址和启动文件信息,然后从 TFTP 服务器下载启动文件、内核和初始化镜像,最后根据 Kickstart 脚本从 HTTP 服务器获取操作系统镜像并开始安装。
在安装过程中,可以通过客户端的显示器查看安装进度和日志信息。如果安装过程中出现问题,可以根据日志信息进行排查和解决。
如果需要支持多种操作系统的批量安装,可以在 PXELinux 配置文件 default
中添加更多的启动选项。例如,添加一个安装 Ubuntu 的选项:
label ubuntu
menu label ^Install Ubuntu
kernel ubuntu/vmlinuz
append initrd=ubuntu/initrd.img inst.repo=http://192.168.1.20/ubuntu ks=http://192.168.1.20/ubuntu-ks.cfg
同时,需要将 Ubuntu 的内核、初始化镜像和安装源文件复制到相应的目录,并创建对应的 Kickstart 脚本。
为了提高 PXE 服务器的安全性,可以采取以下措施:
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --add-service=tftp --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
为了提高 PXE 网络装机的性能,可以采取以下措施:
如果客户端无法获取 IP 地址,可能是 DHCP 服务器配置有误或出现故障。可以通过以下方法进行排查:
/var/log/dhcpd.log
,查看是否有错误信息。dhcping
工具测试 DHCP 服务器是否正常工作: dhcping -s 192.168.1.20
5.2 TFTP 问题
如果客户端无法下载启动文件,可能是 TFTP 服务器配置有误或出现故障。可以通过以下方法进行排查:
/var/log/messages
,查看是否有错误信息。tftp
工具测试 TFTP 服务器是否正常工作: tftp 192.168.1.20
tftp> get pxelinux.0
/etc/xinetd.d/tftp
,确保配置正确。如果客户端无法获取操作系统镜像或 Kickstart 脚本,可能是 HTTP 服务器配置有误或出现故障。可以通过以下方法进行排查:
/var/log/httpd/access_log
和 /var/log/httpd/error_log
,查看是否有错误信息。curl
工具测试 HTTP 服务器是否正常工作: curl http://192.168.1.20/centos7
/etc/httpd/conf/httpd.conf
,确保配置正确