Pull Request已成功合入, 合并人@CANN-robot
(感谢 sinat_31531339 的贡献)变更摘要
本 PR 旨在修复 rpm/deb 包安装后缺少关键文件(tools/ascend_system_advisor、tools/hccl_test、tools/msaicerr、tools/profiler 及 lib64/libascend_dump_parser.so)导致工具不可用的问题。根本原因是 rpm/deb 模式下 INSTALL_LIBRARY_DIR 被设为相对路径 .,而各组件的 install 规则硬编码为 ${INSTALL_LIBRARY_DIR}/tools/...,实际路径变成 ./tools/...,被 CPack 文件收集逻辑遗漏。本 PR 在 CMakeLists.txt 中新增条件化变量 INSTALL_TOOLS_DIR 与 INSTALL_LIB64_DIR:rpm/deb 包使用相对路径 tools/、lib64/(符合 FHS 标准),run 包保持原有绝对路径不变;同时在 cmake/package.cmake 中禁用 rpm 的 brp-strip,避免对 Ascend NPU 非标准 ELF 格式的 .o 文件执行 strip 失败,并为 msprofbin、acp 等二进制显式设置执行权限,修复安装后缺少执行权限的问题。
主要改动
- 新增条件化安装目录变量:在
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-strip:
cmake/package.cmake的pack_built_in中,当PACKAGE_TYPE为rpm时通过CPACK_RPM_SPEC_MORE_DEFINE将__strip、__objdump指向/bin/true并置空debug_package,避免对 Ascend NPU 的.o文件(非标准 ELF 格式)执行 strip 失败。 - 显式设置二进制执行权限:
src/msprof/collector/dvvp/msprofbin/CMakeLists.txt与acp/CMakeLists.txt的install(TARGETS ...)增加PERMISSIONS(owner/group/world 读+执行),修复二进制文件安装后缺少执行权限。 - 组件 install 规则改用新变量:
src/asys、src/hccl_test、src/operator_cmp、src/msprof等改用INSTALL_TOOLS_DIR,src/msaicerr/proto_parse改用INSTALL_LIB64_DIR,替代原先基于INSTALL_LIBRARY_DIR的硬编码路径。


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


/approve


描述
rpm 和 deb 包安装后缺少以下关键文件,导致工具无法使用:
tools/ascend_system_advisor/- 系统诊断工具tools/hccl_test/- HCCL 测试工具tools/msaicerr/- AI Core 错误分析工具tools/profiler/- 性能分析工具(包含 msprof、acp)lib64/libascend_dump_parser.so- dump 数据解析库变更类型
根本原因
INSTALL_LIBRARY_DIR在 rpm/deb 模式下设置为相对路径.,但各组件的 install 规则硬编码为${INSTALL_LIBRARY_DIR}/tools/...,导致实际路径变成./tools/...,被 CPack 的文件收集逻辑遗漏。此外还存在:
.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()tools/,lib64/),符合 FHS 标准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.txtcmake/package.cmakesrc/asys/CMakeLists.txtsrc/msaicerr/CMakeLists.txtsrc/msaicerr/proto_parse/CMakeLists.txtsrc/hccl_test/CMakeLists.txtsrc/operator_cmp/CMakeLists.txtsrc/msprof/CMakeLists.txtsrc/msprof/collector/dvvp/msprofbin/CMakeLists.txtsrc/msprof/collector/dvvp/acp/CMakeLists.txt总计:10 个文件,~50 行代码,18 处修改点
验证结果
RPM 包 ✅
DEB 包 ✅
bash build.sh --pkg-type=deb -j16 sudo dpkg -i build_out/cann-oam-tools_*.deb功能验证:
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 包兼容性 ✅
路径对比:
lib64/aarch64-linux/lib64/如何测试
构建验证
# 构建所有包类型 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')"参考
核对清单
其他信息
影响范围