使用rpm -maven-plugin构建的RPM上的rpmlib(FileDigests)依赖性错误

时间:2015-11-17 23:05:20

标签: dependencies rpm rpm-maven-plugin

this question一样,我尝试安装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 个答案:

答案 0 :(得分:5)

实际上,它并不难,至少不是我的用例,我基本上只是使用rpm来部署war文件。

您只需要定义几个宏,而不是红帽安装程序为您提供的那些宏:

DECLARE @temp TABLE ([close] REAL,[high] REAL);

INSERT INTO @temp

    SELECT [Close]
    FROM [dataSQL].[dbo].[temperatures]
    WHERE [Time]<@time AND [cityID]=@name
    ORDER BY [Time] DESC
    OFFSET 0 ROWS
    FETCH NEXT (@fetch) ROWS ONLY,

    SELECT [High] 
    FROM [dataSQL].[dbo].[temperatures]
    WHERE [Time]<@time AND [cityID]=@name
    ORDER BY [Time] DESC
    OFFSET (@offset) ROWS
    FETCH NEXT (@fetch) ROWS ONLY

SELECT * FROM @temp;

有趣的是,rhat6的redhat宏文件表明这些是默认值,但事实上它们并不是默认值:

%_binary_payload    w9.gzdio
%_binary_filedigest_algorithm   1

如果默认值是redhat宏文件中的注释所指示的,则不必取消注释这些行。

在任何情况下,由于我使用的是rpm-maven-plugin,我可以使用pom.xml中的插件参数来配置它,而无需更改宏文件。

#   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

答案 1 :(得分:1)

是的,那些&#34; redhat版本的差异&#34;你如此随意地扫除了巨大的,确切地说是问题。 CentOS 5和CentOS 6具有完全不同的rpm(和rpmlib)版本,CentOS 6版本支持更新的有效负载压缩,并且版本比CentOS 5上的rpm(和rpmlib)版本支持的版本更新FileDigests

这正是我在你所关联的问题的答案中所说的。您不能在CentOS 6上构建一个包,以便在不使用某种chroot的情况下在CentOS 5上使用。

好吧,我相信您可以通过rpmbuild宏配置覆盖默认的压缩和摘要算法选择,并选择CentOS 5 上可用的rpm版本支持的值从构建RPM中删除这些要求(或降低版本以使其有效)但我不知道如何随意做到这一点。