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