装备测试过程中,概率性出现从来料版本BMC升级过渡包成功,升级伙伴BMC失败的问题

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

问题描述

装备测试过程中,概率性出现从华为版本BMC升级过渡包成功,升级自己BMC失败的问题

环境信息

  • 软件版本:[如 OpenUBMC2603]

  • 青春板机型

重现步骤

装备测试脚本升级,脚本使用ipmi命令

启动升级 run_cmd “f 0 30 91 db 07 00 06 AA 00 01 00 0E 2F 74 6D 70 2F 69 6D 61 67 65 2E 68 70 6D”

查询状态 run_cmd “f 0 30 91 db 07 00 06 00”

  1. 原始华为版本26.01.62.13,升级过渡包成功,版本为5.07.00.01

  2. 升级BMC失败,脚本中报查询状态失败

期望结果

实际结果

尝试过的解决方案

1、在正常BMC版本上手动执行ipmi命令升级BMC,可以正常查询升级状态

2、手动复现问题场景,过度包成功升级后,ipmi升级BMC后,异常重启,升级流程被打断,无法正常查询升级状态

3、web界面升级过度包、BMC都成功

分析结论

1、手动发了启动升级的ipmi命令之后,看着像是卡住了,日志如下

firmware_mgmt NOTICE: utils.lua(34): The file path is local.
2026-08-21 02:52:03.379384 firmware_mgmt NOTICE: init.lua(33): update status to FS_SIMPLE_UPGRADING.
2026-08-21 02:52:03.420153 firmware_mgmt NOTICE: task_service.lua(49): task create success, task id: 2379402632
2026-08-21 02:52:03.421189 firmware_mgmt NOTICE: fw_upgrade_ipmi.lua(204): IPMI call StartUpgrade method success, task_id(2379402632)
2026-08-21 02:52:03.494113 firmware_mgmt NOTICE: file_transfer.lua(142): start to move file [image.hpm] from tmp to shm
2026-08-21 02:52:04.438946 firmware_mgmt NOTICE: file_transfer.lua(147): move_file_s ok:true, err:0
2026-08-21 02:52:04.583417 firmware_mgmt NOTICE: validate_sign.lua(217): config cms sign enable:true
2026-08-21 02:52:04.592569 firmware_mgmt NOTICE: validate_sign.lua(138): the custom ca certificate is exist, load custom certificate
2026-08-21 02:52:04.671667 firmware_mgmt NOTICE: validate_sign.lua(159): verify signature successfully
2026-08-21 02:52:05.191139 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
2026-08-21 02:52:05.215451 bmc_core ERROR: kmc_file.c(82): read_tlv: tlv->len > read_buf_size
2026-08-21 02:52:05.219438 firmware_mgmt ERROR: C: [WSEC_CBB][778] (UTC) 2026-08-21 02:52:05 [SDP] Cipher header invalid with unexpected domain 2149614726.
2026-08-21 02:52:05.219718 firmware_mgmt ERROR: C: [WSEC_CBB][362] (UTC) 2026-08-21 02:52:05 [SDP] SdpDecryptInitPrepare failed 356.
2026-08-21 02:52:05.219855 bmc_core ERROR: kmc_file.c(317): kmc_get_plaintext: SdpDecryptInit failed, ret = 356.
2026-08-21 02:52:05.219889 bmc_core ERROR: kmc_file.c(348): file_decrypt: decrypt failed.
2026-08-21 02:52:05.274254 firmware_mgmt ERROR: hpm_package.lua(160): read from profile_en failed, generate new key and try again
2026-08-21 02:52:05.365132 firmware_mgmt ERROR: C: [WSEC_CBB][114] (UTC) 2026-08-21 02:52:05 Domain 9 not found.
2026-08-21 02:52:05.719002 firmware_mgmt NOTICE: hpm_package.lua(424): get obj table: 0x18aa3a5104e0 for Id=25
2026-08-21 02:52:05.723512 firmware_mgmt NOTICE: hpm_package.lua(393): System product info:ProductId(0), ProductVendorID(0x00000001), ProductUniqueID(0x030ABF00)
2026-08-21 02:52:05.725415 firmware_mgmt NOTICE: hpm_package.lua(307): check product id successfully
2026-08-21 02:52:05.727055 firmware_mgmt NOTICE: hpm_package.lua(332): check product uid successfully
2026-08-21 02:52:05.728927 firmware_mgmt NOTICE: hpm_package.lua(417): get obj table: 0x18aa3a5104e0 for Id=25
2026-08-21 02:52:05.733600 firmware_mgmt NOTICE: hpm_package.lua(439): hard_revision:0, soft_revision:0
2026-08-21 02:52:05.734875 firmware_mgmt NOTICE: hpm_package.lua(452): revision number check successfully. Target revision=(0, 0) and hpm revision=20
2026-08-21 02:52:08.401139 firmware_mgmt NOTICE: action.lua(47): Parse hpm package successfully
2026-08-21 02:52:08.401593 firmware_mgmt NOTICE: control.lua(237): upgrade_task file_name=image.hpm, FirmwareType=BMC, fw_num=1, UniqueIDList=table: 0x18aa41fb7fc0
2026-08-21 02:52:08.524732 firmware_mgmt NOTICE: info_mgmt.lua(71): create_info: info_key=1BMC, FirmwareType=BMC, task_id=2379402632
2026-08-21 02:52:08.736318 firmware_mgmt NOTICE: action.lua(85): public initialize action
2026-08-21 02:52:08.748304 firmware_mgmt NOTICE: info_mgmt.lua(169): info_key(1BMC) upgrade set_stage: INITIALIZE → DIFF_PREPARE, 5
2026-08-21 02:52:08.886852 general_hardware NOTICE: dpu_service.lua(481): [DPU] firmware_type:BMC
2026-08-21 02:52:09.108050 bmc_upgrade NOTICE: upgrade.lua(111): base_ver = 5.07.00.01, target_ver = 55.05.03.26
2026-08-21 02:52:09.111189 bmc_upgrade NOTICE: update_mgmt.lua(34): get_downgrade_allowed: DowngradeAllowed true
2026-08-21 02:52:09.124819 firmware_mgmt NOTICE: info_mgmt.lua(169): info_key(1BMC) upgrade set_stage: DIFF_PREPARE → COMMON_PREPARE, 5
2026-08-21 02:52:09.146578 firmware_mgmt NOTICE: action.lua(89): public prepare action
2026-08-21 02:52:10.291603 firmware_mgmt NOTICE: worker: start action in worker
2026-08-21 02:52:10.441612 firmware_mgmt NOTICE: worker: execute before action script successfully
2026-08-21 02:52:12.920951 firmware_mgmt NOTICE: info_mgmt.lua(169): info_key(1BMC) upgrade set_stage: COMMON_PREPARE → PROCESS, 15
2026-08-21 02:52:13.140935 firmware_mgmt NOTICE: control.lua(151): sys_id=1, fw_type=BMC, filename=/dev/shm/upgrade/2379402632/Firmware1
2026-08-21 02:52:13.906471 bmc_upgrade NOTICE: fw_decrypt_work.lua(80): start fw decrypt work

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

