openUBMC25.09 web界面上更新openUBMC25.09版本启动后回退到iBMC版本

// 此模板仅供参考,如果不适用可以修改

问题描述

在UBMC25.09的web界面上更新UBMC的固件版本,同样还是25.09的openUBMC中构建的hpm升级包(做了一点修改,但是没有变更版本号,还是25.09.00.01),升级完成之后串口中看到的启动版本居然是iBMC版本,这是什么情况?

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:OpenUBMC2509

  • 硬件配置:Hi1711模组+KP920模组

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

是最新的openUBMC固件版本

实际结果

回退到了iBMC版本

答案内容由AI生成,仅供参考:

openUBMC25.09 固件升级后回退至 iBMC 版本的问题分析

根据您描述的问题,在 openUBMC25.09 的 Web 界面使用同版本(25.09)但经过修改的 HPM 升级包进行固件更新后,系统启动时却回退到了原始的 iBMC 版本。以下基于提供的知识库内容对该现象进行系统性分析和解释。


:magnifying_glass_tilted_left: 问题总结

  • 操作动作:通过 Web 界面执行固件升级,使用的是基于 openUBMC25.09 构建但已修改的 HPM 包(版本号未变)。
  • 预期结果:系统继续运行 openUBMC25.09。
  • 实际结果:重启后系统恢复为 iBMC 固件版本。

:pushpin: 核心原因分析

1. 固件升级失败触发自动回退机制

关键实体Firmware Upgrade Failure, Upgrade Failure, Firmware Management Module

多个文档和知识图谱条目表明,当固件升级过程中出现任何验证失败、签名错误或启动异常时,系统会自动触发回退机制(rollback),以恢复到之前的稳定版本。

:warning: 特别提示

  • 您使用的 HPM 包虽然版本号仍为 25.09.00.01,但“做了修改”可能导致其完整性校验失败签名无效
  • openUBMC 系统对固件包有严格的签名验证机制(Secure Boot),即使是微小改动,若未重新正确签名,也会被识别为非法包。
  • 升级过程可能“显示成功”,但后续启动失败会导致系统自动切回原固件(即 iBMC)。

相关证据:

  • Firmware_Upgrade_Error 日志中明确指出:“failed signature validation”是常见升级失败原因。
  • 知识图谱中提到:Firmware Management Module 负责监控整个升级流程,并在检测到失败时触发恢复或回退。
  • 搜索结果 #2 提到:“升级成功后复位iBMC,iBMC系统启动失败…触发分区切换,切回了原版本。” —— 这与您的现象完全一致

2. openUBMC 与 iBMC 共存于双分区结构,支持自动回退

关键实体OpenUBMC2509, iBMC, Rollback, Firmware Mgmt

通常,BMC 固件采用 A/B 双分区机制

  • 一个分区运行当前版本(如 openUBMC25.09),
  • 另一个保存旧版本(如 iBMC)用于回退。

当新版本无法正常启动(如升级包异常、驱动不兼容、内核崩溃),系统会在几次尝试失败后自动切换回旧分区,从而表现出“回退到 iBMC”的现象。


3. HPM 包修改未重新签名导致升级“伪成功”

关键实体OpenUBMC Firmware Package, HPM_FILE, Firmware Update Process

您提到:

“做了一点修改,但是没有变更版本号,还是25.09.00.01”

这可能是问题根源:

  • HPM 文件是经过加密签名的固件镜像。
  • 如果修改了内容但未使用正确的私钥重新签名,则会导致:
    • 升级阶段可能“通过”(前端显示成功);
    • 但在写入或启动时被底层安全机制拦截;
    • 导致新固件无法加载,进而触发回退。

4. 系统环境匹配性问题

关键实体Hi1711, KP920, OpenUBMC2509, Ubuntu 24.04

从知识图谱可知:

  • Hi1711 BMC模组 + 鲲鹏920模组 是 openUBMC2509 的典型部署环境(如文档 chunk 1 所述)。
  • openUBMC2509 明确支持运行在 Ubuntu 24.04 上。
    :white_check_mark: 因此,硬件和操作系统层面 不是主要原因

:white_check_mark: 解决方案建议

步骤 操作 说明
1 **确认 HPM 包的合法性依赖于构建和签名流程的完整性。您提到该包“做了修改但未变更版本号”,这极易导致以下问题:

