[Linux] PXE
目录
PXE 介绍
工作原理
第一步:请求IP地址(跟 DHCP 服务器打招呼)
第二步:找启动器(向 TFTP 服务器请求启动文件)
第三步:找菜单(请求配置文件 pxelinux.cfg)
第四步:请求 Linux 内核和 initrd.img
第五步:开始加载内核,准备安装系统
第六步:请求系统安装源(向文件服务器要资源)
实验环境
部署DHCP服务器
客户端测试
部署TFTP服务器
部署服务端
部署菜单文件
部署文件服务器
部署服务端
测试
部署应答文件
客户端测试
PXE 介绍
当我们需要大批量安装系统时,就需要PXE技术来实现自动化安装系统这一需求。
PXE(Pre-boot Execution Environment,预启动执行环境):
-
由Intel公司开发
-
C/S(Client/Server)网络模式
-
PXE通过网络引|导和安装Windows,linux等多种操作系统。
工作原理
第一步:请求IP地址(跟 DHCP 服务器打招呼)
-
PXE 客户端刚开机,不知道自己是谁、在哪儿,就先向 DHCP 服务器请求 IP 地址。
-
DHCP 服务器回复你:“你是 10.1.8.110,还有,启动程序在 TFTP 服务器的 pxelinux.0 文件里。”
客户端状态变化: 客户端拥有了 IP 地址,并知道了 TFTP 服务器的地址和要下载的启动文件位置。
第二步:找启动器(向 TFTP 服务器请求启动文件)
-
客户端拿到地址后,去找 TFTP 服务器拿 pxelinux.0 启动文件。
-
TFTP 服务器先问客户端:“我有个 pxelinux.0 文件,它这么大,你愿意接收吗?”
-
客户端说 OK,TFTP 就把这个文件发给你。
-
客户端加载并执行这个 pxelinux.0 文件,它就像是开机引导器。
客户端状态变化: 客户端获得了启动器 pxelinux.0,并准备执行它。这相当于加载了一个“系统引导程序”。
第三步:找菜单(请求配置文件 pxelinux.cfg)
-
启动器接下来会说:“我得知道接下来做什么。”
-
它就去找 TFTP 要一个配置文件(pxelinux.cfg),里面写着要加载哪个系统内核、用哪些参数。
-
TFTP 把这个配置文件发回,客户端按照它的指示继续行动。
客户端状态变化: 客户端拿到了启动菜单和指令,知道了接下来要加载的 Linux 内核文件、参数等内容。
第四步:请求 Linux 内核和 initrd.img
-
客户端根据配置,继续向 TFTP 要两个文件:
-
vmlinuz(Linux 内核)
-
initrd.img(驱动程序)
-
TFTP 服务器一个个发回这些文件。
客户端状态变化: 客户端拥有了最基本的内核和驱动程序,已经具备启动 Linux 系统的基础条件。
第五步:开始加载内核,准备安装系统
-
客户端现在已经有了内核和基础系统环境,它会:
-
启动内核
-
挂载 initrd.img
-
准备读取系统安装配置
客户端状态变化: 客户端已经进入 Linux 环境(内存中运行),准备开始自动化安装流程。
第六步:请求系统安装源(向文件服务器要资源)
-
客户端通过配置文件,去文件服务器请求自动安装的应答文件。
-
然后再请求系统安装源(比如镜像里的系统文件)。
-
文件服务器把这些都发回去,系统开始安装。
客户端状态变化: 客户端正式进入系统安装阶段,开始写入硬盘,完成后即可作为完整系统启动
实验环境
所有环境都部署在server节点
部署DHCP服务器
#安装
dnf install -y dhcp-server
#配置DHCP服务器
cat > /etc/dhcp/dhcpd.conf <<'EOF'
subnet 10.1.8.0 netmask 255.255.255.0 {range 10.1.8.110 10.1.8.200;option domain-name-servers 10.1.8.2;option routers 10.1.8.2;default-lease-time 600;max-lease-time 7200;next-server 10.1.8.10;filename "pxelinux.0";
}
EOF############### 详解 #######################################
range 10.1.8.110 10.1.8.200;
# IP地址分配范围,客户端请求 IP 时,会从这个范围内分配,比如 10.1.8.110
option domain-name-servers 10.1.8.2;
# DNS服务器地址。告诉客户端 DNS 服务器地址为 10.1.8.2,便于解析主机名
option routers 10.1.8.2; # 默认网关,客户端通过这个网关上网
default-lease-time 600; # 默认租约时间(秒),也就是ip的使用有效期
max-lease-time 7200; # 最大租约时间(秒)
next-server 10.1.8.10;
# TFTP服务器地址(PXE关键),客户端将来去这里拿文件
filename "pxelinux.0";
# PXE引导文件名(PXE关键),客户端去 TFTP 服务器上请求的第一个文件,就是 启动器 pxelinux.0
############################################################启用并启动服务
systemctl enable dhcpd --now
客户端测试
client端将硬盘改为SATA,选择BIOS,取消光盘启动,关闭网络DHCP
启动client虚拟机,即可从网络启动
此时客户端能从 DHCP 拿到 IP 并知道去哪下载启动文件
部署TFTP服务器
TFTP是一个传输文件的简单协议,基于UDP协议而实现,端口号为69,默认共享数据路径:/var/lib/tftpboot。
TFTP协议是为进行小文件传输设计的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。
使用场景:
-
提供不复杂、开销不大的文件传输服务。
-
提供操作系统网络引导服务。
部署服务端
#安装软件包----TFTP 用于传输 PXE 引导所需的初始文件
dnf install -y tftp-server
#启用并启动对应服务
systemctl enable tftp.service --now
#安装syslinux,提供pxelinux.0文件
dnf install -y syslinux
#准备引导文件----复制 PXE 引导程序 (pxelinux.0) 到 TFTP 根目录
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
重启客户端
此时客户端完成了pxelinux.0的下载,正从本地内存中执行这个程序,准备加载后续的引导菜单和内核配置。
这说明它已经运行了 pxelinux.0
部署菜单文件
#创建目录用于挂载安装镜像
mkdir -p /var/www/html/dvd
#挂载系统镜像到/var/www/html/dvd
mount /dev/sr0 /var/www/html/dvd
df /dev/sr0
mount | grep sr0
#部署引导文件
#先查看
ls /var/www/html/dvd/isolinux/引导文件说明:
vmlinuz,内核
initrd.img,驱动程序
vesamenu.c32,图形模块
splash.png,背景图片#复制文件----从tftpboot获取引导文件
cp /var/www/html/dvd/isolinux/* /var/lib/tftpboot/
重启客户端查看状态(现在缺PXE引导)
#部署网络引导菜单
mkdir /var/lib/tftpboot/pxelinux.cfg
#将 ISO 的引导配置转换为 PXE 默认配置
cp /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default#修改网络引导菜单文件(只添加两处PXE)
vim /var/lib/tftpboot/pxelinux.cfg/default
#在11行处添加PXE
#在62行处添加PXE
修改完后强制保存,重启即可显示这个界面:
客户端加载启动器后能看到图形菜单,进入内核启动流程
部署文件服务器
使用httpd实现
部署服务端
#安装
dnf install -y httpd
#准备测试页面
echo hihihi > /var/www/html/index.html
#启用服务
systemctl enable httpd.service --now
测试
部署应答文件
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$yXvOeQqO$dk8Ms2JsWaatjNSSzJcdI.
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled# Firewall configuration
firewall --enabled --http --service=http,https
# Network information
network --bootproto=static --device=ens160 --ip=10.1.8.100 --netmask=255.255.255.0 --gateway=10.1.8.2 --nameserver=223.5.5.5
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://10.1.8.10/dvd"
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1%post --interpreter=/bin/bash
dnf install -y httpd
systemctl enable httpd
echo Hello World > /var/www/html/index.html
echo "
This is a web server.
Be careful." >> /etc/issue
echo webapp.laoma.cloud > /etc/hostname
%end%packages
@^minimal-environment
%end
将此代码写到/var/www/html/ks.cfg中(没有需要自己创建)
客户端测试
重启客户端,选择安装,经过漫长的安装过程后,显示如下登录界面:
输入用户名:root,密码:redhat
web页面访问测试