使用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
相关产品推荐
相关产品推荐

