運行MongoDB 報錯GLIBC_2.14 not found

Linux環境下安裝完mongodb,運行./mongod報錯如下

# ./mongod
./mongod: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./mongod)

使用rpm -qa |grep glibc查看系統當前的glibc版本爲2.12
使用如下命令查看系統glibc最高支持的版本爲2.12

# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

可以配置倉庫用yum升級glibc rpm包(真的,還是用yum吧,省心,靠譜)。

這裏使用源碼包安裝

(1)這裏從http://ftp.acc.umu.se/mirror/gnu.org/gnu/libc/ 下載glibc-2.14.1.tar.gz,解壓得到 glibc-2.14.1,然後創建build目錄

# cd glibc-2.14.1
# mkdir build

(2)運行configure配置,configure --prefix=<glibc-2.14.1 path>

# pwd
/usr/local/mongodb/glibc-2.14/glibc-2.14.1
# cd build/
# ../configure --prefix=/usr/local/mongodb/glibc-2.14/glibc-2.14.1
# ls -l
total 92
drwxr-xr-x. 2 root root  4096 Apr  3 11:30 bits
-rw-r--r--. 1 root root  7773 Apr  3 11:30 config.h
-rw-r--r--. 1 root root 37585 Apr  3 11:30 config.log
-rw-r--r--. 1 root root  3479 Apr  3 11:30 config.make
-rwxr-xr-x. 1 root root 32737 Apr  3 11:30 config.status
-rw-r--r--. 1 root root   568 Apr  3 11:30 Makefile
#

說明:如果在build/的上級目錄執行./configure命令會報錯,原因不知。。
configure: error: you must configure in a separate build directory
看到有的帖子在build/上上級目錄執行也能成功

(3)運行make && make install
# make -j4
# make install

(4)臨時修改環境變量 export LD_LIBRARY_PATH=<glibc-2.14.1 path>/lib:$LD_LIBRARY_PATH

# export LD_LIBRARY_PATH=/usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib:$LD_LIBRARY_PATH

(5)將/lib64/libc.so.6 軟鏈接到 glibc-2.14.1(高能預警!!!不要做這步操作,請跳至步驟7)

# rm -rf /lib64/libc.so.6
# ln -s /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so /lib64/libc.so.6
# ls -l /lib64/libc.so.6
lrwxrwxrwx. 1 root root 61 Apr  3 03:45 /lib64/libc.so.6 -> /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so

再次查看系統glibc最高支持的版本,爲2.14

# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE

但是!但是!但是!
(6)打開新的連接登錄這臺機器失敗,於是想去已有連接改一下密碼,發現passwd不能用,報錯如下

# passwd
passwd: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

想把libc.so.6鏈接回原來的文件,結果ln也不能用

# rm -rf /lib64/libc.so.6
# ln -s /lib64/libc-2.12.so /lib64/libc.so.6
ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

很多命令不能用,恢復方法 => 執行 
ldconfig -l -v /lib64/libc-2.12.so

(7)再來一遍軟鏈接
cp /usr/local/mongodb/glibc-2.14/glibc-2.14.1/lib/libc-2.14.1.so /lib64/libc-2.14.1.so
rm -rf /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.14.1.so ln -s /lib64/libc-2.14.1.so  /lib64/libc.so.6


(8)這樣做完之後看着沒什麼問題,但是打開新的連接登錄這臺機器,會打印
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory

執行locale命令,提示如下異常

# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

在/etc/sysconfig/i18n文件中,添加如下行
LC_ALL=C
export LC_ALL

執行  source /etc/sysconfig/i18n

說明:LC_ALL=C 是爲了去除所有本地化的設置,讓命令能正確執行。

打開新的連接登錄這臺機器,看着一切正常,暫時未發現其它異常。

 

參考資料:
修改libc.so.6導致系統命令都不能用 https://www.jianshu.com/p/ab2dc84a0d15
Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found問題 https://blog.csdn.net/sole_cc/article/details/51415940
bug寶典linux篇 LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory https://blog.csdn.net/warrah/article/details/56008990

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章