【Linux Ops】如何無痛升級 glibc

_hong發表於2024-11-20

【環境】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
【Linux Ops】如何無痛升級 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 已經更新了:

【Linux Ops】如何無痛升級 glibc

相關文章