PXE环境部署
基础环境准备
我使用的Rocky9.6系统
首先PXE主机需要静态IP地址
vim /etc/NetworkManager/system-connections/eth0.nmconnection
| Bash |
|---|
| [connection]
id=eth0
uuid=4975726a-6298-3181-88fe-35c850dc0962
type=ethernet
autoconnect-priority=-999
interface-name=eth0
timestamp=1769617386
[ethernet]
[ipv4]
method=manual
address1=192.168.100.1/24,192.168.100.1
[ipv6]
method=disabled
[proxy]
|
另外注意宿主机的防火墙配置,我一般把它停掉
systemctl stop firewalld && systemctl disable firewalld
selinux也给停掉
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
安装基础包
| Bash |
|---|
| yum makecache
yum install dhcp-server tftp-server httpd
|
- dhcp-server: 负责IP地址分配与指向引导文件,有的DHCP服务包是
dhcp
- tftp: 存放
pxelinux配置文件
- httpd: 负责提供镜像下载服务,也可以配置nginx,或者nfs
配置服务
tftp
引导文件存放路径: /var/lib/tftpboot/
如果安装多版本,可以在这个目录下创建不同的目录,回头引导文件就放在创建的目录
mkdir /var/lib/tftpboot/rocky9.6
修改启动文件路径:vim /usr/lib/systemd/system/tftp.service
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot/rocky9.6
启动服务
systemctl daemon-reload
systemctl start tftp && systemctl enable tftp
http
创建两个目录,一个存放配置,一个存放系统镜像
mkdir -p /var/www/html/{conf/rocky9.6,iso/rocky9.6}
启动服务
systemctl start httpd && systemctl enable httpd
dhcp
注意:配置dhcp时,需要避开网络内的主DHCP服务,避免网络内有两台DHCP服务在搅和,影响正常网络
编辑配置文件:vim /etc/dhcp/dhcpd.conf
| Bash |
|---|
| # 定义客户端架构类
#class "UEFI-64" {
# match if option vendor-class-identifier = "PXEClient:Arch:00007";
# filename "shim.efi";
#}
#class "Legacy-BIOS" {
# match if option vendor-class-identifier = "PXEClient:Arch:00000";
# filename "pxelinux.0";
#}
# 定义 PXE 相关选项
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
# 定义客户端架构类型(用于区分 BIOS/UEFI)
option arch code 93 = unsigned integer 16;
subnet 192.168.100.0 netmask 255.255.255.0{
option routers 192.168.100.1;
option domain-name-servers 192.168.100.1;
option subnet-mask 255.255.255.0;
default-lease-time 86400;
max-lease-time 86400;
range 192.168.100.10 192.168.100.200;
next-server 192.168.100.1;
# filename "shim.efi";
# 根据客户端架构(BIOS/UEFI)提供不同的引导文件
if option arch = 00:07 { # UEFI x64
filename "shim.efi";
} elsif option arch = 00:09 { # UEFI x64 (新版)
filename "shim.efi";
} else { # 传统 BIOS
filename "pxelinux.0";
}
}
#host host_100.10 { hardware ethernet 00:0C:29:A5:2C:96 ; fixed-address 192.168.100.10;}
|
配置后可以测试一下: dhcpd -t -cf /etc/dhcp/dhcpd.conf
使用dhcpdump工具可以查看客户端架构Arch,来确认UEFI引导
| Bash |
|---|
| yum install -y dhcpdump
dhcpdump -i eth0 -h "option93"
示例输出:
# 示例输出:
# TIME: 2023-10-01 10:30:00
# IP: 192.168.100.10 (0:c:29:xx:xx:xx)
# OPTION: 93 ( 2) Client System Architecture 0x0007
# OPTION: 97 ( 17) Client Network Interface Identifier
|
这里先配置,最后在启动
systemctl start dhcpd && systemctl enable dhcpd
准备系统文件
ISO 文件
1、将ISO文件存放在/var/www/html/iso,可以直接挂载,也可以copy,我是准备多系统环境的,就copy了
| Bash |
|---|
| # 先挂载ISO
mount /dev/sr0 /mnt/
# 如果是ISO镜像文件可以这样挂载
mount -o loop Rocky-9.6-x86_64-dvd.iso /mnt/
# 注意复制的时候有两个隐藏文件也需要复制(.discinfo .treeinfo)
rsync -avzP /mnt/ /var/www/html/iso/rocky9.6/
# 查看一下
# ls -a /var/www/html/iso/rocky9.6/
. .. AppStream BaseOS .discinfo EFI images isolinux LICENSE media.repo .treeinfo
|
准备ks.cfg 配置文件
参考官网的参数更新
Rocky kickstart File
红帽的生成器(需要订阅)
按照需求准备ks.cfg文件,主要区别一下传统BIOS引导与UEFI引导(efi分区),分区不同
centos7.9 ks.cfg
centos7.9 ks_uefi.cfg
Rocky9.6 ks.cfg
Rocky9.6 ks_uefi.cfg
可以使用工具验证配置文件
| Bash |
|---|
| yum install pykickstart
ksvalidator ks.cfg
|
准备引导文件
引导文件放在tftpboot目录,结构如下:
| Bash |
|---|
| /var/lib/tftpboot/rocky9.6/
├── shim.efi # UEFI PXE 引导程序(shim 包提供)
├── BOOTX64.EFI # UEFI 启动文件(shim 包提供)
├── grub.cfg # UEFI GRUB 配置文件(手动创建)
├── grubx64.efi # UEFI GRUB 引导程序(grub2-efi-x64包提供)
├── initrd.img # 通用 初始 RAM 磁盘(从 ISO 提取)
├── vmlinuz # 通用 内核文件(从 ISO 提取)
├── ldlinux.c32 # 通用 动态链接库文件,支持菜单功能(syslinux-nonlinux包提供)
├── libcom32.c32 # 通用 动态链接库文件,支持菜单功能(syslinux-nonlinux包提供)
├── libutil.c32 # 通用 动态链接库文件,支持菜单功能(syslinux-nonlinux包提供)
├── menu.c32 # 通用 菜单模块(如果使用图形菜单)(syslinux-nonlinux包提供)
├── vesamenu.c32 # 通用 VESA 图形菜单模块(syslinux-nonlinux包提供)
├── pxelinux.0 # 传统BIOS PXE 引导程序(syslinux-nonlinux包提供)
└── pxelinux.cfg # 传统BIOS 配置目录(手动创建)
└── default # 传统BIOS 默认配置文件(手动创建)
|
1、去镜像目录复制文件:
| Bash |
|---|
| cp /var/www/html/iso/rocky9.6/images/pxeboot/{initrd.img,vmlinuz} \
/var/lib/tftpboot/rocky9.6/
|
2、从rpm包获取文件
syslinux-nonlinux , shim-x64 , grub2-efi-x64
| Bash |
|---|
| # 先创建一个临时目录
mkdir /tmp/pack_tmp
# 将提到的三个包复制到临时目录
cd /var/www/html/iso/rocky9.6
cp BaseOS/Packages/s/syslinux-nonlinux-6.04-0.20.el9.noarch.rpm /tmp/pack_tmp/
cp BaseOS/Packages/s/shim-x64-15.8-2.el9.x86_64.rpm /tmp/pack_tmp/
cp BaseOS/Packages/g/grub2-efi-x64-2.06-104.el9_6.x86_64.rpm /tmp/pack_tmp/
# 到临时目录去解压
cd /tmp/pack_tmp
rpm2cpio syslinux-nonlinux-6.04-0.20.el9.noarch.rpm | cpio -dimv
rpm2cpio grub2-efi-x64-2.06-104.el9_6.x86_64.rpm | cpio -dimv
rpm2cpio shim-x64-15.8-2.el9.x86_64.rpm | cpio -dimv
# 复制syslinux-nonlinux包的文件
cp usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/rocky9.6/
cp usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/rocky9.6/
cp usr/share/syslinux/libcom32.c32 /var/lib/tftpboot/rocky9.6/
cp usr/share/syslinux/libutil.c32 /var/lib/tftpboot/rocky9.6/
cp usr/share/syslinux/menu.c32 /var/lib/tftpboot/rocky9.6/
cp usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/rocky9.6/
# 复制shim-x64包的文件
cp boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/rocky9.6/
cp boot/efi/EFI/rocky/shim.efi /var/lib/tftpboot/rocky9.6/
# 复制grub2-efi-x64包的文件
cp boot/efi/EFI/rocky/grubx64.efi /var/lib/tftpboot/rocky9.6/
|
3、手动创建两个配置文件
传统BIOS:
mkdir /var/lib/tftpboot/rocky9.6/pxelinux.cfg/
vim /var/lib/tftpboot/rocky9.6/pxelinux.cfg/default
| Bash |
|---|
| default auto
prompt 0
label auto
kernel vmlinuz
append inst.ks=http://192.168.100.1/conf/rocky9.6/ks.cfg ksdevice=eth0 initrd=initrd.img inst.lang=en_US.UTF-8 net.ifnames=0 biosdevname=0 ip=dhcp
|
UEFI配置:
vim /var/lib/tftpboot/rocky9.6/grub.cfg
| Bash |
|---|
| set timeout=5
menuentry "Install Rocky Linux 9.6 (UEFI Secure Boot)" {
linuxefi vmlinuz inst.ks=http://192.168.100.1/conf/rocky9.6/ks_uefi.cfg ksdevice=eth0 inst.lang=en_US.UTF-8 net.ifnames=0 biosdevname=0 ip=dhcp
initrdefi initrd.img
}
|
准备安装了
最后准备好文件,别忘记给权限,这里直接777了,(避免出现各种异常)
| Bash |
|---|
| chmod -R 777 /var/lib/tftpboot/
systemctl daemon-reload
systemctl restart tftp && systemctl enable tftp
systemctl restart httpd && systemctl enable httpd
systemctl restart dhcpd && systemctl enable dhcpd
|
去验证安装~
Tips:
红帽参考文档