2509高可用构建失败

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

总结

项目 内容
问题根源 help 组件构建脚本访问不存在的 'pwd' 键,极可能是由于 bmc_sdk 不匹配导致上下文缺失
根本原因 本地构建环境与 OpenUBMC2509 所需的 SDK 环境不一致,或组件构建逻辑存在缺陷
推荐解法 使用官方提供的 bmc_sdk_25.09 初始化环境,确保组件版本一致性
预防措施 每次切换版本前执行 bingo init -v <version>,避免跨版本污染

:light_bulb: 提示:对于自定义组件开发,请确保 conanfile.py 中对 conan_data 的访问使用 .get() 安全获取,避免硬编码键值访问。

点击此处查看详细分析解答

OpenUBMC 25.09 高可用构建失败问题分析与解决方案

问题概述

OpenUBMC2509 软件版本环境下,执行高可用构建时出现构建失败,错误日志显示 KeyError: 'pwd',并伴随 Conan 构建命令执行异常(返回非零退出状态)。该问题发生于使用 Conan 2.13.0Bingo 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 版本不匹配

:pushpin: 来源:[《构建工程》文档 - ID: 1]

“这种问题一般为开发者本地 bmc_sdk 和当前版本依赖不配套:切换到对应版本构建时,应使用官网相应版本 bmc_sdk 初始环境,如:切换到 2509 版本构建时,应使用官网 2509 版本 bmc_sdk 初始环境。”

  • 推断:当前构建所使用的 bmc_sdk 可能并非专为 OpenUBMC2509 定制的版本,导致在调用 help 组件的 source() 方法时缺少必要的上下文变量(如 pwd)。
  • 支持证据
    • help/1.71.37@openubmc/stable 组件在拉取源码阶段触发错误,说明其构建脚本逻辑中引用了无效的字段。

2. 闭源组件源码构建逻辑缺陷

:pushpin: 来源:[《构建工程》文档 - ID: 1]

“本地出组件构建,bingo build出现报错:具体错误为闭源组件触发源码构建,类似错误为ERROR in xx Method ERROR XX pwd等”

  • 解读:部分闭源组件在其构建脚本(如 conanfile.py)中可能依赖环境变量或上下文字段(如 pwd),但在某些构建模式下未正确传递或初始化。
  • KeyError: 'pwd' 正是此类脚本行为异常的典型表现。

解决方案

:white_check_mark: 方案一:使用官方匹配的 BMC SDK 环境重建构建环境

  1. 清理本地缓存

    conan remove "*" -c  # 清除所有本地 Conan 缓存包
    rm -rf ~/.conan2/p/* # 强制清理 Conan 缓存路径
    
  2. 下载并配置匹配的 BMC SDK

    • 访问 openUBMC 官方文档中心,获取 OpenUBMC2509 对应版本的 bmc_sdk
    • 使用 bmcgo envbingo init 初始化正确的构建环境:
      bingo init -v 25.09
      
  3. 重新拉取组件并构建

    bingo fetch  # 确保所有组件为正确版本
    bingo build  # 开始构建
    

:white_check_mark: 方案二:检查并修复组件 help 的构建脚本(适用于开发者)

  1. 进入 help 组件源码目录

    cd ~/.conan2/p/helpe82f30ae587a3/s  # 根据日志路径定位
    
  2. 查看 conanfile.pysource() 方法

    • 检查是否存在如下代码片段:
      def source(self):
          pwd = self.conan_data["sources"]["help"]["pwd"]  # 可能导致 KeyError
      
    • 如果 conan_data 中未定义 "pwd" 字段,则会抛出 KeyError
  3. 临时修复建议

    • conanfile.py 中加入默认值判断:
      def source(self):
          pwd = self.conan_data.get("sources", {}).get("help", {}).get("pwd", "")
          if pwd:
              # 执行解压或签名操作
              pass
      

:white_check_mark: 方案三:升级工具链以适配 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>,避免跨版本污染

:light_bulb: 提示:对于自定义组件开发,请确保 conanfile.py 中对 conan_data 的访问使用 .get() 安全获取,避免硬编码键值访问。