已合并
feat: 支持 rpm/deb 包构建,修正文件缺失问题 #520
feat: 支持 rpm/deb 包构建,修正文件缺失问题 #520
已合并
sinat_31531339创建于 7 天前
sinat_31531339
sinat_31531339成员
7 天前

描述

rpm 和 deb 包安装后缺少以下关键文件,导致工具无法使用:

  1. tools/ascend_system_advisor/ - 系统诊断工具
  2. tools/hccl_test/ - HCCL 测试工具
  3. tools/msaicerr/ - AI Core 错误分析工具
  4. tools/profiler/ - 性能分析工具(包含 msprof、acp)
  5. lib64/libascend_dump_parser.so - dump 数据解析库

变更类型

根本原因

INSTALL_LIBRARY_DIR 在 rpm/deb 模式下设置为相对路径 .,但各组件的 install 规则硬编码为 ${INSTALL_LIBRARY_DIR}/tools/...,导致实际路径变成 ./tools/...,被 CPack 的文件收集逻辑遗漏。

此外还存在:

  • rpmbuild 对 Ascend NPU 的 .o 文件(非标准 ELF 格式)执行 strip 失败
  • 二进制文件安装后缺少执行权限

解决方案

1. 引入条件化变量

if(PACKAGE_TYPE STREQUAL "rpm" OR PACKAGE_TYPE STREQUAL "deb")
    set(INSTALL_LIBRARY_DIR .)
    set(INSTALL_TOOLS_DIR tools)              # 新增
    set(INSTALL_LIB64_DIR lib64)              # 新增
else()
    set(INSTALL_LIBRARY_DIR ${OAM_STAGING_DIR})
    set(INSTALL_TOOLS_DIR ${OAM_STAGING_DIR}/tools)
    set(INSTALL_LIB64_DIR ${OAM_STAGING_DIR}/${CMAKE_SYSTEM_PROCESSOR}-linux/lib64)
endif()
  • rpm/deb 包:使用相对路径(tools/, lib64/),符合 FHS 标准
  • run 包:保持绝对路径,行为完全不变

2. 禁用 rpm 的 brp-strip

if(PACKAGE_TYPE STREQUAL "rpm")
  set(CPACK_RPM_SPEC_MORE_DEFINE "%define __strip /bin/true
%define __objdump /bin/true
%define debug_package %{nil}")
endif()

避免对 bundle/opp/built-in 中的 Ascend NPU .o 文件执行 strip 失败。

3. 显式设置二进制执行权限

install(TARGETS msprofbin ${INSTALL_OPTIONAL}
    RUNTIME DESTINATION ${INSTALL_TOOLS_DIR}/profiler/bin
    PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
    COMPONENT oam-tools
)

修改内容

文件 修改内容
CMakeLists.txt 添加 INSTALL_TOOLS_DIR 和 INSTALL_LIB64_DIR 条件化变量
cmake/package.cmake 禁用 rpm 的 brp-strip
src/asys/CMakeLists.txt 使用 INSTALL_TOOLS_DIR
src/msaicerr/CMakeLists.txt 使用 INSTALL_TOOLS_DIR
src/msaicerr/proto_parse/CMakeLists.txt 使用 INSTALL_LIB64_DIR
src/hccl_test/CMakeLists.txt 使用 INSTALL_TOOLS_DIR
src/operator_cmp/CMakeLists.txt 使用 INSTALL_TOOLS_DIR
src/msprof/CMakeLists.txt 使用 INSTALL_TOOLS_DIR
src/msprof/collector/dvvp/msprofbin/CMakeLists.txt 使用 INSTALL_TOOLS_DIR + 添加 PERMISSIONS
src/msprof/collector/dvvp/acp/CMakeLists.txt 使用 INSTALL_TOOLS_DIR + 添加 PERMISSIONS

总计:10 个文件,~50 行代码,18 处修改点

验证结果

RPM 包 ✅

bash build.sh --pkg-type=rpm -j16
  • ✅ 构建成功(241 MB)
  • ✅ 包含所有缺失组件
  • ✅ 文件路径符合 FHS 标准

DEB 包 ✅

bash build.sh --pkg-type=deb -j16
sudo dpkg -i build_out/cann-oam-tools_*.deb
  • ✅ 构建成功(241 MB)
  • ✅ 安装测试通过
  • ✅ 功能测试通过

功能验证

python3 /usr/local/Ascend/cann-9.1.0/tools/ascend_system_advisor/asys/asys.py --help  ✅
/usr/local/Ascend/cann-9.1.0/tools/profiler/bin/msprof --help  ✅
python3 -c "import ctypes; ctypes.CDLL('/usr/local/Ascend/cann-9.1.0/lib64/libascend_dump_parser.so')"

RUN 包兼容性 ✅

bash build.sh --pkg-type=run -j16
  • ✅ 构建成功
  • ✅ 文件内容与修改前一致(1143 个共同文件)
  • ✅ 路径结构保持不变

路径对比

项目 RPM/DEB RUN
lib64 lib64/ aarch64-linux/lib64/
设计理由 FHS 标准 makeself 自解压,支持多架构

如何测试

构建验证

# 构建所有包类型
bash build.sh --pkg-type=rpm -j16
bash build.sh --pkg-type=deb -j16
bash build.sh --pkg-type=run -j16

# 验证包内容
rpm -qpl build_out/cann-oam-tools_*.rpm | grep -E "tools/|lib64/"
dpkg-deb -c build_out/cann-oam-tools_*.deb | grep -E "tools/|lib64/"

安装测试

# DEB 包
sudo dpkg -i build_out/cann-oam-tools_*.deb
ls -la /usr/local/Ascend/cann-9.1.0/tools/
ls -la /usr/local/Ascend/cann-9.1.0/lib64/libascend_dump_parser.so

# RPM 包
sudo rpm -ivh build_out/cann-oam-tools_*.rpm
ls -la /usr/local/Ascend/cann-9.1.0/tools/

功能测试

# asys
python3 /usr/local/Ascend/cann-9.1.0/tools/ascend_system_advisor/asys/asys.py --help

# msprof
/usr/local/Ascend/cann-9.1.0/tools/profiler/bin/msprof --help

# 库加载
python3 -c "import ctypes; ctypes.CDLL('/usr/local/Ascend/cann-9.1.0/lib64/libascend_dump_parser.so')"

参考

  • hixl#621 - PACKAGE_TYPE 条件判断方案
  • hccl#2317 - set_cann_cpack_config 参数传递

核对清单

其他信息

影响范围

  • 正面影响:rpm/deb 包用户可以正常使用所有 oam-tools 工具
  • 兼容性:run 包不受影响,现有用户无感知
  • 风险:低(仅影响 rpm/deb 构建路径,不改变运行时逻辑)
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 sinat_31531339 的贡献)
sinat_31531339sinat_31531339成员
7 天前 创建了 pull request,commit d23448cf
atomgit-bot
atomgit-bot
7 天前 评论:

