当前位置: 首页 > news >正文

PXE实现自动批量安装部署操作系统

目录

一、PXE介绍

二、PXE涉及的相关知识点

三、搭建PXE网络体系的前提

四、服务端要安装一系列的依赖环境

五、搭建 PXE 远程安装服务器

5.1、安装并启动TFTP服务

5.2、安装并启用 DHCP 服务

5.3、准备 Linux 内核、初始化镜像文件、准备 PXE 引导程序

5.4、安装FTP服务,准备CentOS 7 安装源

5.5、配置启动菜单文件

验证

六、实现 Kickstart 无人值守安装


一、PXE介绍

PXE(Preboot eXecution Environment)是一种在计算机启动时使用网络接口从远程服务器获取操作系统安装和启动信息的技术。通过PXE,计算机可以从局域网中的PXE服务器上下载操作系统安装文件,并进行自动化的操作系统部署或故障排除。由Intel公司开发的PXE网络引导技术工作在Client/Server模式,可以同时装配多台机器,安装系统、配置各种服务,同时不需要光盘、U 盘等安装介质实现远程连接。

二、PXE涉及的相关知识点

PXE协议:PXE是一种预启动执行环境,提供了一种从网络上启动计算机并在网络环境中安装操作系统的方法。PXE协议包括了BOOTP(Bootstrap Protocol)和TFTP(Trivial File Transfer Protocol),同时也支持DHCP、HTTP等其他协议。

PXE引导文件:PXE引导文件包括了各种操作系统的引导文件,如Linux内核、Windows PE等,它们通常存储在PXE服务器上的TFTP目录中。当客户端通过PXE启动时,它会从PXE服务器上下载相应的引导文件。

DHCP服务:DHCP服务是为客户端分配IP地址、子网掩码、网关等网络参数的协议。在PXE自动装机过程中,DHCP服务器会向客户端提供PXE服务器的IP地址和PXE引导文件的位置信息。

TFTP服务:TFTP服务是一个简单的文件传输协议,用于将引导文件和操作系统映像从PXE服务器传输到客户端计算机上。

操作系统映像:操作系统映像是安装操作系统所需的文件,通常包括了操作系统核心文件、驱动程序、软件包等。在PXE自动装机中,这些映像文件存储在PXE服务器上,并通过TFTP服务传输到客户端计算机上进行安装。

三、搭建PXE网络体系的前提

1、合适的设备:需要拥有一台作为PXE服务器的计算机,该计算机需要具备足够的处理能力和存储空间来运行PXE服务和存储操作系统映像。此外,还需要一台或多台客户端计算机,这些计算机将通过PXE引导从服务器上下载并安装操作系统。

2、网络基础设施:你需要拥有一个稳定可靠的局域网环境,以便PXE服务器和客户端计算机之间进行通信。确保网络连接正常、IP地址分配正确,并且网络设备(如交换机、路由器)能够正常工作。客户机的网卡要支持PXE协议(集成BOOTROM芯片),且主板支持网络引导。一般大多数服务器主机都支持,只需在BIOS设置中允许从 Network 或 LAN 启动即可。

3、PXE服务器软件:你需要选择并安装适当的PXE服务器软件。常用的PXE服务器软件包括ISC DHCP、TFTPD32、tftp-server、Serva等,它们提供了DHCP、TFTP等服务,方便配置和管理PXE引导文件、操作系统映像等。

四、服务端要安装一系列的依赖环境

TFTP:简单文件传输协议。基于UDP实现,用于客户端和服务端之间进行小文件的传输

xinetd:网络守护进程服务器,管理TFTP

DHCP:分配IP地址,提供引导文件的文件

TFP:传输镜像等等大文件

kickstart:无人值守程序

五、搭建 PXE 远程安装服务器

服务器中包含 CentOS 7 安装源、TFTP 服务、DHCP 服务,能够向客户机裸机发送 PXE引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。

服务器IP地址:172.16.80.12

5.1、安装并启动TFTP服务

