glibc编译及误删除修复
基于源码构建glibc(得到so文件),继而替换升级so。
glic
glibc库,是linux系统中最核心的共享库和工具,所以最好不要覆盖系统默认的,如果盲目覆盖,很可能导致整个系统瘫痪.因为一般更新glibc库时,其它所有依赖libc库的共享库都需要重新被编译一遍,所以要做了备份工作.防止系统崩溃.
1.查看加载so
#1、查看glibc支持的版本
strings /lib64/libc.so.6 |grep GLIBC_
rpm -qa |grep glibc
#2、加入系统库
LD_PRELOAD="/lib64/libc-2.18.so"
vi /etc/ld.so.conf
加入一行即可
/lib64
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
2.glibc buiding libc.so
curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
#make instal
如果不需要安装,仅仅需要so则不用执行make install
3.误删除,未退出终端
#此操作有前提的,源文件为删除,仅仅删除软连接文件,且有一个终端未退出(前提)
LD_PRELOAD=/lib64/libc-2.12.so
ln -s /lib64/libc-2.12.so /lib64/libc.so.6
注:目前CentOS 6.x 64位的glibc的版本是 v2.12 ;
4.误删除模拟
试验模拟现场:删除文件,后恢复(前提没有退出终端,也没有重启服务器)
#1、在服务器查看/lib64目录:
libc.so.6 是软链接文件,链接的源文件就是libc-2.12.so 文件,删除软链接文件,可以使用上面的方法恢复;
centos6.5
[root@lab-110 ~]# ll /lib64/libc.so.6 //glbic版本
lrwxrwxrwx. 1 root root 12 Jun 28 00:52 /lib64/libc.so.6 -> libc-2.12.so
[root@lab-110 ~]# strings /lib64/libc.so.6 |grep GLIBC_ //glbic的支持版本
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
#2、操作过程:
删除文件,之后ls cp 命令无法使用;
[root@localhost lib64]# rm -f libc.so.6
[root@localhost lib64]# ls -lh libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@localhost lib64]# cp libc-2.12.so /tmp/
cp: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
#3、重新加载
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
//内置软连接 sln /lib64/libc-2.12.so /lib64/libc.so.6
可以使用cp ls 命令,恢复成功;
cp libc-2.12.so /tmp/
ls -lh libc*
-rwxr-xr-x. 1 root root 1.9M May 10 2016 libc-2.12.so
lrwxrwxrwx 1 root root 19 Nov 25 12:17 libc.so.6 -> /lib64/libc-2.12.so
#4、objdump 反汇编查看缺失依赖库
objdump -x liblog4cxx.so|grep NEEDED