异想天开 | 如何实现PXE可视化?批量主机PXE如何监控状态?

这个问题源于早几年前印象比较深刻的面试,面的岗位是UCloudCDN运维交付岗,当时面试官问我,在批量PXE的时候怎么才能快速确认是否已经PXE成功了?我当时的回答是可以看dhcp服务器分配的地址数量来确定。我已经忘记了为什么我会说出这样的答案,虽然后面通过了面试,但由于其他的原因没有选择去那边工作。最近在看PXE相关的东东,想了一个不太成熟的方案,以此来记录一下。

一、我的方案效果

  • PXE服务管理

图片

  • 主机PXE效果展示

图片

  • 主机PXE完成

图片

图片

  • 主机PXE失败

图片

二、实现原理

实现原理非常简单,只需要PXE执行前和执行后分别执行curl命令,将数据postPXEServer即可。以下是我在ks.cfg中使用的curl脚本

%pre --log=/var/log/kickstart_pre.log
export PXEServer=192.168.137.6
curl -X POST -H "Content-Type: application/json" -d "{\"PASSWORD\": \"PXEServer123\", \"HostUUID\": \"$(dmidecode -s system-uuid)\",\"HostMAC\":\"$(cat /sys/class/net/*/address | grep -v \"^00\" | head -n1)\",\"HostStatus\":\"0\",\"Message\":\"Start Install OS...\"}" http://${PXEServer}/PxeProcess/
%end
%post --log=/var/log/kickstart_post.log
export PXEServer=192.168.137.6
curl -X POST -H "Content-Type: application/json" -d "{\"PASSWORD\": \"PXEServer123\", \"HostUUID\": \"$(dmidecode -s system-uuid)\",\"HostMAC\":\"$(cat /sys/class/net/*/address | grep -v \"^00\" | head -n1)\",\"HostStatus\":\"100\",\"Message\":\"Install OS Complete\"}" http://${PXEServer}/PxeProcess/
%end

这里可以自定义,比如在安装比较复杂的场景,安装完HostOS后要需要执行脚本去安装第三方包、修改配置等,可以在脚本上去执行curl命令,对不同步骤安装成功或失败做定义。

三、使用到的东东

  • 后端:python3 + django4 + 原生http.server(用做repo源)

  • 前端:jQuery + bootstrap v5 + bootstrap-table (不懂前端,90%的时间都消耗在这)

  • PXE:iPXE(兼容性比PXE强)+ dnsmasq(实现dhcp+tftp)+ ks.cfg + 操作系统ISO

四、如何使用
1、修改settings配置文件

