https://github.com/haozheyu/mboot
mboot
面向物理机与虚拟机的 PXE/iPXE 网络启动和带外控制平台。
mboot 将 DHCP、ProxyDHCP、TFTP、HTTP Boot、iPXE 动态菜单、设备发现和 IPMI/BMC 控制整合为一个 Go 服务,并提供 Vue 3 管理界面。 它既可以管理裸金属服务器批量装机,也可以发现虚拟机 PXE 客户端。设备身份和控制能力相互独立:物理机可以关联 IPMI/BMC,虚拟机后续可以关联 VMware、Proxmox、libvirt 或 Hyper-V 控制器。 核心模型
mboot │ ┌────────────┴────────────┐ │ │ 网络启动平面 管理平面 │ │ DHCP / ProxyDHCP / TFTP Web UI / API / Events HTTP Boot / iPXE │ │ ┌─────────┴─────────┐ │ │ │ 设备层 控制器层 用户与审计 │ │ 物理机 / 虚拟机 IPMI / BMC(已支持) MAC / IP / 状态 VMware / Proxmox(规划)
设备
设备是物理机和虚拟机共用的资源模型,负责记录: - PXE 网卡 MAC
- DHCP 当前地址
- BIOS/UEFI 固件类型
- 在线状态和最后启动记录
- 磁盘、网络等客户端上报信息
设备通过稳定的设备 ID 和 PXE MAC 跟踪动态 IP,不使用易变化的 DHCP 地址作为关联键。 控制器
控制器通过 device_id 关联设备,并提供设备类型对应的控制能力: [td]| 控制器 | 使用对象 | 状态 | 能力 | | IPMI / BMC | 物理服务器 | 已支持 | BMC、Power、Boot、标准启动参数 | | VMware | VMware 虚拟机 | 规划中 | 电源、虚拟启动设备 | | Proxmox | QEMU/LXC | 规划中 | 电源、启动顺序 | | libvirt | KVM/QEMU | 规划中 | 电源、启动设备 | | Hyper-V | Hyper-V 虚拟机 | 规划中 | 电源、固件启动设置 |
BMC 管理地址与设备业务网地址是两套独立地址。mboot 不通过 IP 猜测两者关系,而是在控制器中显式选择设备,后续由 DHCP/iPXE 自动更新设备地址。 已实现能力
网络启动
- DHCP Server 和 ProxyDHCP
- BIOS、UEFI x64、UEFI ARM64 客户端识别
- TFTP 和 HTTP Boot
- HTTP Range 请求
- 动态 iPXE 菜单
- 本地启动、外部脚本和 netboot.xyz
- 完整 DHCP 与已有 DHCP 网络两种部署模式
设备管理
- 自动发现物理机和虚拟机
- 按 PXE MAC 更新动态 DHCP 地址
- ProxyDHCP 环境通过 iPXE 回调记录实际客户端地址
- 静态设备、批量设备和待认领设备
- Wake-on-LAN
- 设备状态和健康信息
IPMI / BMC
- BMC 连通性及控制器信息探测
- 查询电源状态
- 开机、软关机、强制重启、电源循环和强制断电
- 设置下一次 PXE、本地硬盘、虚拟光驱或 BIOS Setup 启动
- 明确选择 Legacy BIOS 或 UEFI 启动模式
- 读取 IPMI System Boot Options 参数 5
- 操作事件记录
管理平台
- Vue 3 Web 控制台
- 用户登录和会话认证
- SQLite 配置及状态存储
- 文件管理和启动菜单管理
- SSE 实时事件
- 日志和系统诊断
- Go 单二进制部署
IPMI 安全边界
IPMI 操作会直接影响物理服务器,mboot 对此采用以下限制: - 查询操作不需要确认,所有状态变更都需要明确确认。
- 前端展示目标服务器、BMC 地址、动作含义及风险。
- 后端再次验证确认标志,不能只靠绕过页面直接误操作。
- Boot Override 仅允许下一次启动,不允许通过该接口修改永久启动顺序。
- 设置启动设备不会自动重启,电源操作必须单独确认。
- 启动模式必须明确选择 Legacy BIOS 或 UEFI。
- 密码通过 IPMI_PASSWORD 环境变量传递给 ipmitool,不会出现在进程参数、API 响应或事件日志中。
当前控制器密码保存在 SQLite 数据库中。生产环境必须限制数据目录权限;后续可替换为集中密钥系统或加密凭据存储。 完整 BIOS 属性并不属于 IPMI 标准。当前通用适配器只读取标准启动参数,BIOS 属性修改需要 Dell、HPE、Lenovo、浪潮、Supermicro 等厂商 OEM 适配器。 启动覆盖说明
页面中的 PXE 和硬盘启动均表示“仅下一次启动”: 选择下一次启动设备 │ ├── PXE 网络启动 ├── 默认本地硬盘 ├── 虚拟光驱 └── BIOS Setup │ ├── Legacy BIOS └── UEFI │ └── 写入 BMC,不自动重启
等价的常用命令如下: # 下一次从 PXE 启动,Legacy BIOSipmitool -I lanplus -H BMC_IP -U USER chassis bootdev pxe# 下一次从 PXE 启动,UEFIipmitool -I lanplus -H BMC_IP -U USER chassis bootdev pxe options=efiboot# 下一次从默认硬盘启动,Legacy BIOSipmitool -I lanplus -H BMC_IP -U USER chassis bootdev disk# 下一次从默认硬盘启动,UEFIipmitool -I lanplus -H BMC_IP -U USER chassis bootdev disk options=efiboot
chassis bootparam get 5 读取的是 BMC 保存的启动覆盖,不是当前操作系统的实际启动状态。
|