1. PXE自动化 原理
要实现PXE自动安装需要以下组件:
- DHCP服务:服务器通过网络启动时自动分配IP地址。
- TFTP服务:提供服务器启动下载启动引导EFI。
- HTTP服务:操作系统镜像下载。
各组件工作原理如下[1]:
- 开PXE后,主机启动时通过网口DHCP获取到IP,以及启动引导文件位置。
- 主机通过TFTP协议从从指定位置获取启动引导文件EFI。
- 主机上通过引到程序启动系统安装程序。
- 系统安装程序通过HTTP协议下载操作系统镜像中所需的内容,例如内核、软件安装包等。
- 系统安装完成。
2. 安装
2.1 系统配置
关闭selinux
setenforce 0
关闭开机启动
vi /etc/selinux/config
设置 SELINUX=disabled
关闭防火墙
或开放端口:
- TFTP TCP 69
- HTTP TCP 80
- DHCP UDP 67,68
2.2 系统镜像准备
请准备X86_64、ARM64 操作系统安装镜像,这里以 银河麒麟V10 举例。
我们将解压后镜像存储于 /var/www/html/ 中,创建相关目录
mkdir -p /var/www/html/kylin_x86_64
mkdir -p /var/www/html/kylin_aarch64
把x86_64镜像中的所有内容复制 /var/www/html/kylin_x86_64
mkdir -p cdrom
mount -o loop Kylin-Server-V10-SP3-General-Release-2212-X86_64.iso cdrom
cp -rf cdrom/. /var/www/html/kylin_x86_64
umount cdrom
把ARM64镜像中的所有内容复制 /var/www/html/kylin_aarch64
mkdir -p cdrom
mount -o loop Kylin-Server-V10-SP3-General-Release-2212-ARM64.iso cdrom
cp -rf cdrom/. /var/www/html/kylin_aarch64
umount cdrom
2.3 TFTP服务 安装配置
安装TFTP服务
yum install -y tftp-server xinetd
编辑/etc/xinetd.d/tftp
文件启动允许tftp
vi /etc/xinetd.d/tftp
将 disable
改为no
。
注意,tftp默认的服务目录是 /var/lib/tftpboot ,因此我们需要将我们的EFI启动引导文件放到该目录下。
在此之前我们需要将操作系统的镜像文件中EFI文件拷贝到该目录中。
首先创建不同CPU指令集的目录用于容纳不同的启动文件,这里以 x86_64、aarch64(arm64)、为例:
mkdir -p /var/lib/tftpboot/x86_64
mkdir -p /var/lib/tftpboot/aarch64
ls -l /var/lib/tftpboot
从镜像文件中的/EFI/BOOT/*
、/images/pxeboot/
中的所有内容复制 相应目录中。
x86_64 启动引导复制
\cp -rf /var/www/html/kylin_x86_64/EFI/BOOT/* /var/lib/tftpboot/x86_64/
\cp -rf /var/www/html/kylin_x86_64/images/pxeboot/* /var/lib/tftpboot/x86_64/
ls -l /var/lib/tftpboot/x86_64/
ARM64 启动引导复制
\cp -rf /var/www/html/kylin_aarch64/EFI/BOOT/* /var/lib/tftpboot/aarch64/
\cp -rf /var/www/html/kylin_aarch64/images/pxeboot/* /var/lib/tftpboot/aarch64/
ls -l /var/lib/tftpboot/aarch64/
命令前缀
\cp
中的\
是用于放置覆盖确认提示。
设置开机启动并启动服务
systemctl enable --now xinetd
systemctl enable --now tftp
查看xinted 服务状态:
systemctl status xinetd
查看tftp 服务状态:
systemctl status tftp
2.4 DHCP服务 安装配置
安装dhcp服务:
yum install -y dhcp
创建DHCP配置文件 /etc/dhcp/dhcpd.conf
DHCP配置文件关键信息如下:
- 网段:192.168.50.0/24
- 网关:192.168.50.1 (也就是PXE服务器IP作为网关)
- DNS:223.5.5.5
- 分配IP范围:192.168.50.50 ~ 192.168.50.250
- 启动引导服务地址:192.168.50.1 (也就是PXE服务器IP)
- 指令集引导文件位置(相对TFTP服务的位置
/var/lib/tftpboot
):- x86_64:
x86_64/BOOTX64.EFI
- aarch64(ARM64):
aarch64/BOOTAA64.EFI
- x86_64:
vi /etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd.conf
修改自/usr/share/doc/dhcp-server/dhcpd.conf.example
。
/etc/dhcp/dhcpd.conf 配置文件内容如下:
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style interim;
allow booting;
allow bootp;
ignore client-updates;
set vendorclass = option vendor-class-identifier;
option pxe-system-type code 93 = unsigned integer 16;
#配置要分配的地址段及netmask, 需要修改为自己的网段
subnet 192.168.50.0 netmask 255.255.255.0 {
# 配置网关,网络里不要出现多个DHCP服务否则可能会无法正常引导。
option routers 192.168.50.0;
# 配置dns
option domain-name-servers 223.5.5.5;
# 配置netmask
option subnet-mask 255.255.255.0;
# 分配的ip范围
range dynamic-bootp 192.168.50.50 192.168.50.250;
# 缺省租约时间
default-lease-time 21600;
# 最大租约时间
max-lease-time 43200;
# 指定引导装机的ip
next-server 192.168.50.1;
class "pxeclients" {
# 根据系统类型选择不同EFI引导文件
# - 07和09 为x86_64
# - 0b 为ARM64
# - 27 为LoongArch64
# - 其他: legacy 方式引导
# EFI引导采用TFTP下载,文件位置为TFTP目录相对位置
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if option pxe-system-type = 00:07 {
# x86_64 引导
filename "x86_64/BOOTX64.EFI";
} else if option pxe-system-type = 00:09 {
# x86_64 引导
filename "x86_64/BOOTX64.EFI";
} else if option pxe-system-type = 00:0b {
# arm64引导
filename "aarch64/BOOTAA64.EFI";
} else {
# legacy引导 该文件需要安装 syslinux,
filename "pxelinux.0";
}
}
}
注意:x86_64引导文件名为 BOOTX64.EFI ,ARM64引导文件名为 BOOTAA64.EFI
设置开机启动并启动服务
systemctl enable --now dhcpd
查看DHCP服务启动状态
systemctl status dhcpd
2.5 HTTP服务 安装配置
yum install -y httpd
httpd默认映射的目录为/var/www/html
也就是我们之前创建用于存储镜像的目录。
设置httpd开机启动并启动
systemctl enable --now httpd
查看服务状态
systemctl status httpd
通过浏览器访问httpd映射的ARM64目录
http://192.168.50.1/kylin_aarch64/
到此为止PXE的准备工作完成。
3. 系统自动化安装
请参考 CSDN . 定制银河麒麟镜像 . Cliven_ . 2024.06 . https://blog.csdn.net/q1009020096/article/details/138839062
参考文献
[1]. CSDN . 麒麟kylinV10实现arm和x86无人值守安装PXE(实施篇) . 九分横 . 2021.08 . https://blog.csdn.net/qq_40742007/article/details/120015910
[2]. 博客园 . KylinV10SP2实现ARM和x86架构系统PXE部署(S3) . 道观猫 . 2024.05 . https://www.cnblogs.com/daoguanmao/p/18192065
[3]. CSDN . CentOS 7下PXE+Kickstart无人值守安装操作系统 . 云改变世界 . 2023.11 . https://blog.csdn.net/w12345jl/article/details/134482860
[4]. Github . PXE+kickstart无人值守安装CentOS 7 . 骏马金龙 . 2019.07 . https://junmajinlong.github.io/linux/pxe_centos7/index.html