V2升级openUBMC后,固件无法升级

当前是25.09版

技术人员指导更改rootfs_user中的dist/user_conf/rootfs/etc/rc.d/rc.start/firstboot.sh

添加了如下代码:

 date -s "2026-01-05 15:30:00"
 cp /opt/bmc/conf/SSL.p12 /tmp/SSL.p12
 sleep 150
source /etc/profile
ipmcset -t certificate -d import -v /tmp/SSL.p12 1 Admin@aa    eon456 > /tmp/cert_import.log

出包固件后,V2可以刷写当前更新的固件,版本为25.09.01.09

但是rootfs_user中的更改没有生效,tmp下没有log文件

此时我再更新25.09的其他固件包就无法更新了(25.09.1.28)

流程:

25.09.01.09上更新25.09.1.28,web界面显示更新成功,BMC重启

重启后版本依然是25.09.01.09

在os界面执行:ipmitool mc reset cold进行冷启动

启动完成后版本依然是25.09.01.09

整个流程的log如下

app.txt (1.8 MB)

提问:

1,为什么我对rootfs_user的更改没有生效

2,为什么固件没办法更新了,我想要更新固件要怎么做,ps:当前主区备区都是25.09.01.09

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

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

根据您的描述,您在将 V2 版本升级至 openUBMC 25.09 后,遇到了两个核心问题:

  1. rootfs_user 中的脚本修改未生效;
  2. 无法成功升级后续固件版本(如 25.09.1.28),即使 Web 界面显示“升级成功”,版本仍停留在 25.09.01.09。

以下基于您提供的上下文信息、知识图谱及技术文档,进行详细分析并提出解决方案。


一、为什么对 rootfs_user 的更改没有生效?

:magnifying_glass_tilted_left: 原因分析

根据知识库中关于 组件构建流程镜像生成机制 的信息:

  • rootfs_user 是一个 Conan 组件,在构建过程中与其他组件(如 webui, key_mgmt 等)合并生成最终的 rootfs_openUBMC.hpm 镜像包。
  • 构建命令 bingo build 会整合所有组件,并最终输出位于 manifest/output/ 目录下的 rootfs_openUBMC.hpm
  • 您所修改的文件路径:dist/user_conf/rootfs/etc/rc.d/rc.start/firstboot.sh,应属于 rootfs_user 组件的定制内容,其生效依赖于:
    • 是否正确地执行了完整的构建流程;
    • 是否将修改纳入了最终的镜像生成过程。

:white_check_mark: 关键证据支持:

【search result #6】构建制品定制化方案 指出:

  • 组件镜像合并顺序为:先各组件独立构建 → post_imagepost_rootfs → 生成完整 rootfs 镜像。
  • 若文件权限或内容需调整,应在 post_rootfs 阶段通过定制脚本处理。

如果您的修改只是在本地临时修改源码,但没有:

  • 提交到正确的 Git 分支;
  • 清理缓存重新构建;
  • build 过程跳过了 rootfs_user 的重新打包;

那么最终生成的 .hpm 包内并未包含您修改后的 firstboot.sh 脚本 —— 导致更改“看似存在”但实际上未被烧录。

此外:

  • /tmp/cert_import.log 不存在,说明 ipmcset -t certificate ... 命令根本没有执行;
  • 这进一步证明 firstboot.sh 没有运行或根本不存在于系统中

:white_check_mark: 解决建议:确保修改真正“入固件”

