组件之内bingo build失败

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

bingo build 构建失败问题分析与解决方案

根据您提供的详细日志和环境信息,bingo build 在组件 my_app 的构建过程中失败,核心错误为:

KeyError: 'pwd'

该问题出现在执行 conan create 命令时,并导致整个构建流程中断。以下将结合知识图谱和文档片段进行全面分析与指导。


:magnifying_glass_tilted_left: 问题定位:KeyError: 'pwd' 的根源

1. 错误上下文分析

  • 错误发生在执行以下命令时:
    conan create --name my_app --version 0.0.1 . -pr:h profile.luajit.ini ... -tf=
    
  • 日志显示在处理过程中抛出了 Python 的 KeyError: 'pwd' 异常。
  • pwd 是典型的环境变量或 Python 脚本中用于表示“当前工作目录”的键(如 os.environ['pwd']),其缺失通常说明:
    • 某个脚本试图访问未定义的 pwd 环境变量;
    • 或使用的构建脚本(如 Task Build Conan Py)存在编码缺陷,错误引用了 pwd 而非标准的 os.getcwd()

2. 知识图谱支持分析

从 KG 数据中提取出关键线索:

实体 关系与说明
Task Build Conan Py 是一个 Python 脚本,负责处理 Conan 构建逻辑,日志中提到它会修改文件权限(chmod 操作),这通常依赖于当前路径。
bingo buildconan Bingo 构建过程深度集成 Conan,通过命令行调用 conan create 执行包创建。
Conan 2.24.0 当前使用版本为 2.24.0,而部分已知兼容配置为 Conan 1.62.0 或 2.21.0。版本不兼容可能引发脚本行为异常。
2.22 VersionConan 知识库明确指出:“An unintended upgrade of Conan to version 2.22 caused the bingo build to fail.” 表明 Conan 版本升级可能导致 Bingo Build 失败,尤其在涉及 conan lock create 或路径解析场景。

:white_check_mark: 结论:KeyError: 'pwd' 很可能是由于 Task Build Conan Py 这类构建脚本在新版本 Conan(2.24.0)环境下运行时,未能正确获取当前路径(pwd 未被正确定义),从而引发异常。


:hammer_and_wrench: 可能原因总结

原因 说明 来源支持
:cross_mark: 构建脚本兼容性问题 Task Build Conan Py 使用了非标准方式获取当前路径(如 os.environ['pwd']),但该环境变量不一定存在。 Document Chunk 3 提到 Task Build Conan Py 修改权限时可能出错;KG 中其为构建关键脚本。
:warning: Conan 版本过高导致行为变更 Conan 2.24.0 可能改变了某些脚本执行上下文,移除了 pwd 环境变量注入机制,或改变了钩子脚本的行为。 KG 明确记录 Conan 升级至 2.22 引发构建失败。
:collision: Bingo 与 Conan 版本不匹配 Bingo 工具链未适配 Conan 2.x 高版本(尤其是 >2.21),存在已知兼容性问题。 KG 多次提及 BingoConan2 之间存在不兼容问题,需回滚版本。

:white_check_mark: 推荐解决方案

:white_check_mark: 方案一:降级 Conan 至已知稳定版本

目标:使用与 Bingo 兼容的 Conan 版本(建议 2.21.0 或 2.13.0)

操作步骤:

# 卸载当前 Conan
pip uninstall conan

# 安装指定版本
pip install conan==2.21.0
# 或 conan==2.13.0

# 验证版本
conan --version

:white_check_mark: 支持依据:

  • KG 明确指出:“2.22 version of Conan is associated with a build failure”,证明 2.22+ 存在风险
  • 其他用户反馈在 2.13.0、2.21.0 下可正常工作。

:white_check_mark: 方案二:检查并修复构建脚本中的 pwd 引用

目标:确认并修正 Task Build Conan Py 脚本中的 pwd 使用问题

检查点:

  1. 查找构建系统中是否存在名为 task_build_conan.py 或类似文件。
  2. 搜索代码中是否包含:
    os.environ['pwd']
    
    若存在,应替换为:
    os.getcwd()  # 正确获取当前路径
    
  3. 检查是否有自定义钩子(hooks)脚本修改了执行环境变量。

:light_bulb: 提示:Bingo 构建流程可能动态生成临时脚本,请检查 /tmp/tmp*.graph.json 同目录下的 .py 脚本或日志中引用的脚本。


:white_check_mark: 方案三:升级 Bingo 工具至最新兼容版本

Bingo 需要支持 Conan 2.24.0 的功能和路径处理机制

操作建议:

# 更新 Bingo 到最新版本(推荐 ≥ 0.6.120)
pip install --upgrade openubmc-bingo
# 或从 Git 源码安装
git clone https://gitcode.com/openUBMC/bingo.git
cd bingo && python setup.py install

:white_check_mark: 版本参考(来自 KG):

  • bingo 当前已知版本包括:0.5.230、0.5.272、0.6.56、0.6.80、0.6.120
  • 0.6.120 是较新版本,更可能适配 Conan 2.24.0

:white_check_mark: 方案四:清理缓存并重试

有时旧缓存会导致路径错乱。

# 清理 Conan 缓存
conan remove "*" -c

# 清理 Bingo/BMCGo 日志和临时文件
rm -rf ~/.conan2/p/ /root/.bmcgo_log/* /tmp/tmp*

# 重新执行构建
bingo build

:counterclockwise_arrows_button: 最佳实践建议

建议 说明
:package: 确保 Bingo 与 Conan 版本兼容 不要盲目升级 Conan;优先使用已验证版本(如 2.21.0)。
:counterclockwise_arrows_button: 保持 manifest 与 bmc_sdk 版本对齐 如您所疑,“manifest 和 bmc_sdk” 应有稳定对应关系。建议使用发布版本(如 25.12)配套 SDK,避免混用主干与旧 SDK。
:test_tube: 测试环境使用 Docker / 容器隔离 避免全局环境污染,提高构建一致性。
:page_facing_up: 参考 Pull Request 修复方案 PR #258 所示,南向设备树适配等问题已有类似修复路径,可借鉴。

:books: 总结

项目 建议
当前错误 KeyError: 'pwd' 因构建脚本或 Conan 环境不兼容引起
主要原因 Conan 2.24.0 可能与当前 Bingo 版本不兼容,或脚本错误引用 pwd 环境变量
解决方案 1. 降级 Conan 至 2.21.0
2. 升级 Bingo 至 ≥ 0.6.120
3. 检查并修复 Task Build Conan Py 脚本
4. 清理缓存并重建
预防措施 维护 manifest + bmc_sdk + Bingo + Conan 的版本矩阵,确保协同稳定

:wrench: 下一步操作建议

# 推荐执行顺序:
1. pip install conan==2.21.0
2. pip install --upgrade openubmc-bingo
3. bingo build

若仍失败,请提供 /root/.bmcgo_log/bingo.log 中关于 KeyError: 'pwd' 的完整堆栈信息以便进一步分析。

相关链接:

  1. 再添加了组件后,执行bingo build报错
  2. 伙伴openubmc版本如何支持升级华为签名固件版本和伙伴自己签名的固件版本均能成功?
  3. 在进行组件的单元测试时出错
  4. bingo build报错,任务 work.build.conan 执行失败