实战:PXE 网络批量装机服务的搭建



文章目录

  • 前言
  • 一、PXE 技术简介
    • 1、PXE 网络装机的优势
    • 2、PXE 的工作原理
    • 3、PXE 服务组件
    • 4、PXE 过程拓扑分析
  • 二、PXE 环境准备
  • 三、DHCP 服务配置
    • 1、安装软件包
    • 2、配置
    • 3、DHCP 工作原理
  • 四、FTP 服务
  • 五、Kickstart 无人值守/自动应答
    • 1、ks 配置文件的获取
    • 2、通过 Kickstart 配置程序获得
    • 3、ks.cfg 手动配置
  • 六、TFTP 服务配置
    • 1、安装 TFTP 服务
    • 2、部署 pxelinux.0 文件
    • 3、PXE 引导菜单
  • 七、测试装机
  • 总结


前言

   PXE(Preboot Execution Environment)是一种允许计算机在启动时通过 网络加载 操作系统的技术。这项技术对于 批量快速部署 大量服务器操作系统、恢复系统以及在无盘环境中运行系统非常有用。 PXE 通过使用 DHCPTFTP 协议,实现了在没有本地存储设备的情况下,从网络服务器加载 启动文件 和操作系统镜像。
  PXE 装机是一项高效的 系统部署 技术,如果你对这项技术还不够熟悉,那么本篇博客将是你的得力助手。这里,我们将由浅入深去学习 PXE 装机的精髓,帮助你掌握这一运维领域的关键技能。


  大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞👍,给我一点鼓励吧!这对我来说很重要 (*^▽^*)

一、PXE 技术简介

1、PXE 网络装机的优势

  • 规模化:可同时装配多台主机,节约时间。
  • 自动化部署:PXE 装机允许通过 ks.cfg 配置文件自动化安装系统,减少手动干预,提高了部署效率。
  • 灵活性:PXE 支持多种操作系统通过远程网络安装,不需要光盘、U 盘等物理介质,降低成本。
    在这里插入图片描述

2、PXE 的工作原理

   PXE client 集成在网卡的启动芯片中,当计算机 引导 时,从网卡芯片中把 PXE client 调入内存执行,获取 PXE server 配置、显示菜单,根据用户选择将远程引导程序下载到本机运行,具体如下5个工作阶段:

  • 启动阶段:计算机启动时,BIOS 或 UEFI 固件中的 PXE 客户端会向网络发送 广播 请求,寻找 PXE 服务器。
  • DHCP 响应:DHCP 服务器 响应 这些请求,提供 IP 地址和其他网络配置信息,包括启动文件的位置。
  • TFTP 下载:使用 TFTP 协议,PXE 客户端从服务器下载启动文件,这通常是一个小型的 引导程序
  • 引导程序执行:下载的 boot 引导程序执行,它可能会加载更完整的操作系统镜像,或者启动一个 轻量级 的操作系统环境。
  • 操作系统加载:在引导程序的帮助下,计算机能加载运行完整的操作系统。

3、PXE 服务组件

  前面论述了这么多,到底 PXE 服务需要哪几个组件,它们分别有什么样的作用呢?我们接下来继续看:

  • PXE 服务端组件:
    DHCP 服务:负责分配 IP 地址、定位 引导程序
    TFTP 服务:提供引导程序下载,因为预启动的 boot 系统没有正常的 内核环境文件系统 ,其它如 ftp、nfs、http 的传输协议没有发挥的空间
    FTP 服务 (或 HTTP / NFS ):提供 系统镜像 ,yum 安装源

  • 待裝机組件:
    网卡芯片必须支持 PXE 协议
    主板 BIOS 支持从 网卡 ( NIC )启动

4、PXE 过程拓扑分析

在这里插入图片描述
  如上述拓扑图所示,整个 PXE 服务流程就更清晰了,你可以想象你的计算机是一个在线购物者。
  当它需要启动或安装操作系统时,它会通过网络请求服务。PXE就像一个 快递服务,首先由DHCP服务器提供地址,然后 Boot Server 发送操作系统的“ 包裹 ”。计算机接收并打开这些“包裹”,按照 说明 安装系统。简单快捷,就像网购一样方便。最后,你的计算机已经准备好使用新安装的操作系统了,整个过程既快速又方便。
  理论存在,实践开始。接下来,我们将通过PXE装机实战,帮助大家加深对理论知识的理解,并 迅速掌握 这项实用技能。