请按以下步骤操作以确保 rootfs_user 修改生效:

  1. 确认修改位置正确

    build/product/BMC/openUBMC/rootfs/etc/rc.d/rc.start/firstboot.sh
    

    确保您在此路径下修改的是参与构建的源文件,而非已部署系统的运行文件。

  2. 清理构建缓存

    bingo clean           # 清理临时文件
    rm -rf output/*       # 清空输出目录
    
  3. 重新构建完整固件包

    bingo build           # 确保 rootfs_user 被重新编译打包
    
  4. 验证输出包是否含修改
    可解压 rootfs_openUBMC.hpm(需工具如 hpmtool),检查其中是否包含您修改后的 firstboot.sh 文件。

  5. 可选:添加构建后验证脚本
    post_rootfs 阶段添加脚本验证文件是否存在、内容是否正确,防止构建“看似成功实则遗漏”。


二、为什么无法升级固件?重启后版本不变

:magnifying_glass_tilted_left: 问题现象总结

  • Web 界面提示“升级成功”;
  • BMC 重启、甚至冷启动(ipmitool mc reset cold);
  • 主备分区版本仍为 25.09.01.09,无法切换到新版本(如 25.09.1.28);

这表明:

固件虽然成功上传和写入,但“激活”或“生效”阶段失败


:pushpin: 可能原因分析(结合知识图谱与日志模式)

原因 1:升级后未正确注册到 firmware_mgmt 资源树

根据 【search result #2】升级常见问题指南#Q3

  • BIOS 或其他固件升级完成后,需确认是否已在 firmware_mgmt 中注册。
  • 检查资源树是否有新版本固件的信息条目。
  • 若没有,则说明 firmware_mgmt 未识别新版本,导致“假升级”。
# 登录 BMC 命令行,检查 firmware_mgmt 日志
cat /var/log/app.log | grep -i "upgrade\|firmware"

查找如下关键字:

  • "Upgrade completed"
  • "Validate signature successfully"
  • "Register component"
  • "status: COMPLETED"

若看到 CLEAR → PROCESSING → CLEAR 或直接失败,说明流程异常终止。


原因 2:签名验证失败 / 安全启动限制

知识库中多处提到:

  • 固件必须经过签名,否则会报“无效的升级包”;
  • 特别是在从自编译包升级时,易出现此类问题;
  • iBMC 在迁移到 openUBMC 时,需保证签名链一致。

您提到:

“出包固件后,V2 可以刷当前更新的固件”,说明 25.09.01.09 本身是可以被接受的 —— 但后续升级失败,可能是 25.09.1.28 未正确签名

:small_blue_diamond: 建议:

  • 使用社区提供的签工具(如 Bingo 的 signing module)对 .hpm 包签名;
  • 检查是否包含 Signature_Verify_CBB_Library 依赖项;
  • 查看日志中是否有:
    verify signature failed
    invalid upgrade package
    

原因 3:版本号未变更,系统认为已是最新版本

【search result #2】Q1 明确指出:

“版本号没变化请直接咨询子固件组件,固件管理不修改版本号内容。”

openUBMC 的 firmware_mgmt 模块 仅展示版本号,不主动更新它
如果您的新包(25.09.1.28)其内部版本标识仍为 25.09.01.09,系统将判定“无需升级”。

:small_blue_diamond: 解决方法:

  • 确保新固件包的版本号已通过 service.jsonversion.xml 正确设置;
  • 构建前检查版本字段是否递增;
  • 可手动查询当前版本:
    ipmcget -d v
    

原因 4:主备分区未正确倒换 / 升级策略错误

某些 BMC 系统采用 A/B 分区机制(主/备),升级时写入备用分区,重启后切换。

您当前“主备分区都是 25.09.01.09”,表明:

  • 要么升级操作写入的是同一个分区(未使用备用区);
  • 要么生效机制未触发分区切换;
  • 或升级被设计为“仅增量更新”,但检测逻辑错误。

:small_blue_diamond: 推荐检查:

  • 是否支持 主备分区倒换 功能;
  • 是否在升级完成后执行了“激活”操作;
  • 或尝试强制指定升级目标分区。

原因 5:系统文件损坏导致写入失败

从知识库 Firmware_Upgrade_Failure 描述可知:

“升级失败是因写入 flash 内存失败,mtd_api.write 方法阻塞”。

如果系统 MTD(Memory Technology Device)设备异常,可能导致:

  • 固件写入一半失败;
  • 重启后恢复旧版本;
  • 日志中出现超时或 I/O 错误。

三、解决方案与操作建议

:white_check_mark: 1. 验证当前构建流程完整性

步骤 操作
确认 firstboot.sh 修改位于 build/product/BMC/openUBMC/... 源路径
执行 bingo clean && bingo build 完全重建
解压输出的 .hpm 文件,检查 firstboot.sh 是否包含修改
确保 .hpm 包由社区签名工具签名

:white_check_mark: 2. 确保新固件版本号正确且唯一

  • 修改 service.jsonCHANGELOG.md 中的版本字段;
  • 例如升级为 25.09.1.28,确保构建时此值嵌入镜像元数据;
  • 查询方式:
    ipmcget -d v
    # 或查看 /etc/version 文件
    

:white_check_mark: 3. 检查 firmware_mgmt 是否正常处理升级

tail -f /var/log/app.log | grep -i firmware

关注日志中是否存在:

Upgrade (xxx.hpm) started
Validate signature successfully
[ERROR] ... failed to write ...
Upgrade completed
Register to resource tree

若发现错误,请根据具体报错定位组件(如 bmc_upgrade, mtd_api)。


:white_check_mark: 4. 尝试命令行升级方式(绕过 Web 前端 Bug)

Web 界面有时存在“假成功”提示。建议使用命令行升级验证:

# 将 .hpm 文件上传至 /tmp
scp TS02F-F50-S920X20-openUBMC-25.09.1.28.hpm root@bmc:/tmp/

# 登录 BMC 使用 ipmitool 或本地升级命令
ipmcset -t fwupdate -d upgrade -v /tmp/TS02F-F50-S920X20-openUBMC-25.09.1.28.hpm

观察返回码和日志输出。


:white_check_mark: 5. 确保升级前后清除旧状态

# 清除当前升级状态(避免残留)
ipmcset -t fwupdate -d clear

# 查看当前状态
ipmcget -t fwupdate -d status

避免处于 UPGRADINGERROR 状态导致新升级被拒绝。


:white_check_mark: 6. 检查证书导入脚本是否可执行

即使 firstboot.sh 被写入,也需保证:

  • 权限为可执行(chmod +x);
  • 所需目录 /opt/bmc/conf/ 存在;
  • ipmcset certificate import 命令语法正确;
  • SSL.p12 文件格式合法。

建议添加日志输出调试:

echo "$(date): 开始执行 firstboot.sh" >> /tmp/debug.log
echo "$(date): 复制证书..." >> /tmp/debug.log
cp /opt/bmc/conf/SSL.p12 /tmp/SSL.p12 && echo "复制成功" >> /tmp/debug.log || echo "复制失败" >> /tmp/debug.log
echo "$(date): 导入证书..." >> /tmp/debug.log
ipmcset -t certificate -d import -v /tmp/SSL.p12 1 Admin@aa eon456 >> /tmp/cert_import.log 2>&1
echo "$(date): 导入完成" >> /tmp/debug.log

然后查看 /tmp/debug.log 判断哪一步失败。


四、总结与建议

问题 原因 解决方案
rootfs_user 修改不生效 构建流程未重新打包或路径错误 清理缓存 + 重新构建 + 验证 .hpm 内容
无法升级到新版本 签名失败、版本号未变、firmware_mgmt 注册失败、分区未切换 检查日志、签名包、版本号、使用 CLI 升级
重启后版本不变 升级未真正写入或未激活 强制清除状态,尝试命令行升级
缺少 log 文件 脚本未运行 添加调试日志,确认 firstboot.sh 是否被执行

:wrench: 推荐操作流程

  1. 重新构建带修改的新固件包25.09.1.29),确保:
    • 包含 firstboot.sh 修改;
    • 已签名;
    • 版本号高于当前。
  2. 通过命令行升级
    ipmcset -t fwupdate -d clear
    ipmcset -t fwupdate -d upgrade -v /tmp/new_pkg.hpm
    
  3. 观察 /var/log/app.log 输出,确认是否完成 COMPLETED 状态。
  4. 重启后检查版本
    ipmcget -d v
    cat /etc/version
    
  5. 检查 /tmp/debug.log/tmp/cert_import.log 是否生成。

如仍失败,请提供 app.log升级时间段的日志片段,以便进一步定位 bmc_upgradefirmware_mgmt 的具体错误码。

相关链接:

  1. web上无法更新BIOS、BMC等固件包
  2. 我按照“从零开始,玩转openUBMC”搭建环境没有hpm_signer工具,怎么制作和生成过度包?
  3. 升级到openUBMC后,CPU侧无法检测到对应的BMC的存在
  4. OpenUBMC2506 BMC固件升级失败
  5. 固件升级机制及常见问题 | 文档中心 | openUBMC

你用社区版本 更新 社区 版本 需要将 manifest/目录下.bmcgo/config中的关于加密的配置给去掉,如果不是这个原因,那我也无能为力了

我这边.bmcgo/config的内容如下:

root@fd490fcb6e36:~/workspace/manifest# cat .bmcgo/config

指示当前仓库为manifest产品配置仓

[manifest]

manifest仓的根目录在.bmcgo同级目录

folder = ./

[conan]
version = 2.x.x

好像没有加密相关的东西

额,那你从V2升级直接升级到社区版本没报错吗?好像和我这边情况不太一样,那只能是用ipmcget -d d 一键收集日志了 ,看看能不能找到具体的原因

没有报错哎,我这边一键收集的日志log看不出来是什么原因,显示的重启生效但是重启回退版本了 :smiling_face_with_tear:

找找华为的技术支持问问吧,你这个情况和我这边的板卡上的情况还不一样

好滴

麻烦附一下一键日志收集,当前app.txt无法分析具体回退原因

方便发一个邮箱不,网页上传不了压缩包

发送至 linyao12@h-partners.com 即可

已发送,请查收,谢谢!

收到

日志版本号信息显示

------------------- openUBMC INFO -------------------
IPMC                   CPU:         Hi1711
IPMI               Version:         2.0
Active openUBMC    Version:         25.09.01.09
Active openUBMC      Build:         09
Active openUBMC      Built:         16:10:10 Jan 9 2026
Backup openUBMC    Version:         25.09.01.09
Available openUBMC Version:         25.09.01.09
Available openUBMC   Build:         09
Active Uboot       Version:         20.1.10.2 (11:42:47 Jun 18 2025)
Backup Uboot       Version:         20.1.10.2 (11:42:47 Jun 18 2025)
Active Secure Bootloader Version: 20.8.10.1 (20:33:51 Sep  8 2025)
Backup Secure Bootloader Version: 20.8.10.1 (20:33:51 Sep  8 2025)
Active Secure Firmware   Version: 20.8.10.1 (20:33:51 Sep  8 2025)
Backup Secure Firmware   Version: 20.8.10.1 (20:33:51 Sep  8 2025)
Active BMCSDK      Version:         5.10.0.1
----------------- Product INFO -----------------

日志中有如下记录

 Add firmware inventory successfully, Id:AvailableBMC, Name:AvailableBMC, Version:25.09.01.09, BuildNum:09, ReleaseDate:16:10:10 Jan 9 2026

可知当前日志下,三个分区版本号均为25.09.01.09,构建时间均为16:10:10 Jan 9 2026
如果出现回退,升级的包的版本号会刷新至Available openUBMC Version

因此怀疑,最后一次升级的包和最后一次升级时环境上版本为同一个包且版本均为25.09.01.09

上上次升级成功操作日志记录为

2000-01-02 04:23:56 WEB,Administrator@192.168.2.111,firmware_mgmt,Upgrade 0112_sign_bingo_2512.hpm started
2000-01-02 04:25:28 WEB,Administrator@192.168.2.111,bmc_upgrade,Register BMC active action successfully
2000-01-02 04:25:29 WEB,Administrator@192.168.2.111,firmware_mgmt,Upgrade (BMC) with (0112_sign_bingo_2512.hpm) from version(25.09.01.09) successfully

操作日志最后一次升级记录为

2026-01-19 01:06:27 WEB,Administrator@192.168.2.111,firmware_mgmt,Upgrade 0112_sign_bingo_2512(1).hpm started
2026-01-19 01:08:03 WEB,Administrator@192.168.2.111,bmc_upgrade,Register BMC active action successfully
2026-01-19 01:08:03 WEB,Administrator@192.168.2.111,firmware_mgmt,Upgrade (BMC) with (0112_sign_bingo_2512(1).hpm) from version(25.09.01.09) successfully

因此怀疑,升级的包0112_sign_bingo_2512.hpm0112_sign_bingo_2512(1).hpm 为同一个包,配置的版本号为25.09.01.09,且升级的包0112_sign_bingo_2512(1).hpm 没有出现回退

请帮忙确认:升级的包0112_sign_bingo_2512(1).hpm 配置版本信息是否为25.09.01.09

如果最后一次升级的升级包0112_sign_bingo_2512(1).hpm 并不是出现问题的包,请帮忙复现一次并再次收集日志,以便继续分析

你的意思是,从日志可以得出,我最后一次升级的包版本号是25.09.01.09是吗

0112_sign_bingo_2512.hpm版本号实际为25.09.01.12

方便的话,能发送一个升级包至邮箱吗?

好的稍等,我这边再复现收集一下日志

突然又能刷固件了。。。现在可以升级了

好的