# DHCP 地址池
DHCPCONFIG = {'Start_IP':'192.168.137.100','End_IP': '192.168.137.200','Gateway': '192.168.137.1','PxeServerIP':'192.168.137.6','DNSServer':'8.8.8.8,114.114.114.114', # 可以填写多个,使用,分割
}PXESERVERCONFIG = {'PXEPassword' : 'PXEServer123', # 客户端curl post的时候需要带上密码'REPOPort': 8002, # 软件源的端口,要和ks.cfg中保持一致

2、安装dnsmasq和django

# Centos or redhat
yum install dnsmasq
# ubuntu or debian
apt-get install dnsmasq
# django
pip3 install django==4.2.1

3、挂载ISO

mount /dev/sr0 pxefile/ISO

4、修改pxefile/ipxe/menu.ipxe文件

#!ipxe
initrd http://${next-server}:8002/ISO/isolinux/initrd.img
kernel http://${next-server}:8002/ISO/isolinux/vmlinuz \initrd=initrd.img \inst.ks=http://${next-server}:8002/KS/ks.cfg \inst.repo=http://${next-server}:8002/ISO/ \root=live:http://${next-server}:8002/ISO/LiveOS/squashfs.img \ro rd.AUTO=1 rd_NO_LUKS LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 \crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us
boot

8002为REPOPort端口
initrd.img和vmlinuz路径要修改为ISO里面的路径

5、修改ks.cfg,将其上传到pxefile/KS目录下中
6、运行项目

python3 manager.py runserver 0:80

PS:本文只是记录个思路,有解但可能不是最优解~
我是运维少年,如果文章对您有帮助,欢迎关注我的同名公众号~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

/proc/sys/net/ipv4/ 下网络参数的理解

/proc/sys/net/ipv4/下文件详细解释: /proc/sys/net/ipv4/下文件 /proc/sys/net/ipv4/ip_forward 该文件表示是否打开IP转发。 0,禁止 1,转发 基本用途:如VPN、路由产品的利用; 出于安全考虑,Linux系…

postcss-pxtorem实现页面自适应的原理

先声明一点这玩意本身不能实现哈,他只是一个工具,更是一个postcss的插件 帮助我们从px转化成为rem比如我们的代码 div {height: 100px;width: 100px; }经过这个插件转化之后变成 假设变成下面这样哈 div {height: 1rem;width: 1rem; }其他没啥子太大作…

灯塔资产管理系统魔改版搭建(ARL-Puls)

免责声明 文章仅做经验分享用途!利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 简介 ARL-Puls是基于斗…

网络层(1)——概述

一、概述 网络层毫无疑问是最复杂的一层,涉及到大量的协议与结构的内容。在如今主流的设计中,大家都会把网络层分成两个部分:数据平面、控制平面。其中数据平面指的是网络层中每台路由器的功能,它决定了到达路由器端口输入链路之一…

[MySQL--基础]事务的基础知识

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:生活中最重要的决定就是要做出决定。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 事务的目录📕 前言事务简介🚀事务操作🚀准…

Spring boot 使用Redis 消息发布订阅

Spring boot 使用Redis 消息发布订阅 文章目录 Spring boot 使用Redis 消息发布订阅Redis 消息发布订阅Redis 发布订阅 命令 Spring boot 实现消息发布订阅发布消息消息监听主题订阅 Spring boot 监听 Key 过期事件消息监听主题订阅 最近在做请求风控的时候,在网上搜…

javaee实验:Spring Boot 整合 Mybatis

目录 MybatisMyBatis 框架简介Mybatis 框架执行流程图映射器 实验目的实验内容实验过程数据库准备项目结构代码实现 实验结果 Mybatis MyBatis 框架简介 Mybatis 的前身是 Apache 的开源框架 iBatis,与 Hibernate 一样是一个 Java 持久层的框 架。Mybatis 的优势在…

SpringBoot框架+原生HTML开发,基于云端SaaS服务方式的电子病历编辑器源码

一体化电子病历编辑器源码,电子病历系统 一体化电子病历系统基于云端SaaS服务的方式,采用B/S(Browser/Server)架构提供,覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能…

题目:回文判定(蓝桥OJ 1371)

题目描述&#xff1a; 解题思路&#xff1a; 可以采用双指针判断&#xff08;这里说的指针其实是用下标表示&#xff09;。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e6 9;//注意大小 char s[N];//在全局写&#xff0c;默认内部为空…

常见动物经济手术3d模拟交互演示教学实现了教育资源的共享

动物常见病防治是兽医必备的技能&#xff0c;为了让实习兽医在上岗作业前拥有丰富的常见病防治经验。借助动物常见病防治VR虚拟仿真技术开展动物常见病防治VR模拟实操培训&#xff0c;能极大方便院校实训。 提高教学质量 传统的动物医学教学往往依赖于理论知识和实验室实践&…

RHEL8_Linux硬盘管理

主要介绍Linux磁盘管理 了解分区的概念对硬盘进行分区常见的分区swap分区的管理 1.了解分区的概念 1&#xff09;新的硬盘首先需要对其进行分区和格式化&#xff0c;下面来了解以下硬盘的结构&#xff0c;如图。 2&#xff09;硬盘的磁盘上有一个个圈&#xff0c;每两个圈组…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整的组件库&#xff0c;大家一起学习。 本组件库的图表模块&#xff0c;已包含所有常用的图表&#xff0c;以下为部分组件截图示意。文末可下载…