25.12版本升级,显示成功后回滚到之前升级的一个版本

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

:white_check_mark: 总结

您遇到的问题是典型的 “升级成功但回滚” 现象,由构建包与运行环境不一致引发,触发了 BMC 的自动回滚机制。

根本原因在于:构建配置不当 → 关键服务缺失/启动失败 → 自动回滚 → 回到旧版本。

:white_check_mark: 最佳实践建议:

  1. 使用官方 release manifest;
  2. 构建时加 -bt=release
  3. 升级前 clearcfg
  4. 查看串口日志定位真实错误;
  5. 必要时临时禁用回滚机制。

完成上述流程后,升级应能稳定生效。

如问题持续,请提供 完整串口日志 + HPM 包 SHA256 值OpenUBMC 官方论坛,我们将进一步协助排查。

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

openUBMC 25.12 LTS SP1 升级后自动回滚至旧版本问题分析与解决方案

根据您提供的详细信息,您的系统在执行 openUBMC 25.12 LTS SP1 版本升级时,虽然 Web 界面显示“升级成功”,但设备重启后自动回滚至之前的版本(如 openUBMC 0507 和 S920X20 0509)。以下基于 知识图谱(KG)文档片段(DC) 以及 搜索结果 进行综合分析,并提供系统性解决方案。


:magnifying_glass_tilted_left: 问题本质

固件升级虽报告成功,但由于关键服务启动失败或校验异常,触发系统自动回滚机制,导致 BMC 切换回原分区的旧版本固件。

这种现象被称为 Version Backtrack(版本回退),是 Auto Rollback(自动回滚)机制 的典型表现。


:puzzle_piece: 根本原因分析

结合多源信息,可确定如下根本原因:

1. 关键服务未正常启动,触发启动检测失败

  • 知识图谱证据:

    • Auto RollbackUpgrade Failure 触发。
    • Automatic Rollback 是当核心服务(如 Redfish、Web Backend)无法初始化时,系统行为。
    • 文档片段 #1 明确指出日志中出现:
      [redfish]StartupCheck failed
      [web_backend]StartupCheck failed
      
      表明关键组件未注册到 D-Bus,被 maca(启动监控模块)判定为异常。
  • 结论:

    • 新编译的镜像可能缺少关键服务描述文件(.service 文件),或其依赖未正确打包。
    • 即使部分服务最终恢复,早期检查失败已触发回滚逻辑。

2. 构建配置不一致或签名/验证冲突导致运行时异常

  • 知识图谱 & 搜索结果佐证:

    • 搜索结果 #1 提到:“rootfs tmp verify fail, ret:-22” → rootfs 镜像尺寸与分区不匹配
    • 搜索结果 #4 显示签名校验失败(code 88200004)导致升级失败并禁止回退。
    • DC2 日志显示:mismatched command /bin/tar, execve: mismatched command,提示 安全策略拦截系统调用(如 SELinux、签名校验)。
    • DC5 提到 release 包因 crc 校验失败 回退。
  • 结论:

    • 若您使用的 manifest 或 SDK 来源于非标准源,可能导致:
      • 文件系统大小与分区定义不符;
      • 签名机制不兼容;
      • 构建出的组件未经过完整 release 优化,残留 debug 行为。

3. 双分区验证失败,激活新分区失败

  • 搜索结果 #1 分析精辟:

    M3 固件层检测到 tmp region rootfs 尺寸不匹配,导致 rootfs 校验失败(ret:-22),active 分区未更新。重启后主备分区均不可用,触发回滚机制。

  • 知识图谱印证:

    • Upgrade Failure 可发生于 write bmc package to flash failed 阶段。
    • Quick Rollback Mechanism 包含“文件恢复、配置还原、服务重启”流程。

4. 缓存与构建一致性问题

  • 您尝试删除本地 Conan 仓并回退 manifest 修改仍无效。
  • 知识库提示:
    • openubmc_25.12 是 Conan SDK 仓库,若本地缓存污染或未强制清理,即使重新构建也可能复用旧组件。
    • 使用 bingo build -bt=release 才能确保构建 release 版本(见 DC7)。

:white_check_mark: 解决方案与建议步骤

