【问题标题】:Where does rpm look for dependencies?rpm 在哪里寻找依赖关系?
【发布时间】:2012-07-10 17:36:45
【问题描述】:

我有一个使用 rpmbuild 构建的 rpm。可以说它是sample.rpm。 它构建成功。 rpm 具有可执行文件(我们称其为 init)。

当我尝试使用 rpm -ivh sample.rpm 安装它时,它显示依赖项失败。

假设错误是Failed dependency for: example.so,这意味着 rpm 无法找到此共享对象文件。 (即使so文件存在于同一目录中)。

所以,我将 rpm 安装为 rpm -ivh sample.rpm --nodeps(因为我知道我有所需的 so 文件)。

那么为什么 rpm 不能安装那些 rpm 呢? 它在哪里寻找目标文件? (linux 加载程序是否会查找这些 .so)。我有 LD_LIBRARY_PATH 来包含这些 .so 的路径,所以当我从它运行的 rpm 运行安装的文件 (init) 时。

那么为什么 rpm 无法安装 sample.rpm(它究竟在哪里寻找依赖关系)? 是否需要在构建 rpm 时指定?

【问题讨论】:

    标签: dependencies rpm


    【解决方案1】:

    RPM 文件的依赖关系在其.spec 文件的“Requires:”行中指定。

    样本 SPEC 文件:

    Summary: <Summary for my Linux project>
    Name: <Name for my Linux project>
    Version: 2.5.1
    Release: GA
    Requires: libx1.so >= 2.6.3
    BuildArch: i586
    Group: System / Applications
    License: GPL 2.0
    Vendor: <my organization>
    

    您还可以运行此命令来确定需要哪些依赖项:

    $ rpm -q --requires <my_rpm>
    libx1.so.2
    $
    

    依赖libx1.so 本身应通过RPM 安装,以便将其存在输入RedHat 包管理器维护的数据库中。换句话说,libx1.so 在文件系统上的物理存在不是依赖测试的标准。

    要找出哪个包提供了依赖项,请运行以下命令:

    $ rpm -q --whatprovides libx1
    

    如果没有包提供libx1.so,您的RPM 将继续显示依赖错误,除非您从“Requires:”行中删除libx1.so

    要禁用自动检测依赖项,您可以将其添加到您的 .spec 文件中:

    AutoReqProv: no
    

    更多信息请访问rpm.orgrpm5.org

    【讨论】:

    • 我也建议使用 yum 来安装你的 rpm 包。在分发软件包时,您通常会提供一个 rpm,它会添加一个指向您的存储库的 yum 存储库源,然后您的客户可以使用 yum install product 以及稍后使用 yum update product
    猜你喜欢
    • 2015-11-22
    • 2019-12-17
    • 2013-01-14
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2012-03-20
    • 2015-01-16
    相关资源
    最近更新 更多