异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?
- 其他
- 2025-07-21 19:19:11

这个问题源于早几年前印象比较深刻的面试,面的岗位是UCloud的CDN运维交付岗,当时面试官问我,在批量PXE的时候怎么才能快速确认是否已经PXE成功了?我当时的回答是可以看dhcp服务器分配的地址数量来确定。我已经忘记了为什么我会说出这样的答案,虽然后面通过了面试,但由于其他的原因没有选择去那边工作。最近在看PXE相关的东东,想了一个不太成熟的方案,以此来记录一下。
一、我的方案效果
PXE服务管理
主机PXE效果展示
主机PXE完成
主机PXE失败
二、实现原理
实现原理非常简单,只需要PXE执行前和执行后分别执行curl命令,将数据post到PXEServer即可。以下是我在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.13、挂载ISO
mount /dev/sr0 pxefile/ISO4、修改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 boot8002为REPOPort端口 initrd.img和vmlinuz路径要修改为ISO里面的路径
5、修改ks.cfg,将其上传到pxefile/KS目录下中 6、运行项目
python3 manager.py runserver 0:80PS:本文只是记录个思路,有解但可能不是最优解~ 我是运维少年,如果文章对您有帮助,欢迎关注我的同名公众号~
异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“异想天开|如何实现PXE可视化?批量主机PXE如何监控状态?”
下一篇
Linux篇:进程间通信