PXE的快速搭建

在日常工作中,经常遇见需要集群部署的场景,需要搭建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

操作步骤

  1. 在任意存储空间充足例如D盘的pxestart目录下的分区的根目录下建立如下目录:
./PXE
# 用于存放PXE引导所需要的内容
./PXE/centos-inst
# 用于存放PXE引导配置文件
./PXE/centos-inst/pxelinux.cfg       
# 用于存放centos安装镜像提取的全部内容
./PXE/centos-iso
  1. 使用UltraISO将获取的CentOS7.7的iso文件内的内容全部提取到目录./PXE/centos-iso下面。不可以用解压工具,否则目录repodata中的文件会出现问题
  2. 将提取的iso文件内isolinux目录下的vmlinuzvesamenu.c32initrd.imgboot.msg复制一份到目录./PXE/centos-inst下面,并将syslinux-4.05.zipcore目录里的pxelinux.0文件也放到目录./PXE/centos-inst下面
  3. ./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
  1. TFTP64设置
    1. 提供引导文件:提供引导文件
    2. 设置PXE和DHCP服务:
      全局设置
      TFTP设置
      DHCP设置
  2. EasyWebServer设置
    双击启动后,任务栏右键选择设置,按照下图设置两处之后,再次任务栏选择启动服务
    设置目录
    设置可浏览目录
  3. 全部设置完毕,可以进行PXE系统安装测试了
    但是在测试过程中,因为系统精简的缘故,依然遇到以下问题:
    翻车
    因此不建议使用Windows直接搭建PXE