二、PXE 环境准备

  • PXE 服务器:一台或多台服务器用于运行 PXE 服务,包括 DHCP 和 TFTP 服务与 FTP 服务。这里我使用一台 2核 2G的 Rokcy 8.6 虚拟机作为 PXE 服务器,IP 为 192.168.99.10 。

  • 目标系统:Rokcy-8.6

  • 环境搭建步骤:

    1. 配置 DHCP 服务:设置 DHCP 服务器以 分配IP地址 ,并指定 TFTP 服务器的地址和启动文件名。
    2. 准备安装镜像:将操作系统的安装镜像放置在 FTP 服务器或指定的 网络共享 (http、nfs) 位置。
    3. 准备 Kickstart 无人值守/自动应答的配置文件 ks.cfg
    4. 配置 TFTP 服务:设置 TFTP 服务器,确保它可以提供 PXE 启动 所需的文件。
    5. 配置 PXE 启动文件:准备并配置 pxelinux.0 或其他启动菜单文件,以及可能的配置文件如 menu.c32。
    6. 测试环境:在安全的环境中 测试 PXE 启动过程,确保一切配置正确无误。

三、DHCP 服务配置

  

1、安装软件包

  我们直接 yum 装包 DHCP 软件包,准备接下来的文件配置。

[root@PXE ~] yum -y install dhcp-server

2、配置

  装完软件包,进行如下配置:

 [root@PXE ~] vim /etc/dhcp/dhcpd.conf 
 
#   DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example   // 提示加载的配置文件
#   see dhcpd.conf(5) man page
#                                                                                                                         

  我们在 Vim 界面中读取提示的 dhcp-server 配置模板,命令模式输入:

:r /usr/share/doc/dhcp-server/dhcpd.conf.example

  显示许多其他配置,大部分是不需要的,只需要留下 dhcp IP 分配相关配置并更改即可。

subnet 192.168.99.0 netmask 255.255.255.0 {       // 定义一个子网广播域为 99 网段
  range 192.168.99.100 192.168.99.200;            // IP 分配范围为 99 网段的 100-200
  option routers 192.168.99.254;                  // 设置子网默认网关,一般可省去默认
  option broadcast-address 192.168.99.255;        // 设置子网广播地址,一般可省去默认
  next-server 192.168.99.10;                      // ★ 指定 PXE 客户端的引导服务器,设置为 TFTP 服务器的 IP
  filename "pxelinux.0";                          // ★ 指定 PXE 客户端寻找的引导文件名,必须为 pxelinux.0
  default-lease-time 600;                         // IP 默认租约时间 600 s,超过时间续租
  max-lease-time 7200;                            // 最大租约时间 7200 s
}   

  其中重要的是要指定 PXE 客户端得到 DHCP 分配的 IP 后,接着寻找的 TFTP 服务器地址,并寻找 pxelinux.0 文件。
  最后输入 systemctl enable dhcpd --now 启动服务即配置完毕。

3、DHCP 工作原理

  我们在这里稍微可以提一下 DHCP 的工作原理,分为四个阶段即:

Discovery 发现 --> Offer 提供 --> Request 请求 --> ACK 确认

  • 发现阶段:当设备(DHCP 客户端)连接到网络,如果它需要 IP 地址,它会发送一个 DHCP 发现广播消息,请求 IP 地址配置。
  • 提供阶段:DHCP 服务器接收到这个广播消息后,会从可用的 IP 地址池中选择一个未分配的 IP 地址,并发送一个 DHCP 提供消息回给客户端,这个过程中可能还包括子网掩码、默认网关、 DNS 服务器地址等其他网络配置信息。
  • 请求阶段:客户端收到一个或多个 DHCP 提供消息后,它会选择其中一个提供的配置,并发送一个 DHCP 请求消息,明确请求分配给它的IP地址和其他配置信息。
  • 确认阶段:当DHCP服务器接收到客户端的请求后,它会确认所请求的配置信息,并将IP地址从可用地址池中标记为已分配,然后发送一个DHCP确认消息给客户端,完成IP地址的分配。

四、FTP 服务

  此 FTP 服务器 用来提供系统镜像 yum 源,安装系统组件,下面简单进行安装配置并挂载系统镜像:

[root@PXE ~] yum -y install vsftpd
[root@PXE ~] vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES                            // 开启匿名登录
[root@PXE ~] systemctl enable vsftpd --now      // 启动 ftp 服务
[root@PXE ~] mkdir /var/ftp/dvd
[root@PXE ~] vim /etc/fstab
/dev/cdrom              /var/ftp/dvd            iso9660    defaults    0 0
[root@PXE ~] mount -a
[root@PXE ~] ls /var/ftp/dvd                    // 挂载 yum 源成功
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo  TRANS.TBL

