在日常工作中,经常遇见需要集群部署的场景,需要搭建PXE进行快速的安装Linux系统。如果使用Windows软件,在互联网计算机上比较可行,但是在局域网尤其是办公网场景下,做了很多安全措施的计算机,在部署PXE时会出现各种各样的问题。除了环境的问题,Windows软件也存在兼容性等问题。
之前想过使用docker,但是在局域网中搭建docker的速度远远低于虚拟机,因此下面的方案是使用VMware做好虚拟机,然后在使用的时候仅仅需要依据现实情况进行参数的修改即可。
基于以上原因,首先考虑使用虚拟机做快照的方式,方便迁移,兼容性高,环境改变仅仅只需要修改参数即可使用;其次考虑Windows平台下的TFTPD64+EasyWebServer
Linux(使用VMware做快照的方式)
环境介绍
无人值守系统(PXE):Centos7,119.2.24.253
客户端主机未安装系统
PXE搭建
# DHCP:分配地址
yum -y install dhcp
systemctl enable dhcpd
vim /etc/dhcp/dhcpd.conf
allow booting;
# 允许了BOOTP引导程序协议
allow bootp;
ddns-update-style interim;
ignore client-updates;
# 子网网段声明
subnet 119.2.24.0 netmask 255.255.255.0 {
# 客户端的子网掩码
option subnet-mask 255.255.255.0;
# 定义DNS服务器地址
option domain-name-servers 119.2.24.253;
range dynamic-bootp 119.2.24.1 119.2.24.100;
next-server 119.2.24.253;
# 默认超时时间
default-lease-time 21600;
# 最大超时时间
max-lease-time 43200;
# 引导驱动文件 pxelinux.0
filename "pxelinux.0";
}
systemctl start dhcpd
# TFTP:传输系统引导文件
yum -y install xinetd tftp-server
systemctl enable xinetd
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no # 默认配置中只需要修改此处的yes为no
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl start xinetd
# SYSLinux:提供系统引导文件
yum -y install syslinux
# 把SYSLinux提供的引导文件pxelinux.0 和 系统镜像中相关文件 复制到TFTP服务程序的默认目录中
cd /var/lib/tftpboot
cp /usr/share/syslinux/pxelinux.0 .
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .
# 将系统光盘中的开机选项菜单复制到该目录中,并命名为default【在目录/var/lib/tftpboot下】
mkdir pxelinux.cfg
cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default
# 默认的开机菜单中有两个选项,要么是安装系统,要么是对安装介质进行检验。
# 编辑这个 default 文件,把第 1 行的 default 参数修改为 linux,即开机时就会默认执行那个名称为 linux 的选项了
# 将默认的光盘镜像安装方式修改成FTP文件传输方式,并指定好光盘镜像的获取网址以及Kickstart应答文件的获取路径:
vim pxelinux.cfg/default
default linux # 第一行
append initrd=initrd.img inst.stage2=ftp://119.2.24.253/cdrom ks=ftp://119.2.24.253/ks/ks.cfg quiet # 最后一行,ks为自动化安装脚本
# FTP:传输系统安装镜像和应答文件
yum -y install vsftpd
systemctl enable vsftpd
vim /etc/vsftpd/vsftpd.conf
# 追加
anon_root=/media # 即匿名访问目录
systemctl start vsftpd
# Kickstart:产生应答文件(实际使用应答文件见二级标题: kickstart自动化执行脚本)
mkdir /media/ks
cp ~/anaconda-ks.cfg /media/ks/ks.cfg # 此处直接使用的是本系统安装过程中产生的应答文件
chmod 777 /media/ks/ks.cfg
vim /media/ks/ks.cfg
url --url=ftp://119.2.24.253/cdrom
timezone Asia/Shanghai --isUtc
clearpart --all --initlabel
# 自定义应答文件,需要安装Kickstart
yum -y install system-config-kickstart
system-config-kickstart # 输入相应的参数即可
配置好之后进行PXE测试,测试通过之后需要对此虚拟机拍摄快照
kickstart自动化执行脚本(ks.cfg)
#platform=86, AMD64, 或 Intel EM64T
#version=DEVEL
# System authorization information
auth --passalgo=sha512
# Install OS instead of upgrade
install
# Use graphical install
graphical
# Firewall configuration
firewall --disabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='cn'
# System language
lang zh_CN.UTF-8
# Network information
network --bootproto=static --device=ens33 --gateway=119.2.24.254 --ip=119.2.24.3 --netmask=255.255.255.0 --noipv6 --activate
network --hostname=localhost.localdomain
# Reboot after installation
reboot
# Use network installation
url --url="ftp://119.2.24.253/cdrom"
# Root password
rootpw --iscrypted $1$pFqd7Qyu$tkYI.hhD2pXjM3YvuUt9s1
# SELinux configuration
selinux --disabled
# System services
services --enabled="chronyd"
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part pv.478 --fstype="lvmpv" --ondisk=sda --size=19453
part /boot --fstype="xfs" --ondisk=sda --size=1024
part biosboot --fstype="biosboot" --ondisk=sda --size=2
volgroup centos --pesize=4096 pv.478
logvol / --fstype="xfs" --grow --size=1 --name=root --vgname=centos
%packages
@^minimal
@core
chrony
%end
%post
rm -rf /etc/yum.repos.d/*
cat << EOF >/etc/yum.repos.d/development.repo
[development]
name=CentOS-7-x86_64-Everything-1908.iso
baseurl=ftp://119.2.24.253/cdrom
gpgcheck=0
EOF
yum makecache
%end
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
# 说明
# IP地址:119.2.24.253/24
# 网关:119.2.24.254
# ks自动化脚本:
# 1. 关闭selinux和防火墙
# 2. 最小化安装
# 3. 密码为全键盘
# 4. 磁盘分区biosboot、boot(1G)、根(剩余)
# 5. 设置yum源为PXE的ftp
参数修改
根据实际情况进行参数修改之后即可使用,例如PXE服务器地址变为192.168.10.10,则修改如下:
# 修改DHCP参数:用于分配网址
# 主要修改以下参数:
vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.10.10;
range dynamic-bootp 192.168.10.100 192.168.10.200;
next-server 192.168.10.10;
}
systemctl restart dhcpd
# 修改引导文件中地址
vim /var/lib/tftpboot/pxelinux.cfg/default
default linux # 第一行
append initrd=initrd.img inst.stage2=ftp://192.168.10.10/cdrom ks=ftp://192.168.10.10/ks/ks.cfg quiet # 最后一行,ks为自动化安装脚本
# 或者
# sed -i "s/119.2.24.253/192.168.10.10/g" /var/lib/tftpboot/pxelinux.cfg/default
# 修改Kickstart应答文件所有的IP地址
sed -i "s/119.2.24.253/192.168.10.10/g" /media/ks/ks.cfg # 修改所有的链接
sed -i "s/119.2.24.254/192.168.10.1/g" /media/ks/ks.cfg # 修改自动分配地址的网关
sed -i "s/119.2.24.3/192.168.10.2/g" /media/ks/ks.cfg # 修改自动分配的IP地址
Windows(TFTPD64+EasyWebServer)
环境介绍
使用软件如下:
tftpd64:自带PXE、DHCP服务端
EasyWebServer:小型WEB服务工具
syslinux:引导工具,最新版是syslinux-6.03.zip,此处下载的是syslinux-4.05.zip
CentOS7.7 1908 安装镜像:系统安装镜像
UltraISO:镜像查看和解压工具
Windows电脑的IP为119.2.24.1
操作步骤
- 在任意存储空间充足例如D盘的pxestart目录下的分区的根目录下建立如下目录:
./PXE
# 用于存放PXE引导所需要的内容
./PXE/centos-inst
# 用于存放PXE引导配置文件
./PXE/centos-inst/pxelinux.cfg
# 用于存放centos安装镜像提取的全部内容
./PXE/centos-iso
- 使用UltraISO将获取的CentOS7.7的iso文件内的内容全部提取到目录
./PXE/centos-iso
下面。不可以用解压工具,否则目录repodata中的文件会出现问题 - 将提取的iso文件内
isolinux
目录下的vmlinuz
、vesamenu.c32
、initrd.img
和boot.msg
复制一份到目录./PXE/centos-inst
下面,并将syslinux-4.05.zip
内core
目录里的pxelinux.0
文件也放到目录./PXE/centos-inst
下面 - 在
./PXE/centos-inst/pxelinux.cfg
目录下建一个default
文件和Linux版本中/var/lib/tftpboot/pxelinux.cfg/default内容基本相同,将一下内容复制进去:
default vesamenu.c32
prompt 1
timeout 600
display boot.msg
label linux
menu label ^Install system
menu default
kernel vmlinuz
append initrd=initrd.img ip=dhcp inst.repo=http://119.2.24.1/
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://119.2.24.1/
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
- TFTP64设置
- 提供引导文件:
- 设置PXE和DHCP服务:
- EasyWebServer设置
双击启动后,任务栏右键选择设置,按照下图设置两处之后,再次任务栏选择启动服务
- 全部设置完毕,可以进行PXE系统安装测试了
但是在测试过程中,因为系统精简的缘故,依然遇到以下问题:
因此不建议使用Windows直接搭建PXE