📋 Issue 分析报告
判定结果: ✅ 确认为有效问题
问题类型: feature-request
分类审视: 标题模板选择正确,与问题类型一致;Issue 类型已修正为「需求」
严重程度: medium
置信度: 90%
📋 问题摘要
仓库缺少统一的三方件离线下载脚本,无法一键下载、SHA256校验和缓存复用三方依赖
🔍 根因分析
这是一个功能缺失问题,而非代码 Bug。当前仓库现状如下:
-
无统一下载脚本:仓库根目录不存在
download_3rd_party.sh或类似脚本。SECURITY.md和SECURITY_en.md中仅以表格形式声明了 9 项三方件的公网下载 URL(makeself、json、openssl、googletest、mockcpp、protobuf、rdma-core 及 rdma-core-patch),但未提供任何自动化下载机制,用户需手动逐个下载。 -
无 SHA256 完整性校验:
SECURITY.md中的公网地址声明表仅列出 URL,未包含任何 SHA256 哈希值。Third_Party_Open_Source_Software_List.yaml列出了 10 项三方件(abseil-cpp、boost、googletest、json、libboundscheck、makeself、mockcpp、openssl、protobuf、rdma-core)的版本和类型(build/test),但同样无哈希校验信息。下载文件损坏或被篡改时无法发现。 -
无缓存复用机制:现有代码中不存在任何缓存检查逻辑。
experimental/cluster_link_diag/scripts/setup_third_party.py中虽有component_installed()函数检查文件是否存在,但该脚本服务于 cluster_link_diag 子项目,使用 git clone + cmake 编译方式,与主仓 hcomm 的三方件下载需求(wget 下载预编译包/源码包)完全不同。 -
无架构自动检测:Issue 提到 hcomm_utils 需按 x86_64/aarch64 架构选择不同预编译包,但当前代码中无任何架构检测逻辑。
-
补丁文件路径无统一约定:
SECURITY.md中 mockcpp 补丁和 rdma-core 补丁的存放路径未明确约定与 cann/cmake master-061 查找路径(patch/、patch/device/)的对齐关系。
综上,该 Issue 描述的功能缺失真实存在,需求合理且设计详尽。
📁 涉及的文件/模块
SECURITY.mdSECURITY_en.mdThird_Party_Open_Source_Software_List.yaml
💡 建议的修复方案
按 Issue 设计方案实现:
- 在仓库根目录新增
download_3rd_party.sh脚本,内置 15 项三方件的「URL + SHA256 + 存放路径」下载清单,支持--3rd_party <dir>参数,默认目录为<仓根>/third_party; - 脚本主循环实现:缓存命中且 SHA256 校验通过则跳过、校验失败则删除重下、wget 下载至临时文件后原子 mv 替换、trap 清理临时文件;
- 添加
uname -m架构检测,为 hcomm_utils 选择 x86_64/aarch64 预编译包; - 收尾阶段将 rdma-core、abseil-cpp 补丁复制到
patch/device/目录; - 同步更新
SECURITY.md、SECURITY_en.md公网地址声明表(补充缺失项及修正版本路径); - 更新
docs/zh/build/build.md、docs/en/build/build.md离线编译章节为脚本用法说明; - 适配
cmake/third_party/mockcpp.cmake,补丁查找优先patch/子目录并回退根目录以兼容存量缓存。
⚠️ 风险提示
- SHA256 哈希值需与 cann/cmake master-061 构建系统声明值严格一致,若版本升级时遗漏同步将导致校验失败;
--no-check-certificate降级重试虽由 SHA256 保证完整性,但在严格安全策略环境下可能被审计标记;- 新增脚本增加了维护成本,三方件版本变更时需同步更新脚本清单、SECURITY.md 和 Third_Party_Open_Source_Software_List.yaml 三处;
- 补丁查找路径回退逻辑(patch/ 优先、根目录回退)需确保不引入路径歧义。
👤 责任人与责任田分配
责任人(关联 PR 作者): @ouyangcaike(已关联 PR #6180,直接指定)
(未匹配到责任田) → @Leewis
SECURITY.mdSECURITY_en.mdThird_Party_Open_Source_Software_List.yaml
待确认负责人: @ouyangcaike
⏳ 等待人工确认
请以上负责人确认此问题:
- 确认有效 → 评论
/label add confirmed添加确认标签,并回复问题闭环计划(修复方案、计划完成时间/目标版本) - 如非有效问题 → 回复说明理由(供 Issue 提出人参考),并关闭 Issue
本回复为 AI 结合源码深度分析生成,将同步对应责任田团队进行二次确认。


/assign @ouyangcaike


/label add confirmed 1012/master


Background(背景信息)
本仓在离线/网络隔离环境编译时,需依赖 15 项三方件(cann/cmake 构建框架 master-061、hcomm_utils 预编译包、json、makeself、openssl、rdma-core,以及 UT/ST 所需的 abseil-cpp、boost、googletest、mockcpp、protobuf 及各补丁)。现状问题:
patch/、patch/device/)不匹配时离线编译失败;需求:提供一键式离线下载脚本,在联网环境一次拉齐全部三方依赖、完成 SHA256 完整性校验,上传后配合
--cann_3rd_lib_path即可离线编译。Origin(信息来源)
cann/runtime 仓已合入同类需求(PR #5411「离线下载增加三方件 sha256 校验 && 增加下载目录参数」),本需求为 hcomm 仓对齐该能力。
Benefit / Necessity (价值/作用)
patch/目录);文档(docs/zh/build/build.md、docs/en/build/build.md)与公网地址声明表(SECURITY.md、SECURITY_en.md)同步更新,地址经 gitcode/OBS 双源下载哈希比对验证。Design(设计方案)
总体思路:仓库根目录新增 Bash 脚本,集中维护「URL + SHA256 + 存放路径」三元组下载清单,逐项下载并校验,目录布局与构建系统缓存查找路径对齐。