五、Kickstart 无人值守/自动应答

  这里介绍一种自动化安装技术,Kickstart 用于简化和加速 Linux 系统的部署过程。它最初由 Red Hat 开发,并且现在被许多其他 Linux 发行版采用。
  简单来说就是大家在安装 Linux 时图形界面中选择时区、创建用户、安装组件时进行的交互自动化,提前把回应的结果写在 ks.cfg 文件中以达到自动应答,且批量装机无人值守的目的,这个配置文件就至关重要了。
在这里插入图片描述

1、ks 配置文件的获取

  既然 ks 自动应答文件这么关键,那么如何得到它的关键配置呢?目前
  我们可以从如下手段获取:

  • 使用官网在线配置工具: https://access.redhat.com/zh_CN/labsinfo/kickstartconfig
    // 因为貌似被墙,我就懒得翻墙去使用了,泛用性不高,感兴趣的小伙伴们可以去试试看
  • 拷贝ks文件: 装机成功后,家目录就有 anaconda-ks.cfg 文件,但为 CD/DVD 装机配置项,不好用
  • 手动编写ks文件: 非常麻烦的方式,但也有简单介绍
  • 从低版本转换: centos 7 及以下版本均有 图形化交互程序 可以生成配置,推荐使用。

2、通过 Kickstart 配置程序获得

  此方式麻烦的是需要找到 centos 7 (不超过 8) 或以下的图形化虚拟机获得,除此之外都很方便,具体方法如下:

[root@PXE ~] yum -y install system-config-kickstart
[root@PXE ~] system-config-kickstart                         
// 直接在图形化 Linux 中输入此命令就会出现配置程序

在这里插入图片描述
   此配置如同装机时所选那样,选择自己所需配置即可,安装方法选择系统镜像所在 ftp、http、nfs 路径,需要注意的是 软件包选择 有BUG,此处yum 仓库 ID 必须为 development 才可以进行软件包选择,是图形化界面还是最小安装等等。
   最后将家目录下得到的 ks.cfg 目录拷贝至 /var/ftp/ 下以待 PXE 客户端的寻找。

3、ks.cfg 手动配置

  手动配置还是比较困难的,配置项还是需要翻阅官方文档才可清楚,推荐以上方式。

[root@PXE ~] vim /var/ftp/ks.cfg

#platform=x86, AMD64, or Intel EM64T                                                                                      
#version=DEVEL
# Firewall configuration
firewall --disabled                        # 关闭防火墙
#firewall --enabled --ssh --smtp           
# Install OS instead of upgrade
install
# Use network installation
#url指定安装介质的位置
url --url="ftp://192.168.99.10/dvd"       # 指定 yum 源 ftp 路径
# Root password
rootpw --iscrypted $6$VGHxGuGku8U7CGzQ$u1zt1LjZQG.Vp2V5Qi0lv.GLk.SevDToh/z6xIWSuDYOLTZOKBUxdsCRAEdy.ZEaJTfi5lA3d0jOL0aK5JBFu.                                      
## 加密后的root密码,可以从 /etc/shadow 中获得,不加密为 rootpw --plaintext "password"
# Use text mode install
#强制指定使用文本安装
#text
graphical                                  # 图形化安装模式,除了慢其他都是优点
firstboot --disable                        # 跳过系统首次启动时配置,因为配置已经被 ks.cfg 定义好了,确保不会重复配置
# System keyboard
keyboard us                                # US 键盘布局                   
# System language
lang en_US                                 # 系统语言
# SELinux configuration
selinux --disable                          # 关闭 selinux
#selinux --enforcing
# Installation logging level 
logging --level=info                       # 记录日志
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai                    # 时区选择
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
#清除主引导记录
zerombr
# Partition clearing information
#清除所有分区
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="xfs" --grow --size=1     # 把硬盘全部空间分给根目录,文件系统为xfs
#执行脚本开始hich
#%post 
                                          # 装机后执行脚本,有需求选择
#%end
  
%packages
@base                                     # 软件包选择,base 最小化安装,必须有
 
%end                                                                                                                      

六、TFTP 服务配置

  TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的文件传输协议,它提供了一种在客户端和服务器之间传输文件的方法,TFTP 常用于网络启动(PXE启动),在没有本地存储的设备上加载操作系统或启动程序,下面进行 TFTP 服务的配置:

1、安装 TFTP 服务

[root@PXE ~] yum -y install tftp-server           // 安装 tftp 服务软件包
[root@PXE ~] systemctl enable tftp-server --now   // 可以不用进行其他配置直接启用服务

  其传输文件夹位于 /var/lib/tftpboot/ 中,需要把 pxelinux.0 二进制 boot 文件放入 tftp 共享文件夹内,供 PXE 客户端使用,在测试的环节中,我发现不同发行版与不同版本号的 Linux 中 pxelinux.0 文件的位置不完全固定,所以我们可以通过一条命令来找到该文件,如下:

yum provides */pxelinux.0   // 通过通配符可以找到该文件所在的软件包及其安装后所在目录

  结果如下

syslinux-nonlinux-6.04-5.el8.noarch : SYSLINUX modules which aren't run from linux.
Repo        : local_BaseOS
Matched from:
Filename    : /usr/share/syslinux/pxelinux.0

syslinux-tftpboot-6.04-5.el8.noarch : SYSLINUX modules in /tftpboot, available for network booting
Repo        : local_BaseOS
Matched from:
Filename    : /tftpboot/pxelinux.0

   syslinux 一个轻量级的引导加载程序,广泛用于启动 Linux 和其他操作系统。它支持多种启动媒体,包括 USB 驱动器、CD-ROM、DVD 以及通过网络的 PXE 启动。nonlinux 用于非 linux 系统,如在 windouw 系统上创建可启动的 linux 引导程序。

2、部署 pxelinux.0 文件

  这里我们安装 syslinux-tftpboot 并部署其中的 pxelinux.0 到 tftpboot 文件夹中,它作为 PXE 启动过程中的一个引导加载程序,允许计算机通过网络接口卡(NIC)启动操作系统,该文件包含启动操作系统所需与的指令。
  在 PXE 服务器上,pxelinux.0 需要放置在 TFTP 服务器的根目录中,以便 PXE 客户端可以下载并执行它。

[root@PXE ~] yum -y install syslinux-tftpboot
[root@PXE ~] cp /tftpboot/pxelinux.0 /var/lib/tftpboot/
[root@PXE ~] ls /var/lib/tftpboot/
pxelinux.0

3、PXE 引导菜单

  1) CD/DVD 引导菜单介绍
  PXE 引导菜单配置允许网络启动的客户端选择不同的 启动选项。这个配置可以通过使用 PXELINUX 或 Syslinux 工具集来完成,它们提供了一个配置文件系统来定义菜单项和行为,但是我们可以选择更简单的方式。
  相信大家都有通过镜像安装过虚拟机,当弹出安装界面的时候,是不是通过 CD/DVD 方式需要进入一个引导菜单?如下图所示,这就对了,我们完全可以借助这个菜单的配置文件来进行 PXE 的引导菜单配置。

Linux boot引导菜单
  2) 制作 PXE 引导菜单
  CD/DVD 的引导菜单配置文件位于系统镜像下的 isolinux 文件夹中,另一个 pxelinux 文件夹则专门用于从 PXE 网络启动的引导加载程序,可以查看到众多的文件。

[root@PXE ~] ls /var/ftp/dvd
AppStream  BaseOS  EFI  images  isolinux  LICENSE  media.repo  TRANS.TBL
[root@PXE ~] ls /var/ftp/dvd/isolinux/
boot.cat  grub.conf   isolinux.bin  ldlinux.c32   libutil.c32  splash.png  vesamenu.c32
boot.msg  initrd.img  isolinux.cfg  libcom32.c32  memtest      TRANS.TBL   vmlinuz 
[root@PXE ~] ls /var/ftp/dvd/images/pxeboot/
initrd.img  TRANS.TBL  vmlinuz

  我们把 isolinux 中的所有配置文件拷贝到 TFTP 共享文件夹内,并新建 pxelinux.cfg/ 文件夹,复制 isolinux.cfgpxelinux.cfg/default,此目录名称严格限定,写在了 pxelinux.0 二进制引导文件内。default 为菜单自定义配置文件,后续会用到,先按下不表。

