Dependencies 使用RPM maven插件构建的RPM上的rpmlib(文件摘要)依赖项错误

Dependencies 使用RPM maven插件构建的RPM上的rpmlib(文件摘要)依赖项错误,dependencies,rpm,rpm-maven-plugin,Dependencies,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.

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

是的,那些你如此随意地忽略掉的“redhat版本差异”是巨大的,正是问题所在。CentOS 5和CentOS 6具有截然不同的rpm(和rpmlib)版本,CentOS 6版本支持更新的有效负载压缩和更新的
FileDigests
版本,而不是CentOS 5上rpm(和rpmlib)版本所能支持的版本

这正是我在回答你所联系的问题时所说的。如果不使用某种chroot,就无法在CentOS 6上构建用于CentOS 5的包


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

事实上,这并不难,至少对于我的用例来说不是这样,我基本上只是使用rpm来部署war文件

您只需定义两个宏,与stock 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>

_二进制有效载荷w9.gzdio
_二进制文件摘要算法1

@Etan_Reisner我与其说是对这些操作系统版本差异不屑一顾,不如说是认为它们可能是罪魁祸首。我正在寻找一种方法来解决这个问题——要么通过rpm maven插件,要么通过更改插件调用的底层rpm系统的一些配置文件。我知道这一定是可能的。我的组织目前正在Solaris机器上使用nmake构建RPM它们以某种方式被移植到许多不同的目标盒,Solaris,RHEL的许多版本,等等。我不确定设计所有这些的人是否还在公司。向前移植(通常)比向后移植更可能。实际上,我可以保证当前Solaris机器上使用的rpm版本与CentOS 5上的rpm版本一样旧(很可能更旧),等等。如果我在这方面有错误,请纠正我。您可以自由地检查Solaris主机上的rpmrc/宏配置文件,并查看它们是否专门设置了compat选项(如我所说,这应该是可能的)。实际上,我发现通过调整宏很容易实现这一点。
<defineStatements>
    <defineStatement>_binary_payload w9.gzdio</defineStatement>
    <defineStatement>_binary_filedigest_algorithm 1</defineStatement>
</defineStatements>