PXE无人值守

PXE介绍

预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

PXE过程

  1. 开机 :计算机开机后,BIOS(基本输入输出系统)开始运行
    • BIOS 会检查计算机的硬件设备,包括网络接口卡(NIC)
  2. 网络请求 :NIC 被初始化后,会发送一个 DHCP(动态主机配置协议)发现请求
    • 这个请求的目的是获取一个 IP 地址以及其他网络配置信息,例如子网掩码、网关和 DNS 服务器的地址
  3. DHCP 响应 :网络中的 DHCP 服务器接收到请求后,会为计算机分配一个可用的 IP 地址,并提供其他相关的网络配置信息
    • 此外,DHCP 服务器还会向计算机提供有关 PXE 服务器的位置信息,例如 PXE 服务器的 IP 地址和引导文件名
  4. TFTP 连接 :计算机使用从 DHCP 服务器获取到的 PXE 服务器信息,通过 TFTP(简单文件传输协议)与 PXE 服务器建立连接
    • 请求下载引导文件,这个文件可能包含启动操作系统所需的内核、初始化脚本等
  5. 引导文件下载:PXE 服务器响应请求,将引导文件传输给计算机
  6. 启动操作系统:计算机接收到引导文件后,开始加载并执行其中的指令,从而启动操作系统
  7. 后续配置:在操作系统启动过程中,可能会根据预定义的配置脚本进行进一步的设置和配置,例如安装特定的应用程序、配置网络设置等

PXE服务器

配置环境

虚拟机版本

bash 复制代码
hostnamectl
Operating System: Red Hat Enterprise Linux Server 7.9

启用图形界面

bash 复制代码
yum group install "Server with GUI" -y
systemctl set-default graphical.target
reboot

关闭SELinux

bash 复制代码
grubby --update-kernel ALL--args selinux=0

关闭防火墙

bash 复制代码
systemctl stop firewalld
systemctl mask firewalld

挂载系统镜像,配置好本地源仓库

bash 复制代码
mkdir /rhel7
mount /dev/cdrom /rhel7

保证网络通畅

配置DHCP分配IP给客户机

bash 复制代码
# 安装DHCP服务
yum install dhcp -y
# 复制配置文件
\cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 修改配置文件
vim /etc/dhcp/dhcpd.conf
# 将第27,28行进行注释
# 将第36行后的全部删掉
 7 option domain-name "pxeauto.org"; # 客户端获取的域名
 8 option domain-name-servers 114.114.114.114; # 客户端获取的DNS

 32 subnet 172.25.254.0 netmask 255.255.255.0 { # 网络位 掩码
 33   range 172.25.254.30 172.25.254.40; # 地址池
 34   option routers 172.25.254.2; # 网关
 35   next-server 172.25.254.100; # TFTP服务器的IP
 36   filename "pxelinux.0"; # 获取的文件

# 重启服务
systemctl enable --now dhcpd

TFTP主机

bash 复制代码
# 安装TFTP(共享文件)
yum install tftp-server.x86_64 -y
# 启动TFTP服务
systemctl enable --now tftp
# 创建目录
mkdir -p /var/lib/tftpboot/pxelinux.cfg
# 复制、创建文件
cp /rhel7/isolinux/* /var/lib/tftpboot
cp /rhel7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# 编写/var/lib/tftpboot/pxelinux.cfg/default文件
 61 label linux
 62   menu label ^Install Red Hat Enterprise Linux 7.9
 # 启动时默认选择
 63   menu default 
 64   kernel vmlinuz
 # 从HTTP主机上获取系统安装源和设置配置文件
 65   append initrd=initrd.img repo=http://172.25.254.100/rhel7 ks=http://172.25.254.100/ks.cfg quiet
 66 
 67 label check
 68   menu label Test this ^media & install Red Hat Enterprise Linux 7.9
 69   kernel vmlinuz
 70   append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.9\x20Server.x86_64 rd.live.check quiet

# 启动TFTP服务
systemctl enable --now tftp

利用kickstart生成ks.cfg文件

bash 复制代码
# 安装KickStart
yum install system-config-kickstart -y
# 图形化启动KickStart
system-config-kickstart

给root密码加密:是否在创建出的文件(ks.cfg)中加密ROOT密码

HTTP服务器:/var/lib/tftpboot/pxelinux.cfg/default中65行的服务器

HTTP目录:/var/lib/tftpboot/pxelinux.cfg/default中65行的repo

根分区选择 使用磁盘全部未用空间

根据不同系统对网卡的命名,填写对应的网卡名


根据个人需求选择是否安装图形界面

由于软件包选择不能从kick start中进行选择,需要从生成的ks.cfg文件中去添加

设置安装后脚本,观察是否遵循脚本安装,用于验证

快捷键:CTRL + S

bash 复制代码
# 查看是否保存成功,有内容则成功
tail /root/ks.cfg
# 修改ks.cfg
vim /root/ks.cfg
# 第40行后插入
%packages
@base
httpd
%end

# 检测语法是否有误
ksvalidator ks.cfg

搭建apache共享镜像

bash 复制代码
# 安装apache
yum install httpd-2.4.6-95.el7.x86_64 -y
# 创建镜像链接
ln -s /rhel7/ /var/www/html/
# 移动文件
cp /root/ks.cfg /var/www/html/
# 启动服务
systemctl enable --now httpd
# 检查是否能访问到ks.cfg和镜像资源

安装PxeLinux

bash 复制代码
# 安装PxeLinux
yum install syslinux.x86_64 -y
# 移动文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
# 通过/usr/share/doc/syslinux-4.05/pxelinux.txt帮助文档
# 可知PxeLinux将引导客户机访问var/lib/tftpboot/pxelinux.cfg/default文件

客户机

实现无盘安装RHEL7.9

CTRL + N 新建虚拟机,以下设置需要注意,其他设置随意

关闭加速 3D 图形
移除光盘,模拟无盘

点击编辑,点击虚拟网络编辑器,点击更改设置
选中VMnet8,取消勾选 本地 DHCP 服务,然后点击确定

点击绿色旁的倒三角,选择打开电源时进入固件通过左右键移动到Boot,通过Shift + = 键 选择 网络启动
通过左右键,选中Exit 两次回车,进行安装系统,其中各个服务器不能关机

选中第一个,回车开始进行安装

进入此界面,即认为开始自动安装

期间,会在这里卡很久
等到虚拟机再次进入页面,即可将虚拟机关机

点击绿色旁的倒三角,选择 打开电源时进入固件

通过左右键移动到Boot,通过Shift + = 键 选择 硬盘启动

通过左右键,选中Exit 两次回车,进行 安装系统
等待一段时间,即可安装成功

安装后脚本同样执行成功

bash 复制代码
mkdir -p /rhel7
echo mount /dev/cdrom /rhel7 >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
相关推荐
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程3 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk4 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*4 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue4 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man4 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang