Ошибка зависимости 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?

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-plugin, я могу настроить это с помощью параметров плагина в pom.xml без изменения файла макроса.

<defineStatements>
    <defineStatement>_binary_payload w9.gzdio</defineStatement>
    <defineStatement>_binary_filedigest_algorithm 1</defineStatement>
</defineStatements>

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

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

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

Другие вопросы по тегам