930代码BMC从装备包升级到上网包失败

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

问题描述

基于930基线出的BMC固件包,从装备包升级到上网包时出现失败

环境信息

  • 软件版本:openUBMC2509

  • 硬件配置:主板S920X20

重现步骤

  1. [第一步]
    升级到装备包,跑老化测试

  2. [第二步]
    老化测试结束,从装备包升级到上网包失败

期望结果

可以正常从装备包升级到上网包

实际结果

直接升级报了如下错误

2026-03-04 01:56:07.507081 firmware_mgmt NOTICE: file_transfer.lua(174): move_file_s ok:true, err:0
2026-03-04 01:56:07.999442 firmware_mgmt NOTICE: validate_sign.lua(195): verify signature successfully
2026-03-04 01:56:08.000293 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
2026-03-04 01:56:08.002030 firmware_mgmt NOTICE: hpm_package.lua(782): ManufacturerValidateEnabled is false, there is no need to validate manufacture_id.
2026-03-04 01:56:08.049364 firmware_mgmt NOTICE: hpm_package.lua(582): parse cfg file successfully, Version:55.05.01.07 FileNum:2
2026-03-04 01:56:08.049936 firmware_mgmt NOTICE: hpm_package.lua(456): get obj table: 0x5bbd097d0ba0 for Id=25
2026-03-04 01:56:08.052385 firmware_mgmt NOTICE: hpm_package.lua(463): get obj table: 0x5bbd097d0ba0 for Id=25
2026-03-04 01:56:08.053027 firmware_mgmt NOTICE: hpm_package.lua(474): get obj table: 0x5bbd097d0ba0 for Id=25
2026-03-04 01:56:08.053656 firmware_mgmt NOTICE: hpm_package.lua(413): System product info:ProductId(0), ProductVendorID(0x00000001), ProductUniqueID(0x030ABF00)
2026-03-04 01:56:08.054087 firmware_mgmt NOTICE: hpm_package.lua(327): check product id successfully
2026-03-04 01:56:08.054634 firmware_mgmt ERROR: utils.lua(261): MatchRules[BiosInPostStateBMC] exist, FirmwareType[BMC] is not allowed upgrade now
2026-03-04 01:56:08.055088 firmware_mgmt ERROR: hpm_package.lua(598): Package file does not match the device
2026-03-04 01:56:08.055506 firmware_mgmt ERROR: action.lua(41): Unpack package failed
2026-03-04 01:56:08.055883 firmware_mgmt ERROR: task_instance.lua(185): parse package(TS02F-F50_S920X20_openUBMC_55.05.01.07.B001.hpm) failed, ret:FirmwareFileMismatch.
2026-03-04 01:56:08.065826 web_backend NOTICE: base.lua(518): processing_flow_1 foreach_1 timeout,[path=/bmc/kepler/UpdateService, interface=bmc.kepler.UpdateService], t1=1772589366146, t2=1772589368065, time=1919
2026-03-04 01:56:08.158584 firmware_mgmt NOTICE: task_mgmt.lua(174): task[Id: 2034067995, StartTime: 2026-03-04T01:56:05+00:00, Progress: 0, State: Exception] will be destroyed after 10 minutes
2026-03-04 01:56:08.159642 firmware_mgmt NOTICE: task_mgmt.lua(443): Update task[Id: 2034067995, StartTime: 2026-03-04T01:56:05+00:00, Progress: 0, State: Exception] successfully
2026-03-04 01:56:08.166516 firmware_mgmt ERROR: state_handle.lua(115): not find state obj
2026-03-04 01:56:09.059596 firmware_mgmt WARNING: listen_cpu_idle.lua(81): cpu idle rate : 63.376623376623
2026-03-04 01:56:09.096635 network_adapter NOTICE: ncsi_comm.lua(277): ncsi: Basic init success_port_cnt = 0, port_num = 4

尝试过的解决方案

