2

就像这个问题一样,我尝试安装 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,我该如何解决这个问题?

4

2 回答 2

5

实际上,这并不难,至少对于我基本上只是使用 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>
于 2015-12-03T22:59:43.677 回答
1

是的,您如此随意扫除的那些“redhat 版本的差异”是巨大的,而且正是问题所在。CentOS 5 和 CentOS 6 的 rpm(和 rpmlib)版本大相径庭,而 CentOS 6 版本支持更新的有效载荷压缩,并且FileDigests比 CentOS 5 上的 rpm(和 rpmlib)版本可以支持的版本更新。

这正是我在回答您链接的问题时所说的。你不能在 CentOS 6 上构建一个包以在 CentOS 5 上使用,而不使用某种 chroot。

好吧,我相信您也许可以通过 rpmbuild 宏配置覆盖压缩和摘要算法的默认选择,并选择 CentOS 5 上可用的 rpm 版本中支持的值可能会从您的构建 RPM(或更低版本,以便它工作),但我不知道如何临时做到这一点。

于 2015-11-18T00:57:23.710 回答