Dependencies RPM软件包可以使用RPM命令安装,但无法通过yum依赖项检查

Dependencies RPM软件包可以使用RPM命令安装,但无法通过yum依赖项检查,dependencies,rpm,yum,Dependencies,Rpm,Yum,我创建了一个定制RPM包,它提供了一个特定版本的Ruby,并预装了一组定制的rubygems。RPM包将ruby安装在自定义位置:/usr/local/ruby\u alt/。因此,安装的ruby将位于:/usr/local/ruby\u alt/bin/ruby 包中的一些gem脚本有一行she-bang引用自定义Ruby安装,例如/usr/local/ruby\u alt/bin/ruby RPM包是在AutoReqProv=yes的情况下创建的,这意味着rpmbuild将自动扫描包的内容以

我创建了一个定制RPM包,它提供了一个特定版本的Ruby,并预装了一组定制的rubygems。RPM包将ruby安装在自定义位置:/usr/local/ruby\u alt/。因此,安装的ruby将位于:/usr/local/ruby\u alt/bin/ruby

包中的一些gem脚本有一行she-bang引用自定义Ruby安装,例如/usr/local/ruby\u 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命令没有问题,为什么百胜拒绝安装此RPM软件包

编辑:我已经验证了rpm和yum都将/usr/local/ruby_alt/bin/ruby显示为依赖项,因此这并不是说yum具有比rpm命令更广泛的依赖项检查。难道没有其他人遇到过这样的情况:yum拒绝安装满足其自身依赖性的包吗?正如您在上面的讨论中所回忆的,所讨论的包满足此依赖关系,rpm命令似乎理解此依赖关系。

如中所述,您可以向yum和rpm询问依赖关系,例如

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

以下是一些相关的讨论:

重读一遍,关于满足其自身依赖性的注释让我想起了Perl打包vi(如emacs)时遇到的问题。我不止一次使用的解决方法之一是在脚本mime.pl中添加一行,该行显示为一个依赖项,如下所示:

our $RPM_Provides = 'mime.pl perl(mime.pl)';
以及在等级库文件中:

Provides:       perl(mime.pl)
也就是说,RPM被这些提示所安抚——根据RPM和平台的不同版本,它们都是必要的。Ruby也有类似的解决方法,例如

Fedora项目
修补自动依赖项机制似乎是个坏主意,但这是可能的。

yum当然会进行更广泛的依赖项检查。有几个想法:1依赖项的重复处理行看起来很奇怪,如果在包上执行rpm-qpR,它会重复吗?。2如果您碰巧使用rpm安装了该软件包,但没有卸载它,并且重新生成了该软件包,则由于版本相同,因此yum将拒绝安装重新生成的软件包。1重复的“处理行”也困扰着我。在包上运行rpm-qpR只显示了对/usr/local/ruby\u alt/bin/ruby的一个依赖。2使用rpm安装后,在尝试使用yum安装之前,我已擦除了软件包并清理了缓存。我做了一项准备工作,看看是否可以重现您的问题,并提供更具体的建议。顺便说一下,您还应该能够使用第三种方法进行测试:使用yum install package-file.rpm,而无需将其放入存储库。这将产生与存储库相同的结果,但工作量会减少。我将编辑我的原始问题以注意这一点。