glibc 版本異常

事情起因

發(fā)現(xiàn)有一臺物理機只能連接同一個網(wǎng)段的公網(wǎng),不能訪問如百度匣距,dns服務器也ping不通,我就想裝個traceroute 看看是哪一步的原因,由于這臺機器不能聯(lián)網(wǎng),于是就打算從隔壁機器下載deb包价脾,到這個機器上安裝。于是:

# 獲取依賴笛匙,并下載
apt-rdepends traceroute | grep -v "^ " | xargs sudo apt-get download
# 打包
tar zcvf traceroute.tgz traceroute/
# 遠程復制
scp <>
# 解壓
tar zxvf traceroute.tgz 
# 安裝
cd traceroute&&dpkg -i *.deb

一氣呵成侨把,問題來了,所有命令都用不了了妹孙,報錯/lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.30' not found (required by /lib/x86_64-linux-gnu/libselinux.so.1)
后來發(fā)現(xiàn)秋柄,隔壁機器跟這個機器不是同一個版本的操作系統(tǒng),而且這些安裝包里包含:gcc-6-base_6.0.1-0ubuntu1_amd64.deb libc6_2.23-0ubuntu11.3_amd64.deb libgcc1_1%3a6.0.1-0ubuntu1_amd64.deb traceroute_1%3a2.0.21-1_amd64.deb蠢正。好好好骇笔。只能怨我眼瞎。犯了這么低級的錯誤嚣崭。
更離譜的來了蜘拉,因為我是剛來這家公司,發(fā)現(xiàn)這個k8s集群的部分woker節(jié)點情況如下:

   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
   Ubuntu 18.04.1 LTS   4.15.0-147-generic   docker://19.3.13
   Ubuntu 16.04.3 LTS   4.4.0-210-generic    docker://19.3.13
   Ubuntu 16.04.2 LTS   4.4.0-210-generic    docker://19.3.13
   Ubuntu 16.04.3 LTS   4.4.0-210-generic    docker://17.9.0
   Ubuntu 16.04.3 LTS   4.4.0-210-generic    docker://19.3.13
   Ubuntu 16.04.2 LTS   4.4.0-210-generic    docker://18.6.0
   Ubuntu 16.04.2 LTS   4.4.0-62-generic     docker://19.3.13
   Ubuntu 16.04.2 LTS   4.4.0-62-generic     docker://18.6.0
   Ubuntu 16.04.3 LTS   4.4.0-91-generic     docker://19.3.13
   Ubuntu 18.04.4 LTS   4.15.0-192-generic   docker://19.3.11
   Ubuntu 18.04.4 LTS   4.15.0-156-generic   docker://19.3.12
   Ubuntu 20.04.5 LTS   5.4.0-125-generic    containerd://1.6.12
   Ubuntu 20.10         5.8.0-63-generic     docker://20.10.6
   Ubuntu 20.04.5 LTS   5.4.0-125-generic    docker://20.10.18

好巧不巧有鹿,我操作的就是這個 ubuntu 20.10旭旭。這個版本從發(fā)布到中止維護僅有9個月的時間。都是前人挖的坑啊葱跋。
此情此景持寄,我只能說 k8s 牛逼,不挑食娱俺。
言歸正傳∩晕叮現(xiàn)在什么命令都用不了。

自救過程

現(xiàn)在已經(jīng)打開的ssh是沒有斷開的荠卷,但是新的ssh已經(jīng)連接不了了模庐。根據(jù)網(wǎng)上的方法:
上傳20.10用的glibc版本的 libc-2.32.so

LD_PRELOAD=/home/sysuser/libc-2.32.so  ls

然而,并沒有什么用油宜。于此同時掂碱,我還手賤的打算復制一個ssh連接怜姿,好家伙,windterm直接閃退疼燥。
那沒有辦法了沧卢,就只能去機房操作了。

首先了解一下這次操作到底都更新了哪些文件

這里使用docker的 layer 機制醉者,就能很明顯的看到那些文件發(fā)生了改變

# 運行一個ubuntu 20.10的容器
docker run -it --name ubunt-2010 -v /root:/data ubuntu:20.10 bash
# 安裝相關的包
cd /data/traceroute
dpkg -i *.deb
# 發(fā)現(xiàn)問題與線上問題一致
root@ubuntu-2010:/data/traceroute# ls
ls: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by ls)
ls: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.30' not found (required by /lib/x86_64-linux-gnu/libselinux.so.1)
root@ubuntu-2010:/data/traceroute# cp
cp: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by cp)
cp: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by cp)
cp: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.30' not found (required by /lib/x86_64-linux-gnu/libselinux.so.1)

接下來另起一個窗口:

