可以使用rpm命令安装RPM软件包,但是yum依赖项检查失败

时间:2015-04-10 21:22:18

标签: dependencies rpm yum

我创建了一个自定义RPM包,它提供了一个特定版本的Ruby,并预先安装了一组自定义的rubygems。 RPM软件包在自定义位置安装ruby:/usr/local/ruby_alt/。所以安装的ruby位于:/usr/local/ruby_alt/bin/ruby

软件包中的一些gem拥有引用自定义Ruby安装的she-bang行的脚本(例如#!/usr/local/ruby_alt/bin/ruby)。

RPM包是使用AutoReqProv=yes创建的(意味着rpmbuild将自动扫描包的内容以获取依赖关系)。 rpmbuild正确地将/usr/local/ruby_alt/bin/ruby标识为依赖项。

此软件包使用rpm命令(例如rpm -i ruby_alt_pvdgm...)成功安装在CentOS 6环境中,没有错误或警告。

当此rpm放在自定义yum存储库中并尝试使用yum安装它时,我们得到:

$ sudo yum install ruby_alt_pvdgm
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: repos.redrockhost.com
 * epel: fedora-epel.mirror.lstn.net
 * extras: centos-distro.cavecreek.net
 * updates: mirrors.loosefoot.com
Resolving Dependencies
--> Running transaction check
---> Package ruby_alt_pvdgm.x86_64 0:2.2.1-2.el6 will be installed
--> Processing Dependency: /usr/local/ruby_alt/bin/ruby for package: ruby_alt_pvdgm-2.2.1-2.el6.x86_64
--> Processing Dependency: /usr/local/ruby_alt/bin/ruby for package: ruby_alt_pvdgm-2.2.1-2.el6.x86_64

Packages skipped because of dependency problems:
    ruby_alt_pvdgm-2.2.1-2.el6.x86_64 from fury

据我所知,/usr/local/ruby_alt/bin/ruby在安装时不存在,但包本身满足依赖性,所以应该没有困难。实际上,rpm命令 - 如前所述 - 安装包没有问题。

为什么当rpm命令没有投诉时,yum拒绝安装此RPM包?

编辑:我已经验证rpm和yum都显示/usr/local/ruby_alt/bin/ruby作为依赖项,因此这不是yum具有比rpm命令更广泛的依赖性检查的情况。没有其他人遇到yum拒绝安装满足它自己的依赖项的包的情况吗?正如您从上面的讨论中回忆的那样,有问题的程序包满足了这种依赖关系,rpm命令似乎也理解这一点。

1 个答案:

答案 0 :(得分:0)

正如Check RPM dependencies中所述,您可以向yumrpm询问有关依赖关系,例如,

yum -q deplist $PKG
rpm -qpR $PKG

由于yum有更多可用信息,因此在安装软件包时,它会尝试通过安装它们来满足依赖项。 rpm无法做到这一点,并且会默默地允许某些依赖关系不满足。

以下是一些相关的讨论:

重读,关于"的评论满足了自己的依赖关系"让我想起了Perl遇到的问题(包装vi-like-emacs)。我使用的一个解决方法(需要不止一个)是在脚本中添加一行(mime.pl),它显示为依赖关系,如下所示:

our $RPM_Provides = 'mime.pl perl(mime.pl)';

以及spec文件:

Provides:       perl(mime.pl)

也就是说,RPM已被这些提示所取代 - 根据RPM和平台的不同版本,它们都是必需的。 Ruby有类似的解决方法,例如,

修改自动依赖机制似乎是一个坏主意,但这是一种可能性。