回退到过渡包之后再升级上网包可以正常升级

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

:white_check_mark: 总结

项目 内容
问题类型 固件升级模式冲突
本质原因 从 manufacture 装备包无法直接升级到非 manufacture 上网包
根本机制 BMC 升级策略中的 MatchRules[BiosInPostStateBMC] 阻止非法模式切换
推荐解法 使用 ipmcset -t manufacture -d finish 正式退出装备模式
临时绕行 回退至过渡包后再升级上网包
点击此处查看详细分析解答

S920X20 主板从装备包升级至上网包失败问题分析与解决方案

根据您提供的详细日志和环境信息,针对 S920X20 主板在 openUBMC2509 环境下,使用 930 基线代码构建的固件包从“装备包”升级到“上网包”失败 的问题,结合上下文知识库与日志分析,现提供以下详尽的技术解析与解决方案。


:magnifying_glass_tilted_left: 问题描述

  • 设备型号:S920X20(华为 TaiShan 系列服务器)
  • BMC 固件版本:openUBMC2509
  • 升级操作:从基于 manifest.yml 配置为 manufacture 模式 的“装备包”尝试直接升级到非 manufacture 模式的“上网包”
  • 错误现象
    ERROR: utils.lua(261): MatchRules[BiosInPostStateBMC] exist, FirmwareType[BMC] is not allowed upgrade now
    ERROR: hpm_package.lua(598): Package file does not match the device
    ERROR: action.lua(41): Unpack package failed
    ERROR: task_instance.lua(185): parse package(...) failed, ret:FirmwareFileMismatch
    

:bar_chart: 核心日志分析

从关键日志片段可以定位问题本质:

2026-03-04 01:56:08.054634 firmware_mgmt ERROR: utils.lua(261): MatchRules[BiosInPostStateBMC] exist, FirmwareType[BMC] is not allowed upgrade now

这表明系统中存在 升级匹配规则(MatchRules)阻止了本次升级。此规则通常由前期“装备流程”或特定构建配置引入。

进一步信息:

System product info: ProductId(0), ProductVendorID(0x00000001), ProductUniqueID(0x030ABF00)

说明系统已识别硬件身份为 S920X20 平台(ID 匹配已知 ProductUniqueID: 0x00000001030ABF00),但升级仍被拒绝,说明不是 ID 不匹配问题,而是状态或配置冲突


:warning: 问题根本原因

:white_check_mark: 直接原因:

当前系统仍处于 “装备状态”(Manufacturing Mode),而目标“上网包”是非 manufacture 模式的固件包。系统检测到这种模式变更不被允许,故通过 MatchRules 显式阻断升级。

关键机制说明

  • 当固件包以 manufacture: true 构建时(即“装备包”),会在 BMC 系统中标记为“制造阶段”。
  • 在该状态下,BMC 会启用一系列临时策略(如开放调试接口、不限制证书导入、开启 Telnet 等)。
  • 一旦进入该模式,后续升级仅允许“同模式”或显式“退出制造模式”的包才能继续
  • 尝试从 manufacture 包直接升级到普通 release 包(即“上网包”)时,触发安全校验失败,报错 FirmwareFileMismatch

:red_exclamation_mark: 深层原因:

  • 构建方式差异:装备包在 manifest.yml 中启用了 account: { manufacture: true },改变了系统启动行为和权限模型。
  • 状态残留:即使完成了老化测试,BMC 仍保留 manufacture 相关的状态标志位(如 NV 参数、MatchRules 规则等),未执行正式“出厂”切换。
  • 安全策略限制:openUBMC 平台设计为禁止从高权限的 manufacture 模式直接降级到 release 模式,防止非法绕过安全机制。

:puzzle_piece: 为什么回退过渡包后可成功升级?

您提到:

“回退到过渡包之后再升级上网包可以正常升级”

