使用2512 LTS spl的manifest无法合入本地缓存的component_drivers包

问题描述

使用2512 LTS spl的manifest无法合入本地缓存的component_drivers包

component_drivers包版本1.2.68,在本地使用bingo build生成包后,在manifest bingo build -t personal 报错;对component_drivers使用bingo build –stage stable后,manifest执行bingo build -t personal不报错但一直卡住

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

:white_check_mark: 总结建议

问题 建议操作
构建报错 清理 Conan 缓存,重新构建并发布组件
构建卡住 使用 --verbose 查看卡点,确认是否因远程依赖拉取失败
本地包未生效 使用 bingo publish 发布到远程仓库,或强制使用本地缓存
工具不兼容 执行 bingo upgrade 升级至匹配版本
依赖缺失 检查 libsoc_adapterlibmcpp 等关键依赖是否就绪
点击此处查看详细分析解答

使用2512 LTS SPL的Manifest无法合入本地缓存的component_drivers包问题分析

根据您提供的信息,使用 openUBMC 2512 LTS 版本的 manifest 时,在集成本地构建的 component_drivers 包(版本 1.2.68)过程中出现构建失败或构建卡住的问题。以下是对该问题的详细分析和解决方案建议。


:magnifying_glass_tilted_left: 问题描述总结

  • 目标环境:使用 openUBMC 2512 LTS SPL 分支的 manifest
  • 操作流程
    1. 在本地对 component_drivers 组件执行 bingo build 生成二进制包(版本 1.2.68)。
    2. 切换到 manifest 目录,执行 bingo build -t personal 构建产品包。
    3. 现象一:直接使用本地构建的包时报错。
    4. 现象二:使用 bingo build --stage stable 构建后,产品构建不再报错但构建过程无限挂起(卡住)

:puzzle_piece: 核心原因分析

1. 本地缓存包与远程仓库状态不一致

bingoConan 构建系统会优先从远程仓库(如 openubmc_dev)拉取依赖。如果本地生成了包但未正确上传或未在 Conan 缓存中注册为“可用”,系统可能:

  • 报错找不到该组件(component_drivers/1.2.68@... not found),因为远程没有此版本。
  • 或者尝试重新构建/下载,导致流程混乱。

:white_check_mark: 建议:若使用本地构建的包,需确保其被正确导出到本地 Conan 仓库,并且 manifest 配置允许使用本地缓存。


2. --stage stable 生成的包未正确上传至远程,导致依赖解析异常

虽然 bingo build --stage stable 成功生成了本地包,但如果未执行 bingo publish 将其发布到 Conan 远程仓库(例如 openubmc_dev),则:

  • manifest 执行构建时,Conan 仍会尝试从远程查找该版本。
  • 若未找到,则可能进入“等待”状态或触发重试机制,最终表现为构建卡住

:warning: 注意:仅本地构建成功 ≠ 构建系统可识别。必须将组件发布至 Conan 仓库才能被 manifest 正确引用。


3. Conan 缓存状态异常,版本冲突或残留旧包

本地 Conan 缓存可能存在:

  • 老版本 component_drivers 的残留文件。
  • 同一版本但不同 channel(如 dev vs stable)的冲突。
  • 缓存损坏导致依赖解析失败。

这可能导致:

  • 构建时报错。
  • 构建过程中死锁或无限等待。

:repeat_button: 参考知识库:文档 [5] 提到,“本地缓存被删除后重新构建”是常见恢复手段。


4. component_drivers 与其他组件存在隐式依赖问题

component_drivers 是 BMC 系统中管理设备驱动的核心模块,依赖多个底层库,例如:

  • libsoc_adapter
  • libmcpp
  • glib-2.0
  • dbus-1

若这些依赖未同步更新或版本不匹配,即使 component_drivers 构建成功,集成进 manifest 后也可能导致运行时符号缺失(如 undefined symbol)或构建挂起。

:link: 相关知识:KG 关系显示,component_drivers 依赖 libsoc_adapter,若找不到该库将导致构建失败。


