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 も正しく実行できるようになる.