一、环境整体架构
服务端系统:CentOS7.9
服务端固定IP:10.11.11.128/24
部署功能:PXE网络启动 + DHCP自动分配IP + HTTP系统源 + Kickstart全自动无人值守安装
客户端效果:开机PXE启动 → 10秒倒计时自动装机 → 自动分区LVM → 自动装系统 → 自动重启 → 开机DHCP自动获取IP
注意点:中文乱码、包组报错、时区报错、磁盘LVM未定义分区、图形界面卡住、无法全自动交互弹窗
二、服务端所需服务
四个核心服务:
- dhcpd:给客户端分配IP、PXE引导地址
- tftp-server:传输PXE引导文件(vmlinuz、initrd、菜单)
- httpd:提供系统安装源 + ks.cfg脚本
- syslinux:提供pxe引导菜单文件
基本准备:
# 关闭selinux、防火墙
setenforce 0
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld
# 挂载yum镜像
前提:虚拟机已经挂载 CentOS7.9 DVD ISO,物理机插入 CentOS7.9 光盘;`/dev/sr0`就是光驱设备,/dev/cdrom 是 sr0 软链接
# 创建目录
mkdir -p /mnt/cdrom
# 只读挂载sr0
mount -o ro /dev/sr0 /mnt/cdrom
校验挂载:
df -h
ls /mnt/cdrom # 能看到 Packages、repodata 就是成功
cd /etc/yum.repos.d
# 备份全部repo
mkdir bak
mv *.repo bak
vi /etc/yum.repos.d/local.repo
写入以下内容:
[local-cdrom]
name=CentOS7.9 Local DVD
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
清理缓存,生成 yum 缓存
yum clean all
yum makecache
#列出本地源包
yum list
#根据所需是否开机自动挂载
vi /etc/fstab
增加
/dev/sr0 /mnt/cdrom iso9660 ro,noauto 0 0
此时yum源已配好
#安装组件
yum install -y dhcp tftp-server xinetd syslinux httpd
DHCP配置
编辑vi /etc/dhcp/dhcpd.conf,内容如下:
subnet 10.11.11.0 netmask 255.255.255.0 {
range 10.11.11.150 10.11.11.200;
option routers 10.11.11.1;
option domain-name-servers 223.5.5.5;
next-server 10.11.11.128; # TFTP/PXE服务器本机IP
filename “pxelinux.0”; # legacy引导文件
}
然后通过命令启动dhcpd服务,设置开启自启:
systemctl start dhcpd
systemctl enable dhcpd
TFTP(xinetd 托管):
编辑vi http://etc/xinetd.d/tftp,内容如下:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}
# 拷贝引导文件
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/
# 挂载CentOS ISO,复制内核
已经将sr0的镜像文件挂载到/mnt/cdrom,
cp /mnt/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
systemctl start xinetd
systemctl enable xinetd
检验文件ls /var/lib/tftpboot/
# 应该看到 vmlinuz initrd.img pxelinux.0 vesamenu.c32
拷贝镜像文件:
mkdir -p /var/www/html/centos7
cp -r /mnt/cdrom/* /var/www/html/centos7/
三、配置文件
- PXE菜单配置文件(/var/lib/tftpboot/pxelinux.cfg/default)
功能:英文菜单、10秒超时自动装机、强制文本模式彻底杜绝弹窗、加载ks全自动脚本
| DEFAULT menu.c32 MENU TITLE CentOS7 PXE Install Menu TIMEOUT 100 ONTIMEOUT centos7-autoLABEL centos7-auto MENU LABEL Install CentOS7 Auto(Kickstart) KERNEL vmlinuz APPEND initrd=initrd.img inst.repo=http://10.11.11.128/centos7 inst.ks=http://10.11.11.128/ks.cfg inst.text ip=dhcpLABEL local MENU LABEL Boot Local Harddisk LOCALBOOT 0 |
参数说明:
- TIMEOUT 100 = 10秒倒计时(单位1秒)
- ONTIMEOUT:超时自动执行自动装机
- text:强制文本安装,彻底禁止图形界面弹窗
- ks:指定全自动脚本地址
- ks.cfg(/var/www/html/ks.cfg)
包括:时区、用户警告、LVM分区、包组、磁盘分区
分区方案:100G硬盘专属
- /boot 500M
- swap 8G
- /home 10G
- /opt 10G
- /usr 10G
- /var 10G
- /data 20G
- 剩余全部空间给 / 根分区
其中加密root密码可以这么查看:
python -c ‘import crypt; print(crypt.crypt(“123456”, “$6$”))’
执行后出现的即是123456的加密密码
| # Kickstart for CentOS7自动版 lang en_US.UTF-8 keyboard us timezone Asia/Shanghai –isUtc# 网卡开机自启、DHCP自动获取IP network –bootproto=dhcp –device=ens33 –onboot=on –ipv6=auto –activate#加密root密码 rootpw –iscrypted $6$xxxxxxxxxx # 关闭防火墙、关闭selinux install # 强制清空sda所有磁盘分区 # 独立boot分区 # 自动创建LVM物理卷(解决 sda2 未定义报错) # 精准LVM分区规划 # CentOS7 官方正确最小化包组 # 安装完成自动重启 %post |
四、注意点
1:PXE中文菜单乱码
解决:全部改为英文菜单,彻底无乱码
2:ks.cfg包组报错
- ❌ @minimal (CentOS6用法)
- ❌ @minimal-install (CentOS8用法)
- ✅ @^minimal (CentOS7唯一正确写法)
坑3:安装卡在图形界面、需要手动点磁盘
解决:PXE启动参数加 inst.text 强制文本模式 + ks指定–drives=sda强制清盘
坑4:LVM报错 undefined /dev/sda2
解决:使用 pv.01 动态LVM分区,官方标准写法
坑5:时区未设置、需要手动确认
解决:强制写入 timezone Asia/Shanghai –isUtc
五、客户端最终效果
- 开机PXE启动 → 10秒倒计时自动进入装机
- 全程无任何交互、无弹窗、无报错
- 自动清空磁盘、自动创建全套LVM分区
- 自动安装系统、自动重启
- 开机网卡自动DHCP获取IP
- root密码为自定义的加密密码
六、必用校验命令
校验ks语法有无错误:
| ksvalidator /var/www/html/ks.cfg |
无输出 = 100% 正确,可以直接装机
七、服务端查看DHCP客户端IP命令
| # 查看所有已分配客户端IP/MAC grep -E “lease|hardware ethernet” /var/lib/dhcpd/dhcpd.leases# 实时监控客户端DHCP上线 tail -f /var/log/messages | grep dhcpd |
八、整套环境最终状态
✅ DHCP 正常分配IP
✅ TFTP 正常传输引导文件
✅ HTTP 正常读取系统源与ks脚本
✅ Kickstart 100%全自动无交互
✅ LVM分区完美执行
✅ 客户端开机自动DHCP获取IP
✅ 无乱码、无报错、无需人工干预