gpt4 book ai didi

cmake - cpack 生成带有 %files 条目的 RPM,这些条目与 RPM 规范冲突。怎么修?

转载 作者:行者123 更新时间:2023-12-04 07:01:10 25 4
gpt4 key购买 nike

最近需要保证我们的软件可以使用cpack打包适用于 RHEL 7 及其免费重建(例如 CentOS 7)。尽管如此,我一直遇到一个 RHEL 6.x 及其免费重建不存在的问题:cpack 的 RPM生成所有在其%files部分系统目录条目,如下所示:

%dir %attr(0755, root, root) "/"
%dir %attr(0755, root, root) "/usr"
%dir %attr(0755, root, root) "/usr/bin"
%dir %attr(0755, root, root) "/usr/share"
%dir %attr(0755, root, root) "/usr/share/applications"
%dir %attr(0755, root, root) "/usr/share/doc"
%dir %attr(0755, root, root) "/usr/share/icons"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable"
%dir %attr(0755, root, root) "/usr/share/icons/hicolor/scalable/apps"enter code here

不应由包声明。

AFAIK,这个要求多年来一直在 RPM 规范中,但只有在最新版本的 RPM(即比 4.8.0 更新)中才被强制执行。由于 RHEL 7 与 RPM 4.11.1 捆绑在一起,所以 cpack现在与 filesystem-3.2-18.el7.x86_64 产生冲突在 yum install ... 期间出现如下错误:
file / from install of tunesviwer-1.4-2.noarch conflicts with file from package filesystem-3.2-18.el7.x86_64
file /usr/bin from install of tunesviewer-1.4-2.noarch conflicts with file from package filesystem-3.2-18.el7.x86_64
[...]

我试过用一个小的 cmake模块包括以下内容:
set(CPACK_RPM_SPEC_MORE_DEFINE "%define ignore \#")
set(CPACK_RPM_USER_FILELIST "%ignore /" "%ignore /usr" "%ignore /usr/bin" "%ignore /usr/share" "%ignore /usr/share/applications" "%ignore /usr/share/doc" "%ignore/usr/share/icons" "%ignore /usr/share/icons/hicolor" "%ignore /usr/share/icons/hicolor/scalable" "%ignore /usr/share/icons/hicolor/scalable/apps")

并将其包含在 CMakeLists.txt 之前的 include(CPack) .但是生成的 RPM 仍然包含这些系统目录 :(

作为临时解决办法,我一直在使用 File conflict for installing a package with "Filesystem" 中给出的提示。 ,即使用 rpmrebuild用于删除 %files 中的这些系统目录条目的实用程序部分。显然,这根本不是解决办法。

有人找到更好的方法吗?

最佳答案

我等不及了。所以,看看最新的cmake 3.0.0版本,有变量CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST新版本支持合理的默认值

[编辑] 在查看 2.8.12 的文档后,该旧版本也支持该对。

由于cmake源码自带CMakeLists.txt文件并可以生成包 OOTB,包括 RPM(虽然我需要调整设置以适应 RHEL 的包命名约定,但这并不难),所以我只是先引导 cmake-3.0.0cmake 2.8.11 , rpmrebuild -pe修复生成的 cmake 3.0.0 转,yum安装它,然后使用它进行第二次引导。现在一切都很好。问题解决了。

我的分离想法是套件应该使其文档编写得更好。描述许多变量的方式是密集的,甚至是令人困惑的——缺乏例子是一个明显的缺陷。

此外,工具包应该吃自己的狗粮:提供使用 cmake 构建 cmake 的说明,而不是使用 autotools x-(

关于cmake - cpack 生成带有 %files 条目的 RPM,这些条目与 RPM 规范冲突。怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com