network_adapter组件构建失败

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

network_adapter 组件构建失败问题分析

根据您提供的报错信息,network_adapter 组件构建失败的根本原因是 在 Conan 源码构建过程中,尝试从华为内部 Git 服务器下载依赖库 libmgmt_protocol 时,因无法解析主机名而导致网络连接失败


:magnifying_glass_tilted_left: 问题详情与日志分析

构建过程中的关键错误日志如下:

git fetch --depth 1 origin 1.81.6
ERROR: ConanException: Command 'git fetch --depth 1 origin 1.81.6' failed with errorcode '128'
fatal: unable to access 'https://codehub-dg-y.huawei.com/iBMC_V3/hardware/libmgmt_protocol.git/': Could not resolve host: codehub-dg-y.huawei.com

核心问题点:

  • 构建触发了源码构建(source build):Conan 尝试从源码构建 libmgmt_protocol/1.81.6@openubmc/stable 包,而不是直接使用预编译的二进制包。
  • 源码下载地址为华为内部站点:该包配置的 Git 源为 https://codehub-dg-y.huawei.com/...,这是一个 仅限华为内部网络访问的地址
  • DNS 解析失败:系统提示 Could not resolve host,表明当前构建环境 无法访问华为内网资源,可能是处于外部网络或未配置代理/内网访问权限。

:white_check_mark: 是否触发了源码构建?

是的,明确触发了源码构建

尽管 libmgmt_protocol/1.81.6@openubmc/stable 可能已有二进制版本存在,但以下情况可能导致 Conan 回退到源码构建:

原因 说明
:cross_mark: 二进制包不匹配当前环境 指定的 profile(如 profile.ini)中的架构、编译器版本、build_type=Debug 等配置,与已发布的二进制包不一致,导致 Conan 认为“无可用二进制”,从而触发 --build=missing 参数进行源码重建。
:cross_mark: 使用 --build=missing--build=network_adapter/* 构建命令中包含 --build=missing--build=network_adapter/*,这会强制 Conan 尝试重建目标组件及其缺失依赖项。
:cross_mark: 缓存损坏或远程仓库不可达 若 Conan 缓存中无有效包、或 Conan 中心仓库(Conancenter)无法访问,也可能导致回落到源码构建流程。

因此,即使本意是使用预编译包,一旦环境不匹配或依赖未预发布,就会触发 source() 阶段拉取源码,进而暴露私有 Git 地址问题


:thinking: 为何会访问华为站点?

libmgmt_protocol 这个 Conan 包在其 conanfile.pysource() 方法中硬编码了内部 Git 地址,例如:

def source(self):
    git = Git()
    git.clone("https://codehub-dg-y.huawei.com/iBMC_V3/hardware/libmgmt_protocol.git", branch="1.81.6")

这类做法常见于企业级开发流程中:

  • 开发阶段依赖内部仓库管理源码。
  • 发布时上传二进制到 Conan 仓库(如 Nexus/JFrog),供外部/公有环境使用。
  • 但如果构建环境未命中二进制包,仍将尝试执行 source() 逻辑 → 导致访问私有地址失败。

:puzzle_piece: 为什么 codehub-dg-y.huawei.com 无法访问?

该域名属于华为私有域名系统,通常只能在 华为内部网络或配置了特定 DNS/代理的环境中解析和访问

  • 外部开发者或 CI 环境(如 GitHub Actions、Docker 容器、开放云主机)无法解析此域名
  • 即使能解析,也可能因认证失败(如缺少 SSH 密钥或 GitCode Token)而拒绝访问。

:white_check_mark: 解决方案建议

:white_check_mark: 方案一:确保使用预编译二进制包,避免触发源码构建

确保以下条件满足,让 Conan 直接下载现成包,跳过 source() 阶段:

要求 说明
:check_mark: 远程仓库已发布对应二进制 libmgmt_protocol/1.81.6@openubmc/stable 必须已在 Conan 仓库(如 openubmc/stable)中发布适用于当前环境的二进制包。
:check_mark: profile 配置一致 使用与发布包相同的 profile(编译器、libcxx、build_type 等)。可尝试使用 release profile 测试。
:check_mark: 清除本地缓存后重试 删除损坏缓存:
conan remove libmgmt_protocol/1.81.6@openubmc/stable --force
rm -rf ~/.conan/data/libmgmt_protocol  # 彻底清理

:white_check_mark: 方案二:修改 Conan 配置,使用镜像或替换源地址(适用于企业私有部署)

如果必须支持源码构建,可通过以下方式绕过内网限制:

方法 1:使用 Conan 的 scm_to_url 功能重写 Git 地址(推荐)

将内部 Git 地址映射为公网可访问的镜像地址(如 GitCode):

# conan.conf 或 profile 中设置
[scm_to_url]
https://codehub-dg-y.huawei.com/iBMC_V3/hardware/libmgmt_protocol.git = https://gitcode.com/openUBMC/libmgmt_protocol.git

注意:需确保镜像仓库包含对应分支/版本。

方法 2:在企业级构建环境中配置内网代理

  • 配置 DNS 解析或 host 映射;
  • 设置 Git HTTP(S) 代理;
  • 使用企业统一的开发镜像(如 Docker 镜像内预配置网络策略)。

:white_check_mark: 方案三:发布所有依赖为二进制包,杜绝源码构建

最佳实践是:

  1. 所有基础库(如 libmgmt_protocol, libsoc_adapter, libmc4lua)提前编译并上传至 Conan 仓库;
  2. 构建时 禁止 fallback 到 source 阶段
  3. 使用 lockfiles 锁定依赖版本和来源,保证可复现构建。

命令示例(只允许使用二进制):

conan install . --build=never

:hammer_and_wrench: 补充建议

1. 检查并更新 manifest 仓库

您使用的 network_adapter 版本是否与依赖兼容?建议:

git -C manifest pull
python3 init.py -path <sdk> -user <user> -psw <password>

2. 查看完整日志定位起点

查看 /root/.bmcgo_log/bingo.log 中首次拉取 libmgmt_protocol 的上下文,确认:

  • 为何未命中缓存?
  • 是否因 profile 不匹配导致重建?

3. 建议使用 GitCode 上的公开项目协作

相关组件已在 GitCode 公开:


:white_check_mark: 总结

问题 原因 解决方案
构建失败 libmgmt_protocol 源码构建时访问 codehub-dg-y.huawei.com 失败 :white_check_mark: 避免源码构建,使用预编译包
触发源码构建 依赖包未匹配环境或缺失二进制 :white_check_mark: 清理缓存 + 使用匹配 profile
访问华为内网 Conan recipe 中硬编码私有 Git 地址 :white_check_mark: 使用 scm_to_url 映射为公网地址 或 配置内网访问
根本改进 企业组件未妥善处理内外网构建差异 :white_check_mark: 发布完整二进制 + 使用 --build=never + 统一构建环境

:pushpin: 最终建议

优先确保 libmgmt_protocol 等核心依赖有对应平台的二进制包发布,并使用一致的 profile 构建,避免触发源码下载。若需支持源码构建,请将 Git 地址替换为公网可访问版本(如 GitCode 镜像),或通过 scm_to_url 映射机制解耦。

如需进一步协助,请提供:

  • 使用的 profile.ini 内容;
  • conan remote list 输出;
  • 是否为企业内网环境。

相关链接:

  1. 【提问求助】25.06源码构建qemu固件包失败
  2. 【教学培训篇】新增组件
  3. 单元测试 bingo test -ut运行失败
  4. Q1 main分支f8acc985 bmcgo 构建失败:not found in ibmc_dev
  5. 南向硬件协议库 | 文档中心 | openUBMC