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
相关推荐
专业开发者21 小时前
Android 位置服务(LBS)客户支持指南
开发语言·php
cws20040121 小时前
微软系统中AD域用户信息及状态报表命令介绍
开发语言·microsoft·php
熬了夜的程序员21 小时前
【RUSTFS】rustfs的go语言sdk
开发语言·后端·golang
Hello.Reader1 天前
Rocket 0.5 快速上手3 分钟跑起第一个 Rust Web 服务
开发语言·前端·rust
hefaxiang1 天前
分支和循环(中)
c语言·开发语言
爱装代码的小瓶子1 天前
【c++知识铺子】最后一块拼图-多态
java·开发语言·c++
认真敲代码的小火龙1 天前
【JAVA项目】基于JAVA的超市订单管理系统
java·开发语言·课程设计
CryptoRzz1 天前
对接墨西哥股票市场 k线图表数据klinechart 数据源API
开发语言·javascript·web3·ecmascript
yue0081 天前
C# 实现电脑锁屏功能
开发语言·c#·电脑·电脑锁屏
chilavert3181 天前
技术演进中的开发沉思-230 Ajax:Prototype.js 重构原生 DOM
开发语言·前端·javascript