25.12版本编译不过的问题

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

25.12版本编译失败问题分析与解决方案

:magnifying_glass_tilted_left: 问题概述

用户在使用 git clone 拉取最新的 OpenUBMC 25.12 版本manifest 后进行编译时,构建任务卡在 work.build.conan 并最终失败,报出关键错误:

KeyError: 'pwd'

此错误发生在 Conan 执行 source() 方法过程中,导致整个构建流程中断。


:firecracker: 根本原因分析

:cross_mark: 错误类型:KeyError: 'pwd'

  • 该错误明确出现在 task.log 中:

    libsoc_adapter/1.100.25@openubmc/stable: Calling source() in /root/.conan/p/libso87dcb2edf6a2e4/s
    ERROR: KeyError: 'pwd'
    
  • pwd 不是环境变量或系统命令问题,而是 Conan 在解析其**配置上下文(context)**时,尝试访问名为 'pwd' 的键,但该键未定义。

  • 此问题常见于以下场景:

    • 使用新版 Conan(如 2.x)构建旧版依赖包(如 libsoc_adapter),而其 conanfile.py 中存在对已弃用或变更的属性访问。
    • source() 方法中尝试读取当前路径(self.conanfile_directoryos.getcwd()),但上下文未正确初始化。

:hammer_and_wrench: 已知相关因素

项目 当前环境信息
Conan 版本 2.13.0
Bingo 版本 0.6.120
Docker 镜像 swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu:24.04.2_25.09
构建任务 work.build.conan 执行失败
日志文件 /root/workspace/manifest/temp/log/task.log
关键报错 KeyError: 'pwd'

:light_bulb: 注意:Conan 从 1.x 升级到 2.x 后,内部 API 有重大变更。部分旧组件(如 libsoc_adapter)的 conanfile.py 可能引用了已被移除或重命名的属性(例如 self.conanfile_directory 被替换为 self.source_folder)。


:file_folder: 报错源文件定位

“pwd” 错误发生在哪个文件?

根据知识库和日志内容:

  • 错误触发点为 Conan 包:
    libsoc_adapter/1.100.25@openubmc/stable

  • 具体阶段为:
    Calling source() 阶段(即执行包的源码拉取或解压)

  • 错误位置推测:

    def source(self):
        # 可能类似如下代码片段导致 KeyError
        current_dir = self.env["pwd"]  # ❌ 错误!env 中不应直接访问 'pwd'
        # 或
        current_dir = self.context["pwd"]  # ❌ 已过时或不存在
    

即:libsoc_adapterconanfile.py 文件中的 source() 方法尝试访问不存在的 'pwd',引发 KeyError


:white_check_mark: 解决方案建议

:white_check_mark: 方案一:清除 Conan 缓存并强制重建

由于 libsoc_adapter 源码文件夹已“corrupted”(损坏),建议清空其缓存:

# 进入容器后执行
conan remove libsoc_adapter/1.100.25@openubmc/stable --builds --sources --generators --packages -f

# 或清空整个本地缓存(更彻底)
rm -rf /root/.conan/p/

然后再重新运行构建命令。


:white_check_mark: 方案二:检查并升级 libsoc_adapter

  1. 确认是否有更新版本的 libsoc_adapter 支持 Conan 2.13.0
  2. 如果没有,需联系维护者修复其 conanfile.py,替代写法如下:
    def source(self):
        # ✅ 正确方式获取路径
        tools.mkdir(self.source_folder)
        # 而非使用 self.context['pwd'] 或 self.env['pwd']
    

:white_check_mark: 方案三:回退 Conan 版本(兼容性应急)

如果项目尚未完全适配 Conan 2.x,可临时降级至 Conan 1.62.0(已知兼容 openubmc-bingo):

pip uninstall conan -y
pip install conan==1.62.0

:warning: 注意:Conan 2.x 与 1.x 不兼容,部分命令语法不同,需确认 manifest 是否支持。


:white_check_mark: 方案四:替换 Docker 镜像或 SDK

当前使用的镜像是 24.04.2_25.09,但你的工程是 25.12,可能存在 SDK 不匹配。

建议:

  • 使用对应 25.12 的 Docker 镜像;
  • 或手动下载并初始化匹配的 BMC SDK
    # 示例:添加正确的远程仓库
    conan remote add openubmc_dev https://conan.openubmc.cn/conan_1/ --force
    
    # 登录认证(如需要)
    conan user <用户名> -p <密码> -r openubmc_dev
    

然后重新初始化项目。


:clipboard: 推荐操作步骤(总结)

  1. 清理缓存

    conan remove libsoc_adapter* --all -f
    rm -rf /root/.conan/p/
    
  2. 确认 Conan 版本兼容性
    openubmc-bingo 要求 ≤1.62.0,则降级:

    pip install conan==1.62.0
    
  3. 确保使用正确的 SDK 和镜像版本
    建议使用与 25.12 对应的开发镜像或手动配置 SDK。

  4. 重新执行构建流程


:books: 参考资料

  • Task Log 文件路径:/root/workspace/manifest/temp/log/task.log
  • build_log 路径:/root/.bmcgo_log/bingo.log
  • Conan 远程仓库:
    • 官方地址:https://conan.openubmc.cn/conan_1/
    • SDK 地址:https://conan.openubmc.cn/bmc_sdk_25.09

:white_check_mark: 预防措施

措施 说明
:locked: 固定 Conan 版本 在 CI/CD 中锁定 Conan 版本避免升级冲突
:counterclockwise_arrows_button: 定期清理 .conan 缓存 防止缓存污染导致构建失败
:test_tube: 使用隔离构建环境 每次构建使用干净容器
:package: 组件维护者更新 conanfile.py 移除对 pwd 等非法键的访问

如有进一步日志(如完整 task.logsource() 调用堆栈),可进一步定位具体哪一行代码引发错误。

相关链接:

  1. 对增加的组件进行编译时,报错 KeyError: 'pwd'
  2. conan再2.16版本构建成功,今天安装了个qemu查询conan版本就成了2.22,构建失败
  3. 新增redfish接口执行bingo build –stage=rc 构建组件时出现错误
  4. 25.09版本bingo build报错