我创建了一个自定义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命令似乎也理解这一点。
答案 0 :(得分:0)
正如Check RPM dependencies中所述,您可以向yum
和rpm
询问有关依赖关系,例如,
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有类似的解决方法,例如,
修改自动依赖机制似乎是一个坏主意,但这是一种可能性。