HCRM博客

CentOS 6.5 GCC 4.4 升级后 libc.so.6 冲突解决攻略

CentOS6.5 gcc4.4升级后libc.so.6冲突回滚:手把手救场笔记

CentOS 6.5 GCC 4.4 升级后 libc.so.6 冲突解决攻略-图1

昨晚刚把gcc4.4升到6.5,重启后ssh直接炸锅,libc.so.6: version `GLIBC_2.14' not found红字刷屏,业务进程全挂。别慌,这台老机器是我吃饭的家伙,十分钟内必须让它重新开口说话。下面把踩坑+回滚全过程一字不落写下来,照着敲,九成能活。

CentOS 6.5 GCC 4.4 升级后 libc.so.6 冲突解决攻略-图2

先别急着重装——确认现场

1. 控制台或iDRAC先登进去,看能不能进单用户模式。

开机按任意键进GRUB,选中内核按e,在kernel行末尾加single init=/bin/bash,回车+b启动。

2. 系统起来后,mount -o remount,rw /把根目录挂成可写,先df -h确认/没满,再ls -l /lib64/libc.so.6看软链指向。

如果看到libc-2.12.so被改成了libc-2.14/2.17,那基本可以确定:升级gcc时顺手把glibc也“带飞”了,CentOS6.5原生只认2.12,高了就罢工。

最稳的回滚思路:就地降级glibc

CentOS 6.5 GCC 4.4 升级后 libc.so.6 冲突解决攻略-图3

重装系统?数据量上百G,备份窗口没有,PASS。

用LiveCD拷文件?机器在异地机房,PASS。

最省时的办法:把旧版本libc请回来,软链指回去,让系统先能启起来,再慢慢收拾残局。

Step1 找到救命包——提前备好官方rpm

升级前如果做了yum缓存,那恭喜你:

cd /var/cache/yum/x86_64/6/base/packages

大概率能看到glibc-2.12-1.209.el6.x86_64.rpmglibc-common-2.12-1.209.el6.x86_64.rpm

没有缓存?用外网机wget拖同版本rpm,scp拷进单用户目录。

别图省事去网上随便下“2.12”就装,小版本号必须和原来一致,rpm -q --queryformat '%{VERSION}-%{RELEASE}\n' -p glibc*.rpm先核对。

Step2 强制降级——无视依赖先救命

单用户下网络没启,yum不能用,直接rpm上阵:

rpm -Uvh --force --nodeps glibc-2.12-1.209.el6.x86_64.rpm glibc-common-2.12-1.209.el6.x86_64.rpm

看到warning: /lib64/libc-2.12.so already exists别管,–force会覆盖。

装完立即ln -sf /lib64/libc-2.12.so /lib64/libc.so.6,再ldconfig -v刷新缓存。

Step3 验证系统活没活

1. /lib64/libc.so.6敲回车,如果打印出版本列表里最高只有GLIBC_2.12,说明软链成功。

2. ls /lib64/ld-linux-x86-64.so.2确认loader也指回2.12版。

3. 直接执行/sbin/init,系统切回正常运行级,sshd能启,业务进程陆续拉起来,top看负载下降,基本回血。

Step4 把gcc也恢复原位

glibc降级后,高版gcc还会调用新符号,直接跑会段错误。

yum history list找升级事务ID,yum history undo ID号一键回退gcc、cpp、libgcc整套包。

如果history被清,就手动rpm -e把devtoolset或源码装的gcc6目录删干净,再yum install gcc gcc-c++装回4.4.7。

确认gcc --version输出4.4.7 20120313 (Red Hat 4.4.7-23)。

Step5 收尾——锁定版本+备份

1. 在/etc/yum.conf里加exclude=glibc* glibc-devel* glibc-common*,防止下次误升级。

2. 把刚救命的glibc-2.12-1.209.el6.x86_64.rpm单独拷到/root/backup,写个3行小脚本:

#!/bin/bash

cp -f /root/backup/glibc*.rpm /tmp && rpm -Uvh --force /tmp/glibc*.rpm && ldconfig

chmod +x /root/rollback_glibc.sh,下次再翻车直接跑脚本,两分钟搞定。

3. 给同事留一份操作手册,贴机房显眼处,别再用yum -y update一把梭。

常见作死场景对照

• 用源码编译升级glibc,make install直接覆盖系统目录——十秒内系统必死,只能用LiveCD救。

• 看到网上教程“wget libc6_2.17.deb,alien转rpm”就装——包结构不同,ldconfig崩,回滚都救不了。

• 只回滚libc,没管libpthread、librt,结果dns解析、多线程程序继续报错——记得把glibc整套降级。

CentOS6.5天生只认glibc2.12,升级gcc可以,但千万别动libc;一旦冲突,单用户+旧版rpm强制降级+软链指回是最快最稳的回滚路线,数据不丢,业务不停,十分钟内可收工。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41705.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~