BMC升级失败

问题描述

其它环境可以升级成功的BMC的hpm包在当前环境升级报错。
2026-03-22 16:58:06.590503 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
2026-03-22 16:58:06.592041 firmware_mgmt NOTICE: utils.lua(36): The file path is Local.
2026-03-22 16:58:06.598892 firmware_mgmt NOTICE: init.lua(79): Upgrading_Flag is true
2026-03-22 16:58:06.634233 firmware_mgmt NOTICE: init.lua(40): update status to FS_SIMPLE_UPGRADING.
2026-03-22 16:58:06.657593 firmware_mgmt NOTICE: task_mgmt.lua(287): Create task[Id: 1211934748, StartTime: 2026-03-22T16:58:06+08:00, Progress: 0, State: New] successfully
2026-03-22 16:58:06.662757 firmware_mgmt NOTICE: task_service.lua(59): task create success, task id: 1211934748
2026-03-22 16:58:06.663290 firmware_mgmt NOTICE: task_id_mgmt.lua(30): add serial task id(1211934748) successfully
2026-03-22 16:58:06.664545 firmware_mgmt NOTICE: tasks_scheduling.lua(121): start tasks processer
2026-03-22 16:58:06.759941 firmware_mgmt NOTICE: task_mgmt.lua(418): Update task[Id: 1211934748, StartTime: 2026-03-22T16:58:06+08:00, Progress: 0, State: Running] successfully
2026-03-22 16:58:06.814665 firmware_mgmt NOTICE: file_transfer.lua(141): start to move file [rootfs_openUBMC.hpm] from tmp to shm
2026-03-22 16:58:07.399124 firmware_mgmt NOTICE: file_transfer.lua(146): move_file_s ok:true, err:0
2026-03-22 16:58:09.795654 firmware_mgmt NOTICE: validate_sign.lua(195): verify signature successfully
2026-03-22 16:58:09.796908 firmware_mgmt NOTICE: action.lua(37): Validate signature successfully
2026-03-22 16:58:09.799150 firmware_mgmt NOTICE: hpm_package.lua(757): ManufacturerValidateEnabled is false, there is no need to validate manufacture_id.
2026-03-22 16:58:09.953728 firmware_mgmt NOTICE: hpm_package.lua(562): parse cfg file successfully, Version:25.06.01.07 FileNum:2
2026-03-22 16:58:09.954211 firmware_mgmt NOTICE: hpm_package.lua(450): get obj table: 0x4af25c1fb328 for Id=25
2026-03-22 16:58:09.956094 firmware_mgmt NOTICE: hpm_package.lua(457): get obj table: 0x4af25c1fb328 for Id=25
2026-03-22 16:58:09.957808 firmware_mgmt NOTICE: hpm_package.lua(468): get obj table: 0x4af25c1fb328 for Id=25
2026-03-22 16:58:09.958381 firmware_mgmt NOTICE: hpm_package.lua(415): System product info:ProductId(0), ProductVendorID(), ProductUniqueID()
2026-03-22 16:58:09.958710 firmware_mgmt NOTICE: hpm_package.lua(329): check product id successfully
2026-03-22 16:58:09.959424 firmware_mgmt ERROR: task_instance.lua(159): parse package(rootfs_openUBMC.hpm) failed, ret:./opt/bmc/libmc/lualib/mc/utils.lua:1215: ./opt/bmc/libmc/lualib/mc/logging.lua:253: bad argument #2 to ‘format_msg’ (number expected, got nil).
2026-03-22 16:58:10.050052 firmware_mgmt NOTICE: task_mgmt.lua(418): Update task[Id: 1211934748, StartTime: 2026-03-22T16:58:06+08:00, Progress: 0, State: Exception] successfully
2026-03-22 16:58:10.185230 firmware_mgmt ERROR: state_handle.lua(115): not find state obj
2026-03-22 16:58:11.299110 firmware_mgmt NOTICE: tasks_scheduling.lua(126): upgrade queue is empty, exit the tasks processer
2026-03-22 16:58:11.299566 firmware_mgmt NOTICE: tasks_scheduling.lua(138): stop tasks processer
2026-03-22 16:58:11.301086 firmware_mgmt NOTICE: active_fructl.lua(95): get host type is Singlehost
2026-03-22 16:58:11.301490 firmware_mgmt NOTICE: active_single_host_fructrl.lua(61): active_single_host_fructrl fructrl get power status
2026-03-22 16:58:11.306161 firmware_mgmt NOTICE: state_simple_upgrading.lua(101): simple upgraded, current active mode is:nil, wait restart seconds:360000
2026-03-22 16:58:11.310380 firmware_mgmt NOTICE: init.lua(40): update status to FS_IDLE.
2026-03-22 16:58:11.311682 firmware_mgmt NOTICE: init.lua(79): Upgrading_Flag is false
2026-03-22 16:58:25.298324 firmware_mgmt NOTICE: task_id_mgmt.lua(40): delete serial task id(1211934748) successfully
2026-03-22 16:58:25.298663 firmware_mgmt NOTICE: task_id_mgmt.lua(42): del serial task id(1211934748) successfully
2026-03-22 16:58:25.298992 firmware_mgmt NOTICE: task_instance.lua(100): destroy task info(id:1211934748) successfully

