環境
AWS EC2
Ruby 2.3.1
Rails 5.0.0.1
エラー内容
unicornを起動しようとすると次のようなエラーで起動することができませんでした。
LoadError: libcabocha.so.5: cannot open shared object file: No such file or directory - /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/ca
bocha/CaboCha.so
対応したこと
とりあえずfindコマンドで検索
$ find / -name libcabocha.so.5 2>/dev/null
/usr/local/lib/libcabocha.so.5
存在を確認。
エラーが起きたファイルでロードされているライブラリを確認
$ ldd /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/cabocha/CaboCha.so
linux-vdso.so.1 => (0x00007fff77a6a000)
libcabocha.so.5 => not found
libcrfpp.so.0 => not found
libmecab.so.2 => /usr/lib64/libmecab.so.2 (0x00007fdb28e16000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fdb28b11000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdb288f4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fdb286f0000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fdb284b9000)
libm.so.6 => /lib64/libm.so.6 (0x00007fdb281b6000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdb27df4000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdb27bde000)
/lib64/ld-linux-x86-64.so.2 (0x000055a5f1199000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fdb279db000)
libcabocha.so.5とlibcrfpp.so.0がnot foundになっていましたのでロードに失敗しています。
/etc/ld.so.confに/usr/local/libを追記
/etc/ld.so.conf
はライブラリをロードするときに参照するディレクトリを設定するファイルです。
デフォルトでは
- /lib
- /usr/lib
- /etc/ld.so.confに記述されたディレクトリ
を参照すのですが、/usr/local/lib
が含まれていません。
/etc/ld.so.conf
に/usr/local/lib
を追記します。
ライブラリの依存関係情報を更新する
ldconfig
コマンドを叩いてライブラリの依存関係を更新します。
このコマンドを叩くと/etc/ld.so.cache
が更新されます。
libcabocha.so.5がロードされているか確認
もう一度ldd
コマンドでライブラリがロードされているか確認します。
$ ldd /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/cabocha-0.69.1/lib/cabocha/CaboCha.so
linux-vdso.so.1 => (0x00007ffcdd569000)
libcabocha.so.5 => /usr/local/lib/libcabocha.so.5 (0x00007fcb1fd49000)
libcrfpp.so.0 => /usr/local/lib/libcrfpp.so.0 (0x00007fcb1fb02000)
libmecab.so.2 => /usr/local/lib/libmecab.so.2 (0x00007fcb1f73a000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fcb1f435000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcb1f218000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fcb1f014000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fcb1eddd000)
libm.so.6 => /lib64/libm.so.6 (0x00007fcb1eada000)
libc.so.6 => /lib64/libc.so.6 (0x00007fcb1e718000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fcb1e502000)
/lib64/ld-linux-x86-64.so.2 (0x0000558070ff3000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fcb1e2ff000)
libcabocha.so.5
が参照できていることが確認できました。
libcrfpp.so.0
も同じ場所にあったみたいです。
unicornも無事に起動することができました。
まとめ
パスが通っていないので環境変数PATHに/usr/local/lib
を追記したりしましたがうまくいかなかったです。
PATHはコマンド実行時に参照するものであって、ライブラリのロード時に参照されるものではないということがわかっただけでもいい勉強になりました。