:white_check_mark: 可能的构建/签名问题包括:

  • Conan 构建系统差异:openUBMC 25.09 使用 Conan 构建系统(见文档《签名包制作指导》),修改后若未通过标准流程重新编译和签名,会导致固件不被信任。
  • 缺少有效数字签名:如搜索结果所述,签名服务器需验证 SHA256 值并返回签名;缺失或错误签名将导致升级包被判定为“不安全”。
  • 版本号欺骗检测:尽管版本号相同,但固件管理模块通过 ComponentIDRevisionNumber 校验实际内容一致性。一旦内容不符但版本号一致,可能被视为“异常更新”而拒绝激活。

4. Web 界面升级流程本身存在潜在风险

关键实体web upgrade, Web Interface, Firmware Update Process

虽然 Web 界面支持固件升级(路径:BMC管理 > 固件升级 > 固件更新),但存在以下风险:

  • Web 升级过程中若发生网络中断、页面刷新、或后台服务异常(如 NGINX 崩溃),即使前端显示“升级成功”,实际写入可能不完整。
  • 某些情况下,Web 升级无法准确反映底层真实状态(如文档中提到的“白牌包更新卡在15%”问题)。

:white_check_mark: 建议解决方案

步骤 操作说明
1. 验证固件包完整性 确保使用的 HPM 包是由标准 openubmc 2509sdk 流程构建,并经过正式签名。禁止手动修改二进制包。
2. 检查签名状态 使用命令行工具(如 ipmcget -d fru)查看当前运行固件来源及签名状态;也可通过串口日志观察启动阶段是否报出 signature verify failed
3. 查看串口日志 在系统重启过程中捕获完整串口输出,重点查找:
- rollback 相关提示
- bmc_veth_drv 加载失败
- ipmi_core 启动异常
- nginx 未启动
4. 使用 CLI 强制指定升级模式 尝试使用 CLI 命令升级,避免 Web 界面不可靠问题:
ipmcset -d upgrade -v <path> activemode=immediate
5. 手动清除旧配置(谨慎操作) 若怀疑是配置残留导致冲突,可在 BMC 正常运行时执行:ipmcset -d restore -v factory,再重新升级。
6. 避免版本号欺骗 即使功能变更微小,也应递增版本号(如 25.09.00.02),避免升级系统误判为“重复升级”或“回滚攻击”。

:puzzle_piece: 补充建议:为何能从 iBMC 升级到 openUBMC,却无法“重新刷”openUBMC?

这是因为:

  • 初始从 iBMC 升级到 openUBMC 是一次“跨平台迁移”,系统将 openUBMC 视为新主版本写入备用分区。
  • 而再次刷入一个看似“相同版本”但内容不同的固件时,系统可能因防篡改机制拒绝接受,或在启动校验阶段失败,从而回退至已知正常的原版本(即 iBMC)。

:books: 总结

项目 内容
问题本质 固件包被修改但未合规重建和签名 → 升级后启动失败 → 自动回退至 iBMC
根本原因 签名验证失败 / 启动异常触发系统级回退机制
技术机制 双固件分区 + 自动恢复(roll-back)+ 安全校验(Secure Boot)
推荐做法 所有固件修改必须通过标准 SDK 构建并签名,严禁直接编辑 HPM 文件

:end_arrow: 结论:您观察到的现象并非异常,而是系统安全性设计的正常表现——防止非法或损坏固件长期驻留设备


如需进一步排查,请提供串口启动日志中的关键错误信息(如 Failed to start XXX, Signature verification failed, Rolling back... 等),可帮助精准定位具体失败环节。

相关链接:

  1. V2版本iBMC直接升级到openUBMC 25.09后回退失败
  2. 升级到openUBMC后,CPU侧无法检测到对应的BMC的存在
  3. 真机固件升级求助
  4. iBMC升级到openUBMC 25.09后,CPU侧无法启动
  5. CSR配置字典之FirmwareComponentInfo类 | 文档中心 | openUBMC

请附一下图以及相关日志。
目前iBMC版本与UBMC版本无法直接互升,如果按描述中说UBMC25.09上升UBMC版本,主备都是UBMC,不可能会出现iBMC版本。

确认版本是否回退可通过以下两点确认:
1.版本号是否与您构建的包相同(web首页或固件升级-版本信息界面即可看到固件版本信息)
2.如果备分区版本和主分区版本一致,则可以确认构建时间是否为您出的升级包的时间(命令ipmcget -d version,查看Active分区的构建时间)

这个帖子不是说明iBMC是可以直接升级的吗? v2升级openubmc指导

你好!这个链接的信息可能对你解决本问题有所帮助,请参考,谢谢!