2512 release包构建问题

用的release版本的iBMC300_5.12.0.1.tar.gz和iBMC300_5.12.0.1_haf.tar.gz,
/root/sdk用的是release包的,/root/rtos_compiler用的debug包的(里面的hi1711sdk.tar.gz是release包的),
conan仓用的https://conan.openubmc.cn/openubmc_opensource,

使用bmcgo build -r openubmc_source -b openUBMC -bt release出包的时候包下面的错:

请问这个问题是什么原因?应该如何解决?

2512 lts版本编译失败 - 交流互助区 - openUBMC 论坛

这个帖子和我的问题类似,最终原因说是传递的二进制包有问题,不知道我这个是不是一样的原因?

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

问题 原因 解决方案
TypeError: stat: path should be string... not NoneType Conan 2.x 与 openUBMC 1.x 脚本不兼容 降级至 Conan 1.62.0
构建失败 SDK 混合使用 release/debug 统一使用 release 包中的 sdk 和 rtos_compiler
依赖缺失 远程仓库地址错误 使用 https://conan.openubmc.cn/bmc_sdk_latest
缓存问题 旧构建数据干扰 执行 conan remove "*" 清除缓存
点击此处查看详细分析解答

问题分析:conan build 构建 25.12 Release 包失败

根据您提供的错误信息和上下文,当前在使用 bmcgo build 命令构建 openUBMC 25.12 Release 包时,出现以下关键错误:

ERROR: luajit/2.1.0.b021@openbmc/stable: Error in source() method, line 59
git.fetch_commit(
TypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType

这表明构建流程在 Conan 执行 source() 方法拉取 luajit 组件源码时出错,根本原因是 git.fetch_commit() 接收到的路径为 None,导致 os.stat() 调用失败。


:magnifying_glass_tilted_left: 根本原因分析

结合 知识图谱信息常见构建问题,该问题的根本原因可以归结为以下几点:

1. Conan 版本与 SDK 环境不匹配(核心问题)

关联信息

  • 文档 (id=4) 提到:“conan升级2.0后,本地出现组件构建bingo build出现报错:具体错误为ERROR: luajit/xx@openubmc/stable: Error in source() method
  • 多处提及 Conan 1.62.0Conan 2.x 的兼容性问题。

Conan 2.x 对 source() 方法的行为和参数处理有重大变更。git.fetch_commit() 是 openUBMC 自定义的 Git 工具方法,可能依赖某些路径变量(如 source_folder)在 Conan 1.x 中自动初始化,但在 Conan 2.x 中需显式配置。

如果您的环境中 Conan 版本已升级至 2.x,而 SDK 或 conanfile.py 脚本仍按 Conan 1.x 编写,则 source_folder 等路径变量可能未正确赋值,导致传入 git.fetch_commit() 的路径为 None


2. SDK 路径混合使用 release 与 debug 版本(环境污染)

您提供的配置

  • /root/sdk 使用 release 包
  • /root/rtos_compiler 使用 debug 包(但 hi1711sdk.tar.gz 是 release 版)

虽然 hi1711sdk.tar.gz 是 release 版本,但 rtos_compiler 路径来自 debug 包,可能导致以下问题:

  • 编译器配置(如 profile.ini)不一致。
  • Conan profiles 或缓存路径中引用了调试配置。
  • 工具链路径或环境变量未对齐,导致 Conan 构建时无法正确解析路径。

3. 远程 Conan 仓库配置错误

您使用的是

conan remote add openubmc_source https://conan.openubmc.cn/openubmc_opensource

但根据知识图谱:

  • 正确的远程仓库应为 openubmc_devopenubmc_sdk,例如:
    https://conan.openubmc.cn/bmc_sdk_latest
    
  • https://conan.openubmc.cn/openubmc_opensource 并非标准地址,可能缺少所需的组件版本(如 luajit/2.1.0.b021 的正确构建脚本)。

错误的远程可能导致:

  • 下载的 conanfile.py 不完整或版本不匹配。
  • source() 方法中依赖的补丁、路径变量或 Git 仓库地址未正确定义。

4. 缓存污染或构建状态不一致

Conan 缓存(~/.conan2)中可能已存在部分旧版本构建数据,特别是当您混合使用不同 SDK 版本时,会导致:

  • luajit 包的 source_folder 路径未正确创建。
  • git.fetch_commit() 调用时工作目录为空或未初始化。

:white_check_mark: 解决方案

:white_check_mark: 步骤 1:统一 SDK 环境(必须)

确保 所有 SDK 相关路径均来自同一 release 包

# 删除现有 sdk 和 rtos_compiler
rm -rf /root/sdk /root/rtos_compiler

# 解压 release 包中的两个 tar.gz 文件(均从 release 包获取)
tar -xzf iBMC300_5.12.0.1.tar.gz -C /root
tar -xzf iBMC300_5.12.0.1_haf.tar.gz -C /root

:warning: 不要混用 debug 包中的任何文件,尤其是 rtos_compiler


:white_check_mark: 步骤 2:检查并降级 Conan 版本(关键)

确认当前 Conan 版本是否为 2.x

conan --version

若为 Conan 2.x,请降级至 Conan 1.62.0(openUBMC 25.12 推荐版本):

pip uninstall conan
pip install conan==1.62.0

:pushpin: 说明:openUBMC 25.12 版本主要适配 Conan 1.x,Conan 2.x 的 source() 方法调用方式不兼容,会导致路径未初始化问题。


:white_check_mark: 步骤 3:配置正确的 Conan 远程仓库

删除错误的远程并添加 官方推荐的 openubmc_sdk

conan remote remove openubmc_source
conan remote add openubmc_sdk https://conan.openubmc.cn/bmc_sdk_latest --verify ssl=False
conan remote add openubmc_dev https://conan.openubmc.cn/bmc_sdk_latest --verify ssl=False
conan remote add openubmc https://conan.openubmc.cn/artifactory/api/conan/conan --verify ssl=True

:link: 参考知识图谱:OpenUbmc_SdkOpenUbmc_Dev 均指向 https://conan.openubmc.cn/bmc_sdk_latest


:white_check_mark: 步骤 4:清除 Conan 缓存

清除可能污染的缓存:

conan remove "*" -f
rm -rf ~/.conan2/p/luajit*  # 清除 luajit 相关缓存

:white_check_mark: 步骤 5:重新构建

cd manifest
bmcgo build -r openubmc_sdk -b openUBMC -bt release

建议先运行 bingo fetch 预下载依赖:

bingo fetch -b openUBMC -bt release

:puzzle_piece: 补充建议

建议 说明
使用 bingo build 替代 bmcgo build 社区推荐使用 bingo build,它自动管理依赖和 Conan 配置:bingo build -t personal -b openUBMC -bt release --stage rc
检查 profile.ini 确保其来自 release SDK,且 build_type=Release
查看 conanfile.pysource() 方法 确认 git.fetch_commit() 是否依赖未初始化的路径变量

:white_check_mark: 总结

问题 原因 解决方案
TypeError: stat: path should be string... not NoneType Conan 2.x 与 openUBMC 1.x 脚本不兼容 降级至 Conan 1.62.0
构建失败 SDK 混合使用 release/debug 统一使用 release 包中的 sdk 和 rtos_compiler
依赖缺失 远程仓库地址错误 使用 https://conan.openubmc.cn/bmc_sdk_latest
缓存问题 旧构建数据干扰 执行 conan remove "*" 清除缓存

:white_check_mark: 推荐最终操作流程

# 1. 清理环境
rm -rf /root/sdk /root/rtos_compiler ~/.conan2

# 2. 安装正确 Conan 版本
pip install conan==1.62.0

# 3. 解压 release SDK
tar -xzf iBMC300_5.12.0.1.tar.gz -C /root
tar -xzf iBMC300_5.12.0.1_haf.tar.gz -C /root

# 4. 配置远程
conan remote add openubmc_sdk https://conan.openubmc.cn/bmc_sdk_latest --verify ssl=False

# 5. 进入 manifest 构建
cd manifest
bingo fetch -b openUBMC -bt release
bingo build -t personal -b openUBMC -bt release --stage rc

执行上述步骤后,构建应能成功完成。

看起来是缺包触发源码构建了,查一下远程仓有这个版本吗
conan search luajit/* -r openubmc_opensource

没有这个版本 我出的release包,报错的这个版本是在iBMC300_5.12.0.1_debug.tar.gz里包里的

看了下这个组件在bmc_sdk里面,那用conan list luajit/*看下本地缓存呢?

我构建release包时把debug的sdk组件删掉了。
我将debug的sdk导入试试

缺少包一般原因是没有从bmc_sdk中解压出dependencies并合并到conan缓存/或上传到conan中心仓。

注意:如果大家的中心仓支持上传功能,一般需要将每个社区版本(如25.12、25.12-LTS-SP1)分开上传到不同的conan仓库(可以使用版本号区分),使用版本号隔离不同的bmc_sdk版本的组件。

请问2512 闭源二进制(sdk和高可用)的debug和release为何要分开? 我们是否要将debug和release上传到不同的conan仓?

  1. 一直是分开发布的,分开发布涉及到发布策略,考虑因素比较多,请见谅。
  2. 同一个包的debug和release推送到同一个仓库就行。

好的 感谢

如果已解决,请将帖子设置为关闭状态。