docker inspect ubuntu-2010 --format '{{.GraphDriver.Data.UpperDir}}'
# cd 到這個目錄
cd <上一步輸出結果>
# 查看哪些文件夾發(fā)生了改變
tree
# 這里發(fā)現(xiàn)很多文件都改變了但狭,于是只看看哪些目錄
tree -d
.
├── data
├── etc
│   └── ld.so.conf.d
├── usr
│   ├── lib
│   │   ├── gcc
│   │   │   └── x86_64-linux-gnu
│   │   │       ├── 6
│   │   │       └── 6.0.0 -> 6
│   │   └── x86_64-linux-gnu
│   │       ├── audit
│   │       └── gconv
│   ├── lib64
│   └── share
│       ├── doc
│       │   ├── gcc-6-base
│       │   └── libc6
│       └── lintian
│           └── overrides
└── var
    ├── cache
    │   └── debconf
    ├── lib
    │   └── dpkg
    │       ├── info
    │       ├── triggers
    │       └── updates
    └── log

在啟動一個新的ubuntu 20.10的容器,對比發(fā)現(xiàn) /usr/lib/gcc/x86_64-linux-gnu目錄是新增的撬即,新增一般影響不大立磁。主要變動就是/usr/lib/x86_64-linux-gnu
解決思路就是把/usr/lib/x86_64-linux-gnu備份一下剥槐,重新復制一份過去息罗。
于是,在本地新建虛擬機才沧,裝上ubuntu 20.10的系統(tǒng)迈喉,模擬故障,使用ubuntu 20.10 desktop版本的live cd模式啟動温圆。把硬盤掛載到/mnt目錄,嘗試恢復:

mv /mnt/usr/lib/x86_64-linux-gnu /mnt/usr/lib/x86_64-linux-gnubak
cp -rp /usr/lib/x86_64-linux-gnu /mnt/usr/lib
chroot /mnt

發(fā)現(xiàn)chroot不過去挨摸,懷疑是仍然有問題。于是岁歉,發(fā)現(xiàn)lib64下的ld-linux-x86-64.so.2文件也發(fā)生了變動得运。查看這個文件:

ll /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx 1 root root 32 Sep 15  2020 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.32.so*

把這個文件也復制回去,因為原來是個軟連接锅移,這里直接簡單粗暴的把源文件復制過去了

cp /lib/x86_64-linux-gnu/ld-2.32.so  /mnt/lib64/ld-linux-x86-64.so.2
chroot /mnt

根目錄轉化成功熔掺,實驗命令可以正常執(zhí)行。
于是去機房非剃,關機置逻、U盤啟動,修復文件备绽,搞定券坞。

在運行過程中又發(fā)現(xiàn),部分軟件缺少文件肺素,將/usr/lib/x86_64-linux-gnubak/中的文件恨锚,復制但不替換回/usr/lib/x86_64-linux-gnu/

rsync -av --ignore-existing /usr/lib/x86_64-linux-gnubak/ /usr/lib/x86_64-linux-gnu/

當然,也可以在恢復/usr/lib/x86_64-linux-gnu/時:

# 原來是mv倍靡,改為cp
cp -rp /mnt/usr/lib/x86_64-linux-gnu /mnt/usr/lib/x86_64-linux-gnubak
cp -rp /usr/lib/x86_64-linux-gnu/*  /mnt/usr/lib/x86_64-linux-gnu

這樣猴伶,直接覆蓋掉修改過的文件(沒試過,盲猜的)

總結

  1. /usr/lib/x86_64-linux-gnu替換回原操作系統(tǒng)內(nèi)容
  2. 替換回 /lib64/ld-linux-x86-64.so.2
  3. 將后期增加的/usr/lib/x86_64-linux-gnu下的文件,增量復制回去
  4. 執(zhí)行命令前他挎,一定要看一眼到底執(zhí)行了什么筝尾。不要閉著眼操作
  5. 服務器能跑,不影響業(yè)務使用雇盖,就不要管他忿等。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栖忠,一起剝皮案震驚了整個濱河市崔挖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庵寞,老刑警劉巖狸相,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捐川,居然都是意外死亡脓鹃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門古沥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘸右,“玉大人,你說我怎么就攤上這事岩齿√” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵盹沈,是天一觀的道長龄章。 經(jīng)常有香客問我,道長乞封,這世上最難降的妖魔是什么做裙? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮肃晚,結果婚禮上锚贱,老公的妹妹穿的比我還像新娘。我一直安慰自己关串,他們只是感情好惋鸥,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悍缠,像睡著了一般卦绣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上飞蚓,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天滤港,我揣著相機與錄音,去河邊找鬼。 笑死溅漾,一個胖子當著我的面吹牛山叮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播添履,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屁倔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暮胧?” 一聲冷哼從身側響起锐借,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎往衷,沒想到半個月后钞翔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡席舍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年布轿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来颤。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡汰扭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出福铅,到底是詐尸還是另有隱情萝毛,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布本讥,位于F島的核電站珊泳,受9級特大地震影響,放射性物質發(fā)生泄漏拷沸。R本人自食惡果不足惜色查,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撞芍。 院中可真熱鬧秧了,春花似錦、人聲如沸序无。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝嗡。三九已至晶通,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哟玷,已是汗流浹背狮辽。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喉脖。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓椰苟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親树叽。 傳聞我的和親對象是個殘疾皇子舆蝴,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容