mastodon インスタンスを v2.6.5 から v3.2.0 までバージョンアップする 


# これは何？
mastodon v2.6.5 という石器時代のバージョンからイケイケの最新バージョンまで更新したくなった。一気に1年分以上の更新を取り込むので不安だったが、うまくいった。バージョン更新時の注意についてメモを残しておく。

なお、自分は [ConoHa の Mastodon アプリケーションイメージ](https://www.conoha.jp/guide/mastodon.php)を使っている。このイメージでは 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 のリリースノート](https://github.com/tootsuite/mastodon/releases/tag/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 のリリースノート](https://github.com/tootsuite/mastodon/releases/tag/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 のリリースノート](https://github.com/tootsuite/mastodon/releases/tag/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](https://www.npmjs.com/package/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 様の記事](https://gist.github.com/momoseijin/0388742083d0ee7eb605b576275a779c)がヒットした。以下のコマンドで Redis を更新できた。ありがとうございます！

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

Sidekiq を再起動するとログからもエラーらしき文言は消え、画像ファイル投稿も無事できるようになった。