CentOS 7.9 自动化批量装机实战:基于 PXE + Kickstart(VMware 完整版)
2026/9/24 19:24:09 网站建设 项目流程

CentOS 7.9 自动化批量装机实战:基于 PXE + Kickstart(VMware 完整版)

📌 实验目的
通过在 VMware Workstation 平台模拟真实裸机批量安装操作系统,实现在大规模真实场景下批量自动化安装操作系统的应用需求,极大提升运维效率。
🔧 本文环境参数:PXE 服务器 IP10.6.16.152| 网段10.6.16.0/24| 网关10.6.16.2


📑 目录

  1. 避坑指南:VMware 网络环境准备
  2. Step 1. 安装核心服务
  3. Step 2. 配置 DHCP 服务
  4. Step 3. 配置 TFTP 服务及引导文件
  5. Step 4. 配置 HTTP 服务
  6. Step 5. 编写 Kickstart 自动应答文件
  7. Step 6. 环境安全配置与服务启动
  8. Step 7. 检查服务状态
  9. Step 8. 测试裸机批量装机
  10. 常见问题排查

🔍 一、整体流程(自上而下)

客户端主机(待装机) ↓ PXE 网卡启动 ↓ PXEServer(同一局域网) │ ├─ DHCP:分配IP + 告诉客户端“TFTP在哪、启动文件叫啥” ├─ TFTP:传小文件(vmlinuz, initrd.img, pxelinux.0) └─ HTTP/NFS/FTP:传大文件(ISO镜像 + ks.cfg) ↓ 加载内核 → 自动读取 kickstart.cfg ↓ 全自动:分区 → 安装 → 配置 → 重启

🧩 二、各组件作用详解

1️⃣客户端主机(待装机)
  • 是一台无操作系统、无硬盘数据的裸机(或已清空硬盘的机器)。
  • 开机时 BIOS/UEFI 检测到网卡支持 PXE → 进入PXE Boot阶段(不是从硬盘/光盘启动!)。
2️⃣PXE 网卡启动
  • 网卡固件(ROM)发出DHCP Discover 广播包,请求 IP 和引导信息。
  • ⚠️ 关键前提:客户端与 PXE 服务器必须在同一广播域(即同一子网),否则 DHCP 请求收不到。
3️⃣PXE 服务端(核心!三服务协同)
服务作用传输什么?为什么需要它?
DHCP分配 IP + 指路next-server=192.168.108.10filename="pxelinux.0"客户端不知道 TFTP 在哪、该下载哪个文件——DHCP 告诉它!
TFTP传“启动引导小文件”pxelinux.0(引导程序)vmlinuz(内核)initrd.img(初始内存盘)TFTP 轻量、无认证、UDP 协议,适合快速传几百KB~几MB的引导文件;但不能传大文件(如 ISO)
HTTP/NFS/FTP传“安装大文件”CentOS ISO 镜像(4GB+)ks.cfg(Kickstart 自动应答文件)HTTP 最常用(稳定、支持断点续传、易调试),用于后续安装过程中的软件包下载和配置读取

✅ 图中(传vmlinuz)(传ISO/ks.cfg)是对数据流向的标注,非常准确!

