cpack генерирует RPMs с записями %files, которые конфликтуют со спецификацией RPM. Как исправить?
недавно мне нужно убедиться, что наше программное обеспечение может быть упаковано с помощью cpack
для RHEL 7 и его свободных перестроек (например, CentOS 7). Тем не менее, у меня была проблема, которая не существовала для RHEL 6.x и его бесплатные перестройки: RPMs, которые cpack
генерирует все имеют в своем %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
' s include(CPack)
. Но сгенерированный RPM все еще содержит эти системные каталоги : (
как временное get-around, я использовал подсказку, данную в конфликт файлов для установки пакета с "файловой системой", то есть с помощью rpmrebuild
утилита для удаления этих записей системного каталога в . Очевидно, что это вовсе не исправление.
кто-нибудь нашел способ лучше?
1 ответов
Я не мог позволить себе ждать. Итак, глядя на последнюю cmake
3.0.0 релиз, есть переменная CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST
что новая версия поддерживает разумные значения по умолчанию
[Edit] при просмотре документа 2.8.12 пара также поддерживается этой более старой версией.
С cmake
источник поставляется с CMakeLists.txt
файлы и могут генерировать пакеты OOTB, включая RPM (хотя мне нужно настроить параметры в соответствии с Соглашением об именовании пакетов RHEL, но это не сложно сделать), поэтому я просто пошел вперед сначала загружается cmake-3.0.0
С cmake 2.8.11
, rpmrebuild -pe
закрепить полученный cmake
3.0.0 об / мин, yum
установите его, а затем используйте его, чтобы сделать 2nd bootstrap. Теперь все в порядке. Проблема решена.
мой прощальный мысль, что kitware должны сделать документацию лучше написано. Способ описания многих переменных является плотным и даже запутанным - отсутствие примера является вопиющим дефицитом.
кроме того, kitware должен есть свой собственный корм для собак: предоставьте инструкции по созданию cmake с cmake, а не с autotools x - (