我创建了一个自定义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 回答
如Check RPM dependencies中所述,您可以询问
yum
和rpm
有关依赖关系,例如,因为
yum
有更多可用信息,所以在安装软件包时,它会尝试通过安装它们来满足依赖项 .rpm
无法做到这一点,并且会默默地允许某些依赖项不满足 .以下是一些相关的讨论:
How to get list of dependencies of non-installed RPM package?
How To Locate Dependencies Needed by RPM Packages
重读,关于“满足自己的依赖关系”的评论让我想起了我用Perl遇到的问题(打包vi-like-emacs) . 我使用的一个解决方法(需要不止一个)是在脚本中添加一行(mime.pl),它显示为依赖关系,如下所示:
以及在spec文件中:
也就是说,RPM被这些提示所取代 - 根据不同版本的RPM和平台,它们都是必需的 . Ruby有类似的解决方法,例如,
Packaging:Ruby(Fedora项目)
Automatic Dependencies
修改自动依赖机制似乎是一个坏主意,但这是一种可能性 .