最近,我需要确保我们的软件可以使用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)
rpmrebuild
之前。但生成的RPM仍包含这些系统目录:(
作为一个临时的复制,我一直在使用File conflict for installing a package with "Filesystem"中给出的提示,即使用%files
实用程序删除{{1}}部分中的这些系统目录条目。显然,这根本不是解决方法。
有人找到了更好的方法吗?
答案 0 :(得分:10)
我等不起。因此,查看最新的cmake
3.0.0版本,新版本支持具有合理默认值的变量CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
[编辑]在查看2.8.12的文档时,该版本也受旧版本的支持。
由于cmake
源附带CMakeLists.txt
文件,并且可以生成包OOTB,包括RPM(虽然我需要调整设置以适应RHEL的包命名约定,但这并不难),所以我只是先使用cmake-3.0.0
cmake 2.8.11
启动rpmrebuild -pe
,以修复生成的cmake
3.0.0 RPM,yum
安装它,然后使用它做第二次自举。现在一切都很好。问题解决了。
我的离别思想是kitware应该更好地编写文档。描述很多变量的方式很密集甚至令人困惑 - 缺乏一个例子是一个明显的缺陷。
此外,kitware应该吃自己的dogfood:提供使用cmake构建cmake的说明,而不是使用autotools x - (