2010-07-20 51 views
0

我想构建一个RPM,它将安装文件依赖项,如果它们不存在。是否有RPM Spec部分在RPM检查依赖关系之前执行? (我指的是“Requires”头文件中列出的文件依赖关系而不是包依赖关系)。在文件依赖性检查之前执行了RPM Spec部分吗?

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

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

回答

2

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

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

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

1

我认为你正在尝试使用错误的工具来完成这项工作。 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的最低版本)。