Contents
  1. 1. Centos 升级glibc
    1. 1.1. 前言
      1. 1.1.1. glibc简介
    2. 1.2. 为什么要升级
    3. 1.3. 升级过程
      1. 1.3.1. 选择版本下载安装包
      2. 1.3.2. 安装gcc
      3. 1.3.3. 编译
      4. 1.3.4. glibc软链
      5. 1.3.5. glibc升级失败回滚方法
    4. 1.4. 相关原理
    5. 1.5. 相关链接

Centos 升级glibc

前言


刚升级了glibc,整理网上文章如下

glibc简介


glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。


百科

为什么要升级


查看系统glibc库版本可使用如下命令:

$ strings /lib64/libc.so.6 |grep GLIBC_

Centos 为了稳定使用的glibc版本通常比较低。而安装有些程序需要依赖新版本。升级glibc需要慎重,因很多人升级失败后导致系统不能用了。

如果升级基本C运行库到一个太新的版本,可能会影响CentOS的运行。所以大家如果遇到CentOS基本库的问题,影响了自己程序的运行,应该可以考虑:

  1. 在低版本的系统编译自己的产品,如果自己的产品确实不需要新版才支持的新特性

  2. 用版本高的系统来编译,比如ubuntu,和centos的新版,但可能需要部署到较低版本,那么可以考虑用mock等技术制作更好的安装包,把依赖打入包内

  3. 利用容器技术,如Docker,在低版本的操作系统内,轻量级的隔离出一个虚拟运行环境,适应你的程序。

升级过程


选择版本下载安装包


https://ftp.gnu.org/gnu/glibc/

1
2
3
wget http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz
#解压
tar xvf glibc-2.15.tar.gz

安装gcc

1
yum -y install gcc

编译


1
2
3
mkdir build
cd build
../configure --prefix=/opt/glibc-2.15

glibc软链


1
2
rm -rf /lib64/libc.so.6 
LD_PRELOAD=/opt/glibc-2.15/lib/libc-2.15.so ln -s /opt/glibc-2.15/lib/libc-2.15.so /lib64/libc.so.6

glibc升级失败回滚方法


1
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

相关原理


glibc在linux下是个软链接。

1
2
$ ll /lib64/libc.so.6  
lrwxrwxrwx 1 root root 19 Sep 23 08:29 /lib64/libc.so.6 -> /lib64/libc-2.12.so

上面做的事情是:

  1. 把新的glibc编译好了。
  2. 然后,把旧的删除,新的换上去。


    因为ln命令本身依赖glibc库,前面删除glibc软链之后需要使用:
    1
    LD_PRELOAD=/opt/glibc-2.15/lib/libc-2.15.so ln -s /opt/glibc-2.15/lib/libc-2.15.so /lib64/libc.so.6

手工指定glibc库的位置来完成ln命令执行。

相关链接

http://m.blog.csdn.net/article/details?id=52033950
http://blog.csdn.net/officercat/article/details/39520227

Contents
  1. 1. Centos 升级glibc
    1. 1.1. 前言
      1. 1.1.1. glibc简介
    2. 1.2. 为什么要升级
    3. 1.3. 升级过程
      1. 1.3.1. 选择版本下载安装包
      2. 1.3.2. 安装gcc
      3. 1.3.3. 编译
      4. 1.3.4. glibc软链
      5. 1.3.5. glibc升级失败回滚方法
    4. 1.4. 相关原理
    5. 1.5. 相关链接