【问题标题】:RPM Requires i386 version of a packageRPM 需要 i386 版本的软件包
【发布时间】:2011-04-12 11:51:02
【问题描述】:

不确定这是否属于这里...但是...

我正在为 Centos 成功构建 RPM,问题是它是 32 位二进制文​​件(不要问..) - rpm 规范的要求部分仅安装所需库的 64 位/x86_64 版本。

我正在链接 libicu,我希望 rpm 自动安装 32 位版本作为依赖项。我的 rpmspec 文件中的要求如下所示:

Requires: libicu

构建 rpm 工作正常,但当我尝试在完全干净的系统上安装 rpm 时,它 yum 想要将其安装为依赖项:

libicu    x86_64

这不起作用,因为那只是库的 x86_64 版本。如果我尝试手动安装 libicu:

yum install libicu

我明白了:

libicu    x86_64
libicu    i386

它还安装了 32 位版本的库,并且我的应用程序可以正常工作。如何让 rpm 自动安装该库的 32 位版本?任何想法将不胜感激...

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    这个问题可能更好地属于 ServerFault,但我相信从 RPM 4.6.0 开始,您可以这样做:

    Requires: libicu%{_isa}
    %if %{__isa_bits} == 64
    Requires: libicu(%{__isa_name}-32)
    %endif
    

    [参见 http://www.rpm.org/wiki/PackagerDocs/ArchDependencies]

    但是,不幸的是,我目前正在使用的服务器运行的是 RPM 4.4.2.3,所以我不得不使用您的解决方案……顺便说一句,谢谢。 :-)

    【讨论】:

    • 谢谢,这样的东西好多了……不幸的是,我的目标是 Centos 5(仍然……)。不过还是谢谢。
    【解决方案2】:

    我(终于)找到了一个似乎可行的答案。将以下内容添加到 rpm 规范中的 Requires: 标记中:

    actual-so-name()(64bit), actual-so-name-again, package-name
    

    因此,举个例子,在我需要 libicu 的情况下,我执行了以下操作(只是选择了一个我碰巧链接到的 icu .so 文件):

    Requires: libicui18n.so.36()(64bit), libicuuc.so.36, libicu
    

    这似乎有效。

    有没有更好的办法?

    【讨论】:

    • 那里的'36'指的是ICU 3.6版,如果有任何方法可以对其进行参数化,那可能是值得的。 HTH
    • 您可以尝试完全删除 Require 标签并让 RPM 向库中添加特定要求 -
    猜你喜欢
    • 2014-01-28
    • 2017-01-06
    • 2020-03-20
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多