赞
踩
要实现PXE自动安装需要以下组件:
各组件工作原理如下[1]:
setenforce 0
关闭开机启动
vi /etc/selinux/config
设置 SELINUX=disabled
关闭防火墙
或开放端口:
请准备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
安装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
安装dhcp服务:
yum install -y dhcp
创建DHCP配置文件 /etc/dhcp/dhcpd.conf
DHCP配置文件关键信息如下:
/var/lib/tftpboot
):
x86_64/BOOTX64.EFI
aarch64/BOOTAA64.EFI
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.1; # 配置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
若在启动过程中出现 PXE-E99: Unexpected network error 请检查
option routers
子网掩码等参数配置是否正确。
设置开机启动并启动服务
systemctl enable --now dhcpd
查看DHCP服务启动状态
systemctl status dhcpd
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/
在 TFTP服务 安装配置 中,我们分别从x86、arm64镜像中复制了启动引导相关文件至/var/lib/tftpboot/
。
安装镜像中的引导文件位置均为镜像中的路径,在通过TFTP映射后就无法正确找到启动镜像,因此需要修改EFI的引导配置
修改 ARM64 EFI启动配置文件grub.cfg
chmod +w /var/lib/tftpboot/aarch64/grub.cfg
vi /var/lib/tftpboot/aarch64/grub.cfg
找到启动菜单配置
可以看到vmlinuz 文件 和 inittrd.img 均为绝对路径,并且与当前TFTP存储的路径不一致。
修改路径为TFTP相对如下:
http://192.168.50.1/kylin_aarch64
。### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install Kylin Linux Advanced Server V10' --class red --class gnu-linux --class gnu --class os {
linux aarch64/vmlinuz inst.stage2=http://192.168.50.1/kylin_aarch64 quiet
initrd aarch64/initrd.img
}
保存退出。
使用同样的方式修改x86_64 grub.cfg配置
chmod +w /var/lib/tftpboot/x86_64/grub.cfg
vi /var/lib/tftpboot/x86_64/grub.cfg
修改路径为TFTP相对如下:
http://192.168.50.1/kylin_x86_64
。menuentry 'Install Kylin Linux Advanced Server V10' --class fedora --class gnu-linux --class gnu --class os {
linuxefi x86_64/vmlinuz inst.stage2=http://192.168.50.1/kylin_x86_64 quiet
initrdefi x86_64/initrd.img
}
保存退出。
以长城服务器为例,验证PXE是否能够正常运行。
将服务器接入PXE所在交换机中。
启动界面 F10 进入 启动项菜单
在菜单中选择 UEFI PXEv4
选择后提示 >>Start PXE over IPv4.
若PXE服务正常,会在屏幕上一 瞬间显示 DHCP的IP 和 启动引导文件 aarch64/BOOTAA64.EFI
(非常快)
启动引导文件 下载特别快,下载完成后进入 操作系统 安装菜单。
选择 Install Kylin Linux Advanced Server V10
之后会在界面中停留较长时间,该阶段主要是通过HTTP下载安装程序镜像initrd.img,并启动的安装程序,完成后就可以看到 Anaconda 安装界面了。
系统自动化安装,以及预装软件等操作需要了解kickstart脚本编写(ks脚本),这里不做详细展开,仅讨论如何通过PXE执行自定义的KS文件。
关于 操作系统定制 和 KS文件 的细节可以请参考 CSDN . 定制银河麒麟镜像 . Cliven_ . 2024.06 . https://blog.csdn.net/q1009020096/article/details/138839062
首先准备一个KS文件,在操作系统安装后通常会在/root
目录下留安装时生成的KS文件,我们可以直接从已经安装系统中获取到 anaconda-ks.cfg
。
内容如下:
# License agreement eula --agreed # Reboot after installation reboot --eject # Use graphical install graphical # Keyboard layouts keyboard --vckeymap=cn --xlayouts='cn' # System language lang zh_CN.UTF-8 # Firewall configuration firewall --disabled cdrom # SELinux configuration selinux --disabled firstboot --disable # System services services --enabled="chronyd" ignoredisk --only-use=sda # Partition clearing information clearpart --all --drives=sda autopart --type=lvm # System timezone timezone Asia/Shanghai --utc # Root password rootpw "123qwe" %post systemctl disable systemd-networkd-wait-online.service systemctl disable multipathd.service systemctl disable firewalld.service %end %packages @^kylin-desktop-environment %end
之前步骤中创建了 /var/www/html/kylin_x86_64
、/var/www/html/kylin_aarch64
两个镜像
那么同样的,ks文件也同样需要准备两个,但是这2个文件有些许不同。
我们可以分别在两个目录中创建ks文件,实现自动化安装
touch /var/www/html/kylin_x86_64/ks.cfg
touch /var/www/html/kylin_aarch64/ks.cfg
接下来将预先准备好的anaconda-ks.cfg
文件内容复制到ks.cfg
文件中。
接下来将预先准备好的anaconda-ks.cfg
文件内容复制到ks.cfg
文件中。
接下来将预先准备好的anaconda-ks.cfg
文件内容复制到ks.cfg
文件中。
由于安装程序总是从镜像中获取安装的资源,在使用PXE之后我们需要安装程序通过网络从PXE服务器下载镜像中的资源,在ks.cfg中指定安装源为我们的PXE服务器,方式如下:
修改arm64的 /var/www/html/kylin_aarch64/ks.cfg 文件内容:
cdrom
、url
配置。vi /var/www/html/kylin_aarch64/ks.cfg
编辑内容如下:
#cdrom
url --url=http://192.168.50.1/kylin_aarch64
修改arm64的 /var/www/html/kylin_x86_64/ks.cfg
vi /var/www/html/kylin_x86_64/ks.cfg
编辑内容如下:
#cdrom
url --url=http://192.168.50.1/kylin_x86_64
在上个步骤中我们准备两个ks文件,并通过httpd映射到80端口
首先通过浏览器访问测试是否能够正常访问到ks文件
http://192.168.50.1/kylin_aarch64/ks.cfg
http://192.168.50.1/kylin_x86_64/ks.cfg
为了让启动引导能够使用ks.cfg文件实现自动化安装,我们需要添加一个启动引导,该启动引导从网络下载ks文件实现自动化安装。
以ARM64为例,我们需要编辑位于TFTP映射目录中的 /var/lib/tftpboot/aarch64/grub.cfg 文件。
vi /var/lib/tftpboot/aarch64/grub.cfg
添加启动项如下:
AUTO Install Kylin Linux Advanced Server V10
inst.ks=http://192.168.50.1/kylin_aarch64/ks.cfg
linuxefi
、initrdefi
为 linux
、initrd
menuentry 'AUTO Install Kylin Linux Advanced Server V10' --class fedora --class gnu-linux --class gnu --class os {
linux aarch64/vmlinuz ro inst.ks=http://192.168.50.1/kylin_aarch64/ks.cfg quiet
initrd aarch64/initrd.img
}
若不替换 替换
linuxefi
、initrdefi
启动后可能会出现 error: can’t find command linuxefi 错误
可修改set timeout
缩短自动选择时间,单位秒。
注意:新增的启动项请放在最上面,这样才可以自动被选择。
以长城服务器为例,在启动界面 F10 进入 启动项菜单
在菜单中选择 UEFI PXEv4
选择后提示 >>Start PXE over IPv4.
提示 Fetching Netboot Image
片刻后进入启动菜单,从启动菜单中找到刚才添加的自动化安装选项 AUTO Install Kylin Linux Advanced Server V10 ,可以手动选择它也可以等待超过预定时间后自动选择。
接下在会开始下载镜像相关资源,界面会没有响应一段时间 1~3分钟左右。
然后进入Anaconda 安装界面,可以看到已经开始自动设置相关参数。
按照KS文件中的自动化配置完成后,进入自动安装界面:
[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
[5]. 维基百科 . Dynamic_Host_Configuration_Protocol . https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
[6]. die.net . dhcpd-options(5) - Linux man page . https://linux.die.net/man/5/dhcpd-options
[7]. StackChange . PXE boot error: PXE-E18: Server response timeout . telcoM . 2021.2 . https://unix.stackexchange.com/questions/635146
[8]. CSDN . grub关于linux与initrd、linuxefi与initrdefi、grud.d模板的一些记录 . yogwnn163 . 2020.9 https://blog.csdn.net/yongwenn163/article/details/108566389
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。