問題
CentOS 6.7にPyTorchをインストールしてインポートしようとしたところ,glibc 2.14以上が必要だと怒られた。そこでUnitasBrooks氏の助言に従ってglibcをアップグレードしたつもりが、
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib
を見逃していたため、またPyTorchに怒られてしまった。
私は/opt/glibc-2.14/lib/libc.so.6を直接/lib64にコピーしたのだが、このlibc.so.6というのはシンボリックリンクであって、このような直接的なコピーはシステムを破綻させるものだった。
sudoやlsのような基本的なコマンドを呼ぼうとしてもerror while loading shared libraries: /lib64/libc.so.6: file too short
というエラーが出て、ほとんど手も足も出ない状態になった。
解決
Linuxやってみる!, (6) ldconfigでライブラリパスを更新によると、linuxは
(1) 環境変数で指定されたパス
(2) /etc/ld.so.conf に記述されたパス
(3) 通常ライブラリが置かれるパス
の優先順位でライブラリを読み込んでいく。今回は(3)を壊してしまったので、(1)か(2)でうまく正しいglibcライブラリを読み込むようにさせる。それに使えるコマンドにexport
(環境変数にパスを追加する) とldconfig
(共有ライブラリの依存関係を更新する=(1)~(3)の順でライブラリを読み込み直す?) があり、
$export LD_LIBRARY_PATH=/opt/glibc-2.14/lib
$ldconfig
を実行することでとりあえず復旧できた。
上の操作をする前にはsu
やcp
を実行しようとすると
su: error while loading shared libraries: /lib64/libc.so.6: file too short
cp: error while loading shared libraries: /lib64/libc.so.6: file too short
と同じエラーを返していたが、上の操作の後、ls
やcp
は動くようになったが、su
とsudo
は同じエラーを返してくる。これらはスーパーユーザー権限を得るコマンドなので、ldconfig
という、通常のユーザーが実行できるコマンドで何か悪さができないよう、何か特別な仕組みがあるというのは想像できることだが、sudo
できないと困る。
Eliah Kagan氏のコメントが力になる気がする・・・