Ошибка зависимости 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 сборки (или ниже). версия, чтобы она работала), но я не знаю, как это сделать на месте.