【问题标题】:rpmlib(FileDigests) dependency error on RPM built with rpm-maven-plugin使用 rpm-maven-plugin 构建的 RPM 上的 rpmlib(FileDigests) 依赖错误
【发布时间】:2015-12-04 21:56:46
【问题描述】:

就像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,我该如何解决这个问题?

【问题讨论】:

    标签: dependencies rpm rpm-maven-plugin


    【解决方案1】:

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

    您只需要定义几个不同于普通红帽安装程序提供给您的宏:

    %_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 宏文件中的 cmets 所示,则无需取消注释这些行。

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

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

    【讨论】:

      【解决方案2】:

      是的,那些被你随便扫到一边的“redhat 版本的差异”是巨大的,而这正是问题所在。 CentOS 5 和 CentOS 6 的 rpm(和 rpmlib)版本大相径庭,而 CentOS 6 版本支持更新的有效负载压缩,并且比 CentOS 5 上的 rpm(和 rpmlib)版本支持更新的FileDigests 版本。

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

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

      【讨论】:

      • @Etan_Reisner 我并没有将这些操作系统版本差异视为可能的罪魁祸首。我一直在寻找解决此问题的方法 - 通过 rpm-maven-plugin 或通过更改插件调用的底层 rpm 系统的一些配置文件。我知道这一定是可能的。我的组织目前正在使用 nmake 构建 rpm - 在 Solaris 机器上同样如此! - 以某种方式移植到许多不同的目标框、Solaris、许多版本的 RHEL 等。我不确定设计这一切的人是否还在公司。
      • 向前移植(通常)比向后移植更有可能。我几乎可以保证当前 Solaris 机器上使用的 rpm 版本与 CentOS 5 等上的 rpm 版本一样旧(而且很可能早于)。如果我是,请纠正我错了。您可以随意检查 Solaris 主机上的 rpmrc/macro 配置文件,看看它们是否专门设置了兼容选项(就像我说的那样应该是可能的)。
      • 我实际上发现通过调整宏很容易让它工作。
      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 2015-10-14
      • 2016-11-06
      • 2010-12-25
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多