CentOS 8使用 Kickstart配置 UEFI PXE 启动
在本教程中,我将分享使用 Kickstart 配置 UEFI PXE 引导的分步说明。我已经在CentOS 8 环境中测试了这些步骤。我们将按以下顺序进行设置
使用 Kickstart 执行 UEFI PXE 引导的顺序
- 设置安装库
- 安装和配置 TFTP
- 安装和配置 DHCP
- 安装和配置 HTTP
- 准备启动文件
- 执行 UEFI PXE 引导
实验室环境
我有两个支持 UEFI BIOS 的物理硬件。第一个服务器安装了 CentOS 8,而我们计划 UEFI PXE 引导第二个服务器,它也有 UEFI BIOS。这是我的服务器详细信息:
主机名: server.example.com
版本: CentOS Linux release 8.2.2004 (Core)
IP 地址: 192.151.6.151/26
先决条件
- 您必须在服务器上安装 RHEL/CentOS 8 操作系统。现在这个服务器可能有也可能没有 UEFI BIOS。
- 如果您使用的是 RHEL 8,那么您必须有一个有效的 RHN 订阅
- 如果您使用的是 CentOS 8,那么您必须具有有效的互联网连接才能下载和安装软件包。如果您的服务器没有活动的互联网连接,您也可以配置离线存储库
使用 Kickstart 配置 UEFI PXE 引导服务器的步骤
步骤 1:设置安装存储库
首先,我们必须设置我们的安装仓库,它将用于网络安装。我已经在服务器上安装了 CentOS 8 ISO 映像
# mount /dev/sr0 /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
接下来我将这个 ISO 的内容复制到本地目录,这样我就不必依赖 ISO 映像了。我将创建一个本地目录:
# mkdir /image
接下来将所有文件从 ISO 复制到此目录
# cp -apr /mnt/* /image/
复制所有文件后:
.treeinfo
和.discinfo
非常重要,否则您的安装会失败。这些是在使用 PXE 通过网络安装期间参考的,以验证存储库的完整性。
# 也可以挂载光盘使用,不拷贝光盘文件到硬盘
mkdir /mnt
mount -o exec /dev/sr0 /mnt
mkdir /image
mount --bind /mnt /image
步骤 2:安装和配置 TFTP 服务器
接下来,我们需要一个 TFTP 服务器来传输通过网络安装目标节点所需的 UEFI PXE 引导文件。使用以下命令安装 tftp 包:
# dnf install tftp-server
安装软件包后,您可以使用以下命令检查 systemd 单元文件的路径:
# rpm -ql tftp-server | grep -E "service|socket"
接下来可以查看服务单元文件的内容:
# cat /usr/lib/systemd/system/tftp.service
在这里您可以看到,默认情况下 tftp 服务将搜索 .tftp 文件中的 TFTP 文件/var/lib/tftpboot
。所以我们将把我们所有的 UEFI PXE 引导文件放在这个位置。如果您打算使用不同的路径,那么您可以修改此服务文件并执行以下命令来更新您的更改:
# systemctl daemon-reload
# systemctl restart tftp.service
接下来启用并启动此服务以确保该服务在重新启动后自动启动。
# systemctl enable tftp.service --now
Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.
检查服务的状态以确保它已成功启动
# systemctl status tftp.service
提示:有可能一段时间后服务显示为非活动状态,这是意料之中的,因为它tftp.service
是通过tftp.socket
. 因此,如果没有活动连接,tftp.service
则该服务将变为非活动状态,一旦tftp.socket
收到任何 TFTP 请求,它将再次激活该服务。
步骤 3:配置 UEFI PXE 引导服务器
接下来执行 UEFI {XE Boot 安装,我们需要 P PXE 引导文件。通常用于传统BIOS的PXE引导我们需要pxelinux.0
和ldlinux.c32
部分syslinux-tftpboot
转。
但是对于 UEFI BIOS,我们需要以下文件:
- grubx64.efi由 grub2-efi-x64 rpm 提供
- BOOTX64.EFI由 shim-x64 rpm 提供
您可以将提到的 rpm 从映像复制到某个临时位置,例如/tmp
并提取 rpm 以获取所需的文件:
# cp /image/BaseOS/Packages/grub2-efi-x64-2.02-81.el8.x86_64.rpm /tmp/# cp /image/BaseOS/Packages/shim-x64-15-11.el8.x86_64.rpm /tmp/
接下来使用 rpm2cpio 命令提取这些 rpm。
# cd /tmp# rpm2cpio shim-x64-15-11.el8.x86_64.rpm | cpio -idm# rpm2cpio grub2-efi-x64-2.02-81.el8.x86_64.rpm | cpio -idm
我们将所有 PXE 文件存储在/var/lib/tftpboot/pxelinux
. 现在,如果您还记得,默认情况下 TFTP 会查看,/var/lib/tftpboot
因此我们必须pxelinux
在设置 UEFI PXE 引导服务器时处理额外的目录。
# mkdir /var/lib/tftpboot/pxelinux
将 PXE 引导文件从我们解压 rpm 的 /tmp 复制到以下位置:
# cp /tmp/boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/pxelinux/# cp /tmp/boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/pxelinux/
接下来,我们需要initrd
和vmlinuz
直到检测硬盘等接口文件来加载操作系统。我希望你熟悉Linux 启动过程的步骤。这些文件可以再次从图像中复制,因此我们将它们也复制并放置在里面/var/lib/tftpboot/pxelinux/
# cp /image/isolinux/vmlinuz /var/lib/tftpboot/pxelinux/# cp /image/isolinux/initrd.img /var/lib/tftpboot/pxelinux/
以下是我/var/lib/tftpboot/pxelinux
现阶段的内容:
# ls -l /var/lib/tftpboot/pxelinux/
步骤 4:为 UEFI PXE 引导配置 DHCP
接下来我们需要安装和配置DHCP来支持UEFI PXE Boot安装。
# dnf -y install dhcp-server
接下来,我们需要配置我们的 dhcp 服务器配置文件,该文件位于/etc/dhcp/dhcpd.conf
. 这是我的示例 DHCP 配置文件:
# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp-server/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
non-authoritative;
allow bootp;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;subnet 192.151.6.128 netmask 255.255.255.192 {option routers 192.151.6.190;range 192.151.6.170 192.151.6.180;class "pxeclients" {match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";next-server 192.151.6.151;filename "pxelinux/BOOTX64.EFI";}
}
我将无法解释整个配置文件,您可以查看 配置 DHCPV4 SERVER以获取更多信息。虽然让我至少解释这个配置文件的重要部分,即以下subnet
部分:
subnet 192.151.6.128 netmask 255.255.255.192 {option routers 192.151.6.190;range 192.151.6.170 192.151.6.180;class "pxeclients" {match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";next-server 192.151.6.151;filename "pxelinux/BOOTX64.EFI";}
}
在这里,我们已经基本定义了我们的子网和网络掩码值。您可以使用不同的 linux 命令来获得它,例如:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.151.6.190 0.0.0.0 UG 100 0 0 eno49
192.151.6.128 0.0.0.0 255.255.255.192 U 100 0 0 eno49
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
这里 eno49 是我们的主要接口,它具有192.151.6.128
子网和255.255.255.192
网络掩码值。选项路由器包含您的服务器 IP 的网关,我们可以再次使用以下命令获取:
# ip route
default via 192.151.6.190 dev eno49 proto static metric 100
192.151.6.128/26 dev eno49 proto kernel scope link src 192.151.6.151 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
这192.151.6.190
是我们的默认网关,它将充当所有传入 DHCP 请求的路由器。
接下来在类部分下,我们将 next-server 定义为我们的 Kickstart 服务器的 IP 地址,即 localhost,并filename
包含BOOTX64.EFI
将用于通过网络执行 UEFI PXE 引导的路径。
我们已经定义了一个介于192.151.6.170
和之间的范围,192.151.6.180
以将 IP 地址分配给将通过网络安装的目标节点。此范围必须是空闲的,并且不得被任何其他服务器使用。
接下来启用并启动 DHCP 服务器服务:
# systemctl enable dhcpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /usr/lib/systemd/system/dhcpd.service.
检查服务的状态以确保它已成功启动:
步骤 5:配置 Kickstart 文件以进行自动安装
接下来,我们将创建我们的 kickstart 文件以进行无人值守的自动安装。现在我已经解释了 kickstart 文件中使用的不同语法和参数,所以我在这里不再重复。
默认情况下,当我们安装 CentOS 或 RHEL 服务器时,我们将有/root/anaconda.cfg
可用的文件,其中包含用于当前安装的参数。您始终可以将此文件作为您的基础,并根据您的要求进一步修改它。
我将创建一个新目录来存储我们用于 UEFI PXE 引导的 kickstart 文件:
# mkdir /ks# cp /root/anaconda-ks.cfg /ks/kickstart.conf# chmod 777 /ks/kickstart.conf
确保所有用户都可以读取 kickstart.conf 文件:
# ls -l /ks/kickstart.conf
-rw-r--r--. 1 root root 1608 Nov 28 15:09 /ks/kickstart.conf
这是我的示例 kickstart 配置文件:
# cat /ks/kickstart.conf
#version=RHEL8
ignoredisk --only-use=sda,sdb
autopart --type=lvm# Partition clearing information
clearpart --all --initlabel --drives=sda,sdb# Use graphical install
graphical# Use CDROM installation media
cdrom# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'# System language
lang en_US.UTF-8# Network information
network --bootproto=dhcp --onboot=off --ipv6=auto
network --hostname=server.example.com# Create AppStream repo
repo --name="AppStream" --baseurl=http:///run/install/repo/AppStream# Root password
rootpw --iscrypted $6$tGzXiAuBPTVcSiLX$4YD9A43gq2QJ7r5TqtL8uCwtQQWRON.CDYNkRkEx2vcsnrA5Jbv44jvZUyhS28VrKr0aU8/E8csTDZcb.VYUY.# X Window System configuration information
xconfig --startxonboot# Run the Setup Agent on first boot
firstboot --enable# System services
services --enabled="chronyd"# System timezone
timezone Asia/Kolkata --isUtc
user --groups=wheel --name=deepak --password=$6$.TNszXKGs9V0flRV$J.1piXFKbXJHHH9dkZdIfWfoUdWkfWAgz5ZNHdoN42VudL.1rehBONmkEZv/nRyyWUDt3puHJIlAhIYRFGB7y. --iscrypted --gecos="deepak"%packages
@^minimal-environment%end%addon com_redhat_kdump --enable --reserve-mb='auto'%end%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
命令生成加密密码,该密码可以在任何用户的 kickstart 文件中使用。
步骤 5:配置 HTTP 服务器
现在我们还需要一个服务来托管我们的图像存储库,我们可以使用 FTP、HTTP 或 NFS 来托管我们在本教程的第 1 步中创建的图像存储库。在我之前使用 Legacy BIOS 设置 kickstart 服务器的示例中,我使用了 NFS,所以这次我决定使用 HTTP 服务器。
# dnf -y install httpd
接下来我们将配置 Virtual Hosting 来托管我们的镜像仓库路径。我创建了一个新的文件ks-server.conf
下/etc/httpd/conf.d/
,内容如下:
<VirtualHost 192.151.6.151:80>ServerAdmin root@server1.example.comDocumentRoot /ServerName server.example.comErrorLog logs/ks-server.example.com-error_logCustomLog logs/ks-server.example.com-access_log common<Directory /ks>AllowOverride AllRequire all granted</Directory><Directory /image>Options Indexes MultiViewsAllowOverride AllRequire all granted</Directory>
</VirtualHost>
所以在这里我基本上在我的 HTTP 服务器上提供两个不同的 PATH,即我的 kickstart 配置文件和我的图像存储库。我还提供了访问这些路径所需的权限,您可以查看 Apache DirectoryListings以获取更多信息。
接下来启用并启动 httpd 服务:
# systemctl enable httpd --now
确保服务已成功启动:
# systemctl status httpd
我们必须做的下一件重要事情是允许可见 HTTP 服务器中的隐藏文件,正如我之前提到的,通过网络安装需要使用.treeinfo
文件来验证存储库,这基本上是 Linux 中的隐藏文件。所以默认情况下,这个文件在 web 服务器上是不可见的。
所以要解决这个问题,我们必须.??*
从文件的IndexIgnore
参数中删除/etc/httpd/conf.d/autoindex.conf
。
修改
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
为
IndexIgnore *~ *# HEADER* README* RCS CVS *,v *,t
并重新启动 httpd 服务。
# systemctl restart httpd
接下来尝试通过 Web 服务器访问图像存储库路径:
类似地,尝试在 Web 浏览器上访问 kickstart 配置文件:
/etc/httpd/logs/ks-server.example.com-error_log
或ks-server.example.com-access_log
文件。
步骤 6:更新 kickstart 配置文件
接下来更新/ks/kickstart.conf
我们在上面创建的 kickstart 文件中的图像存储库位置。由于我们使用的是 HTTP,所以我们需要替换cdrom
为以下行:
# Use CDROM installation media
url --url=http://192.151.6.151/image/AppStream
默认情况下,如果您使用 DVD 媒体安装了服务器,那么您将使用 DVD 媒体cdrom
作为安装媒体。因此,我们将其更改为包含安装图像的 HTTP url。
更新 AppStream repo url,默认使用 CDROMfile://
处理程序,但由于我们使用 HTTP,所以我们必须使用以下路径,另外还要提到 BaseOS 存储库的路径。
# Create AppStream repo
repo --name="AppStream" --baseurl=http://192.151.6.151/image/AppStream
repo --name="BaseOS" --baseurl=http://192.151.6.151/image/BaseOS
第 7 步:创建 grub.cfg 文件
对于 UEFI PXE 引导,我们需要一个grub.cfg
文件,其中包含通过网络安装所需的 PXE 引导文件的详细信息。以下是我的grub.cfg
文件中的内容:
# cd /var/lib/tftpboot/pxelinux~]# cat grub.cfg
set timeout=30
menuentry 'Install CentOS 8' {linuxefi pxelinux/vmlinuz inst.ks=http://192.151.6.151/ks/kickstart.conf inst.stage2=http://192.151.6.151/image/ quietinitrdefi pxelinux/initrd.img
}
在这里,我们创建了一个带有 kickstart 配置文件位置的菜单项。在inst.stage2=
启动选项指定安装程序的运行时图像的位置。此选项需要包含有效.treeinfo
文件的目录的路径, 并从文件中读取运行时映像位置 .treeinfo
。
步骤 8:配置防火墙
我们在防火墙中必须允许三种服务,即 DHCP、TFTP 和 HTTP。由于我们使用的是 firewalld,我们将使用 firewall-cmd 来启用这些服务/端口:
# firewall-cmd --add-service=http --add-service=tftp --add-service=dhcp --permanent
# firewall-cmd --reload
success
验证规则添加是否正确
# firewall-cmd --list-service
cockpit dhcp dhcpv6-client http ssh tftp
步骤 9:配置 SELinux
为了本教程,我将 SELinux 保持在 Permissive 模式。
# getenforce
Permissive
您还可以使用以下命令将其设置为许可模式
# setenforce 0
或者您也可以选择完全禁用它。
步骤 10:执行 PXE 引导
我们都准备好执行目标刀片的 UEFI PXE 引导,以通过网络安装它们。引导您的客户端节点并执行基于网络的安装。现在通过网络启动的快捷按钮可能因不同的硬件而异,但在大多数情况下,我们希望按 F12 从网络启动:
如果您的 UEFI PXE 启动服务器配置正确,那么 TFTP 文件应该会成功下载,如下所示
在下一个屏幕中,您将看到我们在grub.cfg
文件中配置的启动菜单条目。按 Enter 以使用 kickstart 配置文件开始自动安装:
打回车开始安装。如果您看到以下屏幕,则意味着您现在可以坐下来喝咖啡了!!
概括
在本教程中,我们学习了如何使用 RHEL/CentOS 8 Linux 服务器创建 UEFI PXE 引导服务器。我已经分享了创建和设置您的 kickstart 服务器的分步说明。尽管还有许多其他方法可以实现相同的目标,例如您可以使用 DNSMASQ 代替 DHCP 或使用 FTP 或 NFS 代替 HTTP 来托管您的 kickstart 文件和映像存储库。因此,您可以根据需要自定义安装步骤。尽管本文应该为您提供一个基础来设置您的第一个 PXE 引导服务器。
CentOS 8使用 Kickstart配置 UEFI PXE 启动相关推荐
- Centos安装PHP7及配置php-fpm开机启动
centos 7 编译安装 php-7.2.11的步骤 在官网下载php-7.2.11的php压缩包,centos 7 安装 php-7.2.11的步骤,http://cn2.php.net/dist ...
- linux ftp 后台执行,Linux环境CENTOS下apache-ftpserver搭建配置及后台启动
1.apache-ftpserver-1.1.0.tar.gz下载 2.指定Linux目录,例如:/usr/local/FTPServer.将压缩包解压到该目录下. 3.在FTPServer目录下创建 ...
- CentOS7 cobbler 配置,实现用 pxe 启动安装 kvm 虚拟机
Cobbler安装与配置 网络拓扑 系统配置 # 关闭防火墙 [root@cobblervm ~]# systemctl stop firewalld.service [root@cobblervm ...
- 使用Kickstart+Apache+Dhcp+Pxe无人值守安装操作系统
今天在班上,老板发了两台旧的服务器,让我和同事把系统装上.手上没有U盘,拿了个新光驱,光驱也坏了,这.. 我们想到了用kicskstart来安装系统.刚好手里一台手提电脑,真机就是RedHat6.2( ...
- linux 启动网络服务,Linux下网络启动服务器安装和配置方法(pxe+tftp+dhcpd)
背景: 在大规模安装服务器时,需要批量自动化方法来安装服务器,来减少日常的工作量,但是批量自动化安装服务器的基础是网络启动服务器(bootserver),下面就是网络启动服务器的安装和配置方法,供大家 ...
- linux网络引导安装windows,pxe启动网络安装CentOS(win平台)
准备: 1. windows电脑一台,并且下载CentOS 5.X 版本的iso 2. 用于被安装的Linux Server,主板支持PXE启动并且设置为第一启动顺序. 3. 下载windows下的t ...
- 浪潮服务器改uefi引导,浪潮服务器重做raid 设置pxe 启动
在生产环境中我们会面对许多不同品牌的服务器,比如 inspur .huawei .ZET .HP .H3C等大厂家服务器,重做riad 与设置pxe 的流程也大同小异. Inspur 浪潮服务器重做r ...
- ipxe无盘服务器,ipxe uefi pxe HTTP启动文件及启动菜单的个人体会
ipxe 中的wimboot新完善了UEFI HTTP方式启动PE,经过测试成功,在制作启动文件和启动菜单中费了一番周折,一点体会和各位分享. 将wimboot复制到HTTP启动根目录,ipxe.kr ...
- 以PXE或UEFI PXE网络启动WinPE系统
有些小伙伴,或许遇到过电脑开机系统起不来,黑屏外加英文N行,如下图: 图中最下面英文提示找不到启动设备,解决办法:建议检查硬盘,或引导甚至系统,,,本文这里谈的不是这个故障哦,请看框中部分,这些是电脑 ...
- 为使用 GRUB2 的机器配置网络引导(PXE启动服务器)
所需软件和服务: 服务器端 DHCP: 为客户端分配IP (切记不要将DHCP Server网口连到非本地测试网络外的其他网络,会导致其他网络IP分配异常.) TFTP: 传送PXE Menu ...
最新文章
- (C++)高精度整数的存储、读入、比较和四则运算
- 自动化对就业没有影响?看看这张图再说
- Grid不可编辑时,设置行背景颜色
- 在python中等号前面与后面分别是什么意思-Python中%是什么意思?python中百分号如何使用?...
- 读研,竞赛,与实习--公子龙的成长经历
- 崩坏西游html5多游游戏,崩坏西游无限元宝版
- 虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer
- 【Ids4实战】深究配置——用户信息操作篇
- MFC的Application Wizard所生成的各种文件功能
- SQL Server 函数的使用(数学函数)
- 删除mysql指令_MySQL常用命令学习笔记
- Magento网店自定义模板初探(1)——文件夹结构
- Xen和KVM的guest主机热添加硬盘
- 爬虫---如何抓取app的思路和方案
- 计算机上机操作表格试题,全国计算机等级考试四Excel电子表格操作试题.doc
- L73.linux命令每日一练 -- 第十章 Linux网络管理命令 -- dig和host
- 吴22名广西农民工广东讨薪 返途被追砍(转载)
- Unity插件 - MeshEditor(五) 网格顶点动画(变形动画)
- html5 播放 3gp,一个html5播放视频的video控件只支持android的默认格式mp4和3gp
- s:checkboxlist 选中
热门文章
- cad字体安装_为什么CAD图纸打开后会显示很多问号“???”,该怎么解决
- OpenGL ES之3D模型加载和渲染
- 诚龙网刻报错_诚龙PXE网刻工具11.5
- 开源自己的一个小android项目(美女撕衣服游戏)
- 修复ie浏览器无访问页面或dns问题
- 串口转以太网使用方法
- Premiere Pro Guru: 3D Titling for Video Editors Premiere Pro 大师教程之 3D字幕条制作教程 Lynda课程中文字幕
- Python爬虫程序实例
- Waves13混音效果全套插件
- STM32F103无源蜂鸣器驱动程序