Mastodonのアプデでハマったエラー

カテゴリー
Mastodon

概要

マストドンのアップデートで bundle install は通るんだけど、
 db:migrate とかだけ失敗するという怪現象が起きたのでその検証。

環境

  • OS : CentOS7
  • Ruby : 2.6.5
  • Cld : 3.2.4
  • ProtocolBuffer : 3.11.2

こんなエラーが出た時

LoadError: Could not open library '/home/mastodon/live/vendor/bundle/ruby/2.6.0/gems/
cld3-3.2.4/lib/../ext/cld3/libcld3.so': /home/mastodon/live/vendor/bundle/ruby/2.6.0/
gems/cld3-3.2.4/lib/../ext/cld3/libcld3.so: undefined symbol: _ZNK6google8protobuf11M
essageLite25InitializationErrorStringB5cxx11Ev

結論から先に書いておくと、 yum で入っている ProtocolBuffer のライブラリと自分でソースからコンパイルした ProtocolBuffer などライブラリの複数が共存していると発生。
インストール時と実行時でライブラリが異なってしまうとアウト。

このエラーのミソは「 B5cxx11Ev 」という部分だった。
これはRHEL系OS上のコンパイラでコンパイルされたsoファイル(yumで持ってきたもの)の中身に付く識別子らしい。

参考

対応

バージョンが古い方(おそらくはyumの方)を消してしまおう。

yumで入れた方を消す場合

sudo yum -y remove protobuf

ビルドした方を消す場合

ビルドしたディレクトリ( /usr/local/src/proto-buffer.hoge/build/ )で

sudo make uninstall clean

また、 cld3 は下記で一度アンインストールして、改めて bundle install しなおそう。

RAILS_ENV=production bundle exec gem uninstall cld3

参考資料