マストドン v2.0.0アップデート(CentOSにて)

Twitterをモチーフにした分散型ソーシャルネットワーキングシステム「マストドン」(Mastodon)が2017年4月頃から日本でも話題になり,いくつものインスタンス(分散したサーバー)が運営を続けています。

独自にインスタンス(サーバー)を立てて運用するため,どちらかというと限定されたコミュニティ内で使うのに適しています。そのためTwitterを置き換えるというものではありませんが,決してコミュニティ内で閉じるのではなく,外部とも連携できるしくみが備わっているのがマストドンの興味深いところです。

教育学習とICT関係に関心のある皆さんに向けたマストドンとして「elict インスタンス」というものを立ち上げて運用しています。教育学習やICTのことを話題にするというだけでなく,その界隈の人々がマストドンを試す場所を提供するのも目的です。

Mastodon manager

それから,CentOS 7上で最新のマストドンシステムを構築して運用する実験をすることも目的としています。とはいえ,マストドンシステムのアップデートは一筋縄ではいかない難しさがあります。そもそもマストドン本家は同じLinuxでもUbuntuを推奨していて,CentOSでの運用は詳しく説明してくれていません。

先日(10/19),マストドンが v2.0.0へとメジャーバージョンアップしましたが,このアップデート作業もすんなりとはいきませんでした。

10月22日にv.2.0.0へのアップデートを試みたところ,エラーメッセージとともに作業は足止めされ,サイトはダウン状態となりました。それから暇を見つけては対処法を探り続けましたが,闇雲に作業すれば泥沼行き。かといって始めからやり直してみようと試みても,なぜか同じエラーの結果になるという幽閉状態。

参考情報を探そうとしても,同じ条件で構築している人は少ないし,ほとんどの人々がv2.0.0アップデートの難関さを前に躊躇っている状態か,難なくクリアしたかで,手がかりは極めて少なかったのです。英語のぶっきらぼうなエラーメッセージだけでは,何をどうしたらよいのか,万策尽きた感じさえしました。

しかし,端末から発せられるメッセージはエラーメッセージばかりではないのですね。それを丁寧に追っかけると,そもそも最初に出ていたエラーさえ適切に対応すれば良かったことがわかりました。

本当なら,自分が解決した道筋を,再検証して整理しながら解説すべきなのですが,なかなかそういう余裕もないので,とにかく手がかりになりそうなコマンドをここに書き記していこうと思います。

まずマストドンの基本的なインストール方法はこちらを参照してください。

Mastodon Production Guide

CentOSの場合,「apt」よりも「yum」を使うことが多いかなと思います。たとえばrootユーザーで

yum -y install ImageMagick libxml2-devel libxslt-devel git curl file g++ protobuf-compiler protobuf-devel gcc openssl-devel libyaml-devel zlib-devel ncurses-devel libffi-devel gdbm-devel readline-devel libicu-devel libidn-devel bzip2 

という感じです。また,CentOSのdevelopバージョンは-devではなく-develと表記することが多いです。

ちなみに,上の並びはnode.jsとYarnとffmpegとpostgresqlとnginxなどは別途作業したときのコマンド並びなので,構築されるサーバ環境によって追加したり減らしたりする必要があります。

「Dependencies That Need To Be Added As A Non-Root User」項目から以下はわりとそのままだと思います。

これらでなんとか構築完了して,運用を始めましょう。もし問題が発生したら下の方に書く対処を試みます。

定型的なアップデート作業は次の通りです。普通はマストドンユーザーでログインし…

cd live
git fetch
git checkout $(git tag -l | sort -V | tail -n 1)
bundle install
yarn install
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile

そして,rootユーザーに切り替えてから

systemctl restart mastodon-*.service

としてマストドンを再起動するとアップデートが反映されます。

アップデート作業などで問題が発生した場合に試みたこと。

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig

bundle installでエラーが出た場合,パスが通ってなかった可能性があります。上はその一つ。

cd /home/mastodon/.rbenv/plugins/ruby-build && git pull && cd -
rbenv install 2.4.2
rbenv rehash
rbenv global 2.4.2
rbenv global

Ruby環境を最新にしないといけないアップデートもありました。上はマストドンユーザーでログインして2.4.2にするときのもの。ディレクトリ構成は自分の環境に合わせてください。

wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
yum install yarn

Yarnを最新にする必要があるときもありました。上はrootユーザーで入力したもの。

git checkout v1.6.1

gitから取ってくるmastodonバージョンを指定したいときに。マストドンユーザーで,liveディレクトリに移行後。ただし元に戻りたくても戻れないときもあります。

git reset --hard origin/master

ローカルをいじり過ぎておかしくなった場合,ローカルを上書きしてリモートに合わせてしまいたいときに使います。いわゆるリセット。

rm .bundle/config

オプションなしで「build install」すると以前の設定が引き継がれて処理されます。その履歴を消したいとき。

gem install lograge
bundle install --with production

v2.0.0アップデートで一番泣かされたのが「lograge」Gemファイル未インストール問題。インストールしたいと思って「gem install lograge」してみても一向に問題が解消されないとき,「bundle install –with production」と明示的に指定したら問題が解決しました。いやはや,回り道をしました。

この他に効果があったかどうかは分からないけれども試してはつまずくのを繰り返したコマンドは以下の通り。

gem cleanup
gem install bundler
gem install rails --no-document
gem update --no-document
bundle update
yarn cache clean

この他にもhttps通信を行なうための証明書取得など必要な手続きはありますが,それはまた別の機会に。