Ошибка зависимости rpmlib(FileDigests) от RPM, созданного с помощью rpm-maven-plugin

Как и в случае с этим вопросом, я пытаюсь установить RPM и получаю следующие ошибки :

# rpm -iv myapp-0.0.14-SNAPSHOT.rpm 
error: Failed dependencies:
        rpmlib(FileDigests) <= 4.6.0-1 is needed by myapp-0.0.14-SNAPSHOT20151117233758.noarch
        rpmlib(PayloadIsXz) <= 5.2-1 is needed by myapp-0.0.14-SNAPSHOT20151117233758.noarch

Но мое приложение было создано с помощью rpm-maven-plugin.

Существуют различия в версии RedHat между машиной сборки и сервером, на котором я хочу выполнить установку.

$ uname -a
Linux buildmach 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:37 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

# uname -a
Linux myserver 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

Как мне решить эту проблему, если я использую этот плагин для сборки rpm?


person Steve Cohen    schedule 17.11.2015    source источник


Ответы (2)


На самом деле, это не так сложно, по крайней мере, не для моего случая использования, когда я в основном просто использую rpm для развертывания файлов войны.

Вам просто нужно определить пару макросов иначе, чем то, что дает вам стандартный установщик RedHat:

%_binary_payload    w9.gzdio
%_binary_filedigest_algorithm   1

Интересно, что файл макросов redhat для rhel6 указывает, что это значения по умолчанию, но на самом деле это не значения по умолчанию:

#   Compression type and level for source/binary package payloads.
#       "w9.gzdio"  gzip level 9 (default).
#       "w9.bzdio"  bzip2 level 9.
#       "w7.xzdio"  xz level 7, xz's default.
#       "w7.lzdio"  lzma-alone level 7, lzma's default
#
#%_source_payload   w9.gzdio
#%_binary_payload   w9.gzdio

#   Algorithm to use for generating file checksum digests on build.
#   If not specified or 0, MD5 is used.
#   WARNING: non-MD5 is backwards incompatible, don't enable lightly!
#   The supported algorithms may depend on NSS version, as of NSS
#   3.11.99.5 the following are supported:
#   1   MD5 (default)
#   2   SHA1
#   8   SHA256
#   9   SHA384
#   10  SHA512
#
#%_source_filedigest_algorithm  1
#%_binary_filedigest_algorithm  1

Если бы значения по умолчанию соответствовали комментариям в файле макросов redhat, не нужно было бы раскомментировать эти строки.

В любом случае, поскольку я использую плагин rpm-maven, я могу настроить его, используя параметры плагина в pom.xml, не изменяя файл макросов.

<defineStatements>
    <defineStatement>_binary_payload w9.gzdio</defineStatement>
    <defineStatement>_binary_filedigest_algorithm 1</defineStatement>
</defineStatements>
person Steve Cohen    schedule 03.12.2015

Да, те "отличия в RedHat версии", которые вы так небрежно отметаете, огромны и, собственно, проблема. CentOS 5 и CentOS 6 имеют совершенно разные версии rpm (и rpmlib), а версия CentOS 6 поддерживает более новое сжатие полезной нагрузки и более новую версию FileDigests, чем может поддерживать версия rpm (и rpmlib) в CentOS 5.

Это именно то, что я сказал в ответе на вопрос, который вы связали. Вы не можете собрать пакет в CentOS 6 для использования в CentOS 5 без использования какого-либо chroot.

Что ж, я полагаю, что вы могли бы переопределить выбор алгоритмов сжатия и дайджеста по умолчанию с помощью настройки макроса rpmbuild и выбора значений, которые поддерживаются в версии rpm, доступной в CentOS 5, могут удалить эти требования. из вашей сборки RPM (или понизьте версию, чтобы она работала), но я не знаю, как это сделать навскидку.

person Etan Reisner    schedule 18.11.2015
comment
@Etan_Reisner Я не столько отвергал эти различия версий ОС, сколько предлагал их в качестве вероятного виновника. Я искал способ обойти это - либо через rpm-maven-plugin, либо путем изменения некоторых файлов конфигурации для базовой системы rpm, которую вызывает плагин. Я знаю, что это должно быть возможно. В настоящее время моя организация занимается сборкой rpm-пакетов с помощью nmake — не меньше, чем на машине с Solaris! - которые каким-то образом перенесены на множество различных целевых устройств, Solaris, многие версии RHEL и т. д. Я не уверен, что люди, которые все это разработали, все еще работают в компании. - person Steve Cohen; 18.11.2015
comment
Перенос вперед (как правило) более возможен, чем назад. Я могу фактически гарантировать, что версия rpm, используемая на текущей машине Solaris, такая же старая (и, вполне возможно, старше) версия rpm на CentOS 5 и т. д. Пожалуйста, поправьте меня, если я ошибаюсь. неправильно об этом. Вы можете проверить конфигурационные файлы rpmrc/macro на хосте Solaris и посмотреть, устанавливают ли они специальные параметры совместимости (как я уже сказал, это должно быть возможно). - person Etan Reisner; 18.11.2015
comment
На самом деле мне было легко заставить это работать, настроив макросы. - person Steve Cohen; 04.12.2015