一、PXE技术简介
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的一种网络引导技术。它基于Client/Server模式工作,允许客户端计算机(无本地操作系统)通过网络从远端服务器下载引导文件和系统映像,从而实现操作系统的远程启动与安装。简而言之,PXE提供了一种标准化的方式,让计算机在启动初期即可连接到网络并获取启动资源,是自动化运维和批量系统部署的关键技术之一。需要注意的是,PXE本身是一种引导方式,而非具体的安装方式。
二、PXE工作原理详解
PXE引导过程是一个有序的网络交互序列,具体步骤如下:
- DHCP请求与响应:客户端开机后,其PXE固件向网络中的DHCP服务器广播请求。DHCP服务器验证客户端MAC地址后,分配一个IP地址,并告知客户端TFTP服务器的地址以及引导文件
pxelinux.0的位置。
- 获取引导程序:客户端根据获得的信息,向TFTP服务器请求
pxelinux.0文件。经过简单的协商后,TFTP服务器将该文件传输给客户端。
- 执行引导程序:客户端加载并执行
pxelinux.0。
- 获取配置文件:引导程序继续向TFTP服务器请求针对本机的配置文件(通常位于
pxelinux.cfg/目录下)。TFTP服务器返回配置文件(如default),其中包含了内核启动参数和后续步骤的指示。
- 下载Linux内核:根据配置文件的指示,客户端从TFTP服务器下载Linux内核文件(
vmlinuz)。
- 下载初始内存盘:客户端接着下载初始内存盘文件(
initrd),其中包含了启动阶段必需的驱动和工具。
- 启动内核:客户端使用下载的内核和initrd启动Linux系统,启动参数已在第4步的配置文件中设置完毕。
- 自动化安装:启动后的系统通过HTTP或NFS协议从服务器下载完整的操作系统镜像和自动化安装脚本(如
user-data),进入完全无人值守的安装流程,直至安装完成。
三、PXE服务端部署实战(Ubuntu 24.04)
3.1 环境准备与注意事项
- 实验环境:本教程基于VMware虚拟机环境。请确保关闭VMware虚拟网络(如VMnet8)的自带DHCP服务,以避免与后续部署的DHCP服务冲突。
- 网络配置:请将PXE客户端(待安装机器)的网络配置为与服务端同一网段。
3.2 服务器基础信息确认
确保服务端(以下示例IP为192.168.52.100)网络畅通。
# 查看服务器版本
cat /etc/os-release
# 查看网络配置 (Netplan)
cat /etc/netplan/50-cloud-init.yaml
# 测试网络连通性
curl -I https://www.baidu.com
# 关闭防火墙(实验环境,生产环境请配置规则)
sudo ufw disable
3.3 安装并配置DHCP服务
DHCP服务用于为PXE客户端分配IP地址并告知其引导信息。
# 更新源并安装必要软件
apt-get update -y
apt-get install isc-dhcp-server tftpd-hpa apache2 syslinux-common pxelinux -y
# 配置DHCP服务器
# 编辑 /etc/dhcp/dhcpd.conf,关键配置如下:
cat << EOF > /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.52.0 netmask 255.255.255.0 {
range 192.168.52.150 192.168.52.200;
option routers 192.168.52.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;
next-server 192.168.52.100; # 指定TFTP服务器地址
filename "pxelinux.0"; # 指定引导文件名
}
EOF
# 启动并设置开机自启
systemctl restart isc-dhcp-server
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server
3.4 配置TFTP服务
TFTP服务用于提供轻量级的引导文件传输。
# 创建TFTP目录并复制必要的PXE引导文件
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libutil.c32,menu.c32} /var/lib/tftpboot/
cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/
# 配置TFTP服务根目录
cat << EOF > /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot/"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
EOF
# 重启TFTP服务
systemctl restart tftpd-hpa
systemctl enable tftpd-hpa
systemctl status tftpd-hpa
3.5 配置HTTP服务与引导菜单
Apache HTTP服务用于提供大型的系统镜像和自动安装配置文件。
# 创建存放镜像和配置的目录
mkdir -p /var/www/html/iso /var/www/html/autoinstall
# 配置PXE引导菜单
cat << EOF > /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
MENU TITLE PXE Boot Menu
PROMPT 0
TIMEOUT 30
LABEL Ubuntu 24.04 Auto Install
MENU LABEL Install Ubuntu 24.04 (Autoinstall)
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://192.168.52.100/iso/ubuntu-24.04.3-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.168.52.100/autoinstall/ cloud-config-url=/dev/null
EOF
# 挂载Ubuntu镜像并提取内核文件
mount /var/www/html/iso/ubuntu-24.04.3-live-server-amd64.iso /mnt/
cp /mnt/casper/vmlinuz /var/lib/tftpboot/
cp /mnt/casper/initrd /var/lib/tftpboot/
umount /mnt
3.6 配置Ubuntu自动安装文件
这是实现无人值守的核心,通过user-data文件定义安装参数。
# 创建自动安装所需的标识文件
cat << EOF > /var/www/html/autoinstall/meta-data
instance-id: ubuntu-autoinstall
EOF
# 创建主要的自动安装配置
cat << EOF > /var/www/html/autoinstall/user-data
autoinstall:
version: 1
identity:
hostname: u22
password: \"2008.com.cn\"
username: wk
source:
id: ubuntu-server
storage:
layout:
name: lvm
sizing-policy: all
ssh:
install-server: true
allow-pw: true
packages:
- wireguard
kernel-crash-dumps:
enabled: false
timezone: \"Asia/Shanghai\"
late-commands:
- curtin in-target -- sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
- curtin in-target -- systemctl restart sshd
- curtin in-target -- systemctl stop cloud-init
- curtin in-target -- systemctl disable cloud-init
- curtin in-target -- apt-get purge -y cloud-init
EOF
# 创建空的供应商数据文件(可选)
touch /var/www/html/autoinstall/vendor-data
# 设置目录权限
chmod -R 755 /var/www/html/
# 重启所有服务使配置生效
systemctl restart isc-dhcp-server tftpd-hpa apache2
systemctl status isc-dhcp-server tftpd-hpa apache2
四、创建并启动PXE客户端
- 在虚拟机软件(如VMware)中创建一台新的虚拟机作为客户端。
- 将其网络适配器设置为与服务端同一网络模式(例如桥接或Host-only的同一网段)。
- 客户端内存建议大于2GB,CPU不少于2核心。
- 开机后,客户端将自动从网络启动,向DHCP服务器请求IP。

- 成功获取引导信息后,客户端会自动加载引导菜单,选择“Install Ubuntu 24.04 (Autoinstall)”或等待超时自动进入。

- 系统将根据
user-data中的配置,全自动完成分区、软件包安装、用户创建等所有步骤,无需人工干预。
五、常见问题与总结
- 客户端内存不足:如果客户端分配内存过低(如小于1GB),在引导或安装过程中可能会因内存耗尽而失败。建议至少分配2GB内存。
- 键盘布局与语言:如果安装过程中需要手动选择键盘或语言,说明自动安装配置未能完全生效。请仔细检查
/var/www/html/autoinstall/user-data文件的格式(特别是YAML缩进)和内容,确保其符合Ubuntu Autoinstall规范。本文示例已配置时区为上海,通常可避免此问题。
通过以上步骤,您就成功搭建了一套完整的Ubuntu服务器PXE自动化部署环境。这将极大提升在数据中心或实验室中批量部署、重建Linux服务器的效率,是实现基础设施即代码(IaC)和云原生实践的重要基础。
|