emerge が使えなくなった
症状
emerge で何かのパッケージのインストールが失敗した拍子に emerge 自体が使えなくなった.libstdc++.so.6 が見つからないせいで emerge の内部で python が使えなくなったということらしい.
# emerge --sync /usr/bin/python: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解決
まず find で libstdc++.so.6 があるディレクトリを探す.find の代わりに locate は使わない方がいい.今回の場合,locate の出力はまだ最新になっていなかった.
# find / -name libstdc++.so.6 2> /dev/null /usr/lib/gcc-lib/x86_64-pc-linux-gnu/3.4.4/libstdc++.so.6 # locate libstdc++.so.6 /usr/lib/gcc-lib/x86_64-pc-linux-gnu/3.4.3-20050110/libstdc++.so.6.0.3 /usr/lib/gcc-lib/x86_64-pc-linux-gnu/3.4.3-20050110/libstdc++.so.6
どうやら gcc がアップデートされてライブラリのパスが変わってしまったようだ.
/etc/ld.so.conf に書かれているパスの gcc のバージョンらしき部分を更新して ldconfig を実行する.ここまでで emerge は正しく使用できるようになる.
しかし,まだ gcc が正しく実行できないらしい.
# gcc /usr/bin/gcc-config: line 496: /etc/env.d/gcc/x86_64-pc-linux-gnu-3.4.3-20050110: No such file or directory * /usr/bin/gcc-config: Profile does not exist or invalid setting for /etc/env.d/gcc/x86_64-pc-linux-gnu-3.4.3-20050110 /etc/env.d/gcc/x86_64-pc-linux-gnu-3.4.3-20050110 doesnt exist gcc-config error: Could not run/locate "gcc"
/etc/env.d/05gcc の各行のパスの gcc のバージョンらしき部分を更新して env-update を実行する.
# env-update >>> Regenerating /etc/ld.so.cache... # gcc gcc: no input files
これで gcc も正しく実行できるようになる.