centos 升级 glibc和glibcxxx ,解决error: Failed dependencies等问题

Posted faster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos 升级 glibc和glibcxxx ,解决error: Failed dependencies等问题相关的知识,希望对你有一定的参考价值。

背景:

  在vm中的linux中,安装mysql5.6的过程中,出现了缺少依赖的问题,具体报错如下。

报错一:

[root@node0 local]# rpm -ivh MySQL-server-5.6.47-1.el7.x86_64.rpm 
warning: MySQL-server-5.6.47-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
    libstdc++.so.6(GLIBCXX_3.4.15)(64bit) is needed by MySQL-server-5.6.47-1.el7.x86_64
报错二:
[root@node1 local]# rpm -ivh MySQL-client-5.6.47-1.el7.x86_64.rpm warning: MySQL-client-5.6.47-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies: libc.so.6(GLIBC_2.14)(64bit) is needed by MySQL-client-5.6.47-1.el7.x86_64 libc.so.6(GLIBC_2.17)(64bit) is needed by MySQL-client-5.6.47-1.el7.x86_64

目的:

  本文记录在centos6.x环境上,安装第三方软件,依赖高版本的glibc和glibcxxx时,该文通过收集网上相关信息,通过升级glibc和glibcxx版本,解决以上依赖报错。

环境:

   vm、centos6.1 、64bit 、mysql5.6.47。

风险:

  glibc和glibcxx是linux较为底层的运行类库,其他第三方类库都会依赖于他们,如果操作不当会引起系统无法登陆,如非必要,尽量不要去升级他们。

具体步骤:

glibc (从2.12升级至2.17)

         通过搜索网上的信息,大概找到了两种解决方法。一、下载glibc源码包,手动编译安装;二、使用现成的rpm包安装。第一种方法我曾尝试多次,虽然可升级成功,但是系统的ls、cp、rm等命令不能使用,暂时没有找到完美解决的办法;第二种方法可成功升级并且命令也可以正常使用,但是包是第三方发布的,具体内部做了什么不清楚,而且需要后续观察是否有异常。

方法一:

  (1)查看当前系统glibc版本。    使用命令  strings /lib64/libc.so.6 |grep GLIBC_ ,查看系统能支持的所有版本。

  (2)下载glibc2.17。 官网:http://ftp.gnu.org/pub/gnu/glibc/ ,这里下载2.17。 如果慢可以找中国的镜像站点http://www.gnu.org/prep/ftp.html

  (3)解压、创建build目录、configure生成makefile、make、make install。

tar –zxvf glibc-2.17.tar.gz
cd glibc-2.17
mkdir build
cd build                    //一定进到这个目录才能进行后续操作,不然会报错
../configure --prefix=/usr  // 配置glibc并设置当前glibc-2.17的安装目录,可以自定义目录后期便于失误了删除重做,/usr 是默认目录
make –j4 //4线程make 可以在命令后加上参数,如make >& log,将过程信息写入到log文件中,便于后期排错。 make install //同make

  (4)建立软连接,就是这一步会导致ls等命令无法使用。

使用如下命令建立连接 : ln -sf /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6   

这里是将libc.so.6进行替换,将连接指向新版本的glibc-2.17类库。没有手动rm  libc.so.6这个文件,直接在 ln -s 后加了参数f,进行强制替换。

如果出现了这个问题,切勿关闭当前登录窗口,不然会导致系统无法登陆。使用以下命令进行错误恢复。

LD_PRELOAD=/lib64/libc-2.12.so ln -sf /lib64/libc-2.12.so /lib64/libc.so.6

  (5) 验证版本  ldd -- version

总结:这个方法应该适用一部分系统,在我的环境当中,未能解决我的问题。 第四步中的问题,可以参考 https://www.arkuu.com/article/90.html 中描述的方法解决,但是我没有尝试,可用性待确认。

参考资料:
https://garywu520.github.io/blog/2018/12/13/Glibc%E7%BC%96%E8%AF%91%E5%8D%87%E7%BA%A7%E5%88%B02-17/
  https://blog.csdn.net/officercat/article/details/39520227
  https://blog.csdn.net/CH2JC/article/details/86420718
https://www.arkuu.com/article/90.html

方法二、
  适用rpm包进行升级。我的环境是用这种方法升级成功的。
  (1)下载rpm包 下载地址:https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174
  (2)安装
rpm -Uvh glibc-2.17-55.el6.x86_64.rpm  
glibc-common-2.17-55.el6.x86_64.rpm  
glibc-devel-2.17-55.el6.x86_64.rpm  
glibc-headers-2.17-55.el6.x86_64.rpm

上面命令如果报错,在结尾加上命令  --force --nodeps

参考资料:

        http://movingon.cn/2017/05/05/CentOS-6-x-%E5%A6%82%E4%BD%95%E5%8D%87%E7%BA%A7-glibc-2-17/

        https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174

        http://blog.ttionya.com/article-1559.html

glibcxxx (从3.4.13升级至3.4.19)

   上面截图报错二的原因一般是由于当前编译器gcc版本低造成的,通过升级gcc解决上面的报错。当前环境从gcc4.4.7升级至4.8.2。

操作步骤:

  (1)查看当前glibcxx版本    strings /usr/lib/libstdc++.so.6 | grep GLIBC   

  (2)查看软连接信息    ls -l /usr/lib64/libstdc++.so.6  ,不同版本的glibcxx,对应的目标文件版本号不同,4.8.2对应的小版本号是libstdc++.so.6.0.18

  (3)下载gcc4.8.2源码包。http://ftp.tsukuba.wide.ad.jp/software/gcc/releases   或者https://gcc.gnu.org/pub/gcc/releases/

  (4)yum 安装 gcc    yum -y install gcc gcc-c++ libstdc++ libstdc++-devel autoconf make

    如果不执行这个步骤,汇报下面的错误

make[2]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2make[1]: *** [stage1-bubble] 错误 2
make[1]: Leaving directory `/home/imdb/gcc-4.8.2/gcc-build-4.8.2make: *** [all] 错误 2

  (5)解压源码包,安装依赖的类库。

  这里有两种安装方法,联网自动安装和离线手动安装。

  联网自动安装通过 ./contrib/download_prerequisites 这个脚本去下载类库,解压安装依赖的类库,但是在我操作的过程中,这个脚本里提供的下载网址速度很慢,无法满足需要,我就选择了下载到本地离线安装。

  离线手动安装 可以vim contrib/download_prerequisites ,查看里面具体的操作,分成三步 下载、解压、连接。可以用迅雷替代wget下载里面的三个文件或者使用镜像地址下载,镜像地址可以参考https://gcc.gnu.org/mirrors.html。 手动安装时,主要注意目录,将下载好的gmp 、mpfr 、mpc目录名称重命名(去掉版本号),把他们放gcc4.8.2这个目录下,这样做是为了在编译gcc时,同时编译这三个类库。 

  (6)创建build目录,在build目录中configure,make,make install, make的时间比较久,做好准备,也可以做个 &> log 文件,记录安装日志。

  (7)验证版本  strings /usr/lib/libstdc++.so.6 | grep GLIBC

  参考资料:

      https://www.cnblogs.com/yingsi/p/3775664.html

      https://blog.51cto.com/531117978/2311161

 

以上是关于centos 升级 glibc和glibcxxx ,解决error: Failed dependencies等问题的主要内容,如果未能解决你的问题,请参考以下文章

centos升级glibc过程

centos6.9 升级glibc(升级到 2.17版)

Linux CentOS6升级glibc库过程

分享Centos6.5升级glibc过程

Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题

centos升级glibc动态库