Linux之PXE网络安装

概述

PXE(Preboot Execution Environment,预启动执行环境)是一种通过网络启动计算机的技术。它允许客户端(目标机器)从服务器获取操作系统镜像并完成安装,而无需本地存储介质(如光盘或U盘)。PXE 常用于批量部署操作系统,特别是在数据中心和企业环境中。

  • 适用场景
    • 无盘工作站(Diskless Workstation)。
    • 远程安装操作系统(如批量部署服务器或桌面)。
    • 系统恢复或故障诊断。
    • 虚拟化环境中的快速克隆。
  • 优势
    • 无需本地存储即可启动。
    • 集中管理,便于批量部署和更新。
    • 支持多系统选择和自动化安装。

核心组件及准备

在开始 PXE 安装之前,需要搭建一个支持 PXE 的网络环境,并配置相关的服务。

硬件准备

  • 客户端:支持 PXE 的网卡(大多数现代主板都支持),且 BIOS/UEFI 支持网络引导。。
  • 服务器:一台运行 DHCP、TFTP 和 HTTP/FTP/NFS 服务的服务器。
  • 网络:客户端和服务器需连接在同一局域网中。

软件准备

  • PXE 引导 ROM:网卡或主板的固件中内置的 PXE 启动代码,负责发起 DHCP/TFTP 请求等。
  • DHCP 服务器:为客户端分配 IP 地址,并提供 PXE 引导所需的参数(如 TFTP 服务器地址和启动文件名)。
  • TFTP 服务器:提供引导文件(如 pxelinux.0grubx64.efi)、内核文件(vmlinuz)、初始化镜像文件(initrd.img)及配置文件。。
  • HTTP/FTP/NFS 服务器:存储操作系统安装源文件(如 ISO 镜像、RPM/DEB 包等)和配置文件(如 ks.cfg)。。

关键技术细节

(1) PXE 引导协议栈

  • BOOTP/DHCP:用于分配 IP 和引导参数。
  • TFTP:轻量级协议,仅支持 readwrite 操作,端口 69
  • HTTP/NFS/FTP:用于传输大型安装源文件。

(2) 引导程序类型

  • pxelinux(Syslinux)
    • 传统 BIOS 环境常用。
    • 配置文件 pxelinux.cfg 支持按 MAC/IP 匹配规则。
  • GRUB(UEFI)
    • 支持 UEFI 系统,使用 grub.cfg 配置。
    • 文件名通常为 grubx64.efi(x86_64)或 grubia32.efi(ARM)。

(3) initrd 初始化镜像

  • 作用:提供临时根文件系统,包含驱动程序和工具,用于探测硬件并挂载真实根文件系统。
  • 内容:内核模块、网络工具(ipwget)、安装脚本等。

PXE 网络安装流程

步骤 1:客户端开机并启用 PXE

  • 客户端(目标机器)开机后,BIOS/UEFI 会检测到支持 PXE 的网卡。
  • 如果启用了 PXE 启动模式,会进入 PXE 引导模式,PXE ROM 会通过 DHCP 协议向网络中的 DHCP 服务器请求 IP 地址。

步骤 2: DHCP 分配 IP 地址

  • DHCP 服务器收到客户端的请求后,分配一个 IP 地址给客户端。
  • 同时,DHCP 服务器还会返回以下关键信息:
    • TFTP 服务器地址:告诉客户端从哪个服务器获取引导文件,如 option 66 指定 TFTP 服务器地址。
    • 引导文件名:通常是 pxelinux.0 或其他引导加载程序,如option 67 指定启动文件名。
  • 示例 DHCP 配置(以 ISC DHCP 为例):
    # 定义 PXE 引导相关选项
    next-server 192.168.1.100;  # TFTP 服务器地址
    filename "pxelinux.0";      # 初始引导程序文件名

    步骤 3: 下载引导程序并执行

  1. 下载引导程序:客户端通过 TFTP 协议从指定的 TFTP 服务器(next-server)下载filename 指定的引导文件(如 pxelinux.0)。
  2. 执行引导程序:下载的引导程序(如 pxelinux.0)开始运行,接管系统控制权,显示引导菜单或执行预设配置。
  • 引导文件通常是一个小型的操作系统加载程序,负责后续的引导过程。

步骤 4: 加载内核和初始化镜像

  1. 读取配置文件:引导程序(如 pxelinux)从 TFTP 服务器加载配置文件(如 pxelinux.cfg/default),根据客户端 MAC 地址、IP 或其他标识选择配置。
    • 示例配置文件 /var/lib/tftpboot/pxelinux.cfg/default
      DEFAULT linux
      LABEL linux
          kernel vmlinuz    # 内核文件名
          append initrd=initrd.img root=/dev/nfs nfsroot=192.168.1.100:/path/to/install/root ip=dhcp
  2. 下载内核和初始化镜像:根据配置文件,客户端通过 TFTP 下载操作系统内核(vmlinuz)和初始化镜像(initrd.img,包含启动所需的临时文件系统)。