[root@PXE ~] cp /var/ftp/dvd/isolinux/* /var/lib/tftpboot/
[root@PXE ~] mkdir /var/lib/tftpboot/pxelinux.cfg
[root@PXE ~] mv /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@PXE ~] ls -R /var/lib/tftpboot/
/var/lib/tftpboot/:
boot.cat  grub.conf   isolinux.bin  libcom32.c32  memtest       splash.png  vesamenu.c32
boot.msg  initrd.img  ldlinux.c32   libutil.c32   pxelinux.cfg  TRANS.TBL   vmlinuz   pxelinux.0

/var/lib/tftpboot/pxelinux.cfg:
default

  我们在这里大致介绍一些重要文件的作用是什么:

  - initrd.img                          // 硬件启动驱动程序,用于模拟文件系统
  - pxelinux.cfg/default                // 菜单配置文件
  - vesamenu.c32 及其他 c32 文件         // 菜单界面模块
  - pxelinux.0                          // PXE 启动环境中的引导加载程序
  - splash.png                          // 黑色的背景文件
  - vmlinuz                             // Linux 内核的压缩映像,用于启动 Linux 系统。

  3) 修改 PXE 引导配置文件

[root@PXE ~] vim /var/lib/tftpboot/pxelinux.cfg/default 

1 default vesamenu.c32                    // 默认寻找图形化程序
2 timeout 600                             // PXE 安装超时时间,60 s
10 menu background splash.png             // 背景图片路径
11 menu title Rocky Linux 8               // PXE 装机标题
61 label linux                            // 自定的标签
62   menu label ^Install Rocky Linux 8.6  // 安装界面显示的 系统安装项,可配置多系统安装
     menu default                         // 指定读秒结束后默认安装此系统
63   kernel vmlinuz                       // 指定内核模块
64   append initrd=initrd.img ks=ftp://192.168.99.10/ks.cfg net.ifnames=0 biosdevname=0    
// 指定文件系统驱动,删除其他硬盘装机选项。指定 ks 自动应答文件路径,初始化网卡名为 eth0 自动编号格式

  到这里所有配置就完毕了,真漫长啊,叙述的有些过于详细了,因为此篇文章是面向新手的,请擅长 PXE 的大佬们多多包涵 ☆(<ゝω・)☆ 。
  让我们最后再梳理一下 PXE 客户端装机的基本逻辑:

  • 客户端选择从 PXE 网络引导进行装机 ——>
  • 客户端获得 dhcp 分配的 IP,寻找 next-server tftp服务器的 pxelinux.0 文件 ——>
  • 读取引导菜单配置文件,加载其他配置,启动图形化 PXE 界面 ——>
  • 选择安装系统,读取 ftp 服务器的 ks.cfg 文件 ——>
  • 根据 ks.cfg 文件,自动应答系统配置 ——>
  • 读取系统镜像 yum 源并安装系统 ——>

七、测试装机

  这里准备 1 台虚拟机,选择从 PXE 网络引导进行装机,进 BIOS 需要注意的是网卡需要选择与 PXE 服务器在同一网段内,才可使用 DHCP 服务。

注意:虚拟机想要进行 PXE 装机,内存至少需要 2 核 2 G,不然可能会卡主,我这里选择了 4G 内存

在这里插入图片描述

1) DHCP 服务寻找中


在这里插入图片描述

2) PXE 引导菜单,选择安装 Rocky Linux 8


在这里插入图片描述

3) 加载 Linux 压缩内核 与 内核驱动,仿真文件系统


在这里插入图片描述

4) 加载文件系统中

\

在这里插入图片描述

5) 进入图形化安装界面自动应答并下载软件包进行装机


  从这里就基本宣告 PXE 装机成功,静待安装完毕即可。

排错思路
  这里因为篇幅原因,没有再更加详细论述每一个过程,如果有错误的小伙伴,可以参考以下排错思路:

1) 虚拟机是否有 2G 内存,才可进行 PXE 装机。
2) ks.cfg 有没有他人可读权限。
3) 防火墙是否关闭,保证 ftp,tftp 其他主机允许访问。
4) isolinux 中的内核文件可能会损坏,如 initrd.img 驱动文件可以从 pxelinux 文件夹中获得。
5) 有独显,虚拟机默认使用独显,结果在 PXE 装机这一步卡死机了,可以修改 虚拟机程序 使用核显。


总结

  此篇文章详细介绍了 PXE 技术,它允许计算机通过 网络加载 操作系统,特别适用于批量快速部署服务器操作系统、系统恢复以及无盘环境运行系统。本文从 PXE 技术简介、优势、工作原理、服务组件、过程拓扑分析,到环境准备、DHCP 服务配置、FTP 服务配置、Kickstart 无人值守 安装技术,再到 TFTP服务配置和测试装机,提供了一个全面的 PXE 装机指南
  整体而言,这篇文章是面向新手的技术教程,旨在帮助大家理解和掌握 PXE 网络装机的技术细节和操作步骤,如果有哪里出现了错误,还望各位指正并积极评论,与大家一起交流学习。

  文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!🚀



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值