最近为兼容云计算厂家提供的虚拟机备份恢复业务场景,甲方提供内部库以及相应demo作为引子,一个rpm包,一个引发血案的rpm包。包的样子就是一个普通的rpm包,平平无奇。而这个平平无奇的rpm包中依赖某个包导致一直无法安装成功。
案情回顾:
1.配置相应新机yum源,epel-release和阿里或者清华大学的。
2.在pkgs.org上寻找各个版本稀奇古怪的包然后进行安装,说的就是libdisk和userspace-rcu这俩个搅屎棍子。libfdiso.so.1在centos7并不提供,我在fedora上找到的。而userspace-rcu这个棍子在centos7默认版本为0.7.16,甲方包要求是0.8.0及以上的。好嘛,你伯把userspace-rcu 0.7.16卸载了,然后发现了一个问题:连同lttng-ust被卸载了!!!真是岂有此理!
好不容易在fedora上找到了userspace-rcu 0.8.6的版本(这种东西感觉玄学,同样的关键字,有时能找到,有时就找不到),安装上后依赖的liburcu.so.2问题解决了,来个新问题:lttng-ust的库找不到了(在卸载userspace-rcu 0.7.16时它作为依赖项被卸载了)。
线索:不同的包依赖了同一个包的不同版本。
试错一:下载userspace-rcu源码安装,各种配置环境变量,rpm安装,人家不屌你,继续报错。差点把伯弄疯。
试错二:强行安装已下载的0.8.6的rpm包,报错:XXX conflicts with file from package XXX。
(看到上述报错,开始也没有引起重视,之前问度娘的时候还查到这个问题,原来是破题点。以此问度娘,本来看着是替换原本0.7.16包的文件的,结果并没有替换,而是把0.8.6的库也拷贝到/usr/lib64,至此问题解决了。)
结案:
rpm -ivh xxx.rpm --replacefiles
遗留问题:
1.rpm安装时为何没识别到手动源码安装的库,放到/usr/lib /usr/lib64 /usr/local/lib下均不行?