答案内容由AI生成,仅供参考:
定制仓定制 BMC 版本号逻辑及取消方法
根据您提供的问题描述、环境信息和相关文档内容,以下是关于 定制仓中如何定制 BMC 版本号 以及 如何彻底取消该定制 的详细分析与解决方案。
问题分析
您在使用 OpenUBMC 2512 的定制仓进行客户定制(如 Baidu)时,发现即使注释了相关代码,BMC 的版本号仍被修改为定制值(1.59.01000000),而期望恢复为原始或默认版本号。
从 version.json 文件中可见:
{
"BaseVersion": "25.03.00.01",
"Version": "1.59.01000000"
}
说明:
BaseVersion 是基础版本号(来自上游代码);
Version 是最终生成的版本号,已被定制覆盖。
定制仓中 BMC 版本号的来源与逻辑
1. 版本号定制机制
在 OpenUBMC 架构中,版本号通常通过以下方式被定制:
dataset/version.json 文件
- 此文件是 版本信息的核心配置文件。
- 构建系统会读取此文件中的
"Version" 字段作为最终固件的 BMC 版本号。
- 如果定制仓中包含此文件并定义了
"Version",则会优先使用该值。
即使注释了 customization.py 中的操作,只要 version.json 中明确写了 "Version",构建系统仍将采用该版本号。
build/customization.py 脚本中的 post_hpm 方法
因此,update.cfg 并非主版本号的唯一决定因素。真正的决定点是 version.json 中的 Version 字段。
2. 构建流程中的版本号优先级
在 OpenUBMC 的构建流程中,版本号的优先级如下(由高到低):
| 优先级 |
来源 |
是否生效 |
| 1 |
定制仓 /dataset/version.json 中的 "Version" |
主导最终版本 |
| 2 |
主仓库 version.json 中的 "BaseVersion" |
可被覆盖 |
| 3 |
manifest.yml 中的 version 字段 |
仅用于包管理 |
| 4 |
update.cfg 中的 VersionBaidu 等字段 |
不影响主版本显示 |
如何正确取消定制的 BMC 版本号
要恢复 BMC 版本号为非定制状态(如 25.03.00.01),需执行以下步骤:
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 使用默认版本。
Step 2:清理构建缓存与中间文件
由于构建系统可能缓存旧版本,建议执行以下清理操作:
# 清理构建输出目录
rm -rf out/ build/ output/
# 清除 Conan 缓存(如有)
conan remove "Hello openUBMC*" -f
# 强制重新构建
bingo build -t publish -b openubmc -bt release --force
Step 3:确认 customization.py 中无其他写版本行为
虽然您已注释 post_hpm 中的版本写入,但仍需确认是否存在其他位置影响版本号:
确保没有任何脚本在构建后期强制注入版本号。
Step 4:验证最终生成的镜像版本
构建完成后,检查生成的 version.json 是否正确:
unzip openubmc.img.zip
cat version.json
输出应为:
{
"BaseVersion": "25.03.00.01"
// 不包含 Version 字段,或值为 BaseVersion
}
常见误区澄清
| 误解 |
实际情况 |
注释 customization.py 即可取消版本定制 |
若 version.json 中仍定义了 Version,则仍会被应用 |
update.cfg 控制主版本号 |
它只用于 HPM 包识别,不影响 WebUI 或命令行显示 |
删除 update.cfg 即可恢复版本 |
无效,主版本来自 version.json |
总结:正确取消定制版本号的方法
最根本解决办法:
删除或修改定制仓中的 /dataset/version.json,移除 "Version" 字段,保留 "BaseVersion"。
操作清单:
删除 /dataset/version.json 中的 "Version": "1.59.01000000" 行;
或直接删除整个 version.json 文件(依赖主仓库);
清理构建缓存;
重新构建;
验证输出镜像中的 version.json。
补充建议
- 若需支持多客户差异化版本定制,建议使用 Conan profile + 动态替换机制,避免硬编码版本号;
- 参考文档:白牌包适配与制作指南 中关于
web_custom.xml 和动态资源配置的部分;
- 开启
--dry-run 模式调试构建流程,观察 version.json 注入时机。
如能按上述步骤操作,重启 BMC 后显示的版本号将不再被强制定制,恢复为预期的 25.03.00.01 或标准版本格式。
相关链接:
- 使用openubmc-ci中的manifest打包命令出现版本号定义错误
- 调用装备定制化接口BMCSet_RedfishCustomManuName设置厂商名称问题求助
- BMC恢复出厂设置后,BIOS版本变为30.06,且只在重启进入BIOS后恢复
- BMC_studio一键出包失败
- BMC Studio 使用指导 | 文档中心 | openUBMC