马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
CentOS 默认跟随稳定优先,glibc 版本往往落后一大截,一些新软件要求 2.28 以上甚至 2.31。在 CentOS 7(自带 glibc 2.17)上升到 2.31 属于「踩雷级」操作,准备不足会直接把系统命令搞坏。这篇按检查、依赖升级、源码编译、备份回滚四段拆开讲。
一、先看清 current 状态
1.1 检查系统版本
先 cat /etc/redhat-release 或 uname -r 确认是 CentOS 7,并且当初装的时候带了图形界面 GNOME(后面图形化校验方便)。
1.2 检查 glibc 版本
rpm -qa | grep glibc
ldd --version
确认当前是 2.17,目标就是升到 2.31。注意 glibc 是系统底层库,几乎所有命令都依赖它,升级方式是「装到新目录 + 更新软链接」,绝不要直接解包覆盖旧路径。
二、补齐编译依赖:先查 INSTALL 要求
解开 glibc-2.31.tar.gz 后,先读源码目录里的 INSTALL 文件,里面列了构建要求:binutils 2.25 以上、texinfo 4.7 以上、bison 2.7 以上、sed 3.02 以上、gettext 0.10.36 以上、Python 3.4 以上、GDB 7.8 以上、make 4.0 以上、GCC 6.2 以上。逐项核对,缺哪个升哪个。
三、逐个把依赖升上去
3.1 Python(升到 3.6)
新系统里 Python 版本偏低,源码编译安装 Python 3.6 后,在 /usr/bin 里可能还留着指向 python2 的软链接,导致 python -V 仍然显示旧版本。处理办法:把这个旧软链接删掉,重新建一个指向 python3 的。
3.2 GCC(升到 9.3.0)
升级 make 时要用到 GCC,所以先升 GCC。先用 gcc -v 看当前版本,再 yum groupinstall -y "Development Tools" 装开发工具包,装完发现版本仍不够,就源码编译 GCC 9.3.0:
# 下载软件包
wget https://mirrors.aliyun.com/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
# 解压
tar -zxvf gcc-9.3.0.tar.gz
cd gcc-9.3.0/
# 下载 4 个依赖包
./contrib/download_prerequisites
# 预编译
mkdir build && cd build
../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr/local/gcc
# 查看 CPU 核数后决定并发数,编译时间较长,通常要几小时
cat /proc/cpuinfo | grep "processor" | wc -l
make -j4
make install
gcc -v
下载依赖失败的绕行方案:download_prerequisites 默认从 ftp://gcc.gnu.org 拉,经常拉不动。可以手动先下好四个包:gmp-6.1.0、isl-0.18、mpc-1.0.3、mpfr-3.1.4,拷到机器上解压到 gcc-9.3.0 目录,再建四个软链接:
ln -s ./mpc-1.0.3 mpc
ln -s ./mpfr-3.1.4 mpfr
ln -s ./gmp-6.1.0 gmp
ln -s ./isl-0.18 isl
然后再执行后面的编译步骤即可。执行下载脚本时长时间没动静直接 Ctrl+C 中断就行。
3.3 make(升到 4.3)
wget https://mirrors.aliyun.com/gnu/make/make-4.3.tar.gz
tar -zxf make-4.3.tar.gz
cd make-4.3/
mkdir build && cd build
./configure --prefix=/usr
make -j4
make install
make -v
四、编译安装 glibc 2.31
wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz
tar -zxvf glibc-2.31.tar.gz
cd glibc-2.31
mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror
make -j4
cp /usr/lib64 /usr/lib64.back # 备份,非常重要
make install
ldd --version
三个关键点:
--disable-sanity-checks --disable-werror 关掉自检和警告转错误,能避免旧环境里一些无关告警直接中断编译。
- 编译前先
cp /usr/lib64 /usr/lib64.back 备份,出问题随时切回去。
- 装完用
ldd --version 核验输出 2.31。
五、必须做的风险控制
- 不要覆盖式安装:把 2.31 装到独立目录(如
/usr/local),只更新必要的软链接;直接解包覆盖 /usr/lib64 一旦中断,系统里所有依赖 glibc 的命令(ls、cp、ssh)全部瘫痪。
- 保留旧库一段时间:新库跑稳之前,旧目录别急着删,出问题可随时改回软链接。
- 先快照或拍快照:生产环境升级前做一次虚拟机快照 / 磁盘备份,这是唯一后悔药。
- 验证顺序:装完先跑几个基础命令(
ls、cp、ldd --version),确认没问题再启服务;图形环境的用户可顺带验证 GNOME 桌面。
六、常见报错
/usr/bin/python: No such file or directory:python 软链接指向了不存在的目标,检查 /usr/bin/python 是不是依旧指向 python2。
- 编译报 undefined reference:多半是 gmp/mpfr/mpc 没建软链接或版本不匹配,回头核对
download_prerequisites 那一步。
- 安装后命令全废:立刻把软链接指回旧库,并用备份目录
/usr/lib64.back 回滚。
整体流程是「核对版本 → 按 INSTALL 补齐依赖(Python、GCC、make)→ 源码编译 glibc 2.31 → 备份 + 安装 + 验证」。glibc 升级危险不在步骤多,而在「没备份就动手」,把备份和回滚想清楚,剩下的就是耐心等编译。
qidao123.com企服评测-应用市场 编辑提示 |