4️⃣加载内核 → 自动读取 kickstart.cfg
  • 客户端通过 TFTP 下载pxelinux.0→ 启动后加载vmlinuz+initrd.img
  • 内核启动后,initrd中的dracutanaconda会去HTTP 地址读取ks.cfg
  • ks.cfg就是你的“安装脚本”,告诉系统:
    • 分区怎么分(clearpart --all
    • root 密码设多少(加密哈希)
    • 装哪些软件包(%packages
    • 安装完是否重启(reboot
5️⃣全自动完成
  • 从下载内核 → 加载内存盘 → 读 KS 文件 → 分区 → 安装 RPM 包 → 配置网络/用户 → 生成 GRUB → 重启
  • 全程无人干预,实现“一键批量装机”。

⚠️ 三、图中关键细节提醒(避坑重点)

细节说明
“同一局域网”DHCP 是广播协议,跨 VLAN/路由器需配置 DHCP Relay,初学者务必保证客户端与服务器在同一网段(如 VMnet8 关闭 VMware DHCP 后手动配静态 IP)。
pxelinux.0是入口所有 PXE 流程始于这个文件,它相当于一个“微型 bootloader”,由 Syslinux 提供。
initrd的作用初始内存盘包含驱动(如网卡、磁盘)、安装程序(anaconda),让内核能“活起来”并联网下载后续资源
KS 文件路径必须可访问inst.ks=http://192.168.108.10/ks/ks.cfg—— 客户端要能通过 HTTP 访问到这个 URL,否则安装中断!
为何不用 FTP/NFS?HTTP 最简单:httpd易部署、日志清晰、浏览器可直接测试;NFS/FTP 需额外权限配置,新手易出错。

1. 避坑指南:VMware 网络环境准备

⚠️重要提醒
在 VMware Workstation 中做 PXE 实验,最大的坑是 VMware 自带的 DHCP 服务会与你搭建的 DHCP 服务冲突,导致裸机无法获取正确的引导文件。在开始配置之前,请严格按照以下步骤调整:

  1. 打开 VMware Workstation。
  2. 点击顶部菜单栏“编辑 (Edit)”“虚拟网络编辑器 (Virtual Network Editor)”
  3. 点击右下角“更改设置 (Change Settings)”获取管理员权限。
  4. 选中当前虚拟机使用的网络(通常是VMnet8 NAT 模式)。
  5. 取消勾选“使用本地 DHCP 服务将 IP 地址分配给虚拟机”。
  6. 点击 “确定” 保存。

✅ 确保你的模板机(PXE 服务器)已配置静态 IP10.6.16.152,且能正常访问网络。


2. Step 1. 安装核心服务

在 PXE 服务器上安装所需底层服务:DHCP(分配 IP)、TFTP(传输引导文件)、HTTP(传输系统镜像和应答文件)、Syslinux(提供引导程序)。

[root@localhost ~]# yum install -y dhcp tftp-server httpd syslinux

3. Step 2. 配置 DHCP 服务

编辑 DHCP 配置文件,指定 IP 范围、网关、DNS,并指明 PXE 引导文件及 TFTP 服务器地址。

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf# 定义子网、子网掩码subnet10.6.16.0 netmask255.255.255.0{range10.6.16.20010.6.16.250;# 分配给裸机的 IP 范围option routers10.6.16.2;# 网关option domain-name-servers114.114.114.114;# DNSdefault-lease-time21600;max-lease-time43200;# PXE 核心配置next-server10.6.16.152;# TFTP 服务器 IP (PXE服务器IP)filename"pxelinux.0";# PXE 引导文件名称}

💡提示range范围不要和 PXE 服务器 IP10.6.16.152冲突,建议预留固定 IP 段给服务器使用。


4. Step 3. 配置 TFTP 服务及引导文件

TFTP 默认根目录为/var/lib/tftpboot/,需将引导所需文件放入该目录。

4.1 复制引导程序

[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

4.2 挂载 CentOS 7.9 光盘

[root@localhost ~]# mkdir -p /mnt/cdrom[root@localhost ~]# mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom[root@localhost ~]# df -h /mnt/cdrom文件系统 容量 已用 可用 已用% 挂载点 /dev/loop04.4G4.4G0100% /mnt/cdrom

4.3 复制内核、镜像及菜单文件

# 复制内核和镜像文件到 tftp 根目录[root@localhost ~]# cp /mnt/cdrom/images/pxeboot/vmlinuz /var/lib/tftpboot/[root@localhost ~]# cp /mnt/cdrom/images/pxeboot/initrd.img /var/lib/tftpboot/# 复制菜单背景文件和引导菜单模块(可选,美化界面)[root@localhost ~]# cp /mnt/cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/[root@localhost ~]# cp /mnt/cdrom/isolinux/boot.msg /var/lib/tftpboot/

4.4 创建 PXE 引导菜单配置文件

[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/defaultdefault vesamenu.c32timeout60display boot.msg menu title CentOS7.9PXE Installation label linux menu label ^Install CentOS7.9(Automated)menu default kernel vmlinuz appendinitrd=initrd.imginst.repo=http://10.6.16.152/centos7inst.ks=http://10.6.16.152/ks/ks.cfg

⚠️注意inst.ksinst.repo的 IP 必须为你的 PXE 服务器 IP10.6.16.152


5. Step 4. 配置 HTTP 服务

利用 Apache (httpd) 对外提供操作系统安装包资源和自动应答文件。

5.1 创建目录并挂载镜像

# 创建系统镜像目录和 ks 文件目录[root@localhost ~]# mkdir -p /var/www/html/centos7[root@localhost ~]# mkdir -p /var/www/html/ks# 挂载光驱到 web 目录[root@localhost ~]# mount /dev/cdrom /var/www/html/centos7/mount: /dev/sr0 写保护,将以只读方式挂载

5.2 配置永久挂载

写入/etc/fstab防止重启后失效:

[root@localhost ~]# echo "/dev/cdrom /var/www/html/centos7 iso9660 defaults 0 0" >> /etc/fstab

6. Step 5. 编写 Kickstart 自动应答文件

Kickstart 是实现"无人值守"安装的核心。

[root@localhost ~]# vim /var/www/html/ks/ks.cfg#version=DEVEL# 系统认证配置:启用影子密码 + 密码加密算法 SHA512auth--enableshadow--passalgo=sha512# 网络安装源(必须指向你的HTTP仓库)url--url="http://10.6.16.152/centos7"# 安装模式(生产环境建议改为 text 更稳定)text# 首次启动不运行初始化向导firstboot--disable# 只使用指定硬盘 sdaignoredisk --only-use=sda# 键盘布局keyboard--vckeymap=us--xlayouts='us'# 系统语言lang zh_CN.UTF-8# 网络配置 DHCP自动获取 + 网卡开机自启network--bootproto=dhcp--device=ens33--onboot=yes--ipv6=auto# root 密码(已加密,明文请用 rootpw --plaintext 123456 生成替换,生产环境不推荐)# rootpw --plaintext 123456rootpw--iscrypted$6$YourHashHere# 启用时间同步services--enabled="chronyd"# 时区:上海(东八区)timezone Asia/Shanghai--isUtc# 安装GRUB引导程序到MBRbootloader--append="crashkernel=auto"--location=mbr --boot-drive=sda# 清空所有磁盘分区(必须!无人值守核心)clearpart--all--initlabel# 自动分区,使用LVM格式autopart--type=lvm# 安装的软件包组%packages @^infrastructure-server-environment @base @core @development @file-server @java-platform chrony kexec-tools %end# 内核崩溃转储配置%addon com_redhat_kdump--enable--reserve-mb='auto'%end# 密码策略%anaconda pwpolicy root--minlen=6--minquality=1--notstrict--nochanges--notemptypwpolicy user--minlen=6--minquality=1--notstrict--nochanges--emptyokpwpolicy luks--minlen=6--minquality=1--notstrict--nochanges--notempty%end# 安装完自动重启reboot# 安装后脚本:动态设置主机名%postIP=$(ip-4addr show ens33|grep-oP'(?<=inet\s)\d+(\.\d+){3}'|head-1)THIRD=$(echo$IP|cut-d.-f3)FOURTH=$(echo$IP|cut-d.-f4)hostnamectl set-hostname"node-${THIRD}-${FOURTH}"echo"127.0.0.1 node-${THIRD}-${FOURTH}">>/etc/hosts systemctlenablesshd chronyd %end

💡优化点说明

  • graphical改为text:PXE 批量安装时无 GPU 驱动兼容问题,速度更快、失败率更低。
  • 新增%post段:根据 IP 动态命名主机,避免批量装机后主机名冲突。

7. Step 6. 环境安全配置与服务启动

7.1 关闭防火墙与 SELinux

# 关闭防火墙[root@localhost ~]# systemctl stop firewalld[root@localhost ~]# systemctl disable firewalld# 关闭 SELinux[root@localhost ~]# setenforce 0[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

7.2 启动服务并设置开机自启

[root@localhost ~]# systemctl start dhcpd tftp httpd[root@localhost ~]# systemctl enable dhcpd tftp httpd

8. Step 7. 检查服务状态

使用curl测试 HTTP 服务是否正常提供系统镜像源:

[root@localhost ~]# curl -I http://10.6.16.152/centos7/

同时验证 ks 文件可访问:

[root@localhost ~]# curl -I http://10.6.16.152/ks/ks.cfg

✅ 返回HTTP/1.1 200 OK即表示配置成功。


9. Step 8. 测试裸机批量装机

服务器端已就绪,开启裸机测试:

  1. VMware 中“文件”“新建虚拟机”“自定义(高级)”
  2. 安装系统选择“稍后安装操作系统”(关键!模拟无系统裸机)
  3. 系统选Linux → CentOS 7 64位
  4. 内存建议≥ 2GB(防止内存不足报错)
  5. 网络选NAT(与 PXE 服务器同 VMnet8)
  6. 创建新虚拟磁盘(20G 即可)
  7. 点击“开启此虚拟机”

🎉 正常情况:虚拟机开机后自动获取 IP → 加载 PXE 菜单 → 6秒倒计时后自动进入安装流程 → 安装完毕自动重启 → 进入系统。


10. 常见问题排查

问题现象可能原因解决方案
卡在PXE-E53: No boot filename receivedDHCP 配置错误或 VMware DHCP 未关闭检查dhcpd.conf,确认 VMware DHCP 已关
TFTP open timeoutTFTP 服务未启动或防火墙拦截systemctl status tftp,关闭 firewalld
安装过程中报Unable to read package metadataHTTP 源不可访问或.treeinfo缺失curl测试 URL,确认镜像完整挂载
安装完进系统主机名全是localhostks.cfg 未配置动态命名补充%post段主机名脚本
密码错误无法登录加密哈希值不正确openssl passwd -6 '密码'重新生成

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询