解决方案

根据知识库中的成熟案例,推荐以下解决步骤:

  1. 确认固件包类型与配置

    • 若自制包为社区包,需在打包配置中设置 community_enable: true,这样 BMC 在升级时会跳过加解密流程,直接升级。
    • 若自制包为非社区包(含自签名),则必须在制作包时进行正确的加解密处理,包括使用正确的密钥、证书以及加密算法。
  2. 参考已有指导文档

  3. 恢复环境方法(如果已陷入失败状态):

    • 先回滚到上一个可用的社区版本(如 25.00.00),重新刷入预置了密钥的社区过渡包,确保环境基础正确。
    • 然后重新制作并升级自己的 BMC 包,确保遵循上述加密规则。
  4. 避免并发升级冲突

    • 升级时检查 Upgrading_Flag 是否已清除(正常应为 false),避免残留升级任务干扰。可在日志中确认 init.lua(33): update status to FS_IDLE 出现后再开始新的升级。
  5. 若问题仍概率出现

    • 排查升级脚本中 IPMI 命令后的状态查询逻辑是否合理;手动复现时发现过渡包升级后 BMC 可能自动重启(日志显示 wait restart seconds:30000),这可能导致 IPMI 查询时序错乱。建议在升级命令后增加足够延时或轮询等待 BMC 完全就绪。

总结

综上,问题根源在于自制 BMC 固件包未正确设为社区包或未进行有效加密,导致解密阶段失败。通过调整包的配置(community_enable:true 或完善加解密流程),并结合第一次升级的 manifest 修改,即可解决。相关方案已在 openubmc 社区多次验证,可参考对应分析文档和指导帖子。

点击此处查看详细分析解答

问题描述

装备测试过程中,从华为版本 BMC 升级过渡包成功,但随后升级自己编译的 BMC 固件包时,概率性出现失败。失败时 IPMI 查询状态超时,日志中显示解密相关错误。

环境信息

  • 软件版本:openUBMC 26.03(用户环境)
  • 硬件平台:青春板机型
  • 升级流程:华为原始版本(如 26.01.62.13)→ 过渡包(升级成功,版本 5.07.00.01)→ 自制 BMC 包(版本 55.05.03.26,升级失败)

根因分析

