编译升级glibc与修复

技术文档网 2021-04-19

查看当前glibc版本

strings /lib64/libc.so.6 | grep GLIBC
修复glibc

手动编译升级glibc一定要慎重。如无绝对必要,不要升级。

glibc是GNU发布的libc,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。

特别是 libc.so.6这个文件一旦误删除或变更,系统大部分命令都将失效,整个系统基本报废。

如果误操作的主机是远程主机,千万不要退出SSH,否则再也登录不上去,因此建议在进行此类重要软件包升级前,先以tmux和screen之类的工具开启一个后台窗口备用。

执行以下命令立即修复为旧版本的glibc:

LD_PRELOAD=/lib64/libc-2.12.so ln -sf /lib64/libc-2.12.so libc.so.6
unset LD_PRELOAD  #去掉LD_PRELOAD

这里的2.12应该以原来系统存在的glibc版本更改。

编译安装glibc

例1--2.12升级2.14

  1. 确保安装了gcc gcc-c++ make

  2. 下载2.14版本glibc和glibc-ports(2.16及以下版本才需要glibc-ports)

  3. 编译安装

    ver=2.14  #glibc版本
    dist=/usr/local/glibc-$ver  #glibc安装的路径
    
    tar -xJvf glibc-$ver.tar.xz
    tar -xvf glibc-ports-$ver.tar.xz  #2.16及以下版本需要
    mv glibc-ports-$ver glibc-$ver/ports -f  ##2.16及以下版本需要
    cd glibc-$ver
    mkdir build -p
    cd build
    ../configure --prefix=$dist
    make -j4 && make install
    make localedata/install-locales   #2.16及以下版本需要执行避免locale问题
    cp /etc/ld.so.conf $prefix/etc/  #2.16及以下版本需要执行
    make install
    
    #if检查以下动态文件存在与否
    if [[ -f $prefix/lib/libc-$ver.so ]]
    then
      export LD_LIBRARY_PATH=$dist/lib:$LD_LIBRARY_PATH
    fi
    #先检查原先的libc版本
    ls -l  /lib64/libc.so.6
    oldlibc=$( ls -l  /lib64/libc.so.6|cut -d ">" -f 2)
    echo $oldlibc
    #尝试一些命令 如cp w 等 确实没有问题存在再替换软连接
    ln -sf /usr/local/glibc-$ver/lib/libc-$ver.so /lib64/libc.so.6
    strings /lib64/libc.so.6|grep GLIBC
    
    #如果执行date提示Local time zone must be set--see zic 执行:
    ln -sf /etc/localtime /usr/local/glibc-$ver/etc/localtime
    #echo "export LD_LIBRARY_PATH=$prefix/lib:\$LD_LIBRARY_PATH" > /etc/profile.d/glibc.sh
    

如果误操作请不要退出终端,立即参看修复glibc

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod