答案内容由AI生成,仅供参考:
总结
| 项目 | 内容 |
|---|---|
| 问题根源 | help 组件构建脚本访问不存在的 'pwd' 键,极可能是由于 bmc_sdk 不匹配导致上下文缺失 |
| 根本原因 | 本地构建环境与 OpenUBMC2509 所需的 SDK 环境不一致,或组件构建逻辑存在缺陷 |
| 推荐解法 | 使用官方提供的 bmc_sdk_25.09 初始化环境,确保组件版本一致性 |
| 预防措施 | 每次切换版本前执行 bingo init -v <version>,避免跨版本污染 |
提示:对于自定义组件开发,请确保
conanfile.py中对conan_data的访问使用.get()安全获取,避免硬编码键值访问。
点击此处查看详细分析解答
OpenUBMC 25.09 高可用构建失败问题分析与解决方案
问题概述
在 OpenUBMC2509 软件版本环境下,执行高可用构建时出现构建失败,错误日志显示 KeyError: 'pwd',并伴随 Conan 构建命令执行异常(返回非零退出状态)。该问题发生于使用 Conan 2.13.0 和 Bingo 0.6.146 工具链的 Ubuntu 24.04 系统环境中。
错误详情
错误日志摘要
help/1.71.37@openubmc/stable: Calling source() in /root/.conan2/p/helpe82f30ae587a3/s
ERROR:
KeyError: ‘pwd’
ERROR: 执行命令 conan create ... 错误, 日志: /home/workspace/manifest/temp/log/task.log
关键错误信息
KeyError: 'pwd':表明在构建过程中尝试访问一个名为'pwd'的键或变量,但该键不存在于当前上下文中。- 构建命令失败:
conan create命令因内部 Python 脚本抛出异常而终止。
问题定位
根据知识图谱和文档内容分析,此问题可能由以下原因导致:
1. 本地环境与 SDK 版本不匹配
来源:[《构建工程》文档 - ID: 1]
“这种问题一般为开发者本地 bmc_sdk 和当前版本依赖不配套:切换到对应版本构建时,应使用官网相应版本 bmc_sdk 初始环境,如:切换到 2509 版本构建时,应使用官网 2509 版本 bmc_sdk 初始环境。”
- 推断:当前构建所使用的
bmc_sdk可能并非专为 OpenUBMC2509 定制的版本,导致在调用help组件的source()方法时缺少必要的上下文变量(如pwd)。 - 支持证据:
help/1.71.37@openubmc/stable组件在拉取源码阶段触发错误,说明其构建脚本逻辑中引用了无效的字段。
2. 闭源组件源码构建逻辑缺陷
来源:[《构建工程》文档 - ID: 1]
“本地出组件构建,bingo build出现报错:具体错误为闭源组件触发源码构建,类似错误为
ERROR in xx MethodERROR XX pwd等”
- 解读:部分闭源组件在其构建脚本(如
conanfile.py)中可能依赖环境变量或上下文字段(如pwd),但在某些构建模式下未正确传递或初始化。 KeyError: 'pwd'正是此类脚本行为异常的典型表现。
解决方案
方案一:使用官方匹配的 BMC SDK 环境重建构建环境
-
清理本地缓存
conan remove "*" -c # 清除所有本地 Conan 缓存包 rm -rf ~/.conan2/p/* # 强制清理 Conan 缓存路径 -
下载并配置匹配的 BMC SDK
- 访问 openUBMC 官方文档中心,获取 OpenUBMC2509 对应版本的
bmc_sdk。 - 使用
bmcgo env或bingo init初始化正确的构建环境:bingo init -v 25.09
- 访问 openUBMC 官方文档中心,获取 OpenUBMC2509 对应版本的
-
重新拉取组件并构建
bingo fetch # 确保所有组件为正确版本 bingo build # 开始构建
方案二:检查并修复组件 help 的构建脚本(适用于开发者)
-
进入
help组件源码目录cd ~/.conan2/p/helpe82f30ae587a3/s # 根据日志路径定位 -
查看
conanfile.py中source()方法- 检查是否存在如下代码片段:
def source(self): pwd = self.conan_data["sources"]["help"]["pwd"] # 可能导致 KeyError - 如果
conan_data中未定义"pwd"字段,则会抛出KeyError。
- 检查是否存在如下代码片段:
-
临时修复建议
- 在
conanfile.py中加入默认值判断:def source(self): pwd = self.conan_data.get("sources", {}).get("help", {}).get("pwd", "") if pwd: # 执行解压或签名操作 pass
- 在
方案三:升级工具链以适配 Conan 2.x 行为变更
虽然错误发生在 Conan 2.13.0 下,但有案例表明 Conan 版本与构建逻辑存在兼容性问题。
- 参考案例:用户
HKZY_chenxiang在使用 Conan v2.22.0 构建 OpenUBMC2509 时也遇到类似构建失败,而 v2.21.0 正常(见文档 ID: 4)。 - 建议:
- 确认是否为 Conan 行为改变所致。
- 若非必须使用 2.13.0,可尝试降级至稳定版本(如 2.13.6 或 2.21.0),或升级至最新补丁版本。
推荐操作流程
# 1. 清理环境
conan remove "*" -c
# 2. 初始化 OpenUBMC2509 环境
bingo init -v 25.09
# 3. 拉取依赖组件
bingo fetch
# 4. 执行构建
bingo build
参考资源
| 内容 | 链接 |
|---|---|
| 构建工程常见问题 | https://discuss.openubmc.cn/t/topic/239 |
| 2509 签名包制作指导 | 签名包制作指导 |
| Bingo 常用命令说明 | bingo --help |
总结
| 项目 | 内容 |
|---|---|
| 问题根源 | help 组件构建脚本访问不存在的 'pwd' 键,极可能是由于 bmc_sdk 不匹配导致上下文缺失 |
| 根本原因 | 本地构建环境与 OpenUBMC2509 所需的 SDK 环境不一致,或组件构建逻辑存在缺陷 |
| 推荐解法 | 使用官方提供的 bmc_sdk_25.09 初始化环境,确保组件版本一致性 |
| 预防措施 | 每次切换版本前执行 bingo init -v <version>,避免跨版本污染 |
提示:对于自定义组件开发,请确保
conanfile.py中对conan_data的访问使用.get()安全获取,避免硬编码键值访问。