rpm 在哪里寻找依赖关系



我有一个使用 rpmbuild 构建的 rpm。假设它是样本.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不能安装示例.rpm(它究竟在哪里寻找依赖项(?在构建 rpm 时是否需要指定?

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.org 和 rpm5.org。

最新更新