PXE介绍

预启动执行环境Preboot Execution EnvironmentPXE,也被称为预执行环境)它提供了一种使用网络接口(Network Interface)启动计算机的机制。

PXE基于Client/Server的网络模式,支持本地主机通过网络从服务器端下载映像,并通过网络启动操作系统。

https://zh.wikipedia.org/wiki/%E9%A2%84%E5%90%AF%E5%8A%A8%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83

适用场景

  • 服务器无光驱或者光驱损坏,需要安装 Linux 操作系统
  • 对系统维护不恰当,导致需要频繁安装 Linux 操作系统
  • 需要大规模批量部署 Linux 操作系统

前提条件

  • 本地主机网卡支持 PXE 协议(集成 BOOTROM 芯片),主板支持网络引导(BIOS 中调整)
  • 有 DHCP 服务器为客户机自动分配网络地址,并且指定引导文件位置
  • 服务器通过 TFTP(Trivial File Transfer Protocol,简单文件传输协议)提供引导镜像文件的下载

Kickstart介绍

KickStart是一种无人值守安装方式

KickStart 的工作原理

通过记录典型的安装过程中所需人工填写的各种参数,生成一个名为 ks.cfg 的文件,并在其后的安装过程中当出现要求填写参数的情况时,安装程序会首先去查找 ks.cfg。

当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,需要安装者手工干预。

如果 KickStart 文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取 ks.cfg 文件,然后去忙自己的事情。等安装完毕,安装程序会根据 ks.cfg 中设置的重启选项来重启系统,并结束安装。

PXE装机基本原理

第一步:Client发送请求

Client向服务端上的DHCP服务发送请求 IP 地址消息

第二步:DHCP应答并回应

DHCP服务会验证Client请求是否合法(主要检测Client的网卡MAC地址),验证通过后回应Client信息,包括分配的IP地址,pxelinux启动程序的位置,以及配置文件的位置

第三步:Client请求下载启动文件

Client收到回应后,向TFTP服务发送获取pxelinux.0请求消息

第四步:TFTP服务器响应请求并传送文件

TFTP服务收到请求后,会响应请求并应答请求,向客户端发送 pxelinux.0 大小信息,试探Client是否满意。当 TFTP 收到客户端返回的同意大小信息之后,正式向客户端发送 pxelinux.0文件

第五步:Client请求配置文件

Client 向TFTP服务发送本机的配置文件信息(记录在 TFTP 上的 pxelinux.cfg 目录下),TFTP 将配置文件发给客户端,客户端根据配置文件执行后续操作

第六步:自动化安装

Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client

Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统

Client启动Linux内核(启动参数已经在第五步配置文件中设置好)

Client下载镜像文件,读取自动化安装脚本。进入自动化安装模式开始安装

实操部分

虚拟机准备两台机器

  • 服务端 (192.168.92.128)
  • 客户端 由服务端自动配置IP

服务端配置

关闭SELINUX

修改/etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled然后重启

vim /etc/selinux/config

安装DHCP 服务

安装DHCP服务相关包

sudo apt-get install isc-dhcp-server isc-dhcp-client

修改配置文件 根据实际修改IP

sudo vim  /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option space PXE;
option client-system-arch code 93 = unsigned integer 16;
allow booting;
allow bootp;
subnet 192.168.92.0 netmask 255.255.255.0 {
  range 192.168.92.129 192.168.92.135;
option broadcast-address 192.168.92.255;
option routers 192.168.92.2;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.92.128;
# x86_64 uefi
 if option client-system-arch = 00:07 or option client-system-arch = 00:09 {
  filename "x86_64-efi/netbootx64.efi";
# aarch64 uefi
 } elsif option client-system-arch = 00:0B {
  filename "arm64-efi/netbootaa64.efi";
# x86_64 legacy
 } elsif option client-system-arch = 00:00 {
  filename "x86_64-legacy/pxelinux.0";
#Loongson 4000 except Lenovo
 } elsif option client-system-arch = 00:0C {
}
}

查看当前使用的网络设备

ifconfig

设置使用的网络设备

sudo vim /etc/default/isc-dhcp-server
重启服务
systemctl restart isc-dhcp-server
检查监听

默认监听67端口

netstat -tulnp |grep 67

安装TFTP服务

安装相关的包

sudo apt-get install tftp-hpa tftpd-hpa

创建一个/tftpboot目录作为TFP的目录

mkdir /tftpboot

修改配置文件并设置权限

sudo vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
chmod 777 /tftpboot
重启服务
 systemctl restart tftpd-hpa
检查监听

默认监听69端口

netstat -tulnp |grep 69

将 x86_64-legacy.tar.gz 解压出来的 x86_64-legacy 目录拷贝至/tftpboot目录下并将 镜像iso 中 casper/下的 initrd.lz和 vmliuz 放到 x86_64-legacy/下

点击下载

安装NFS

安装NFS相关包

 apt-get install nfs-kernel-server

修改配置文件

将/opt/nfs 设置为 nfs 的根目录

vim /etc/exports
/opt/nfs *(rw,sync,no_root_squash,no_subtree_check)

重启服务

 systemctl restart nfs-kernel-server

测试

 showmount -e 127.0.0.1

放置镜像文件

在/opt/nfs/创建一个存放镜像文件的目录

mkdir -p /opt/nfs/x86_64-kylin

将整个镜像iso挂载后的内容拷贝至上述目录下

客户端操作

开机,等待固件就绪,LEGACY PXE 会自动加载内核及initrd