Pull Request已成功合入, 合并人@CANN-robot
(感谢 songkai111 的贡献)变更摘要
此 PR 主要为构建系统新增了 deb/rpm 包发布支持。核心改动集中在 build.sh 中引入 --pkg-type 参数(支持 run/rpm/deb/all 四种类型),并配合 CMake 配置更新和旧有工程文件清理,使 make package 能够产出对应格式的安装包。同时将 CANN CMake 依赖从 master-026 升级至 master-041。
主要改动
- 构建脚本
build.sh新增--pkg-type参数支持:新增check_pkg_type、find_rpm_deb_package、clean_rpm_deb_package、collect_rpm_deb_package四个辅助函数,并在checkopts中解析--pkg-type并约束其必须与--pkg配合使用;当PACKAGE_TYPE=all时,会依次遍历run/rpm/deb三种类型分别执行cmake重配置和make package。 - CMake 包配置更新:
cmake/package.cmake移除了已废弃的path.cfg引用,并在set_cann_cpack_config调用中新增PACKAGE_TYPE参数传递,使打包流程能感知目标包类型。 - CANN CMake 依赖版本升级:
cmake/fetch_cann_cmake.cmake中将CANN_CMAKE_TAG从master-026升级到master-041,并移除显式的URL_HASH SHA256校验;scripts/tools/third_lib_download.py中的下载 URL 同步更新。 - 清理废弃的工程文件配置:删除
scripts/package/module/ascend/EngineeringFiles.xml文件(不再需要的path.cfg打包配置),并在scripts/package/opbase/opbase.xml中移除对EngineeringFiles块的引用,同时将scene.info的安装权限从440调整为640。


代码审查
审查完毕 — 总结
本次审查覆盖了全部 6 个变更文件:
| 文件 | 审查结论 |
|---|---|
CMakeLists.txt |
无问题 — PACKAGE_TYPE 缓存变量与校验逻辑正确 |
build.sh |
发现 3 个问题:2 个 P2 + 1 个 P3 |
cmake/fetch_cann_cmake.cmake |
发现 1 个 P3(URL_HASH 移除) |
cmake/package.cmake |
无问题 — path.cfg 移除与 set_cann_cpack_config 参数新增一致 |
scripts/package/opbase/opbase.xml |
无问题 — install_mod 变更和 EngineeringFiles 移除与其他文件一致 |
scripts/tools/third_lib_download.py |
无问题 — URL 更新与 tag 升级一致 |
按优先级统计:P0: 0,P1: 0,P2: 2,P3: 2。
整体风险评估:变更整体质量良好,核心逻辑正确,跨文件一致性保持得很好。两个 P2 问题集中在 build.sh 的 all 分支错误处理上(cmake 重配置未检查退出状态、exit 1 与 return 1 不一致),建议在合入前修复以避免生产环境中构建失败的排查困难。两个 P3 属于可选的健壮性/安全加固建议。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 2 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/opbase | ✅ 张磊, wangrui_ (2/2) | ✅ 张磊 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)


compile


流水线任务触发成功
任务链接 [f819cf57e5cc4f699736106a61eb5473][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ❌ FAILED | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| precommit | ✅ SUCCESS | >>>>> |




🟡 Medium Priority
在 build_ops_base() 的 all 分支循环中(第 315 行),make package 失败时使用 exit 1 直接终止整个脚本;而 else 分支(第 325 行)中相同性质的失败使用 return 1 返回给调用者。
失败模式:main() 函数以 build_ops_base || { echo "ops_base build failed."; exit 1; } 调用 build_ops_base(第 389 行)。当 all 分支的 make package 失败时,exit 1 直接退出脚本,main() 中的错误处理代码永远不会执行——用户看不到 "ops_base build failed." 诊断消息,只能看到 [ERROR] target:package (rpm/deb) build failed!,缺少顶层上下文。而 else 分支使用 return 1 时,main() 能正确打印 "ops_base build failed."。
两边行为不一致,且 all 分支丢失了顶层的错误上下文信息。
建议:将 exit 1 改为 return 1,与 else 分支保持一致,让 main() 的错误处理逻辑能够正常执行并输出完整的诊断信息。


🟡 Medium Priority
在 build_ops_base() 的 all 分支 for 循环中(第 311 行),cmake -DPACKAGE_TYPE="${PACKAGE_TYPE}" "${BUILD_PATH}" > /dev/null 2>&1 将 cmake 的 stdout 和 stderr 全部丢弃,并且未检查 cmake 的退出状态。
失败模式:如果 cmake 重新配置失败(例如 CMakeLists.txt 存在语法错误、PACKAGE_TYPE 参数不被 cann-cmake 版本支持、磁盘空间不足等),脚本会静默继续执行 make package。此时 make 可能:
- 使用旧的/错误的 CMake 缓存配置构建出错误的包(静默成功但产物不正确)
- 报出令人困惑的错误,且由于 cmake 的错误输出已被丢弃,无法定位根因
对比同一函数中 cmake_generate_make()(第 270-274 行)对 cmake 调用正确检查了 $?,这里缺失了相同的保护。
触发条件:使用 --pkg-type=all 构建,且 cmake 重新配置因任何原因失败时触发。
建议:在 cmake 命令后检查退出状态,失败时打印错误信息并退出。同时建议至少保留 stderr 输出以便排查问题,例如将 > /dev/null 2>&1 改为仅重定向 stdout:> /dev/null。
| 311
| - cmake -DPACKAGE_TYPE="${PACKAGE_TYPE}" "${BUILD_PATH}" > /dev/null |
|
311 | + cmake -DPACKAGE_TYPE="${PACKAGE_TYPE}" "${BUILD_PATH}" > /dev/null |
|
312 | + if [ $? -ne 0 ]; then |
|
313 | + echo "[ERROR] cmake reconfigure for ${PACKAGE_TYPE} failed!" |
|
314 | + exit 1 |
|
315 | + fi |


compile


流水线任务触发成功
任务链接 [df3a6d1b2bc64a62944c20d05b723847][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| precommit | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> |
[2026-07-30 09:02:09] CI执行结束




描述
为 opbase 仓库支持 deb/rpm 包发布能力,参考 ops-math/4178 PR 的改动。
改动原因
ops-math 已支持 deb/rpm 包发布,opbase 仓需要对齐该能力,使 opbase 能在 Debian/Ubuntu 和 RHEL/CentOS 等系统上通过原生包管理器安装。
改动方法
PACKAGE_TYPEcache 变量,支持 run/rpm/deb/all 四种包类型--pkg-type参数,实现 rpm/deb/all 构建流程(含clean_rpm_deb_package/collect_rpm_deb_package/find_rpm_deb_package)master-026升级到master-041(新版内置 deb/rpm 打包能力),移除固定 URL_HASHset_cann_cpack_config传入PACKAGE_TYPE;移除path.cfg(改由新 cann-cmake 统一处理)scene.info install_mod调整为640;移除EngineeringFilesblock 引用master-041与 ops-math/4178 的主要差异:
build.sh未拆分,不涉及 ops-math 的模块化脚本改造custom_postinst.sh/custom_prerm.sh测试
bash build.sh --pkg --pkg-type=all -j32成功构建 run/rpm/deb 三种包关联的Issue
文档更新
无
类型标签