步骤 5:启动内核并初始化安装环境

客户端下载内核和初始化镜像后,会进入操作系统的预安装环境:

  1. 加载内核:内核启动后,挂载初始 RAM 磁盘(initrd)并初始化网络。
  2. 挂载安装源:客户端会根据配置文件(如 ks.cfgpreseed.cfg)通过网络协议(如 NFS、HTTP 或 FTP)挂载操作系统安装源。例如:
    • NFSnfsroot=192.168.1.100:/path/to/nfs/share
    • HTTP:通过 wgetcurl 下载安装镜像。
    • 配置文件通常包含自动化的安装选项(如分区方案、语言设置、用户密码等)。
  3. 启动安装程序:根据内核参数或用户交互,开始操作系统安装流程。

步骤 6: 系统安装与配置

  1. 分区与格式化:用户选择磁盘分区方案或自动化脚本(如 Kickstart)执行。
  2. 复制文件:将操作系统文件从网络安装源复制到本地磁盘。
  3. 配置系统:设置网络、用户、时区等参数。
  4. 安装引导程序:将 GRUB 或其他引导程序写入本地磁盘。

步骤 7: 安装完成并重启

  • 操作系统安装完成后,客户端会重启。
  • 此时,客户端将从本地硬盘启动,进入新安装的操作系统。

关键配置示例

DHCP 服务器配置(ISC DHCP)

# /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.100;
    option routers 192.168.1.1;
    next-server 192.168.1.100;  # TFTP 服务器地址
    filename "pxelinux.0";      # BIOS 环境引导程序
    # 或者 UEFI 环境:
    # filename "grubx64.efi";
}

TFTP 服务器配置示例

  • 目录结构
    /var/lib/tftpboot/  # TFTP 根目录
    ├── pxelinux.0      # BIOS 引导程序
    ├── grubx64.efi     # UEFI 引导程序
    ├── pxelinux.cfg/   # BIOS 引导配置目录
    │   └── default     # BIOS 引导配置文件
    ├── grub.cfg        # UEFI 引导配置文件
    ├── vmlinuz         # 内核文件
    ├── initrd.img      # 初始化镜像
    └── isolinux/       # 可选:ISO 镜像中的文件
  • pxelinux.cfg/default 示例
    DEFAULT linux
    LABEL linux
        KERNEL vmlinuz
        APPEND initrd=initrd.img ks=http://192.168.1.10/ks.cfg

    HTTP/FTP/NFS 服务器配置示例

配置示例(以 HTTP 为例):

  • 将 ISO 文件挂载到 /var/www/html/os/ 目录:
    mount -o loop /path/to/os.iso /var/www/html/os/
  • 提供 Kickstart 配置文件(ks.cfg):
    url --url=http://192.168.1.10/os/
    lang en_US
    keyboard us
    network --onboot yes --device eth0 --bootproto dhcp
    rootpw password
    firewall --disabled
    reboot

    UEFI 环境引导配置(grub.cfg)

    menuentry 'Install CentOS' {
        linux /vmlinuz inst.repo=http://192.168.1.100/centos8/
        initrd /initrd.img
    }

    扩展应用

  • 自动化安装:通过 Kickstart(RHEL/CentOS)、Preseed(Debian/Ubuntu)脚本实现无人值守安装。
  • 多系统部署:在 pxelinux.cfg 中配置多个 LABEL,支持不同操作系统或版本选择。
  • UEFI 支持:使用 grubx64.efi 替代 pxelinux.0,并配置 UEFI 引导参数。
  • 安全性增强
    • 使用 HTTPS 替代 HTTP 传输安装源。
    • 通过 DHCP 的 classhost 定义限制 PXE 引导权限。
    • 结合 IPSecSSH 加密网络流量。

自动化工具

为了简化 PXE 网络安装,可以使用以下工具:

  • Cobbler:集成了 DHCP、TFTP 和 HTTP 服务,支持批量部署操作系统。
  • Foreman:提供 Web 界面,支持 PXE 安装和生命周期管理。
  • Kickstart(Red Hat/CentOS)或 Preseed(Debian/Ubuntu):实现无人值守安装。

总结

PXE 是一种强大的网络启动技术,通过 DHCP-TFTP-HTTP/NFS 的协作,实现无盘启动和远程系统部署。其核心在于正确配置服务器组件,并确保客户端能按顺序下载和执行引导程序、内核及安装源文件。掌握这一流程后,可高效部署大规模服务器或桌面环境。