面向物理机与虚拟机的 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 关联设备,并提供设备类型对应的控制能力:
| 控制器 | 使用对象 | 状态 | 能力 |
|---|---|---|---|
| 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
- 设备状态和健康信息
- BMC 连通性及控制器信息探测
- 查询电源状态
- 开机、软关机、强制重启、电源循环和强制断电
- 设置下一次 PXE、本地硬盘、虚拟光驱或 BIOS Setup 启动
- 明确选择 Legacy BIOS 或 UEFI 启动模式
- 读取 IPMI System Boot Options 参数 5
- 操作事件记录
- Vue 3 Web 控制台
- 用户登录和会话认证
- SQLite 配置及状态存储
- 文件管理和启动菜单管理
- SSE 实时事件
- 日志和系统诊断
- Go 单二进制部署
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 BIOS
ipmitool -I lanplus -H BMC_IP -U USER chassis bootdev pxe
# 下一次从 PXE 启动,UEFI
ipmitool -I lanplus -H BMC_IP -U USER chassis bootdev pxe options=efiboot
# 下一次从默认硬盘启动,Legacy BIOS
ipmitool -I lanplus -H BMC_IP -U USER chassis bootdev disk
# 下一次从默认硬盘启动,UEFI
ipmitool -I lanplus -H BMC_IP -U USER chassis bootdev disk options=efibootchassis bootparam get 5 读取的是 BMC 保存的启动覆盖,不是当前操作系统的实际启动状态。
- Go 1.25 或兼容版本
- Node.js 和 npm(构建 Web 前端)
ipmitool(使用 IPMI 控制器时)- Linux 或 Windows
推荐使用 lanplus,它对应 IPMI 2.0。lan 使用 IPMI 1.5/RMCP,仅用于旧设备兼容。
cd web
npm install
npm run build
cd ..前端产物生成到 internal/web/dist,并嵌入 Go 二进制。
Linux:
go build -o dist/mboot ./cmd/mboot
./dist/mbootWindows PowerShell:
go build -o dist\mboot.exe .\cmd\mboot
.\dist\mboot.exe常用启动参数:
-config 指定启动配置文件
-data-dir 覆盖数据目录
-host 覆盖管理界面监听地址
-port 覆盖管理界面端口
-no-browser 启动时不自动打开浏览器
首次打开管理界面时创建管理员账号。服务设置、用户、设备、菜单、事件和控制器保存在数据目录中。
docker compose up --buildDHCP、ProxyDHCP 和 TFTP 使用 UDP,容器网络模式、防火墙和跨 VLAN DHCP Relay 需要根据实际网络单独配置。生产部署前请先在隔离网络验证。
mboot 负责地址分配和 PXE 参数:
客户端 ──DHCP──> mboot ──> 地址租约 + PXE 启动文件
设备地址会在 DHCP 分配和续租时按 MAC 自动更新。
已有 DHCP 服务器继续分配地址,mboot 只返回启动信息:
客户端 ──DHCP──────> 现有 DHCP Server ──> IP / 网关 / DNS
│
└────ProxyDHCP──> mboot ─────────────> PXE 启动信息
由于 mboot 不拥有外部 DHCP 租约,iPXE 加载动态菜单时会携带 PXE MAC;mboot 使用回调来源地址更新设备当前 IP。
所有管理接口位于 /api/v1,除初始化和登录外均需要认证。
| 领域 | 路径 | 说明 |
|---|---|---|
| 设备 | /devices |
设备查询、保存、删除和批量创建 |
| 控制器 | /controllers |
控制器查询、保存和删除 |
| BMC 探测 | /controllers/:id/probe |
BMC 信息和电源状态 |
| 电源 | /controllers/:id/power |
IPMI 电源操作 |
| 启动覆盖 | /controllers/:id/boot |
设置下一次启动设备 |
| BIOS 启动参数 | /controllers/:id/bios |
读取标准 Boot Parameter 5 |
| 配置 | /config |
服务配置 |
| 菜单 | /menus |
PXE/iPXE 菜单 |
| 文件 | /files |
启动文件管理 |
| 事件 | /events/stream |
SSE 实时事件 |
旧 /clients 和 /ipmi/nodes 路由暂时保留兼容。
mboot/
├── cmd/mboot/ 程序入口
├── internal/app/ 生命周期和服务编排
├── internal/config/ 启动配置
├── internal/storage/ SQLite 数据模型
├── internal/dhcp/ DHCP / ProxyDHCP
├── internal/tftp/ TFTP
├── internal/httpboot/ HTTP Boot
├── internal/ipxe/ 动态 iPXE 脚本
├── internal/ipmi/ IPMI 命令适配器
├── internal/web/ API 和嵌入式前端
├── web/ Vue 3 管理界面
└── docs/ 专题文档
- VMware、Proxmox、libvirt 和 Hyper-V 控制器尚未实现。
- 厂商 BIOS OEM 属性尚未实现。
- IPMI 凭据尚未接入加密存储或外部密钥系统。
- ProxyDHCP 跨 VLAN 场景依赖网络设备正确配置 DHCP Relay/IP Helper。
- 不同服务器 BIOS/UEFI 的 PXE 和 Boot Override 行为可能存在差异。
This project is licensed under the MIT License. See LICENSE for details.