You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake将脚本安装到/usr/sbin时遇RPM冲突问题求助

问题原因与解决方法

冲突根源

你遇到的问题是因为你的RPM包试图声明系统标准目录/usr/sbin的所有权,而这个目录已经被系统自带的filesystem包(即filesystem-3.8-6.el8.x86_64)所拥有。RPM的规则是:同一个目录只能被一个包通过%dir指令声明所有权,重复声明就会触发冲突。

换成/usr/bin没问题的原因:/usr/bin同样属于filesystem包,只是CMake生成spec文件时,没有给/usr/bin添加%dir声明而已——本质上,任何系统预存在的标准目录,都不应该由你的自定义包来声明所有权。

解决步骤

方法1:修改CMake配置,阻止生成系统目录的%dir声明

在你的packaging.cmake中添加以下配置,告诉CPack不要将/usr/sbin自动加入到spec的%files段作为%dir条目:

set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/sbin")

重新生成spec并打包,安装时就不会再触发冲突了。

方法2:手动修改生成的spec文件

直接删掉spec文件中这一行:

%dir "/usr/sbin"

然后重新编译打包,再执行yum localinstall即可正常安装。

额外提示

所有系统级的标准目录(比如/usr/bin、/usr/sbin、/etc、/var等)都属于filesystem包,你的自定义包只需要安装文件到这些目录,不需要声明目录的所有权——RPM会自动识别文件所在目录已存在,无需额外处理。

内容的提问来源于stack exchange,提问作者incubus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:35:31