字符集報錯一直存在
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
背景
公司有臺jenkins服務(wù)器,因歷史原因一直使用centos6.5,突然登錄時候提示字符集有問題,本人其實已經(jīng)使用centos7很久,沒碰到過這樣問題,排查過程也一臉懵逼。
就是各種字符集報錯,設(shè)置無效,n天后經(jīng)過不斷排查,發(fā)現(xiàn)為glibc導(dǎo)致,拍錯過程還發(fā)現(xiàn)不能使用2.15版本,我擦,趕緊記一下。
排錯過程
1.直接反應(yīng)為字符集,百度查了多個文檔,各種配置,各種更新插件,就是不生效,再趕上手頭還有其他工作,也耽誤了幾天。
今天仔細想了一下,既然任何字符集都不生效,應(yīng)該不是字符集問題,肯定加載過程出問題了,但是這幾天服務(wù)器沒做啥工作啊,無聊翻了下百度,突然看到了glibc的相關(guān)帖子,然后繼續(xù)百度搜了一下,還真有別的哥們碰到過類似的,說編譯時候要加make localedata/install-locales,了解辦法后趕緊嘗試。
2.系統(tǒng)默認(rèn)是2.12,我因為有的插件需求,我升級到了2.14。我本想降到2.12,但是又一想,不如下載個2.15,重新編譯,理論應(yīng)該就都解決了。
3.網(wǎng)上找glibc-2.15資源,下載,編譯,安裝,常規(guī)操作后,將/lib64/libc.so.6軟鏈接指向glibc-2.15,然后就又報錯了 Illegal instruction (core dumped),系統(tǒng)也無法登陸了,趕緊修復(fù) LD_PRELOAD=/lib64/libc-2.12.so ln -sf /lib64/libc-2.12.so /lib64/libc.so.6 先降會2.12,起碼字符集故障解決了,但是這樣不行啊,經(jīng)過多次嘗試升級2.15,最終還是失敗了,網(wǎng)上也沒找到相關(guān)解決辦法。
4.無奈,想是不是和系統(tǒng)兼容問題,不放棄,又嘗試升級2.17,依然常規(guī)操作,這次終于可以了。。。
具體過程
1.查看系統(tǒng)glibc版本庫
strings /lib64/libc.so.6 |grep GLIBC_
發(fā)現(xiàn)最高到2.12,準(zhǔn)備升級到2.17,一定不要裝2.15,我不知道是不是我自己有問題,反正我裝不上
2.下載安裝
進入下載目錄/data/install,執(zhí)行命令,具體不解釋了,都懂
wget https://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
tar xvf glibc-2.17.tar.gz
mkdir glibc-build-2.17
cd glibc-build-2.17/
../glibc-2.17/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j8 && make install && make localedata/install-locales
3.驗證
strings /lib64/libc.so.6 | grep GLIBC
都不用替換/lib64/libc.so.6文件,而且文件軟鏈接已指向glibc-2.17,完事了。
以上就是全部相關(guān)知識點,希望我們整理的內(nèi)容能夠幫助到大家。