Dependencies 在文件依赖性检查之前是否执行RPM规范部分?

Dependencies 在文件依赖性检查之前是否执行RPM规范部分?,dependencies,installation,rpm,specifications,Dependencies,Installation,Rpm,Specifications,我正在尝试构建一个RPM,如果文件依赖项不存在,它将安装这些依赖项。在RPM检查依赖项之前,是否会执行RPM规范部分。(我指的是文件依赖项,而不是“Requires”标题中列出的包依赖项) 例如: 如果我有一个perl文件,并且设置了执行权限位。RPM将检查perl是否安装在perl文件中“#!/bin/perl”指定的位置。(看起来它会检查RPM数据库,以查看perl是否安装在该位置,而不是检查实际的文件位置)如果perl未安装在/bin/perl位置,我想在RPM出错之前安装它,告诉我“/b

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

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

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

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


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

我认为您试图为这项工作使用错误的工具。rpm的工作是安装它被告知要安装的软件包,而不是去寻找其他软件包。拉入依赖项是高级工具(如apt、urpmi或yum)的工作


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

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

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


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

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

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

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