这是一个典型问题关于 Red Hat Enterprise 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 [/]#
答案1
这个问题的根本原因是 Red Hat 破坏了 OpenSSL 软件包在 6.4 和 6.5 之间的二进制兼容性,这是他们保证不会做。
解决这个问题很简单,但根据您部署的应用程序,可能需要向您的应用程序供应商大喊大叫。请务必将大部分愤怒留给您的 Red Hat 代表(如果您有 RHEL)。
原因
Red Hat 在 EL6 中升级了 OpenSSL 版本在 6.5 更新中从 1.0.0 升级到 1.0.1,以解决一个已有多年历史的功能请求添加椭圆曲线加密支持。此软件包不再兼容二进制,针对 OpenSSL 1.0.0 构建的程序必须从源代码针对 1.0.1 重新构建。
当然,除非你安装第三方应用程序,而几乎每个人都会这样做。这些应用程序也必须重新编译,目前大多数第三方都已经这样做了,并针对 6.5 构建了新软件包。这些软件包是第三方现在普遍提供的。
解决
确定所有受影响的第三方软件包,并联系第三方软件包供应商获取更新。一旦所有软件包都有更新,您就可以安全地将系统更新到 6.5,同时安装第三方软件包更新,这将完成解决方案。
对于通过包管理器和 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-release
CentOS 镜像上找到官方 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
答案2
将 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/