//关闭防火墙,临时禁用SELinux安全机制
[root@12 ~]# systemctl stop firewalld
[root@12 ~]# setenforce 0//安装 TFTP 服务
[root@12 ~]# yum -y install tftp-server xinetd//修改TFTP服务的配置文件
//将第十行 wait 的值改为 yes (表示可以连接多台主机)
//将第十四行的 disable 的值改为 no (表示开启TFTP服务)
[root@12 ~]# vim /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{socket_type             = dgramprotocol                = udpwait                    = nouser                    = rootserver                  = /usr/sbin/in.tftpdserver_args             = -s /var/lib/tftpbootdisable                 = noper_source              = 11cps                     = 100 2flags                   = IPv4
}//重启tftp和xinetd服务,并设置开机自启
[root@12 ~]# systemctl restart tftp
[root@12 ~]# systemctl enable tftp
[root@12 ~]# systemctl restart xinetd
[root@12 ~]# systemctl enable xinetd

5.2、安装并启用 DHCP 服务

//安装dhcp软件包
[root@12 ~]# yum -y install dhcp//将dhcp配置模板复制到dhcp配置文件中
[root@12 ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? yes//修改DHCP服务的配置文件
[root@12 ~]# vim /etc/dhcp/dhcpd.conf
//在11行的max-lease-time 7200; 下添加
//ddns-update-style none;
//next-server 172.16.80.12;
//filename "pxelinux.0";
//如下所示default-lease-time 600;max-lease-time 7200;ddns-update-style none;next-server 172.16.80.12;filename "pxelinux.0";//修改第35到38行的subnet模块
//如下所示
subnet 172.16.80.0 netmask 255.255.255.0 {range 172.16.80.50 172.16.80.60;option routers 172.16.80.12;
}//:wq 保存退出//重启dhcpd服务,并设置为开机自启
[root@12 ~]# systemctl restart dhcpd
[root@12 ~]# systemctl enable dhcpd

对配置文件里修改/添加的内容解释

ddns-update-style none;        ->        禁用 DNS 动态更新

next-server 172.16.80.12;        ->        指定 TFTP 服务器的地址

filename "pxelinux.0";        ->        指定要下载的 PXE 引导程序的文件
 

subnet 172.16.80.0 netmask 255.255.255.0 {        #声明要分配的网段地址
  range 172.16.80.50 172.16.80.60;        #设置地址池
  option routers 172.16.80.12;        #默认网关地址指向TFTP服务器的IP地址
}

5.3、准备 Linux 内核、初始化镜像文件、准备 PXE 引导程序

[root@12 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@12 ~]# cd /mnt/images/pxeboot//复制 Linux系统的内核文件 到TFTP根目录下
[root@12 pxeboot]# cp vmlinuz /var/lib/tftpboot///复制 初始化镜像文件(linux引导加载模块)到TFTP根目录下
[root@12 pxeboot]# cp initrd.img /var/lib/tftpboot/[root@12 pxeboot]# yum -y install syslinux
//复制 PXE引导程序 到TFTP根目录下
[root@12 pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

如果报如下错误:

[root@12 ~]# mount /dev/sr0 /mnt
mount: no medium found on /dev/sr0


5.4、安装FTP服务,准备CentOS 7 安装源

//安装vsftpd服务
[root@12 pxeboot]# yum -y install vsftpd//在ftp根目录下创建目录centos7
[root@12 pxeboot]# mkdir /var/ftp/centos7//将镜像文件强制复制到centos7目录中,可加&让它自己后台运行
[root@12 pxeboot]# cp -rf /mnt/* /var/ftp/centos7///重启vsftpd服务,设置开机自启
[root@12 pxeboot]# systemctl restart vsftpd
[root@12 pxeboot]# systemctl enable vsftpd

5.5、配置启动菜单文件

默认的启动菜单文件在TFTP根目录的 pxelinux.cfg子目录下,文件名为default。

[root@12 pxeboot]# mkdir /var/lib/tftpboot/pxelinux.cfg
//创建default文件
[root@12 pxeboot]# vim /var/lib/tftpboot/pxelinux.cfg/default
//添加内容如下
default auto
#指定启动菜单的默认入口
prompt 0
#不等待用户控制,自行向下选择label auto
#图像化界面的引导入口,label 用来定义启动项
kernel vmlinuz
#加载内核文件,kernel 和 append用来定义引导参数
append initrd=initrd.img method=ftp://172.16.80.12/centos7label linux text
#文本安装引导入口
kernel vmlinuz
append text initrd=initrd.img method=ftp://172.16.80.12/centos7label linux rescue
#救援模式引导入口
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://172.16.80.12/centos7//:wq保存退出

验证

自定义新建一个虚拟机,简单测试验证一下 :

 

 开启刚才新建的虚拟机

会有如下提示,点否即可

 

 

服务器配置成功

六、实现 Kickstart 无人值守安装

在上述实验中,已经可以做到开机就能自动获取镜像,安装镜像,配置基础网路配置。但是后半部分依旧需要手动安装。所以要实现全自动化,就要引入Kickstart程序服务,实现真正完全全自动化安装。

//安装软件包
[root@12 pxeboot]# yum install -y system-config-kickstart

MobaXterm远程连接软件可以用命令调出 Kickstart 配置程序界面,命令为:system-config-kickstart

//打开 Kickstart 配置程序界面
[root@12 pxeboot]# system-config-kickstart

基本配置 

 安装方法

引导装载程序选项

 

 分区信息

.

点击ADD添加布局

添加 /boot

 添加 交换分区

添加 / 

网络配置

 

防火墙配置

 

安装后脚本

 

保存文件

 

//保存后配置文件在~目录
[root@12 pxeboot]# cd ~
[root@12 ~]# ls
anaconda-ks.cfg  Documents  ks.cfg  original-ks.cfg  Public     Videos
Desktop          Downloads  Music   Pictures         Templates
//编辑 ks.cfg ,加入要下载的包 
[root@12 ~]# vim ks.cfg#在原有的基础上添加以下内容%packages@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@print-client
@x11
binutils
chrony
ftp
gcc
kernel-devel
kexec-tools
make
open-vm-tools
patch
python%end[root@12 ~]# cp ks.cfg /var/ftp/ks.cfg
[root@12 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
#改为以下内容default auto
prompt 0label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://172.16.80.12/centos7 ks=ftp://172.16.80.12/ks.cfglabel linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://172.16.80.12/centos7label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://172.16.80.12/centos7

 重置刚刚建的虚拟机,虚拟机会自动安装

自动装机,实验成功

相关文章:

  • HarmonyOS 横屏调试与真机横屏运行
  • 从零开始:用 Rust 编写你的第一个 Web 服务
  • 从MobileNetv1到MobileNetv3模型详解
  • Git快速掌握,通俗易懂
  • Windows11通过SMB映射NAS网络驱动磁盘
  • 【QT+QGIS跨平台编译】之三十九:【Exiv2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • RK3568笔记十七:LVGL v8.2移植
  • Git 存储大文件
  • ES实战--文档间的关系
  • leetcode刷题--贪心算法
  • 【LeetCode: 107. 二叉树的层序遍历 II + BFS】
  • 2024 年 11 款最佳 iPhone 数据恢复软件和应用程序
  • 【芯片设计- RTL 数字逻辑设计入门 15 -- 函数实现数据大小端转换】
  • Shell 学习笔记(三)-shell变量
  • 2024 前端面试题(GPT回答 + 示例代码 + 解释)No.1 - No.20
  • 2019年如何成为全栈工程师?
  • Android Volley源码解析
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript学习总结——原型
  • jquery ajax学习笔记
  • Js基础知识(四) - js运行原理与机制
  • JS实现简单的MVC模式开发小游戏
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL的数据类型
  • Python学习之路16-使用API
  • select2 取值 遍历 设置默认值
  • unity如何实现一个固定宽度的orthagraphic相机
  • Zsh 开发指南(第十四篇 文件读写)
  • 从0实现一个tiny react(三)生命周期
  • 老板让我十分钟上手nx-admin
  • 区块链分支循环
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Linux(Source Insight安装及工程建立)
  • #每天一道面试题# 什么是MySQL的回表查询
  • #预处理和函数的对比以及条件编译
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)Thymeleaf用法——Thymeleaf简介
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)大型网站的系统架构
  • .jks文件(JAVA KeyStore)
  • .libPaths()设置包加载目录
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Core中的去虚
  • .net MySql
  • .Net 应用中使用dot trace进行性能诊断
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET框架
  • .net生成的类,跨工程调用显示注释
  • .NET微信公众号开发-2.0创建自定义菜单
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @Autowired和@Resource的区别