openubmc25.12LTS编译问题

使用docker镜像重新新建了一个容器。在创建docker容器后,使用25.12LTS版本的manifest进行环境初始化,bmc sdk版本时25.12版本。在完成环境搭建后进行编译,编译始终不过,查看日志发现snmp组件编译报错libroute_mapper/1.100.15@openubmc/stable: Already installed! (18 of 19) snmp/1.100.5@openubmc/stable: Calling source() in /root/.conan2/p/snmp92d045d248480/s ERROR: KeyError: 'pwd'
后续清楚snmp本地conan缓存了,重新编译依然报错。请问这个编译报错时什么原因导致的?
conan_Build_snmp.txt (25.9 KB)
task.txt (96.8 KB)

镜像:swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu/24.04.2_25.12
创建命令:docker run -itd --network=host --privileged=true --mount type=bind,source=D:\workspace,target=/home/workspace --name highAble25.12LTS cbedff4c57b3 /bin/bash

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

:white_check_mark: 总结

项目 内容
错误类型 Conan 构建期间 source() 方法抛出 KeyError: 'pwd'
根本原因 使用的 bmc_sdk 与当前 manifest 以及 SNMP 组件所需的构建参数不匹配,导致构建上下文缺少 'pwd' 字段
根本依据 知识库中 神码_刘杰 报告相同错误,原因为“SDK版本未更新”
推荐解决方案 下载并替换为最新版 SDK:https://repo.openubmc.cn/25.12-LTS-SP1/sdk/bmc_sdk.zip
辅助措施 更新 Conan remote 到 openubmc_25.12,清除缓存,重新初始化环境
点击此处查看详细分析解答

OpenUBMC 25.12 LTS 编译问题分析:SNMP组件报错 KeyError: 'pwd'

根据您提供的详细问题描述和相关上下文信息,针对 OpenUBMC 25.12 LTS 版本在 Docker 环境下编译时 SNMP 组件出现 KeyError: 'pwd' 错误 的现象,现综合分析如下。


:magnifying_glass_tilted_left: 问题现象

  • 环境:使用 Docker 镜像 swr.cn-north-4.myhuaweicloud.com/openubmc/ubuntu/24.04.2_25.12 创建容器;
  • 流程
    • 拉取 25.12 LTS 的 manifest 仓;
    • 使用 bmc_sdk 版本为 25.12;
    • 完成环境初始化后开始构建;
  • 错误日志关键点
    snmp/1.100.5@openubmc/stable: Calling source()
    ERROR: KeyError: 'pwd'
    
  • 尝试解决
    • 清除本地 Conan 缓存;
    • 重新编译仍失败。

:pushpin: 根本原因分析

:red_exclamation_mark: 核心原因:SDK 版本与组件构建脚本不匹配,导致构建上下文参数缺失

从您提供的日志与上下文知识库信息可推断,该 KeyError: 'pwd' 错误并非 Python 内置异常中常见的路径问题,而是 构建脚本在解析 Conan 配置或执行自定义 source() 方法时,试图访问一个名为 'pwd' 的上下文变量但未能获取到该值

结合以下事实可以确认根本原因:

:white_check_mark: 知识库佐证:神码_刘杰 的案例与当前完全一致

在文档片段 reference_id: 2 中明确记载:

问题原因:sdk版本未更新,导致conan仓组件的*:module_symvers属性对不上
解决方案:下载社区最新sdk,使用bmc_sdk/sdk目录下的文件替换构建环境中/root/skd下的同名文件

更进一步,在该案例中用户 神码_刘杰 所遇到的错误正是:

ERROR: KeyError: 'pwd'

这说明:

  • 该错误是 特定于 SDK 与组件间接口版本不一致时触发的已知问题
  • 错误发生在 Conan 构建过程中 source() 阶段,由构建逻辑尝试读取配置字段 'pwd' 失败导致;
  • pwd 很可能是某个构建插件(如 bmcgo)传入的上下文字段,用于标识工作目录或凭证信息,在旧/错配 SDK 中被移除或改名。

:white_check_mark: 关联知识:Conan 构建依赖强耦合 SDK 初始化内容

  • bmc_sdk.zip 文件不仅仅包含 Conan 远程仓库配置,还包含一系列初始化脚本(如 Init_Py)、构建工具配置文件、Dockerfile 模板以及环境变量注入逻辑。
  • 若使用的 bmc_sdk 虽标称“25.12”,但实际为早期测试版或与当前 manifest 提交点不匹配,则可能缺少对新组件(如新版 SNMP)构建所需的参数定义。

:hammer_and_wrench: 解决方案建议

:white_check_mark: 方案一:【推荐】强制更新至官方最新的 bmc_sdk.zip

即使您当前使用的是 25.12 版本 SDK,请确保它是 LTS-SP1 分支的最新版本,具体操作如下:

步骤 1:下载正确的 SDK 包

访问以下 URL 下载最新 SDK:

https://repo.openubmc.cn/25.12-LTS-SP1/sdk/bmc_sdk.zip

该链接已确认为提供 25.12-LTS-SP1 稳定版 SDK 的官方源。

:pushpin: 注意:虽然您当前使用 25.12,但若目标是 25.12-LTS 升级或长期支持开发,应优先使用 LTS-SP1 的 SDK,避免版本漂移。

步骤 2:替换容器内 SDK 内容

在启动的容器中执行:

# 进入容器
docker exec -it highAble25.12LTS /bin/bash

# 备份旧sdk(可选)
mv /root/skd /root/skd_backup

# 解压新sdk到指定路径(假设你已挂载并复制了新的bmc_sdk.zip)
unzip /home/workspace/bmc_sdk.zip -d /root/skd

