これは何?
mastodon v2.6.5 という石器時代のバージョンからイケイケの最新バージョンまで更新したくなった。一気に1年分以上の更新を取り込むので不安だったが、うまくいった。バージョン更新時の注意についてメモを残しておく。
なお、自分は ConoHa の Mastodon アプリケーションイメージを使っている。このイメージでは Docker を使用していないので、本記事を読む人は注意が必要。
注意点のメモ
v2.6.5 --> v3.0.0
段階的に上げるのめんどいので v2.6.5 から一気に v3.0.0 に上げたい。
v2.6.5 から v3.0.0 までのリリースノートを見るに、非 Docker 環境では Ruby のバージョン更新が必要らしい。
それさえしておけば v2.6.5 から一気にバージョンアップしてもよさそう。
注意:Ruby と gem を更新する必要がある
v3.0.0 のリリースノート を見るとRuby 2.6.5 が必要らしい。
自分は非 Docker 環境なので、手動で Ruby を指定バージョンまで更新する。
まずは今入っている Ruby 2.5 系をアンインストールする。
> apt-get remove ruby2.5 ruby2.5-dev
次に Ruby 2.6 をインストールする
> apt-get install ruby2.6 ruby2.6-dev
ログを見ると、Ruby v2.6.5じゃなくて Ruby v2.6.6 がインストールされたことがわかった。まぁいいか。
続けて gem も更新しておく。
gem update --system=2.6.6
あとは普通に v3.0.0 のリリースノートの "Upgrade notes" を参照して、指定の更新手順を実行するだけ。
これで v2.6.5 から v3.0.0 への更新はできた。
v3.0.0 --> v3.2.0
次は v3.0.0 から、2020年8月13日時点で最新の v3.2.0 に更新する。
注意:nodejs を更新する必要がある
v3.1.0 のリリースノートを見ると nodjs のバージョンを 10 系にしろとある。自分の環境には8系が入ってるのでまずは削除
sudo apt-get remove nodejs
リリースノートにあるように、指定のURLから setup_10.x を入手して apt install する。
> sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
> sudo apt install nodejs
これでOK。あとは普通に v3.2.0 のリリースノートの "Upgrade notes" を参照して、指定の更新手順を実行するだけ……のはずが、自分の環境ではエラーが起きた。次で説明する。
注意:trim-right をインストールする必要がある
お決まりのコマンドでアセットをプリコンパイルしようとすると、以下のエラーが出た
> sudo RAILS_ENV=production bundle exec rails assets:precompile
ERROR in ./node_modules/css-loader/dist/runtime/api.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: /home/mastodon/live/node_modules/css-loader/dist/runtime/api.js: Cannot find module 'trim-right'
trim-right が見つからないのが原因らしいのでインストールする。
> sudo npm install trim-right
インストール完了後、再度下記コマンドを試すと成功した
> sudo RAILS_ENV=production bundle exec rails assets:precompile
注意:Redis のバージョンを v4.0.0 以上にする必要がある
ここまでの手順を完了して各種サービスプロセスを再起動し、無事インスタンスの更新が完了した~と思ったら何故か画像やファイルの投稿ができなくなっていた。怪しい……ということで各種 mastodon サービスプロセスのログを見てみることに。すると sidekiq がなんかおかしいことがわかった。
> journalctl -xf -u mastodon-*.service
-- Unit mastodon-sidekiq.service has finished shutting down.
Aug 13 14:31:56 150-95-201-113 systemd[1]: Started mastodon-sidekiq.
-- Subject: Unit mastodon-sidekiq.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mastodon-sidekiq.service has finished starting up.
--
-- The start-up result is done.
Aug 13 14:32:00 150-95-201-113 bash[17596]: 2020-08-13T05:32:00.410Z pid=17596 tid=aaguo INFO: Booting Sidekiq 6.1.0 with redis options {:url=>"redis://localhost:6379/0"}
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.976Z pid=17596 tid=aaguo INFO: Booted Rails 5.2.4.3 application in production environment
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.977Z pid=17596 tid=aaguo INFO: Running in ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux-gnu]
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.977Z pid=17596 tid=aaguo INFO: See LICENSE and the LGPL-3.0 for licensing details.
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.977Z pid=17596 tid=aaguo INFO: Upgrade to Sidekiq Pro for more features and support: https://sidekiq.org
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.978Z pid=17596 tid=aaguo WARN: RuntimeError: You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater
Aug 13 14:32:03 150-95-201-113 bash[17596]: 2020-08-13T05:32:03.978Z pid=17596 tid=aaguo WARN: /home/mastodon/live/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.1.0/lib/sidekiq/cli.rb:62:in `run'
Aug 13 14:32:03 150-95-201-113 bash[17596]: /home/mastodon/live/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.1.0/bin/sidekiq:31:in `<top (required)>'
Aug 13 14:32:03 150-95-201-113 bash[17596]: /home/mastodon/live/vendor/bundle/ruby/2.6.0/bin/sidekiq:22:in `load'
Aug 13 14:32:03 150-95-201-113 bash[17596]: /home/mastodon/live/vendor/bundle/ruby/2.6.0/bin/sidekiq:22:in `<main>'
Aug 13 14:32:03 150-95-201-113 systemd[1]: mastodon-sidekiq.service: Main process exited, code=exited, status=1/FAILURE
Aug 13 14:32:03 150-95-201-113 systemd[1]: mastodon-sidekiq.service: Unit entered failed state.
Aug 13 14:32:03 150-95-201-113 systemd[1]: mastodon-sidekiq.service: Failed with result 'exit-code'.
Aug 13 14:32:04 150-95-201-113 systemd[1]: mastodon-sidekiq.service: Service hold-off time over, scheduling restart.
Aug 13 14:32:04 150-95-201-113 systemd[1]: Stopped mastodon-sidekiq.
-- Subject: Unit mastodon-sidekiq.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
ログをよく見ると RuntimeError: You are connecting to Redis v3.0.6, Sidekiq requires Redis v4.0.0 or greater
とある。Sidekiq が Redis v4.0.0 を必要としている。環境にインストールされていたのは v3.0.6 と古い。いろいろググってるとmomoseijin 様の記事がヒットした。以下のコマンドで Redis を更新できた。ありがとうございます!
> add-apt-repository ppa:chris-lea/redis-server
> apt update && apt upgrade
Sidekiq を再起動するとログからもエラーらしき文言は消え、画像ファイル投稿も無事できるようになった。