请先看备份与恢复,否则可能导致SSH无法连接,基础命令实效
系统centos 7
gorse-in-one: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by gorse-in-one)gorse-in-one: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by gorse-in-one)
这个问题是没有找到2.32以及2.34的glibc可以先查看一下目前可用的glibc版本
strings /lib64/libc.so.6 | grep GLIBC
运行结果如下
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
...
可以看出目前并没有那两个版本的glibc那么,就进入正题,升级glibc版本
备份与恢复
升级中会用到以下命令(路径是你自己的路径),当升级进行到最后一步make install失败时会到导致基础命令,如ls无法执行,SSH也会无法连接,切记此时不要断开、不要断开、不要断开ssh连接。
LD_PRELOAD=/lib64/libc-2.34.so sln /app/glibc-2.34/build/libc.so.6 /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.34.so sln /app/glibc-2.34/build/dlfcn/libdl.so.2 /lib64/libdl.so.2
LD_PRELOAD=/lib64/libc-2.34.so sln /app/glibc-2.34/build/nptl/libpthread.so.0 /lib64/libpthread.so.0
LD_PRELOAD=/lib64/libc-2.34.so sln /app/glibc-2.34/build/elf/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2
备份
将/lib64/下的ld-linux-x86-64.so.2、libpthread.so.0、libc-${版本号}.so比如libc-2.17.so、libc.so.6、libdl.so.2备份这些文件
恢复
# libc-2.17.so 是/lib64文件夹中的文件
LD_PRELOAD=/lib64/libc-2.17.so sln /lib64/libc-2.17.so /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.17.so sln libdl.so.2备份文件名 libdl.so.2
LD_PRELOAD=/lib64/libc-2.17.so sln libpthread.so.0备份文件名 libpthread.so.0
LD_PRELOAD=/lib64/libc-2.17.so sln ld-linux-x86-64.so.2备份文件名 ld-linux-x86-64.so.2
二、升级glibc版本
注:升级glibc版本存在系统崩溃风险,强烈建议在升级前拍摄系统快照,以便出错时及时恢复此操作建议需要的权限较高,建议root成员进行操作,非root成员建议全程使用sudo操作
1. 下载对应的软件包
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.34.tar.gz
2. 解压软件包
tar -zxvf glibc-2.34.tar.gz
3. 查看新版本glibc安装要求,并查看自己版本是否符合需求
cd glibc-2.34
cat INSTALL | grep -E "later|newer"
结果如下,主要关注python make gcc 三个版本
python -V
gcc -v
make -v
Python 2.7.5
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
GNU Make 3.82
4. 升级python版本如果不执行这步,直接进行升级会出现如下报错
configure: error:
*** These critical programs are missing or too old: make compiler python
*** Check the INSTALL file for required versions.
4.1 下载软件包
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
4.2 解压
tar -zxf Python-3.8.0.tgz
4.3 编译
依次执行下列命令
mkdir /usr/local/python3cd
Python-3.8.0
mkdir build
../configure --prefix=/usr/local/python3make -j 4
make install
4.4 确认更新后的python版本
python3 -V
5. 更新make版本
如果不执行这步,直接进行升级会出现如下报错
configure: error: *** These critical programs are missing or too old: make compiler*** Check the INSTALL file for required versions.
5.1 下载软件包
wget http://ftp.gnu.org/pub/gnu/make/make-4.3.tar.gz
5.2 解压
tar -zxvf make-4.3.tar.gz
5.3 编译
cd make-4.3./configure --prefix=/usrtype makemake check# 可能会报一些错误,不过不影响后面的installmake install
这几步稍有点慢,耐心等待
5.4 确认更新后的make版本
make -v
GNU Make 4.3为 x86_64-pc-linux-gnu 编译Copyright (C) 1988-2020 Free Software Foundation, Inc.许可证:GPLv3+:GNU 通用公共许可证第 3 版或更新版本<http://gnu.org/licenses/gpl.html>。本软件是自由软件:您可以自由修改和重新发布它。在法律允许的范围内没有其他保证。
6. 更新gcc版本
如果不执行这步,直接进行升级会出现如下报错
configure: error: *** These critical programs are missing or too old: compiler*** Check the INSTALL file for required versions.
6.1 下载软件包
wget http://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
6.2 解压
tar -zxvf gcc-11.2.0.tar.gz
6.3 编译
mkdir build
cd build/
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
# 这一步时间非常长
make -j 4
# 删除旧版本
yum -y remove gcc g++
# 安装
make install
非常慢,耐心等待
6.4 验证gcc版本
gcc -v
Using built-in specs.
COLLECT_GCC=/usr/local/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/11.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posixSupported LTO compression algorithms: zlib
gcc version 11.2.0 (GCC)
6.5 配置全局可用
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
# 更新动态库
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.29 /usr/lib64/libstdc++.so.6
7. 编译新版本glibc
cd glibc-2.34
mkdir bulid
cd bulid
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
8. 安装
这步请务必确保当前用户拥有权限,非root用户请使用sudo运行
cd
接下来大概率会报这样的错误
gcc: relocation error: /lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
make[1]: *** [Makerules:1041: /home/luolong/glibc-2.35/build/format.lds] Error 127
make[1]: Leaving directory '/home/luolong/glibc-2.35'
make: *** [Makefile:12: install] Error 2
这时候应该SSH的链接也断开了,很多基础命令也无法使用了 如使用ls命令
ls: relocation error: /lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
这是正常现象,请键入如下命令
LD_PRELOAD=/lib64/libc-2.34.so sln ${解压后的路径}/glibc-2.34/build/libc.so.6 /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.34.so sln ${解压后的路径}/glibc-2.34/build/dlfcn/libdl.so.2 /lib64/libdl.so.2
LD_PRELOAD=/lib64/libc-2.34.so sln ${解压后的路径}/glibc-2.34/build/nptl/libpthread.so.0 /lib64/libpthread.so.0
LD_PRELOAD=/lib64/libc-2.34.so sln ${解压后的路径}/glibc-2.34/build/elf/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2
PS:如果你并不是root用户,请将glibc-2.34移动到非root文件夹,再次执行
make install
9. 检查可用glibc版本
strings /lib64/libc.so.6 | grep GLIBC
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_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28
GLIBC_2.29
GLIBC_2.30
GLIBC_2.31
GLIBC_2.32
GLIBC_2.33
GLIBC_2.34
GLIBC_PRIVATE
成功!!!