cpack генерирует RPM с записями% файлов, которые конфликтуют со спецификацией RPM. Как исправить?
В последнее время я должен убедиться, что наше программное обеспечение может быть упаковано с использованием cpack
для RHEL 7 и его бесплатных перестроений (например, CentOS 7). Тем не менее, у меня возникла проблема, которой не было для RHEL 6.x и его бесплатных перестроений: RPM, которые 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 все еще содержит эти системные каталоги:(
В качестве временного решения я использовал подсказку, приведенную в разделе "Конфликт файлов", для установки пакета с "Файловой системой", т.е. rpmrebuild
утилита для удаления этих записей системного каталога в %files
раздел. Очевидно, что это не исправить вообще.
Кто-нибудь нашел лучший способ?
1 ответ
Я не мог позволить себе ждать. Итак, глядя на последние 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 об / мин, yum
установите его, а затем используйте для второй загрузки. Сейчас все в порядке. Задача решена.
Моя прощальная мысль состоит в том, что kitware должен сделать свою документацию лучше написанной. Способ описания множества переменных является плотным и даже запутанным - отсутствие примера является явным недостатком.
Кроме того, kitware должен есть свой собачий корм: предоставить инструкции по сборке cmake с помощью cmake, а не с помощью autotools