为了便于理解,我尝试设置一个 Chef 脚本来调用第三方安装程序。第三方安装程序中有这个函数:
isLibbz()
{
rpm -q --whatprovides libbz2.so.1 >/dev/null 2>&1
[ "$?" = "0" ] && return 1 || return 0
}
感谢互联网,我知道 bzip2-libs 有 libbz2.so.1 包,所以我安装了它(Chef 使用 yum 来秘密执行此操作)。但由于上述原因,安装程序仍然失败。
$ rpm -q --whatprovides libbz2.so.1
no package provides libbz2.so.1
Yum 似乎没有这个问题。
$ yum provides libbz2.so.1
Loaded plugins: auto-update-debuginfo, fastestmirror
Loading mirror speeds from cached hostfile
* CentOS-Base: mirror.den1.denvercolo.net
bzip2-libs-1.0.6-13.el7.i686 : Libraries for applications using bzip2
Repo : CentOS-Base
Matched from:
Provides : libbz2.so.1
rpm 似乎也能很好地找到已安装的库。
$ rpm -q -l bzip2-libs
/usr/lib64/libbz2.so.1
/usr/lib64/libbz2.so.1.0.6
/usr/share/doc/bzip2-libs-1.0.6
/usr/share/doc/bzip2-libs-1.0.6/LICENSE
我强烈希望修复不涉及更改可能随新软件版本而变化的大型安装程序。我能做些什么来让 rpm -q --whatprovides 执行供应商希望它执行的操作?
答案1
您需要为其提供文件的完整路径。
[root@centos75 ~]# rpm -q --whatprovides /usr/lib64/libbz2.so.1
bzip2-libs-1.0.6-13.el7.x86_64