定制仓定制BMC版本号逻辑

问题描述

定制仓定制BMC版本号逻辑,如何取消定制版本号

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2512

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. 开启客户定制化(如Baidu)

  2. 重启BMC

  3. 查看版本号

期望结果

BMC版本号未被定制

实际结果

BMC版本号被定制

图片

定制仓中定义的版本号

图片

尝试过的解决方案

注释定制仓中定制版本号的步骤,发现版本号还是被定制

是要删除定制仓/build/customization.py和/dataset/version.json文件吗?

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

定制仓定制 BMC 版本号逻辑及取消方法

根据您提供的问题描述、环境信息和相关文档内容,以下是关于 定制仓中如何定制 BMC 版本号 以及 如何彻底取消该定制 的详细分析与解决方案。


:magnifying_glass_tilted_left: 问题分析

您在使用 OpenUBMC 2512 的定制仓进行客户定制(如 Baidu)时,发现即使注释了相关代码,BMC 的版本号仍被修改为定制值(1.59.01000000),而期望恢复为原始或默认版本号。

version.json 文件中可见:

{
    "BaseVersion": "25.03.00.01",
    "Version": "1.59.01000000"
}

说明:

  • BaseVersion 是基础版本号(来自上游代码);
  • Version 是最终生成的版本号,已被定制覆盖。

:pushpin: 定制仓中 BMC 版本号的来源与逻辑

1. 版本号定制机制

在 OpenUBMC 架构中,版本号通常通过以下方式被定制:

:white_check_mark: dataset/version.json 文件

  • 此文件是 版本信息的核心配置文件
  • 构建系统会读取此文件中的 "Version" 字段作为最终固件的 BMC 版本号。
  • 如果定制仓中包含此文件并定义了 "Version",则会优先使用该值。

:warning: 即使注释了 customization.py 中的操作,只要 version.json 中明确写了 "Version",构建系统仍将采用该版本号。

:white_check_mark: build/customization.py 脚本中的 post_hpm 方法

  • 您提供的代码示例中,原逻辑应为:
    config.set('Custom', 'VersionBaidu', custom_ver)
    
  • 此操作会将定制版本号写入 update.cfg 文件,供 HPM 升级包解析。
  • 但请注意:update.cfg 只影响 HPM 升级包内部的元数据,不直接影响运行时显示的 BMC 版本号。

:red_exclamation_mark: 因此,update.cfg 并非主版本号的唯一决定因素。真正的决定点是 version.json 中的 Version 字段。


2. 构建流程中的版本号优先级

在 OpenUBMC 的构建流程中,版本号的优先级如下(由高到低):

优先级 来源 是否生效
1 定制仓 /dataset/version.json 中的 "Version" :white_check_mark: 主导最终版本
2 主仓库 version.json 中的 "BaseVersion" :cross_mark: 可被覆盖
3 manifest.yml 中的 version 字段 :warning: 仅用于包管理
4 update.cfg 中的 VersionBaidu 等字段 :cross_mark: 不影响主版本显示

:white_check_mark: 如何正确取消定制的 BMC 版本号

要恢复 BMC 版本号为非定制状态(如 25.03.00.01),需执行以下步骤:

:white_check_mark: Step 1:删除或修改定制仓中的 version.json

进入定制仓的路径:

/dataset/version.json

方案 A:删除 Version 字段

保留 BaseVersion,但移除显式设置的 Version

{
    "BaseVersion": "25.03.00.01"
    // 删除 "Version": "1.59.01000000"
}

构建系统将自动以 BaseVersion 作为最终版本号。

方案 B:彻底移除 version.json

如果您的定制不需要任何版本定制,可直接 删除 /dataset/version.json 文件

构建流程会回退到主仓库的 version.json 使用默认版本。


:white_check_mark: Step 2:清理构建缓存与中间文件

由于构建系统可能缓存旧版本,建议执行以下清理操作:

# 清理构建输出目录
rm -rf out/ build/ output/

# 清除 Conan 缓存(如有)
conan remove "Hello openUBMC*" -f

# 强制重新构建
bingo build -t publish -b openubmc -bt release --force

:white_check_mark: Step 3:确认 customization.py 中无其他写版本行为

虽然您已注释 post_hpm 中的版本写入,但仍需确认是否存在其他位置影响版本号:

  • 检查是否有脚本修改:
    • /usr/share/bmcgo/ 下的 .cfg 文件;
    • update.cfg
    • hpm_wbd.config
  • 搜索关键词:
    grep -r "VersionBaidu\|Version" . --include="*.py\|*.sh\|*.cfg"
    

确保没有任何脚本在构建后期强制注入版本号。


:white_check_mark: Step 4:验证最终生成的镜像版本

构建完成后,检查生成的 version.json 是否正确:

unzip openubmc.img.zip
cat version.json

输出应为:

{
    "BaseVersion": "25.03.00.01"
    // 不包含 Version 字段,或值为 BaseVersion
}

:red_exclamation_mark: 常见误区澄清

误解 实际情况
注释 customization.py 即可取消版本定制 :cross_mark:version.json 中仍定义了 Version,则仍会被应用
update.cfg 控制主版本号 :cross_mark: 它只用于 HPM 包识别,不影响 WebUI 或命令行显示
删除 update.cfg 即可恢复版本 :cross_mark: 无效,主版本来自 version.json

:white_check_mark: 总结:正确取消定制版本号的方法

:white_check_mark: 最根本解决办法
删除或修改定制仓中的 /dataset/version.json,移除 "Version" 字段,保留 "BaseVersion"

操作清单:

  1. :white_check_mark: 删除 /dataset/version.json 中的 "Version": "1.59.01000000" 行;
  2. :white_check_mark: 或直接删除整个 version.json 文件(依赖主仓库);
  3. :white_check_mark: 清理构建缓存;
  4. :white_check_mark: 重新构建;
  5. :white_check_mark: 验证输出镜像中的 version.json

:paperclip: 补充建议

  • 若需支持多客户差异化版本定制,建议使用 Conan profile + 动态替换机制,避免硬编码版本号;
  • 参考文档:白牌包适配与制作指南 中关于 web_custom.xml 和动态资源配置的部分;
  • 开启 --dry-run 模式调试构建流程,观察 version.json 注入时机。

如能按上述步骤操作,重启 BMC 后显示的版本号将不再被强制定制,恢复为预期的 25.03.00.01 或标准版本格式。

相关链接:

  1. 使用openubmc-ci中的manifest打包命令出现版本号定义错误
  2. 调用装备定制化接口BMCSet_RedfishCustomManuName设置厂商名称问题求助
  3. BMC恢复出厂设置后,BIOS版本变为30.06,且只在重启进入BIOS后恢复
  4. BMC_studio一键出包失败
  5. BMC Studio 使用指导 | 文档中心 | openUBMC

截图此处仅修改打入HPM包升级配置文件中的版本号
实际标识版本号内容在
/opt/bmc/extend/{customer}/version.json 文件内,如需修改内容,请搜索customization.py内创建此文件并填入实际内容的地方

去掉Version字段并注释相关py代码后可取消版本号定制