安全更新你的glibc库

文摘   2024-07-15 18:23   广东  

关注+星号公众号,不容错过精彩

作者:HywelStar

在Linux 平台开发偶尔会遇到glibc库版本过低的问题,但是glibc又是一个非常重要的东西,如果升级失败会导致很多命令都无法使用,是一个非常危险的操作。笔者也是查看过一些文章,在这个地方踩坑过,本章节将会介绍你如何去安全升级你的glibc库以及失败的案例。

友情提示:升级glibc库有风险,小白请谨慎升级。

本例子:Ubuntu 18.04

目标:将glibc版本升级到最新2.28,推荐第四节

1. glibc 库介绍

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api, 几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。
整体来说这就是一个缺一不可的东西,在开发中必定会使用上它。更新方法推荐查看本章第4节glibc更新方法。

2. glibc 版本查看

# 方法1 ldd 命令ldd --version
# 方法2 libc.so.6strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC
# 方法3 `getconf`命令getconf GNU_LIBC_VERSION

3. 源码编译升级glibc 库

3.1 源码下载并解压

wget http://ftp.gnu.org/gnu/libc/glibc-2.34.tar.gztar -xzf glibc-2.34.tar.gzcd glibc-2.34

3.2 编译安装

mkdir buildcd build../configure --prefix=/opt/glibc-2.34make -j4sudo make install

编译期间可能遇到一些问题,可以查看第3.4小节问题解决和注意要点

请注意需要指定安装目录(--prefix=/opt/glibc-2.34),如果没有安装目录,在期间出现问题,系统很多命令都无法使用。

3.3 更新环境变量

创建脚本use_new_glibc.sh

#!/bin/bashexport LD_LIBRARY_PATH=/opt/glibc-2.34/lib:$LD_LIBRARY_PATHexport PATH=/opt/glibc-2.34/bin:$PATH

source use_new_glibc.sh

但是!!!很遗憾出现一些问题!!!中间可能存在一些操作,关于替换或者怎样的,笔者试过会出现一些问题,最后采用更好的办法升级查看第四章节。

hywelstar@ubuntu:~/work$ source ./glibc-2.34/use_new_glibc.shhywelstar@ubuntu:~/work$ ldd --versionSegmentation fault (core dumped)hywelstar@ubuntu:~/work$ ls /opt/glibc-2.34/libSegmentation fault (core dumped)hywelstar@ubuntu:~/work$ /opt/glibc-2.34/bin/ldd --versionSegmentation fault (core dumped)hywelstar@ubuntu:~/work/glibc-2.34$ gdb lsgdb: relocation error: /lib/x86_64-linux-gnu/libpcre.so.3: symbol pthread_mutex_unlock version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time referencehywelstar@ubuntu:~/work/glibc-2.34$ gdb lddgdb: relocation error: /lib/x86_64-linux-gnu/libpcre.so.3: symbol pthread_mutex_unlock version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference

3.4. 问题解决和注意要点

3.4.1 gcc 缺失问题

hywelstar@ubuntu:~/work/glibc-2.34/build$ ../configure --prefix=/opt/glibc-2.34checking build system type... x86_64-pc-linux-gnuchecking host system type... x86_64-pc-linux-gnuchecking for gcc... nochecking for cc... nochecking for cl.exe... noconfigure: error: in `/home/hywelstar/work/glibc-2.34/build':

解决办法:

sudo apt updatesudo apt install build-essential

3.4.2 gawkbison 程序版本过旧。

解决办法:

sudo apt updatesudo apt install gawk bison

3.4.3 依赖库

sudo apt updatesudo apt install build-essentialsudo apt install gawksudo apt install bisonsudo apt install libc6-devsudo apt install libncurses5-devsudo apt install texinfosudo apt install git

4. glibc更新方法

编辑文件:/etc/apt/sources.list 添加高版本源

deb http://mirrors.aliyun.com/ubuntu/ jammy main

保存退出。

执行

sudo apt updatesudo apt install libc6

查看结果:

已经更新到了2.28版本。

5. 总结

更新glibc有源码的方式和添加更新源的方式,对于这两种来说,后者会更加安全,不容易出错,但是后者对于控制版本不是很友好。如果在使用源码更新的过程中出现了问题,可以考虑通过其他第三方介质U盘等添加原本的glibc版本的库文件进行恢复。另外建议,对于新的开源项目,不要再使用太旧版本系统了。


码思途远
一位码农的日常分享,专注嵌入式领域相关知识。
 最新文章