Linux PXE 批量部署
通过 PXE(Preboot Execution Environment,预启动执行环境)批量部署 Linux 操作系统,需要搭建一套包含 DHCP、TFTP、HTTP/NFS 等服务的网络环境,实现客户端从网络启动并自动安装系统。
一、PXE 部署原理
PXE 部署依赖网络启动流程:
- 客户端开机后从网卡启动,通过 DHCP 获取 IP 地址,并获取 TFTP 服务器地址和启动文件名称。
- 客户端从 TFTP 服务器下载启动镜像(vmlinuz、initrd.img)和 PXE 配置文件。
- 启动 Linux 安装程序,通过 HTTP/NFS 服务器获取系统安装镜像。
- 读取 Kickstart 自动应答文件,实现无人值守安装。
二、环境准备
- 服务器:1 台 Linux 服务器(推荐 CentOS 7/Ubuntu 20.04),作为 PXE 服务器,需静态 IP(如192.168.100)。
- 客户端:多台支持网络启动的计算机(需在 BIOS 中开启 PXE 启动)。
- 网络:服务器与客户端在同一局域网,无其他 DHCP 服务器冲突。
- 安装源:Linux 发行版 ISO 镜像(如 CentOS-7-x86_64-DVD.iso)。
三、部署步骤
1. 安装必要服务
需要安装的服务:
- dhcpd:分配 IP 并告知 TFTP 服务器信息。
- tftp-server:提供启动文件(内核、初始化镜像、PXE 配置)。
- httpd(或nfs-utils):提供系统安装镜像(HTTP 更简单)。
- syslinux:提供 PXE 启动所需的引导程序。
以CentOS 7为例:
|
# 安装服务 yum install -y dhcp tftp-server httpd syslinux # 启动服务并设置开机自启 systemctl start dhcpd tftp httpd systemctl enable dhcpd tftp httpd |
2. 配置 DHCP 服务
DHCP 需指定客户端的 IP 范围、网关、DNS,关键是通过next-server指定 TFTP 服务器 IP,filename指定启动文件(pxelinux.0)。
编辑/etc/dhcp/dhcpd.conf:
|
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.101 192.168.1.200; # 客户端IP范围 option routers 192.168.1.1; # 网关 option domain-name-servers 8.8.8.8; # DNS next-server 192.168.1.100; # TFTP服务器IP(PXE服务器IP) filename "pxelinux.0"; # 启动文件名称 } |
重启 DHCP 服务:
|
systemctl restart dhcpd |
3. 配置 TFTP 服务
TFTP 用于传输启动相关文件,默认根目录为/var/lib/tftpboot。
1.复制 PXE 引导程序:
syslinux提供的pxelinux.0是核心引导文件,需复制到 TFTP 根目录:
|
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/ #cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ |
2.准备 Linux 启动镜像:
挂载 Linux ISO 镜像,提取内核(vmlinuz)和初始化镜像(initrd.img):
|
mount /dev/cdrom /mnt # 挂载ISO(或手动指定ISO路径:mount -o loop CentOS-7.iso /mnt) cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/ cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/ |
3.创建 PXE 配置目录:
PXE 客户端启动时会读取/var/lib/tftpboot/pxelinux.cfg/default配置文件:
|
mkdir -p /var/lib/tftpboot/pxelinux.cfg |
4.编写 PXE 启动菜单(default):
编辑/var/lib/tftpboot/pxelinux.cfg/default:
|
#default menu.c32 # 使用syslinux的菜单文本模块 default vesamenu.c32 # 使用syslinux的菜单图形模块 prompt 0 # 不等待用户输入(0秒超时) timeout 30 # 超时时间(30*0.1秒=3秒) menu title PXE Deploy Linux label linux menu label ^Install CentOS 7 Auto kernel vmlinuz append initrd=initrd.img inst.repo=http://192.168.1.100/centos7 inst.ks=http://192.168.1.100/centos7/ks.cfg |
- inst.repo:指定 HTTP 服务器上的安装源路径。
- inst.ks:指定 Kickstart 自动应答文件路径(后续步骤创建)。
4. 配置 HTTP 服务(提供安装源)
HTTP 服务器用于存放 Linux 安装镜像,供客户端下载系统文件。
- 复制安装源到 HTTP 根目录:
|
mkdir /var/www/html/centos7 cp -r /mnt/* /var/www/html/centos7/ # 复制ISO内所有文件到HTTP目录 |
2.验证 HTTP 服务:
浏览器访问http://192.168.1.100/centos7,应能看到 ISO 内的文件(如Packages、isolinux)。
5. 创建 Kickstart 自动应答文件(ks.cfg)
Kickstart 文件(ks.cfg)定义安装选项(分区、用户、软件包等),实现无人值守安装。
1.生成 ks.cfg:
可通过图形工具system-config-kickstart生成,或手动编写。示例(/var/www/html/centos7/ks.cfg):
|
#platform=x86, AMD64, 或 Intel EM64T #version=DEVEL install url --url=http://192.168.1.100/centos7 # 安装源URL keyboard us lang zh_CN text network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --plaintext 1234 skipx firewall --disabled selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" zerombr clearpart --all --initlabel # 清除所有分区并初始化标签 part /boot --fstype=xfs --size=500 --asprimary # 必须为标准分区(UEFI引导要求) part pv.01 --size=1 --grow # 剩余空间创建物理卷 volgroup vg0 pv.01 # 创建卷组 logvol / --fstype=xfs --vgname=vg0 --name=lv_root --grow --size=1 # 根逻辑卷(占满剩余空间) logvol swap --vgname=vg0 --name=lv_swap --recommended # 交换分区(推荐大小) %packages vim-enhanced nmap-ncat sysstat lvm2 @base @core %end reboot # 安装完成后重启 |
2.权限设置:
|
chmod 644 /var/www/html/centos7/ks.cfg |
6. 客户端 PXE 启动安装
- 客户端开机,进入 BIOS 设置,将 “网络启动(PXE)” 设为第一启动项。
- 客户端自动从网络启动,获取 IP 后加载 PXE 菜单。
- 选择 “Install CentOS 7”,系统会自动通过 HTTP 下载安装源,并按ks.cfg配置完成安装。
四、注意事项
- 防火墙与 SELinux:
临时关闭防火墙和 SELinux(或配置规则允许 DHCP/TFTP/HTTP 端口):
|
systemctl stop firewalld setenforce 0 |
2.TFTP 服务配置:
若 TFTP 服务启动失败,检查/etc/xinetd.d/tftp配置(确保disable = no)。
3.Kickstart 文件验证:
使用ksvalidator工具检查语法错误:
|
yum install -y pykickstart ksvalidator /var/www/html/centos7/ks.cfg |
4.多版本支持:
如需部署多个 Linux 版本,可在pxelinux.cfg/default中添加多个启动项,指向不同的安装源和 ks 文件。
通过以上步骤,即可实现 Linux 系统的批量 PXE 部署,适用于服务器机房、实验室等场景的大规模装机需求。
498

被折叠的 条评论
为什么被折叠?