根据提供的知识库信息,升级失败的原因可归纳为 固件包类型与加解密机制不匹配。具体分析如下:

  1. 过渡包升级成功:过渡包通常为社区版或预置了正确签名/密钥的包。社区包会跳过验签和加解密流程,因此可以成功安装。

  2. 自制 BMC 包升级失败

    • 日志中明确出现解密失败的错误链:
      bmc_core ERROR: kmc_file.c(82): read_tlv: tlv->len > read_buf_size
      firmware_mgmt ERROR: C: [WSEC_CBB][778] ... Cipher header invalid
      firmware_mgmt ERROR: C: [WSEC_CBB][362] ... SdpDecryptInitPrepare failed 356
      firmware_mgmt ERROR: hpm_package.lua(160): read from profile_en failed, generate new key and try again
      
    • 验签通过后(verify signature successfully),解包阶段解密失败。这表明该固件包被识别为非社区包(即需要执行加解密),但包本身未做正确加密,或者环境中缺少对应的解密密钥/证书。
  3. 根据知识库中类似问题的分析(Search Result 2 – “OpenUBMC2506 BMC固件升级失败问题分析”):

    “升级的固件包不是社区包又没有做包的加密。社区包会跳过验签和加解密,但是当前升级的固件包没标注是社区包(前面走了验签),但是又没加密,会导致升级失败。”

  4. 此外,Search Result 1 – “BMC固件升级失败问题分析” 指出:

    “此环境没有预置升级所需密钥文件……解决方案:先回滚到上一个版本(25.00.00),然后升一个过渡包(预置秘钥的社区包),再重新尝试升级。”

    在用户环境中,过渡包能成功,说明基本环境可工作,但自制包未能匹配正确的加密策略。

  5. 知识库实体 BMC 3.xx.xx.xx Version Upgrade to OpenUBMC 也强调:

    • 第一次升级需要在出包时修改 manifest.yml,设置 manufacture: true
    • 第一次升级成功后,后续可按社区版或自签名版本升级;
    • 升级失败或回退可联系 pae

    用户场景是从华为版本(类似 3.xx)升级到 OpenUBMC,过渡包相当于第一次社区包,而自制包可能是自签名或非社区包,需要正确处理加解密配置。

解决方案

根据知识库中的成熟案例,推荐以下解决步骤:

  1. 确认固件包类型与配置

    • 若自制包为社区包,需在打包配置中设置 community_enable: true,这样 BMC 在升级时会跳过加解密流程,直接升级。
    • 若自制包为非社区包(含自签名),则必须在制作包时进行正确的加解密处理,包括使用正确的密钥、证书以及加密算法。
  2. 参考已有指导文档

  3. 恢复环境方法(如果已陷入失败状态):

    • 先回滚到上一个可用的社区版本(如 25.00.00),重新刷入预置了密钥的社区过渡包,确保环境基础正确。
    • 然后重新制作并升级自己的 BMC 包,确保遵循上述加密规则。
  4. 避免并发升级冲突

    • 升级时检查 Upgrading_Flag 是否已清除(正常应为 false),避免残留升级任务干扰。可在日志中确认 init.lua(33): update status to FS_IDLE 出现后再开始新的升级。
  5. 若问题仍概率出现

    • 排查升级脚本中 IPMI 命令后的状态查询逻辑是否合理;手动复现时发现过渡包升级后 BMC 可能自动重启(日志显示 wait restart seconds:30000),这可能导致 IPMI 查询时序错乱。建议在升级命令后增加足够延时或轮询等待 BMC 完全就绪。

总结

综上,问题根源在于自制 BMC 固件包未正确设为社区包或未进行有效加密,导致解密阶段失败。通过调整包的配置(community_enable:true 或完善加解密流程),并结合第一次升级的 manifest 修改,即可解决。相关方案已在 openubmc 社区多次验证,可参考对应分析文档和指导帖子。

1、看着不是签名的问题,首先web是能升级成功的,而且装备升级也不是必现失败

2、AI分析日志,看着是发了这条ipmi命令后,卡住了。

启动升级 run_cmd “f 0 30 91 db 07 00 06 AA 00 01 00 0E 2F 74 6D 70 2F 69 6D 61 67 65 2E 68 70 6D”

3、和web上升级成功的日志对比

4、为什么ipmi升级后只有start,没有end,看着就是卡在这里了(下面是正常时候的打印,问题场景只有第一条

02:01:13 fw_decrypt_work.lua(80): start fw decrypt work
02:01:21 fw_decrypt_work.lua(105): end fw decrypt work, use time:7.889993

5、从web正常升级成功的日志里也有kmc相关报错,但是最终还是成功了

所以重点我认为还是在第4点里走ipmi升级,为什么会卡在fw_decrypt_work.lua(80): start fw decrypt work,没有end,涉及闭源代码了