无签名UBMC上无法继续更新BMC固件

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

openUBMC 固件升级失败问题分析与解决方案

根据您提供的环境信息、错误日志及操作描述,在 openUBMC 系统上无法成功更新 rootfs_openUBMC.hpm 固件包的问题可以被清晰地定位。以下是基于知识库信息的综合分析、根本原因推断和解决方案建议。


:magnifying_glass_tilted_left: 问题摘要

  • 现象:在 openUBMC Web 界面导入固件包 rootfs_openUBMC.hpm 后,升级失败。
  • 错误信息:日志显示:
    secure_tar_unzip failed: -3003
    parse package(rootfs_openUBMC.hpm) failed, ret:./opt/bmc/libmc/lualib/mc/utils.lua:1215: cannot open v2 persistence file.
    
  • 环境
    • 软件版本:OpenUBMC2512(推测)
    • 工具版本:bingo 0.6.120, conan 2.13.0
    • 操作系统:Ubuntu 24.04
    • 固件包类型:rootfs_openUBMC.hpm(OpenUBMC 根文件系统 HPM 包)

:puzzle_piece: 根本原因分析

:cross_mark: 核心错误:secure_tar_unzip failed: -3003

该错误码 -3003 通常在 openUBMC 的 mc.utils.secure_tar_unzip 接口中表示 解压失败或防 zip 炸弹(zip bomb)检查未通过

:pushpin: secure_tar_unzip 函数说明(来自知识库文档):

  • 功能:安全解压 gzip/bzip2 压缩包。
  • 参数包含对 解压后总大小文件数量上限 的检查。
  • 如果解压前预估的文件总大小或数量超出限制,则返回失败,防止 zip 炸弹攻击。

因此,-3003 错误很可能是因为:

  • 固件包过大,超过系统设定的解压大小限制。
  • 固件包中包含过多文件,导致文件数量超限。
  • 固件包本身损坏或格式异常(如压缩方式不兼容)。

:warning: 关键线索:cannot open v2 persistence file

此错误来自 Lua 工具库 mc.utils 的内部函数 1215 行,表明固件包虽然签名验证通过,但在解析持久化数据(persistence data)时失败

结合上下文:

  • 该函数在升级流程中负责解析 HPM 包内容。
  • 固件包 rootfs_openUBMC.hpm 可能为 v2 版本的包结构,但当前运行环境或工具链 不完全兼容 v2 包的持久化机制
  • 特别是在 OpenUBMC2512 这类新版本中,对固件包结构和签名机制有更严格的要求,若构建过程未正确配置,可能导致此类运行时错误。

:counterclockwise_arrows_button: 升级流程断点分析

从日志可还原升级流程:

步骤 日志输出 状态
1. 文件上传 upload content length: number 76868778 :white_check_mark: 成功
2. 任务创建 Create task[Id: ...] successfully :white_check_mark: 成功
3. 签名验证 Validate signature successfully :white_check_mark: 成功
4. 搬移文件 move file [rootfs_openUBMC.hpm] from tmp to shm :white_check_mark: 成功
5. 解压缩与解析 secure_tar_unzip failed: -3003 :cross_mark: 失败
6. 包解析失败 parse package(...hpm) failed :cross_mark: 终止

:right_arrow: 失败发生在“解析固件包”阶段,早于任何实际升级动作,说明问题在于 包的格式、完整性或兼容性,而非权限或硬件问题。


:hammer_and_wrench: 可能原因总结

原因 说明 支持证据
:white_check_mark: 固件包过大触发安全限制 secure_tar_unzip 对大小/数量有限制,-3003 是典型超限错误 知识库中 utils.secure_tar_unzip 文档明确说明约束机制
:white_check_mark: HPM 包使用了不兼容的 v2 持久化结构 cannot open v2 persistence file 直接指向解析失败 -3003 错误码、secure_tar_unzip 调用栈
:warning: 固件包构建不兼容当前平台 使用旧版工具链或配置错误导致 persistence v2 文件无法打开 cannot open v2 persistence file 错误
:warning: 签名虽通过但包内容损坏 包签名正确,但内部文件结构异常或压缩不完整 日志显示签名通过但解析失败
:cross_mark: 非签名问题 日志明确显示 Validate signature successfully 排除证书或签名错误

:white_check_mark: 解决方案与建议

:white_check_mark: 1. 检查并调整解压限制配置

确认 secure_tar_unziptoobig_sizetoomany_num 限制是否过小。建议:

  • 查看固件管理配置文件(如 update_ext4.cfg 或相关 Lua 配置),增加解压限制。
  • 或使用 before_unzip_check 工具手动检查包的解压大小和文件数。

:white_check_mark: 2. 验证固件包完整性与构建方式

  • 使用标准流程重新构建包
    • 确保使用与 OpenUBMC2512 兼容的 bingoconan 工具版本。
    • 参考《签名包制作指导》进行正确签名。
  • 检查构建日志是否完整:确保无警告或错误,特别是关于 persistencev2 相关的字段。

:white_check_mark: 3. 使用 hpm 工具离线验证包

在 PC 上使用 openUBMC 提供的 hpm 工具解包并检查内容:

hpmtool -x rootfs_openUBMC.hpm -o ./unpacked/
  • 检查是否能成功解压。
  • 验证 persistence 目录是否存在且格式正确。

:white_check_mark: 4. 尝试 CLI 命令行升级(绕过 Web 前端限制)

有时 Web 前端存在缓存或 UI 限制,可尝试通过 SSH 登录 BMC,使用 CLI 命令升级:

# 示例(具体命令以 openUBMC 文档为准)
firmware_upgrade start /tmp/rootfs_openUBMC.hpm --force

并观察更详细的日志输出。

:white_check_mark: 5. 升级 openUBMC 固件管理组件

若问题普遍存在于多个版本包,可能是固件管理服务 (firmware_mgmt) 存在 Bug。建议:

  • 升级至最新稳定版(如 25.1225.06 参考版本)。
  • 检查 openUBMC 论坛是否存在类似 Bug 报告(如“OpenUBMC2506 BMC Firmware Upgrade Failure”)。

:books: 参考资料与进一步排查


:white_check_mark: 总结

项目 内容
问题类型 固件包解析失败
根本原因 固件包过大或结构异常导致 secure_tar_unzip 安全检查失败,无法打开 v2 持久化文件
解决方案 调整解压限制、验证包完整性、使用标准工具重建包、CLI 升级验证
是否签名问题 否(日志显示签名已通过)

:light_bulb: 建议立即操作:使用 hpmtool 解压包,确认是否能在本地打开。如本地可解压,则问题极可能是 BMC 系统的解压策略过于严格,应调整 toobig_size 参数。

相关链接:

  1. 我按照“从零开始,玩转openUBMC”搭建环境没有hpm_signer工具,怎么制作和生成过度包?
  2. 白牌包定制指南,编译未生成wbd/wbd_output.zip
  3. OpenUBMC2506 BMC固件升级失败
  4. https://discuss.openubmc.cn/t/topic/4122
  5. https://www.openubmc.cn/docs/zh/development/api/framework_api/utils