1.背景描述
Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。
relocation error:
/lib64/libpthread.so.0: symbol_libc_dl_error_tsd version GLIBC_PRIVATE not defined......
重启系统之后,系统让循环输入用户名,不让输入密码,无法登陆了,远程也不让连接报错
2.原因分析
依赖库出问题了,导致产生上述两个问题
3.解决过程
(1)重启进入单用户模式
(2)将只读(ro)修改为rw init=/sysroot/bin/sh 【ro后的‘\’为换行无需在意】
(3)获取root权限
(4)查看cat /var/log/messages 发现日志提示sendmail该命令执行时依赖库/lib64/libc.so.6 中不支持GLIBC_2.3.4版本 等等
(5)查看libc.so.6 中支持的GLIBC版本 ,发现基本上都包含
strings /usr/lib64/libc.so.6|grep -E “^GLIBC*”
(6) 检查/lib64/目录下libc.so.6 链接的源文件,发现该文件链接的源文件为 “glibc-2.27.so”
同时发现该目录下存在另一个低版本的 “glibc-2.17.so”
--该目录下的 “glibm”文件链接的源文件是glibm-2.17.so
--该目录下的 “glibdl”文件链接的源文件是glibm-2.17.so
通过上面情况判断安装时更新了该库,后找同批服务器查看只有glibc-2.17.so的依赖库。
所以我直接删除glibc-2.27.so相关的文件,他的链接自动关联到了glibc-2.17.so
(7)到此无法登陆系统的问题解决了
后重启服务器,发现可以输入用户名和密码了,~~~成功登陆了系统,基本命令也能正常使用了。。。。
4.应用无法启动
恢复应用时java命令报错
[root@localhost lib64]# java
Error: dl failure on line 893
Error: failed /data/jdk8u252-b09/jre/lib/amd64/server/libjvm.so, because /lib64/libm.so.6:
symbol __strtof128_nan, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
5.原因分析
意思是javahome中的libjvm库调用 /lib64/libm.so.6,但是该库在libc.so.6 中没有被定义。
6.解决方式
因为源文件还在所以将链接全部删除重新创建
rm -rf /lib64/libc.so.6
rm -rf /lib64/libm.so.6
rm -rf /lib64/libdl.so.6
LD_PRELOAD="/lib64/libm-2.17.so" ln -s /lib64/libm-2.17.so /lib64/libm.so.6
LD_PRELOAD="/lib64/libc-2.17.so" ln -s /lib64/libc-2-2.17.so /lib64/libc.so.6
LD_PRELOAD="/lib64/libdl-2.17.so" ln -s /lib64/libdl-2.17.so /lib64/libdl.so.6