某軟件出現漏洞,需要升級解決(忘了哪個)結果提示glibc版本過低、
懵懂無知的我以為glibc想其他軟件一樣編譯升級一下就好。。
結果? 重裝系統!
說真的,如非必要(或學習),請勿升級 glibc!
一、心理准備
咱們先來說一下,glibc 出錯你會出現什么問題:
1. 影響最小的情況下,無法解析名稱空間(不過你可以通過ip連接網絡)
2. 無法使用rpm yum (對文件非常熟悉的話解包復制還是可以的)
3. 無法使用 su 登陸,無法切換用戶(單是這樣的話單用戶模式還是可以使用的)
4. bash 使用不了,這種情況下整個系統你只能使用 cd 或者 export 等屈指可數的指令(只有救援模式可救)
二、物理准備
1. 准備一個U盤啟動盤 ,用於拯救系統,具體見我的另外一篇隨筆:Centos7 -- glibc 升級失敗、意外刪除、故意刪除后的處理方法
2. 下載 glibc、make 的 feroda29系統 rpm包 (選用feroda的包是最接近目標的,目前本人的系統為 centos7.6, 但glibc升級需求的工具仍達不到版本需求):
安裝地址:全部百度都有,有空的話我再發出來
以下5個裝了之后你的系統就能正常用了(缺一不可)
glibc-2.28-26.fc29.x86_64.rpm //基礎包,沒個bash用不了
glibc-common-2.28-26.fc29.x86_64.rpm //基礎包的依賴包
glibc-all-langpacks-2.28-26.fc29.x86_64.rpm //語言包,缺的話你的字符終端會看到非常多星星
libnsl-2.28-26.fc29.x86_64.rpm //名稱空間的庫,沒有的話su登錄不了,dns也無法域名解析
libxcrypt-4.4.4-2.fc29.x86_64.rpm //加密用的庫,遠程傳輸都需要用到
想繼續玩編譯的話還需要以下幾個包:
gcc-8.3.1-2fc29.x86_64.rpm
glibc-devel-2.28-26.fc29.x86_64.rpm
glibc-headers-2.28-26.fc29.x86_64.rpm
libxcrypt-devel-4.4.4-2.fc29.x86_64.rpm
make-4.2.1-10.fc29.x86_64.rpm
三、安裝必要rpm包(升級到glibc-2.28)
1. 按順序安裝rpm包:
# rpm -Uvh glibc-2.28-26.fc29.x86_64.rpm --nodeps //與comm為互相依賴,必須要加 --nodeps
# rpm -Uvh glibc-common-2.28-26.fc29.x86_64.rpm
# rpm -Uvh glibc-all-langpacks-2.28-26.fc29.x86_64.rpm
# rpm -Uvh libnsl-2.28-26.fc29.x86_64.rpm
# rpm -Uvh libxcrypt-4.4.4-2.fc29.x86_64.rpm
2.重啟檢查系統是否正常運行
# shutdown -r now
期間會卡一段時間並重啟,先不要管
待重啟成功后檢查系統功能是否正常, 如不正常請參照:
Centos7 -- glibc 升級失敗、意外刪除、故意刪除后的處理方法
刪除新版gblic重裝舊版glibc后再來一遍
3.安裝剩下開發包
# rpm -Uvh gcc-8.3.1-2fc29.x86_64.rpm //如果安裝失敗請通過編譯方式,由於我之前已升級gcc,此步忽略了
# rpm -Uvh glibc-devel-2.28-26.fc29.x86_64.rpm --nodeps
# rpm -Uvh glibc-headers-2.28-26.fc29.x86_64.rpm
# rpm -Uvh libxcrypt-devel-4.4.4-2.fc29.x86_64.rpm
# rpm -Uvh make-4.2.1-10.fc29.x86_64.rpm
四、編譯升級 glibc-2.29
其實上一步完成后你的glibc已經是次新版了,如果不想浪費時間可以就此停止
1.下載 glibc-2.29 源碼
官網:http://www.gnu.org/software/libc/sources.html
# wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
# tar zxf glibc-2.29.tar.gz
# cd glibc-2.29
2.查看文檔
# cat INSTALL //先看看文檔吧
需求工具版本:
*GNU 'make' 4.0 or newer
*GCC 5 or newer
*GNU 'binutils' 2.25 or later
*GNU ‘textinfo’' 4.7 or later
*GNU 'awk' 3.1.2 or later
*GNU 'bison' 2.7 or later
*Perl 5
*GNU 'sed' 3.02 or later
*Python 3.4 or later
*PExpect 4.0
*GDB 7.8 or later with support for Python 2.7/3.4 or later
3.編譯安裝
# mkdir tmpdir //glibc只能在其他目錄進行編譯,gcc也是
# cd tmpdir
# ../configure --prefix=/ // 期間如果報錯相應工具版本過老,請升級相應的包,如果提示是 compiler 那你要升級gcc
# make && make install
# init 6 // 期間會卡一段時間並重啟,耐心等候
總結:
glibc是linux非常底層的工具庫(內核之上,一切工具之下),一旦出錯很可能整個系統無法使用
因此如非特殊情況,盡量不要升級glibc,即使升級也要做好萬全的准備!