环境信息

  • 软件版本:OpenUBMC2509

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

总结

本次BMC升级失败的根本原因在于OpenUBMC2509版本中存在的日志格式化函数对空值处理不当的问题,属于软件内部逻辑缺陷。虽然固件包本身合法且签名有效,但由于运行时环境未能妥善处理边界条件,最终导致升级流程中断。建议优先通过BMC重启尝试恢复,并计划向更稳定的版本迁移以彻底规避此类问题。

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

BMC升级失败问题分析与解决方案

问题概述

当前环境在使用OpenUBMC2509版本时,无法成功升级原本在其他环境下可正常升级的BMC固件包(rootfs_openUBMC.hpm),导致升级失败。尽管该固件包在其他环境可以成功升级,但在当前环境中出现了处理异常。

问题分析

1. 故障关键日志点

从提供的日志信息中发现,升级流程在解析固件包阶段失败:

2026-03-22 16:58:09.959424 firmware_mgmt ERROR: task_instance.lua(159): parse package(rootfs_openUBMC.hpm) failed, ret:./opt/bmc/libmc/lualib/mc/utils.lua:1215: ./opt/bmc/libmc/lualib/mc/logging.lua:253: bad argument #2 to ‘format_msg’ (number expected, got nil)

这表明在执行parse package操作时,日志格式化函数format_msg接收到了一个nil值作为参数,而预期应为数字类型,从而导致了解析过程失败。

2. 升级流程执行情况

根据日志显示,升级流程前期正常:

  • 成功创建升级任务(Task ID: 1211934748)
  • 固件文件rootfs_openUBMC.hpm已从tmp目录移动到shm共享内存
  • 签名校验成功,说明固件包本身完整且签名有效
  • 型号匹配验证通过(check product id successfully
  • 制造商ID验证被禁用(ManufacturerValidateEnabled is false),跳过相关检查

3. 根本原因

此问题是由于固件管理系统内部代码逻辑缺陷所导致,具体表现为:

  1. 代码兼容性问题:在OpenUBMC2509版本中,hpm_package.lua与底层工具库(如logging.lua)之间存在兼容性问题。
  2. 空值处理缺陷:当某个预期为数值类型的参数为nil时,系统未能进行有效判断和容错处理,而是直接传递给format_msg函数,引发错误。
  3. 版本差异影响:虽然同一固件包在其他环境可升级成功,但可能因为目标环境的OpenUBMC版本或其他配置不同,未触发此边界条件。

解决方案建议

1. 基础排查措施

  • 确认固件包一致性:确保使用的rootfs_openUBMC.hpm在所有测试环境中完全一致(包括构建配置、签名方式等)。
  • 检查系统日志完整性:进一步查看app.logframework.log等关联日志,确认是否有前置组件初始化异常或服务启动失败的情况。

2. 技术应对方案

  • 升级OpenUBMC版本:考虑升级至更稳定的版本(如2512版本)。已有报告表明2512版本修正了多个传感器及系统稳定性问题(见entity 2512 Version)。
  • 修复空值处理逻辑:建议对logging.lua中的format_msg函数增加参数类型检查与默认值处理机制,避免nil值引发崩溃。
  • 启用制造商ID验证:临时启用ManufacturerValidateEnabled策略,增加额外的安全验证层,以排除非法或不匹配的包。

3. 恢复性操作

  • 重启BMC服务:类似"昆仑太科_安阳阳"用户报告的案例,有时通过重启BMC即可解决临时性状态异常问题,之后再次尝试升级可能成功。
  • 清理临时状态标志:确保Upgrading_Flag等状态标识正确清零,防止残留状态干扰新升级任务。

用户通知机制

根据系统设计,升级失败后应通过前端界面通知用户具体原因及建议措施。建议完善错误码映射机制,将底层Lua异常转换为可读性强的用户提示,例如:

“固件解析失败:系统日志模块异常,请联系技术支持获取详细日志信息。”

总结

本次BMC升级失败的根本原因在于OpenUBMC2509版本中存在的日志格式化函数对空值处理不当的问题,属于软件内部逻辑缺陷。虽然固件包本身合法且签名有效,但由于运行时环境未能妥善处理边界条件,最终导致升级流程中断。建议优先通过BMC重启尝试恢复,并计划向更稳定的版本迁移以彻底规避此类问题。