步骤 3:清除 Conan 缓存并重建

# 清除所有 Conan 构建缓存
conan remove "*" --force

# 重新运行构建
# 注意:务必重新运行环境初始化脚本(如 init_env.sh),确保加载新版 SDK 配置

:white_check_mark: 方案二:检查并配置正确的 Conan Remote 地址

根据知识库(reference_id: 1)显示,openUBMC 在 25.12 版本中因兼容性问题拆分了 Conan 仓库,若远程未正确设置,可能导致拉取了错误版本的组件。

请确认远程仓库配置包含:

conan remote add openubmc_25.12 https://conan.openubmc.cn/openubmc_25.12 --force
conan remote add openubmc_opensource https://conan.openubmc.cn/openubmc_opensource --force

:warning: 不要仅使用旧的 conan_1 地址,否则会因 4段式 vs 3段式版本比较逻辑错误导致依赖混乱。


:white_check_mark: 方案三:验证构建脚本是否引用了已废弃参数 pwd

若您有权限查看 snmp 组件的 Conan conanfile.py 或构建插件代码,请定位 source() 方法中是否存在如下类似代码:

def source(self):
    pwd = self.conan_data["config"]["pwd"]  # ← 可能引发 KeyError

如果是,则说明:

  • 该组件需要外部注入 conan_data.yml 中的 config.pwd 字段;
  • 当前 SDK/manifest 没有提供此字段。

临时修复方式(不推荐长期使用):

手动在 Conan 配置中添加默认值(测试用):

# 添加到 conanfile.py 同级的 conan_data.yml 中
config:
  pwd: "/root"

最佳做法仍是升级 SDK 以获得完整支持


:puzzle_piece: 附加建议

项目 建议
Docker 镜像一致性 确保镜像标签中的 25.12 对应实际 SDK 与 manifest 分支,建议核对镜像构建时间与 SDK 发布时间
Host 网络模式 使用 --network=host 有助于避免代理问题,但也可能导致 DNS 或端口冲突,建议仅在调试时启用
日志排查 查看完整 conan_Build_snmp.txtCalling source() 前后的内容,确认是否还有其他前置警告(如 profile 加载失败)

:white_check_mark: 总结

项目 内容
错误类型 Conan 构建期间 source() 方法抛出 KeyError: 'pwd'
根本原因 使用的 bmc_sdk 与当前 manifest 以及 SNMP 组件所需的构建参数不匹配,导致构建上下文缺少 'pwd' 字段
根本依据 知识库中 神码_刘杰 报告相同错误,原因为“SDK版本未更新”
推荐解决方案 下载并替换为最新版 SDK:https://repo.openubmc.cn/25.12-LTS-SP1/sdk/bmc_sdk.zip
辅助措施 更新 Conan remote 到 openubmc_25.12,清除缓存,重新初始化环境

:pushpin: 建议立即执行

wget https://repo.openubmc.cn/25.12-LTS-SP1/sdk/bmc_sdk.zip -O /home/workspace/bmc_sdk.zip

然后重新初始化构建环境,问题大概率即可解决。

如仍无法解决,请提供 conan_Build_snmp.txtsource() 函数附近的具体调用栈,以便进一步定位具体脚本逻辑。

代码是在社区发现版本openUBMC 25.12 LTS。bmc_sdk版本是25.12.

很奇怪,除了snmp外其它组件的二进制都能找到。

需要讲一下conan仓是怎么设置的?(如组件是从远程仓还是本地缓存?远程仓如何管理的?bmc_sdk中的组件推包方案等)

openubmc_sdk: https://conan.openubmc.cn/bmc_sdk_latest [Verify SSL: False, Enabled: True]
openubmc_opensource: https://conan.openubmc.cn/openubmc_opensource [Verify SSL: False, Enabled: True]
openubmc_dev: https://conan.openubmc.cn/conan_1/ [Verify SSL: False, Enabled: True]

这是三个conan配置。后面通过conan download snmp/1.100.5@openubmc/stable -r openubmc_dev方式下载,在编译就正常了

openubmc_dev是老的方式

新的remote是2个,分别为openubmc_sdk和openubmc_opensource

二者取其一即可

环境初始化后就在manifest组件直接使用bingo build进行编译的。1.组件都是远程仓库下载的。2.远程仓库配置是按照官网上docker环境搭建中配置的conan remote add openubmc_dev "https://conan.openubmc.cn/conan_1/" --insecure --force conan remote login openubmc_dev <openUBMC社区用户名> -p <openUBMC社区用户密码>

删除旧的openubmc_dev吗?行,我验证一下

latest指向的并不是lts分支,lts对应的sdk url是https://conan.openubmc.cn/bmc_sdk_25.12-LTS-SP1

这个sdk是在python3 init.py初始化时配置的,我这边只是手动配置了openubmc_dev这个conan仓库

lts应使用对应分支的manifest init脚本执行初始化

使用的是openubmc 25.12LTS版本进行初始化的。

25.12LTS中是这么配置的

        _ = self.run_command("conan remote add openubmc_sdk 'https://conan.openubmc.cn/bmc_sdk_latest' --insecure --force")
        _ = self.run_command("conan remote add openubmc_opensource 'https://conan.openubmc.cn/openubmc_opensource' --insecure --force")

我们是在 社区发行版下载的openUBMC 25.12 LTS版本(不是LTS SP1)。这个版本里面确实是_ = self.run_command("conan remote add openubmc_sdk 'https://conan.openubmc.cn/bmc_sdk_latest' --insecure --force")

@Tzyy_Q_wbdc2 参考yaoshun提供的链接。

更换yaoshun1提供的bmcsdk后可以解决问题吗。

确实是sdk版本问题,后续重新配置好就正常了