【Linux Ops】怎么无痛晋级 glibc
【环境】kos5.8sp2, kernel5.10
最近工作中需求建立一个软件环境,其依靠的 glibc 版别较高,因而在装置时给出了以下过错:
xxx: /lib64/libc.so.6: version 'GLIBC_2.33' not found (required by xxx)
去检查当时机器的 libc.so 支撑的 GLIBC 版别,发现的确太低了:
strings /usr/lib64/libc.so.6 | grep GLIBC
并且,难过的是,这个需求装置的软件只是供给了一个二进制装置程序,没方法根据其源码做定制化改动。
这样看来,不得不晋级当时体系的 glibc 了。
网上有许多有关替换 glibc 的教程,大都是给出了 make && make install
的计划。但是这种计划是及其危险的。 由于 glibc 是体系的中心库之一,简直一切的用户空间程序都依靠于它。假如不考虑危险直接 make install
,那么当新的 glibc 装置成功后,你的体系大概率会挂掉。一个有代表性的现象是,你履行一些比如 ls
的简略 shell 指令都会报错了。
其实无痛装置 glibc 有更好的方法,那就是根据 glibc 的 rpm 源码包在本地环境编译成 rpm,再进行装置。
我的当时体系为 kos5.8SP2,与 RHEL 同根同源。因而,我找了一个 Fedora 的 glibc 装置包:glibc-2.38-19.fc39.src.rpm
,下面开端编译。
mkdir glibc-2.38 && cd glibc-2.38
# 拆分 src.rpm
rpm2cpio ../glibc-2.38-19.fc39.src.rpm | cpio -div
# 手动拷贝到 rpmbuild/SOURCE
cp -r * ~/rpmbuild/SOURCE/
# 进入源码目录
cd ~/rpmbuild/SOURCE/
# 装置依靠
yum builddep glibc.spec
# 开端编译
rpmbuild -ba glibc.spec --nodebuginfo
编译成功后,会在 ~/rpmbuild/RPMS/
目录下生成 rpm,装置即可:
cd ~/rpmbuild/RPMS/ && yum install *
装置成功后,验证一下,glibc 现已更新了: