在CentOS 6.4上安装第三方应用程序包失败,原因是缺less依赖关系libcrypto.so.10和libssl.so.10

这是关于红帽企业Linux(及其衍生产品)6.4和6.5之间的OpenSSL二进制兼容性问题的典型问题 。

这个问题适用于各种各样的第三方软件包,不仅是原始问题中列出的软件包。

我安装了Percona 5.5,并试图升级到5.6,但我遇到意外的问题,我坚持如何解决它们。

我遵循http://www.percona.com/doc/percona-server/5.6/upgrading_guide_55_56.html上的说明

并删除了5.5包,然后运行以下命令进行升级:

yum install Percona-Server-server-56 Percona-Server-client-56 

我收到的错误是:

 Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package Percona-Server-client-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed --> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: Percona-Server-shared-56 for package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 ---> Package Percona-Server-server-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed --> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Running transaction check ---> Package Percona-Server-client-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed --> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 ---> Package Percona-Server-server-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed --> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 ---> Package Percona-Server-shared-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed --> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.x86_64 --> Finished Dependency Resolution Error: Package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libcrypto.so.10(libcrypto.so.10)(64bit) Error: Package: Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libcrypto.so.10(libcrypto.so.10)(64bit) Error: Package: Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libssl.so.10(libssl.so.10)(64bit) Error: Package: Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libssl.so.10(libssl.so.10)(64bit) Error: Package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libssl.so.10(libssl.so.10)(64bit) Error: Package: Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64 (percona) Requires: libcrypto.so.10(libcrypto.so.10)(64bit) You could try using --skip-broken to work around the problem ** Found 3 pre-existing rpmdb problem(s), 'yum check' output follows: perl-DBD-MySQL-4.022-1.el6.rfx.x86_64 has missing requires of libmysqlclient.so.16()(64bit) perl-DBD-MySQL-4.022-1.el6.rfx.x86_64 has missing requires of libmysqlclient.so.16(libmysqlclient_16)(64bit) perl-DBD-MySQL-4.022-1.el6.rfx.x86_64 has missing requires of mysql 

我已经尝试了一切从重新安装openssl和openssl-devel安装正确,但它仍然无法正常工作。 有任何想法吗?

我正在运行CentOS 6.4:

 root@server01 [/]# cat /proc/version Linux version 2.6.32-279.5.2.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Aug 24 01:07:11 UTC 2012 root@server01 [/]# 

这个问题的根本原因是红帽打破了6.4和6.5之间的OpenSSL包的二进制兼容性, 他们承诺他们不会这样做 。

解决这个问题很简单,但根据您可能已经部署的应用程序,可能会对应用程序供应商大喊大叫。 一定要保留你的红帽代表大部分的愤怒(如果你有RHEL)。


原因

红帽将EL6中的OpenSSL版本从1.0.0升级到1.0.1版本 ,以解决为数十年的function要求添加椭圆曲线密码保护支持。 这个软件包不再是二进制兼容的,而且针对OpenSSL 1.0.0构build的程序必须从源码1.0.1重build。

除非你正在安装第三方应用程序,当然,几乎每个人都这样做。 那些也必须重新编译,在这一点上,大多数第三方已经这样做了,并且在6.5版本的基础上构build了新的包。 这是第三方通常在今天发货的这些软件包。

parsing度

确定所有受影响的第三方软件包并联系第三方软件包供应商以获取更新。 一旦更新可用于所有软件包,您可以安全地将系统更新到6.5,同时安装第三方软件包更新,这将完成解决scheme。

对于通过软件包pipe理器和yum软件库安装的软件包,这是微不足道的; 只是试图升级和能够这样做没有依赖性问题意味着包是准备好的。

对于手动安装的软件包,您需要自行检查这些软件包,并应用供应商提供的任何更新。 在这些情况下,您也应该要求这些供应商提供适当的RPM软件包和yum软件库。

大多数用户可以使用如下命令更新到6.5:

 yum --disableexcludes=all --obsoletes update 

设置特定次要版本的RHEL用户在运行上述更新之前,必须先将6.5设置为其发布目标:

 subscription-manager release --set=6.5 

此时,您应该能够安装您尝试安装的第三方软件包。


其他事宜

某些VPS或云提供商的CentOS和其他RHEL克隆用户可能会发现,它们无法更新到6.5。 yum命令将声明没有包被标记为更新。 到目前为止,我已经在Windows Azure和一些低端的VPS提供商看到了这一点。

在这些情况下,正在使用的CentOS映像的提供者修改了映像中的/etc/yum.repos.d/CentOS-Base.repo指向除官方CentOS镜像以外的储存库。

这可以通过手动编辑repo文件来恢复官方的CentOS镜像,或者通过在CentOS镜像中find官方的centos-release RPM并重新安装。 例如(这个URL只是今天好,可能会过时,先检查你的镜像):

 yum update http://mirror.centos.org/centos/6/os/x86_64/Packages/centos-release-6-5.el6.centos.11.2.x86_64.rpm 

将openssl升级到openssl-1.0.1e-15.el6.x86_64.rpm后,可以安装PS 5.6

对于6.4我们(我为Percona工作)也有一些定制的软件包可用: http : //www.percona.com/downloads/Percona-Server-5.5-centos-6.4/