:repeat_button: 推荐操作顺序(逐级排查)

步骤 操作内容 目的
1 清空所有本地缓存 防止使用旧组件
2 使用官方 clean manifest 构建 release 包 排除定制干扰
3 升级前执行 clearcfg(清根) 避免旧配置影响新版本启动
4 临时禁用自动回滚机制 便于观察真实失败原因
5 升级并查看串口日志 定位具体服务/校验失败点
6 确认无误后重新启用自动回滚 恢复生产环境可靠性

:hammer_and_wrench: 具体执行方法

:white_check_mark: 步骤 1:彻底清理本地构建环境

# 删除 conan 缓存
conan remove "*" -f

# 清理 bingo 构建产物
bingo clean --all

# 删除临时目录
rm -rf /tmp/openubmc_build /dev/shm/upgrade

:pushpin: 关键点: 必须确保使用的是 br_release_openUBMC2512_20261231_LTS_SP1 分支的纯净代码。


:white_check_mark: 步骤 2:使用标准流程构建 Release 版本

# 构建 release 包(必须指定 -bt=release)
bingo build -b openUBMC -r openubmc_dev -bt release

# 打包 HPM 文件
bingo packethpm

:warning: 注意: debug 构建可能带调试服务导致行为差异,版本发布必须用 -bt=release(见 DC7)。


:white_check_mark: 步骤 3:升级前清根(clearcfg)

通过命令行或 BMC 工具清除当前配置:

# 登录 BMC 后执行
ipmcset -d clearcfg

目的: 解决因配置版本不兼容导致的服务启动失败,如 product_mgmt 启动报错 “unknown object path error on the dbus”。


:white_check_mark: 步骤 4:临时禁用自动回滚机制

通过串口或调试接口关闭自动回滚功能,避免升级后立即切换:

# 禁用快速回滚机制
echo "disable_quick_rollback" > /proc/bmc_upgrade/control

或通过内核参数 rollback_disabled=1 临时关闭。


:white_check_mark: 步骤 5:升级并观察串口日志(最关键步骤)

  • 使用新构建的 .hpm 包进行升级;
  • 观察串口输出(波特率通常为 115200);
  • 重点关注以下信息:
    [maca] StartupCheck failed for redfish
    [firmware_mgmt] verify signature error
    [FWUPD] rootfs tmp verify fail, ret:-22
    [bmc_upgrade] decompress_img.lua: Failed to exec /bin/tar
    

:light_bulb: 建议: 录制完整串口日志,上传至论坛以供进一步分析。


:white_check_mark: 步骤 6:检查 rootfs 分区与镜像大小是否匹配

  • 获取新镜像的实际大小:
    ls -l build/images/rootfs.img
    
  • 检查 MTD 分区表中 rootfs_arootfs_b 的大小是否足够容纳该镜像。
  • 若镜像大于分区 → 修改 DTS 或分区表,重新打包。

:receipt: 附加建议

建议项 说明
:check_mark: 使用一键日志收集工具 收集 app.log, framework.log, m3_log, kernel log 打包上传
:check_mark: 检查 manifest.yml 是否声明所有必要组件 确保包含 redfish, web_backend, dcmid 等服务
:check_mark: 启用 manufacture 模式构建用于调试 便于调试签名与启动过程
:check_mark: 论坛求助时提供 SHA256 哈希值 方便他人验证包完整性

:paperclip: 参考资料与链接


:white_check_mark: 总结

您遇到的问题是典型的 “升级成功但回滚” 现象,由构建包与运行环境不一致引发,触发了 BMC 的自动回滚机制。

根本原因在于:构建配置不当 → 关键服务缺失/启动失败 → 自动回滚 → 回到旧版本。

:white_check_mark: 最佳实践建议:

  1. 使用官方 release manifest;
  2. 构建时加 -bt=release
  3. 升级前 clearcfg
  4. 查看串口日志定位真实错误;
  5. 必要时临时禁用回滚机制。

完成上述流程后,升级应能稳定生效。

如问题持续,请提供 完整串口日志 + HPM 包 SHA256 值OpenUBMC 官方论坛,我们将进一步协助排查。