openUBMC版本号自定义不生效问题分析
更新时间: 2026/06/02
在Gitcode上查看源码

问题背景

  • 单板类型:NA
  • 软件版本:openUBMC 26.04。
  • 涉及功能:定制版本号。
  • 触发条件:manifest.yml中添加show_version字段。
  • 业务表现:预期版本号变更;实际版本号未生效。

问题复现步骤

按新增产品文档在manifest.yml中添加show_version字段:

base字段:

json
base:

version: “26.04.24.14
show_version: “1.002.0000001.0.260428

tosupporte字段:

json
tosupporte:
default:
package_name: “openUBMC/openUBMC-DH_${version}.zip”
build_type: release
show_version: “1.002.0000001.0.260428

编译命令:

text
bmcgo publish -bt=release --stage stable -b openUBMC

编译成功,升级该固件后BMC主页显示BMC版本还是26.04.24.14.

关键日志信息

BMC升级操作日志

text
2025-04-09 13:54:12 WEB,user@x.x.x.x,web_backend,Upload file(rootfs_openUBMC.hpm) successfully
2025-04-09 13:54:12 WEB,user@x.x.x.x,firmware_mgmt,Upgrade rootfs_openUBMC.hpm started
2025-04-09 13:55:39 WEB,user@x.x.x.x,bmc_upgrade,Register BMC active action successfully
2025-04-09 13:55:39 WEB,user@x.x.x.x,firmware_mgmt,Upgrade (BMC) with (rootfs_openUBMC.hpm) from version(26.04.24.14) successfully
2025-04-09 13:55:44 WEB,user@x.x.x.x,maca,Reset BMC start
2025-04-09 13:55:46 WEB,user@x.x.x.x,firmware_mgmt,Reset BMC caused by upgrade successfully
2025-04-09 13:55:54 WEB,user@x.x.x.x,maca,Reset BMC successfully

升级后的BMC,使用命令cat /etc/version.json 查询版本号:

json
{"Version": "14.24.04.26", "BuildNum": "26", "ReleaseDate": "15:58:52 Feb 5 2025", "BMCSDKVersion": "5.10.0.1", "openUBMCVersion": "26.04"}

定位过程

  1. 在 openUBMC 构建系统中,manifest.yml 中的 show_version 通常用于:

    • 定义输出包的命名格式(如 HPM、ZIP 文件名)
    • 作为构建过程中的元数据标识

    但 show_version 并不会自动注入到 BMC 运行时的版本信息中。BMC 主页上显示的“BMC版本”来源于运行时组件读取的版本字符串,通常来自以下位置之一:

    • /etc/version.json
    • version.xml
    • 固件内部硬编码字段
    • bmc.kepler.Systems.Sms.Sms.Version 等 D-Bus 接口暴露的属性

    因此,仅修改 manifest.yml 的 show_version 不会影响最终界面显示的版本号。

  2. version.json 是 openUBMC 构建系统中用于存储和同步版本信息的关键配置文件,路径通常为:

    build/rootfs/etc/version.json

问题原因

修改 manifest.yml 的 show_version 仅影响包命名,不能改变运行时的版本。BMC Web界面显示的版本号实际上是从 version.json 中读取的 openUBMCVersion 字段决定的,而非 manifest.yml 的 show_version。

解决方案

要使自定义版本号(如 1.002.0000001.0.260428)在 BMC 界面正确显示,需完成以下步骤:

  1. 在构建流程中(如 build.sh 或定制化脚本),添加逻辑以覆盖默认的 version.json:

    json
    cat > ${BUILD_ROOT}/rootfs/etc/version.json << EOF
    {
    "openUBMCVersion": "1.002.0000001.0.260428",
    "BMCSDKVersion": "5.10.0.0"
    }
    EOF
  2. 验证最终镜像中是否包含正确版本

    • 解压生成的 .hpm 或挂载 rootfs.img,检查文件:/etc/version.json
  3. 通过接口或命令验证运行时版本

    • 通过 D-Bus 查看版本接口:
    bash
    busctl get-property bmc.kepler.Systems.Sms.Sms Version
    • 查看版本文件:
    bash
    cat /etc/version.json