5. Bingo 工具版本与 manifest 不兼容

不同版本的 bingoConan 2.x 支持程度不同。openUBMC 2512 LTS 引入了对 Conan 2.0 的适配(见文档 [3]),若使用的 bingo 版本过旧或不匹配,可能导致:

  • 构建流程卡在依赖解析阶段。
  • 无法正确识别本地包。

:white_check_mark: 建议:执行 bingo upgrade 升级到与 2512 LTS 兼容的最新版本。


:white_check_mark: 解决方案建议

:white_check_mark: 方案一:清理缓存 + 强制更新依赖

# 1. 清理 Conan 缓存(根据您使用的是 conan1 或 conan2)
rm -rf ~/.conan/data/*          # conan v1
rm -rf ~/.conan2/p/*            # conan v2

# 2. 升级 bingo 工具
bingo upgrade

# 3. 进入 component_drivers 目录重新构建并发布
cd component_drivers
git checkout <对应2512的分支>
bingo build --stage stable
bingo publish -r openubmc_dev   # 发布到远程仓库

:light_bulb: 提示:确保 manifest.yml 中声明的 component_drivers 版本与您构建的版本一致。


:white_check_mark: 方案二:在 manifest 中启用本地缓存优先策略

若您希望使用本地构建的包而不上传,可在构建时添加参数强制使用本地缓存:

cd manifest
bingo build -t personal --remote none --update_conan_cache

或设置 Conan 配置为优先使用本地包:

conan remote add_local_ref component_drivers/1.2.68@openubmc/stable

:white_check_mark: 方案三:验证依赖完整性

检查 component_drivers 是否正确依赖关键库:

# 查看包信息
conan info component_drivers/1.2.68@openubmc/stable

# 检查是否包含必要依赖:
# - libsoc_adapter
# - libmcpp
# - glib-2.0
# - dbus-1

如有缺失,需确保这些依赖也已构建并发布。


:white_check_mark: 方案四:查看构建日志定位卡点

当构建“卡住”时,查看详细日志:

# 查看最近的构建日志
tail -f manifest/temp/log/task.log

# 或启用详细输出
bingo build -t personal --verbose

重点关注:

  • 是否卡在 Downloading...
  • 是否报 Unable to connect to remote
  • 是否提示 missing package

:books: 参考资料与依据

依据来源 内容摘要
文档 [3] openUBMC 25.12 LTS 支持 Conan 2.0,需确保工具链兼容
文档 [5] 建议删除 ~/.conan/data~/.conan2/p 来解决缓存问题
KG 实体:component_drivers 明确其为 OpenUBMC 中驱动管理核心组件
KG 关系:component_drivers → libsoc_adapter 缺少该依赖会导致构建失败
文档 [7] 构建以 manifest 为入口,通过 bingo build 集成所有组件

:white_check_mark: 总结建议

问题 建议操作
构建报错 清理 Conan 缓存,重新构建并发布组件
构建卡住 使用 --verbose 查看卡点,确认是否因远程依赖拉取失败
本地包未生效 使用 bingo publish 发布到远程仓库,或强制使用本地缓存
工具不兼容 执行 bingo upgrade 升级至匹配版本
依赖缺失 检查 libsoc_adapterlibmcpp 等关键依赖是否就绪

:white_check_mark: 推荐完整修复流程

# 1. 清理环境
rm -rf ~/.conan2/p/*

# 2. 升级工具
bingo upgrade

# 3. 构建并发布 component_drivers
cd component_drivers
git checkout openubmc-2512-spl  # 切换到对应分支
bingo build --stage stable
bingo publish -r openubmc_dev

# 4. 构建产品
cd ../manifest
bingo build -t personal -b openUBMC --stage stable --verbose

通过上述步骤,可有效解决 manifest 无法合入本地 component_drivers 包的问题。

应该没有卡住 而是一直在编译;
可以通过ps -auxft 看看当前处于哪个阶段

已解决 在mds下的json强制指定合入包的版本