redhat6系統默認安裝的glibc-2.12,有的軟件依賴的是glibc-2.14,這時需要升級glibc,下載安裝 http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
# ./configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# make
# make install
結果make install報錯,同時除了cd外各種命令都用不了,會報各種shared libraries: *: cannot open shared object file: No such file or directory
ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
這些shared libraries都位於/lib64/下,而且此時機器無法遠程登錄,
現在只有一個終端root賬號登錄在服務器上,除了能執行cd之外什么都做不了,omg
各種google都無法解決,自己努力
1 首先嘗試從其他服務器遠程傳輸/lib64/下的所有文件和link到本機,但是各種傳輸命令都不能用,比如nc、scp等
2 其次懷疑有可能是link損壞,嘗試手工重建報錯的link
# ln -s libtinfo.so.5.7 libtinfo.so.5
ln: creating symbolic link `libtinfo.so.5': File exists
雖然ls不能用,但是看起來/lib64/下各種文件和link都還在,那為什么會報No such file or directory?
3 再次通過export查看一下當前的環境變量(export還能用):
# export
declare -x LD_LIBRARY_PATH="/usr/local/lib"
嘗試修改LD_LIBRARY_PATH,增加/lib64:
export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH
很多命令居然可以用了,這次glibc升級的過程是這樣的,以其中一個library為例:
安裝之前:
-rwxr-xr-x 1 root root 161776 Jun 19 2018 ld-2.12.so
lrwxrwxrwx 1 root root 10 Jun 19 2018 ld-linux-x86-64.so.2 -> ld-2.12.so
安裝之后:
-rwxr-xr-x 1 root root 161776 Jun 19 2018 ld-2.12.so
-rwxr-xr-x 1 root root 838308 Jan 24 15:41 ld-2.14.so
lrwxrwxrwx 1 root root 10 Jan 24 16:28 ld-linux-x86-64.so.2 -> ld-2.14.so
將這次安裝的改動回滾,即將所有的link都改為指回2.12版本
# ls -l /lib64|grep 2.14|grep lrw|awk '{print "ln -snf "$11" "$9}'|sed 's/2.14/2.12/g'
ln -snf ld-2.12.so ld-linux-x86-64.so.2
ln -snf libBrokenLocale-2.12.so libBrokenLocale.so.1
ln -snf libanl-2.12.so libanl.so.1
ln -snf libc-2.12.so libc.so.6
ln -snf libcidn-2.12.so libcidn.so.1
ln -snf libcrypt-2.12.so libcrypt.so.1
ln -snf libdl-2.12.so libdl.so.2
ln -snf libm-2.12.so libm.so.6
ln -snf libnsl-2.12.so libnsl.so.1
ln -snf libnss_compat-2.12.so libnss_compat.so.2
ln -snf libnss_dns-2.12.so libnss_dns.so.2
ln -snf libnss_files-2.12.so libnss_files.so.2
ln -snf libnss_hesiod-2.12.so libnss_hesiod.so.2
ln -snf libnss_nis-2.12.so libnss_nis.so.2
ln -snf libnss_nisplus-2.12.so libnss_nisplus.so.2
ln -snf libpthread-2.12.so libpthread.so.0
ln -snf libresolv-2.12.so libresolv.so.2
ln -snf librt-2.12.so librt.so.1
ln -snf libutil-2.12.so libutil.so.1
全部執行一遍,故障恢復,各種命令都可以使用,機器也恢復遠程登錄。