这恰好印证了上述分析:

  • “过渡包”通常是一个中立的、无 manufacture 标记的基础 openUBMC 镜像。
  • 回滚到该状态相当于 清除了 manufacture 模式遗留的状态信息
  • 此后再升级“上网包”即为标准 release → release 升级流程,不再受 MatchRules 限制。

:white_check_mark: 解决方案

:white_check_mark: 方案一:【推荐】使用标准“出厂”流程退出 manufacture 模式

目的:正规方式完成从“装备模式”向“量产模式”的切换。

操作步骤:

  1. 在老化测试结束后、现场部署前,执行“结束装备流程”操作

    • 方法:通过 Redfish API 或 IPMI 命令调用系统接口,清除 manufacture 标志。
    • 示例(通过 Redfish):
      POST /redfish/v1/Managers/bmc/Actions/Manager.FinishManufacture
      
    • 或通过 BMC 命令行工具:
      ipmcset -t manufacture -d finish
      
    • 执行后需重启 BMC。
  2. 验证状态是否退出 manufacture 模式

    • 查看 /tmp/run/identity.json 或查询 D-Bus 接口:
      busctl get-property bmc.kepler.SystemIdentity /bmc/kepler/SystemIdentity bmc.kepler.SystemIdentity ManufactureMode
      
      返回 false 表示已退出。
  3. 此时可安全升级“上网包”

:light_bulb: 提示:该 FinishManufacture 接口应在您的 SDK(bmc_sdk)中有定义,若无,请联系 openUBMC 社区或 PAE 提供支持。


:white_check_mark: 方案二:【临时修复】通过过渡包中转升级

适合已在现场、无法远程触发 FinishManufacture 的场景。

操作流程:

  1. 先将系统降级至一个 通用 openUBMC 过渡包(如 openubmc2509 标准版 HPM 包)。
  2. 重启 BMC,确保系统运行于 clean release 状态。
  3. 再上传并升级目标“上网包”。

:warning: 缺点:多一次重启,不适合频繁更新场景。


:white_check_mark: 方案三:【构建优化】将“上网包”也构建为 manufacture 模式(不推荐长期使用)

若必须连续升级,可将“上网包”也加上 manufacture: true,保持模式一致。

风险提示:

  • 存在安全隐患:可能导致生产环境保留 Telnet、默认密码等。
  • 不符合运营商入网要求。
  • 建议仅用于测试验证,生产环境禁用

:hammer_and_wrench: 附加建议与规避措施

