0

我正在尝试构建一个 RPM,如果它们不存在,它将安装文件依赖项。在 RPM 检查依赖项之前是否会执行 RPM Spec Section。(我指的是文件依赖项而不是“Requires”标题中列出的包依赖项)。

示例:如果我有一个 perl 文件并且设置了执行权限位。RPM 将检查 perl 是否安装在 perl 文件中“#!/bin/perl”指定的位置。(看起来它检查 RPM 数据库以查看 perl 是否安装在该位置,而不是检查实际文件位置)如果 perl 未安装在 /bin/perl 位置,我想在 RPM 错误提示之前安装它我“[MY_PACKAGE] 需要 /bin/perl”

附带问题:由于文件依赖性检查 RPM 数据库,有没有办法更新已安装的位置?即,如果我的 perl 脚本指定“#!/usr/local/bin/perl”但我的 RPM 数据库的 perl 位于“/usr/bin/perl”中,我该如何更新 RPM 数据库?手动符号链接“/usr/local/bin/perl”将不起作用,因为它不会更新 RPM 数据库。RPM 安装程序仍然会说“[MY_PACKAGE] 需要 /usr/local/bin/perl”

4

2 回答 2

2

RPM 规范的设计准则之一是它们不应打印错误消息或以任何方式与用户交互。您不知道它们是手动安装还是通过 yum/GUI 安装。

您可以指定对文件的依赖项,就像对文件包的依赖项一样,确保文件名以 / 开头。如果您打印出 RPM 的依赖项列表,您会看到一些 .so 库以这种方式列出。

如果您使用 Perl,最好的方法是将 perl 作为您的要求包含在规范中,并依赖于它的发行版的正常位置,即 /usr/bin/perl。

于 2010-07-25T04:36:17.143 回答
1

我认为您正在尝试使用错误的工具来完成这项工作。rpm 的工作是安装它被告知要安装的软件包,而不是去寻找其他软件包。引入依赖项是高级工具的工作,例如 apt、urpmi 或 yum。

对于您给出的示例,如果您的包需要/usr/local/bin/perl,那么其他一些包必须提供/usr/local/bin/perl。那可能是一个包,其中包含一个符号链接 from /usr/local/bin/perlto/usr/bin/perl并声明了一个依赖/usr/bin/perl项(我不知道这如何让您需要最低版本/usr/local/bin/perl)。

于 2010-07-20T19:11:04.680 回答