前言

在rpm/dpkg 安装软件包时会经常包缺少依赖类的错误,往往这时会选择忽略依赖安装,虽然有时这种方式解决了当下的问题,但却为以后挖了坑。

往往是yum/apt 仓库没有相应软件或相应版本时才使用rpm/dpkg 安装软件包,而出现这种情况大多数又是因为网络限制或内部部署了本地库,又或者是因为yum/apt 仓库配置不全导致的

这里说下,在centos 系统下至少要配置base、updates、extras这三类元数据地址

掉坑

过了N久,在安装某一软件包或yum 更新时,系统报出了依赖错误或版本冲突……比如glibc 依赖错误

1.glibc ld-linux-x86-64.so.2:bad ELF interpreter

这时想当然的盲目卸载glibc 然后安装对应的版本 可能就会导致无法挽救的结果……
一旦将glibc 卸载后,绝大多少系统命令都会无法使用,因为需要依赖glibc库文件,报错如下
ld-linux-x86-64.so.2:bad ELF interpreter

这时如果恰巧系统安装了busybox,则可以使用busybox 工具下载并重新安装glibc库文件

busybox wget http://mirror.centos.org/centos/6/os/x86_64/Packages/glibc-2.12-1.209.el6.x86_64.rpm
busybox rpm -ih glibc-2.12-1.209.el6.x86_64.rpm

2.Error: Package: glibc-2.12-1.209.el6.i686 (Base)

描述:已经配置好yum源,在update 时报错终止,具体信息如下

Error: Package: glibc-2.12-1.209.el6.i686 (Base)
           Requires: glibc-common = 2.12-1.209.el6
           Installed: glibc-common-2.12-1.209.el6_9.1.x86_64 (installed)
               glibc-common = 2.12-1.209.el6_9.1
           Available: glibc-common-2.12-1.209.el6.x86_64 (Base)
               glibc-common = 2.12-1.209.el6
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

之前在处理类似问题时是因为没有yum 源,手工安装更新,但这次已经配置好了yum,不应该报此类错误

yum clan all
yum update

反复试了几次,问题依旧。检查yum 配置,发现内容相同的两份repo 文件,一份为开启状态,一份为关闭状态,且updates元数据都是关闭状态
保留一份repo 文件,且将元数据全部设置为开启状态,再次update 执行成功

3.has missing requires of

此类错误在update 错误后需要执行

yum check

才会出现,报错信息如下

cloog-ppl-0.15.7-1.2.el6.x86_64 has missing requires of libppl.so.7()(64bit)
cloog-ppl-0.15.7-1.2.el6.x86_64 has missing requires of libppl_c.so.2()(64bit)
Error: check all

大概意思是“has missing requires of” 前面的软件包缺少“has missing requires of” 后面的库文件
如确认软件包可有可无时,则可先remove掉,若无法remove,则需要安装对应缺少的库文件包,然后则可正常update

后记

单独rpm 安装软件包时,如遇依赖错误,一定要连同缺少的依赖包一起安装
慎用 --nodeps 参数,例如glibc和glibc-common 相互依赖,则可这样安装

rpm -ih glibc.rpm glibc-common.rpm

缺少什么依赖就一起安装什么,有时系统已经安装的需要的软件包,但包版本略低,需要升级,安装时则需要注意,此时应该用-U 参数升级软件包,不是-i 参数安装

rpm -Uh openssl-1.0.2.rpm

如遇依赖报错,则同时将依赖的包一起升级

划重点

以上的问题使用yum/apt 安装方式基本都不会出现,所以有一个可以访问到的元数据仓库是多么的重要!
针对centos 系统一定要保证有os、updates、extras这三个元数据仓库
有关元数据仓库的配置,可参考上一篇