建议项 说明
:white_check_mark: 明确区分装备包与上网包用途 装备包仅用于产线烧录和老化测试;测试完成后必须执行 FinishManufacture 流程
:white_check_mark: 自动化测试脚本中加入状态清理步骤 在老化测试结束脚本中自动调用 ipmcset -t manufacture -d finish
:white_check_mark: 检查 vpdboard_name 设置 manifest.ymlboard_name 错误设置为非 S920X20,会导致 root.sr 缺失,间接引发升级异常(参考文档:使用开源代码仓出包失败
:white_check_mark: 确认签名一致性 若使用自签名包,请确保过渡包与上网包使用同一套证书链,否则可能因根证书未导入导致“无效升级包”错误

:books: 参考资料依据

  1. Knowledge Graph 证据

    • S920X20openUBMC 的部署平台,其 ProductUniqueID 为 0x00000001030ABF00
    • openUBMC2509 是当前运行环境,支持通过 Lua 脚本(fw_pkg.lua)处理固件包验证。
    • BMC Firmware Upgrade 过程中若遇签名或配置问题,会报 Invalid Upgrade PackageFirmwareFileMismatch
  2. Document Chunks 支持

    • #3 描述了 UID 与 ProductUIDList 必须匹配,否则升级失败。
    • #8 明确指出:非 S920X20/openUBMC 等支持机型会导致 root.sr 缺失,影响后续自发现流程。
    • #1#5 表明,从 iBMC/V2 升级至 openUBMC 时,需注意签名、加密、manifest.yml 修改等问题。
  3. 外部知识佐证

    • “MatchRules” 是 openUBMC 固件管理系统中的策略控制机制,用于控制不同场景下的升级许可。
    • manufacture 模式是 openUBMC 社区标准功能之一,见于 bingo 构建文档。

:white_check_mark: 总结

项目 内容
问题类型 固件升级模式冲突
本质原因 从 manufacture 装备包无法直接升级到非 manufacture 上网包
根本机制 BMC 升级策略中的 MatchRules[BiosInPostStateBMC] 阻止非法模式切换
推荐解法 使用 ipmcset -t manufacture -d finish 正式退出装备模式
临时绕行 回退至过渡包后再升级上网包

:megaphone: 建议反馈路径

若您无法找到 FinishManufacture 接口或命令未生效,请:

  1. 收集以下日志提交给 openUBMC 社区或 PAE 支持团队:

    • /var/log/framework.log
    • /var/log/app.log
    • /tmp/run/identity.json
    • ipmcget -d manufacture
  2. 提供您的 manifest.yml 配置文件(脱敏后)。

我们建议在 CI/CD 流程中固化“装备流程结束”这一环节,避免类似问题重复发生。

报错信息是 BIOS Post阶段不允许升级,等待至POST阶段结束即可

您好,这边是进了OS之后才升级的BMC

请附一份一键日志收集

HengshanTS02F-F50_YS2B60201790_20260304-0156.txt (9.6 MB)
麻烦下载后,转成tar.gz格式

操作日志显示01:55:16刚重启OS,且升级操作日志上下都存在BIOS向BMC发送的IPMI命令的日志。
升级BMC时正处于POST阶段,不允许升级

2026-03-04 01:55:16 KVM,baixin@172.10.32.221,fructrl,Set FRU0 to forced system reset successfully
2026-03-04 01:55:16 KVM,baixin@172.10.32.221,remote_console,Set power state successfully
2026-03-04 01:55:28 IPMI,N/A@HOST,BIOS,Set BIOS version to 21.52E
2026-03-04 01:55:28 IPMI,N/A@HOST,ipmi_core,Set watchdog timer use to (BIOS/POST), action to (Hard Reset), timeout to (900) seconds, stop running successfully
2026-03-04 01:55:37 IPMI,N/A@HOST,fault_diagnosis,BIOS report memory SPPR resource info
2026-03-04 01:55:38 IPMI,N/A@HOST,fault_diagnosis,BIOS report memory ACLS resource info
2026-03-04 01:55:46 IPMI,N/A@HOST,BIOS,No need to apply patch!  ,
2026-03-04 01:56:03 IPMI,N/A@HOST,BIOS,Set TeeOS version to 1.1
2026-03-04 01:56:04 WEB,baixin@172.10.32.221,web_backend,Upload file(TS02F-F50_S920X20_openUBMC_55.05.01.07.B001.hpm) successfully
2026-03-04 01:56:05 WEB,baixin@172.10.32.221,firmware_mgmt,Upgrade TS02F-F50_S920X20_openUBMC_55.05.01.07.B001.hpm started
2026-03-04 01:56:07 IPMI,N/A@HOST,Compute,BIOS set chip bitwidth successfully
2026-03-04 01:56:08 WEB,baixin@172.10.32.221,firmware_mgmt,Upgrade (TS02F-F50_S920X20_openUBMC_55.05.01.07.B001.hpm) failed
2026-03-04 01:56:11 IPMI,N/A@HOST,BIOS,The request for getting BIOS Supervisor password is delivered
2026-03-04 01:56:11 IPMI,N/A@HOST,BIOS,The request for getting BIOS UserPassword password is delivered
2026-03-04 01:56:24 IPMI,N/A@HOST,BIOS,BIOS write file prepare successfully
2026-03-04 01:56:25 IPMI,N/A@HOST,BIOS,BIOS write file[resource_id:1a] finish successfully