Mastodonをv3.0.xからv3.1.xに上げたときのトラブル対処法


概要

Mastodonをv3.0.x系から一気にv3.1.xに上げたらgem周りが原因でsidekiqが死んでコケた

症状

Mastodonの連合TLがアップデートしたタイミングから一切更新されなくなった

トラブルシューティング

gem編

原因解明

まず、Sidekiqを覗きに行く

待機状態がやたら多く、その割にはデッドは0だし再試行数も極端に少ない。

Sidekiqが動いていないのが原因臭い

systemctlからログを覗く

当方Ubuntu 16.04環境でMastodonが稼働している為、

sudo systemctl status mastodon-sidekiq

でmastodonのsidekiqの直近の状態とログが覗ける。CentOSの場合はコマンドが異なるのであしからず。

すぐにログを取れなかったので載せれないが、gemの一部がビルドできてねえぞみたいなエラーが見えた。

それもそのはず。確かにアップデート後のbundle installをしていたらかなりの数のgemが Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version とエラーを吐いていた。
参考: https://qiita.com/MIRAI1221/items/cfae7e7eb3ddba01e999

解決方法

先の章で参考にしたサイトでは

gem pristine gemfile名 --version

この方法でかいけつできるとのことだったが、相当数が同様のエラーが出ていたのでこの参考記事の方法ではとても解消できない。そこで、 gem pristine のオプションを探ったところ、 --all がちゃんとあるじゃないか。

念の為、mastodon/live配下(Mastodonのディレクトリ配下、多分最近入れた人はデフォルトだとMastodonって名前でフォルダ作ってるんじゃないかな)にある vendor/bundle を全部消してgemを焼き払う。

参考: https://qiita.com/Yinaura/items/1a96fc77c81a2d6a4d95

rm -rf vendor/bundle

また、野生の感で、 gemコマンド側からもupdateしたほうがいいかなという気がしたので、やった。 gem update --system を叩いたが、これはあくまでシステム側の(nodeでいうと yarn global update とか npm update -g みたいなもの)をアップデートしただけなので多分意味はない。

んで、さっきのコマンドを叩く。

gem pristine --all

「Restored」とつくgemが大量に出てくるあたり、お察しである。

これが終わり次第、いつもどおりbundle installすればハイ完成。

bundle install

ターンエンドだ。Mastodonの再起動を掛ける。

動いてくれたみたい。めでたしめでた・・・よく見たら「Stopped mastodon-sidekiq」とか出てない?止まってる?

sidekiq編

原因解明

小手先の対処を試してみる

sidekiqのGUI管理画面を覗いてみると案の定動いてなさそう。
エラーメッセージでググりつつ、githubのrailsアプリのOSSのそれっぽいissueを見ながらいろいろ試してみたら、

systemctl daemon-reload
systemctl stop mastodon-sidekiq
systemctl start mastodon-sidekiq

でも駄目だった。

systemctlからログを覗く

journalctl -r -u mastodon-sidekiq

でログをよく見てみると・・・うん?

「 You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater 」とかいうめちゃくちゃ嫌な予感のするログを発見。しかもその直後にエラートレースしてコケてるじゃない。

調べてみれば、今のredisの最新stableはv6.0.4。公式リポジトリ古すぎ・・・でもwgetするのは嫌だしPPAは無いかな・・・

解決方法

Ubuntu公式リポジトリのredis: https://launchpad.net/ubuntu/+source/redi
Ubuntuのバージョン上がるとインストール可能なredisも上がるのね・・・
参考: https://weblabo.oscasierra.net/redis-ubuntu1604-install-apt/

あったけど、非公式で怖いなこれ・・・・やだなぁ。でも手間に背は変えられないので仕方ない。aptのレポジトリに追加します。

add-apt-repository ppa:chris-lea/redis-server
apt update
apt upgrade

redisは晴れて6.0.7まで上がりました。

めんどくさいので一旦reboot(おい)

今度はちゃんと生き生きとしたログ(?)が流れているようですし、sidekiqもちょっとずつキューが消化されているようなので、これにてトラブルシューティング完了。

結論

  • v3.1.3からredisの必須バージョンが3以上から4以上になるからUbuntu16.04以下を使用して鯖立ててる人は要注意
  • Ignoring gemfile名 because its extensions are not built. Try: gem pristine gemfile名 --version と見たら、わざわざ1個1個 gem pristine hoge しなくても gem pristine --all で一括操作できるよ
  • readmeとリリースノートはちゃんと見ようね

Try

説明書読まない癖で、もしかしてリリース情報にちゃんと手順書いてたかな?と思ったら、ありました

tootsuite/mastodon v3.1.3: https://github.com/tootsuite/mastodon/releases/tag/v3.1.3

The minimum supported Redis version has changed from 3 to 4

これ読んでたら少なくともredisでつまずくことはなかったですね。

ただ、gemに関しては何も書かれていなかったので、そんなものなのかな・・やだなぁ、こういうnodeみたいなところ・・・

これを書いた理由

ここ最近jp鯖が色んな意味で不安定なせいか、アーリーマジョリティ層によるMastodon移民が一段落したからなのか、露骨にMastodonに関する知見記事が減ってる気がするので、雑にトラブルシューティングしたときのログを書き殴ってみた

P.S.

学生エンジニア目指したい(新卒採用に携わるとよく見かけるまだ手を付けれてない学生君たち)にはぜひお一人様インスタンスを立てて、コスト意識とDevOpsとインフラ知識を身に着けてほしいと合うたびに言ってるんだけど、もっと心に響く説得方法が無いかな・・・