变更摘要

本 PR 旨在修复 rpm/deb 包安装后缺少关键文件(tools/ascend_system_advisortools/hccl_testtools/msaicerrtools/profilerlib64/libascend_dump_parser.so)导致工具不可用的问题。根本原因是 rpm/deb 模式下 INSTALL_LIBRARY_DIR 被设为相对路径 .,而各组件的 install 规则硬编码为 ${INSTALL_LIBRARY_DIR}/tools/...,实际路径变成 ./tools/...,被 CPack 文件收集逻辑遗漏。本 PR 在 CMakeLists.txt 中新增条件化变量 INSTALL_TOOLS_DIRINSTALL_LIB64_DIR:rpm/deb 包使用相对路径 tools/lib64/(符合 FHS 标准),run 包保持原有绝对路径不变;同时在 cmake/package.cmake 中禁用 rpm 的 brp-strip,避免对 Ascend NPU 非标准 ELF 格式的 .o 文件执行 strip 失败,并为 msprofbinacp 等二进制显式设置执行权限,修复安装后缺少执行权限的问题。

主要改动

  • 新增条件化安装目录变量:在 CMakeLists.txt 中根据 PACKAGE_TYPE 引入 INSTALL_TOOLS_DIR(rpm/deb 为 tools,run 为 ${OAM_STAGING_DIR}/tools)与 INSTALL_LIB64_DIR(rpm/deb 为 lib64,run 为 ${OAM_STAGING_DIR}/${CMAKE_SYSTEM_PROCESSOR}-linux/lib64),确保各组件在 rpm/deb 包中按 FHS 路径被正确收集。
  • 禁用 rpm 的 brp-stripcmake/package.cmakepack_built_in 中,当 PACKAGE_TYPErpm 时通过 CPACK_RPM_SPEC_MORE_DEFINE__strip__objdump 指向 /bin/true 并置空 debug_package,避免对 Ascend NPU 的 .o 文件(非标准 ELF 格式)执行 strip 失败。
  • 显式设置二进制执行权限src/msprof/collector/dvvp/msprofbin/CMakeLists.txtacp/CMakeLists.txtinstall(TARGETS ...) 增加 PERMISSIONS(owner/group/world 读+执行),修复二进制文件安装后缺少执行权限。
  • 组件 install 规则改用新变量src/asyssrc/hccl_testsrc/operator_cmpsrc/msprof 等改用 INSTALL_TOOLS_DIRsrc/msaicerr/proto_parse 改用 INSTALL_LIB64_DIR,替代原先基于 INSTALL_LIBRARY_DIR 的硬编码路径。
likedislike
atomgit-bot
atomgit-bot
7 天前 评论:

代码审查

✅ 未发现问题

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

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.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/oam-tools zhuliangying, newstarzj (2/2) zhuliangying (1/1)
src/hccl_test newstarzj, 李琳, 王超 (3/2) 王超 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

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

likedislike
此处折叠了202条消息 查看更多
lilin_137成员
3 小时前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
3 小时前 添加了label:lgtm
temper7620成员
3 小时前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
3 小时前 添加了label:approved
CANN-robotCANN-robot成员
3 小时前 合入了pull request