已合并
feat: support deb/rpm package publishing #678
songkai111创建于 23 天前
feat: support deb/rpm package publishing #678
已合并
songkai111创建于 23 天前
songkai111成员
23 天前

描述

为 opbase 仓库支持 deb/rpm 包发布能力,参考 ops-math/4178 PR 的改动。

改动原因

ops-math 已支持 deb/rpm 包发布,opbase 仓需要对齐该能力,使 opbase 能在 Debian/Ubuntu 和 RHEL/CentOS 等系统上通过原生包管理器安装。

改动方法

  1. CMakeLists.txt: 新增 PACKAGE_TYPE cache 变量,支持 run/rpm/deb/all 四种包类型
  2. build.sh: 新增 --pkg-type 参数,实现 rpm/deb/all 构建流程(含 clean_rpm_deb_package / collect_rpm_deb_package / find_rpm_deb_package
  3. cmake/fetch_cann_cmake.cmake: cann-cmake 从 master-026 升级到 master-041(新版内置 deb/rpm 打包能力),移除固定 URL_HASH
  4. cmake/package.cmake: set_cann_cpack_config 传入 PACKAGE_TYPE;移除 path.cfg(改由新 cann-cmake 统一处理)
  5. scripts/package/module/ascend/EngineeringFiles.xml: 删除(新 cann-cmake 不再依赖该文件)
  6. scripts/package/opbase/opbase.xml: scene.info install_mod 调整为 640;移除 EngineeringFiles block 引用
  7. scripts/tools/third_lib_download.py: cann-cmake 下载 URL 更新为 master-041

与 ops-math/4178 的主要差异:

  • opbase 的 build.sh 未拆分,不涉及 ops-math 的模块化脚本改造
  • opbase 不依赖 whl 包,无需 custom_postinst.sh / custom_prerm.sh

测试

  • 通过 bash build.sh --pkg --pkg-type=all -j32 成功构建 run/rpm/deb 三种包
  • 三种包分别通过各自系统包管理器安装后,对安装内容进行全量对比:
    • RPM 与 DEB 安装后内容完全一致(210 个文件,MD5 全部匹配)
    • RUN 与 RPM/DEB 共有文件内容、软链接完全一致
  • 差异项仅为各包管理器自有的运维文件(如 RUN 安装器生成的软链接/卸载脚本/元数据),非包内容差异

关联的Issue

  • #289

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 songkai111 的贡献)
Ssongkai111成员
23 天前 创建了 pull request,commit 363069f6
atomgit-bot
atomgit-bot
23 天前 评论:

变更摘要

此 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_typefind_rpm_deb_packageclean_rpm_deb_packagecollect_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_TAGmaster-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
likedislike
atomgit-bot
atomgit-bot
23 天前 评论:

代码审查

审查完毕 — 总结

本次审查覆盖了全部 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.shall 分支错误处理上(cmake 重配置未检查退出状态、exit 1return 1 不一致),建议在合入前修复以避免生产环境中构建失败的排查困难。两个 P3 属于可选的健壮性/安全加固建议。

类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
CANN-robotCANN-robot成员
23 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
23 天前 评论:

CLA Signature Pass

songkai111, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robot
CANN-robot成员
23 天前 评论:

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 /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
CANN-robotCANN-robot成员
23 天前 将zhou-qilong,wangrui_,rxtfeng,loov1,jia0liang,zl_hw,llimwang,gubaocheng设为评审人
CANN-robotCANN-robot成员
23 天前 将zhou-qilong,wangrui_,rxtfeng,loov1,jia0liang,zl_hw,llimwang,gubaocheng设为审查人
songkai111成员
23 天前 评论:

compile

likedislike
Ssongkai111成员
23 天前 update merge request[project id: 7649482, iid: 678, commit_id: 58c0bc2f79a67685c9a0bc9345e0c9df55217cb6] virtual merging success
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
23 天前 评论:

流水线任务触发成功
任务链接 [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 >>>>>
likedislike
Ssongkai111成员
23 天前 修改了pull request 的描述
Ssongkai111成员
23 天前 修改了pull request 的描述
CANN-robotCANN-robot成员
23 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
23 天前 添加了label:ci-pipeline-failed
CANN-robot
CANN-robot成员
23 天前 评论:
流水线 PR-pipeline_cann_opbase#1568 [ commitID:50d5ad78 ] 运行失败
likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
build.sh
@@ -252,0 +312,4 @@
312+ make ${VERBOSE} -j${THREAD_NUM} package
313+ if [ $? -ne 0 ]; then
314+ echo "[ERROR] target:package (${PACKAGE_TYPE}) build failed!"
315+ exit 1
atomgit-bot
atomgit-bot23 天前评论:

🟡 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() 的错误处理逻辑能够正常执行并输出完整的诊断信息。

likedislike
atomgit-bot
atomgit-bot23 天前进行代码检视1
build.sh
@@ -252,0 +308,4 @@
308+ local saved_pkg_type="${PACKAGE_TYPE}"
309+ for PACKAGE_TYPE in run rpm deb; do
310+ clean_rpm_deb_package
311+ cmake -DPACKAGE_TYPE="${PACKAGE_TYPE}" "${BUILD_PATH}" > /dev/null 2>&1
atomgit-bot
atomgit-bot23 天前评论:

🟡 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 2>&1
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
应用建议
likedislike
Ssongkai111成员
22 天前 解决了最后一个问题
songkai111成员
21 天前 评论:

compile

likedislike
Ssongkai111成员
21 天前 update merge request[project id: 7649482, iid: 678, commit_id: 089aa18e85bf685b7488221d8656b589461e6e67] virtual merging success
CANN-robotCANN-robot成员
21 天前 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
21 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
21 天前 评论:

流水线任务触发成功
任务链接 [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执行结束

likedislike
CANN-robotCANN-robot成员
21 天前 添加了label:api-check-pass
CANN-robotCANN-robot成员
21 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
21 天前 添加了label:ci-pipeline-passed
CANN-robot
CANN-robot成员
21 天前 评论:
流水线 PR-pipeline_cann_opbase#1573 [ commitID:50d5ad78 ] 已完成
likedislike
RuiWang_成员
21 天前 评论:

/lgtm

likedislike
zl_hw成员
21 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
21 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
21 天前 关闭了关联的issue
CANN-robotCANN-robot成员
21 天前 合入了pull request