1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

古いMastodonを今更アップデートした話 v2.0.0->v2.7.0

Last updated at Posted at 2021-11-03

備忘録です。
とても古いバージョンなので今更な話です。

2021/11/1時点でmastodon v2.0.0からアップデートを行いました。
いくつか問題が出たので対応策を記録します。
まとまりが無いので後日問題ごとの個別ページに分けるかもしれません。

#環境

  • EC2 ubuntu
  • RDS PostgreSQL(9.6 -> 12.6)
  • S3
  • Mastodon(v2.0.0 -> v2.7.0)
  • Docker環境

#アップデート経由バージョン

  1. v2.0.0
  2. v2.1.0
  3. v2.2.0
  4. v2.4.0
  5. v2.4.1
  6. v2.5.0
  7. (Postgres9.6 -> 12.6)
  8. v2.7.0

#対応した問題

  • mimemagic 0.3.6以前の公開停止
  • let's encrypt ルート証明書期限切れ
  • RDS PostgreSQLのメジャーバージョンアップデート

mimemagic 0.3.6以前の公開停止

MITライセンス・GPLライセンスの問題で2021/11/1現在はmimemagic 0.3.6以前は公開されていません。
mastodonはmimemagic 0.3.2~0.3.5あたりに依存しているため、その公開停止以降はdocker-compose buildを実行しても失敗します。

対応として公開されている0.3.10を使用するよう設定を書き換え、このバージョンに必要なshared-mime-infoをインストールしてやることで解決します。

  • Gemfile.lockの書き換え(必須)

gemでmimemagicを参照している部分を0.3.10に書き換えます。

Gemfile.lock
--    mimemagic (0.3.2)
++    mimemagic (0.3.10)
++      nokogiri (~> 1)
++      rake
  • Dockerfileの書き換え(バージョンによって適宜)

Dockerコンテナにshared-mime-infoをインストールするための記述を追加します。
また依存に必要なのでdockerイメージのバージョンを書き換えます。

--    FROM ruby:2.4.2-alpine3.6
++    FROM ruby:2.5.0-alpine3.7
++    RUN apk update
++    RUN apk add shared-mime-info

#let's encrypt ルート証明書期限切れ

「let's encryptのルート証明書DST Root X3が期限切れ」と「Openssl 1.0.2の仕様」が合わさったことで、Dockerコンテナからlet's encrypt証明書を持つサイトにアクセスできなくなりました。
そのためdocker-compose build時に必要なファイルを取得できずにエラーを出していました。

2021/10/1をもってlet's encryptのルート証明書「DST Root X3」が期限切れとなっています。
それ以降はISRGという別のルート証明書が使われるようになっています。

Openssl 1.0.2では「信頼できないルート証明書」を一つでも持っている証明書は信頼しないという仕様があります。
「信頼できるルート証明書」を持っていても、「信頼できないルート証明書」の方が優先されるのです。

この2つが合わさることでDockerコンテナからはlet's encrypt証明書を使用したサイトへアクセスできなくなっていました。

コンテナ内の証明書チェーンファイルを新しいもので上書きし、期限切れルート証明書チェーンのファイルを削除し、必要なISRGのルート証明書をコピーすることで対応します。

  • Dockerfile追記

Dockerfileに下記の内容を追加します。
COPY処理が書かれている部分の前後に書いてました。
なんか一部不要な記述がありそうですが、とりあえずこれで動きました。

RUN apk -U upgrade
RUN rm -f /etc/ssl/certs/2e5ac55d.0
RUN rm -f /etc/ssl/certs/790a7190.0
RUN rm -f /etc/ssl/certs/ca-cert-DST_ACES_CA_X6.pem
RUN rm -f /etc/ssl/certs/ca-cert-DST_Root_CA_X3.pem
RUN rm -f /usr/share/ca-certificates/mozilla/DST_ACES_CA_X6.crt
RUN rm -f /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
COPY isrgrootx1.pem /usr/local/share/ca-certificates/isrgrootx1.pem
COPY cacert-2021-09-30.pem /etc/ssl/cert.pem
RUN update-ca-certificates
  • 証明書・証明書チェーンファイルのコピー
    mastodonのフォルダ(Dockerfileなどと同じフォルダ)に「isrgrootx1.pem」「cacert-2021-09-30.pem」を用意します。
  • isrgrootx1.pem : このファイルを保存して名前と拡張子を書き換えてください
  • cacert-2021-09-30.pem : ここから適宜最新のものを選んでください。

#RDS PostgreSQLメジャーバージョンアップデート

RDSでPostgreSQLのメジャーバージョンを上げたときにCPU使用率が高いままになってしまう問題がありました。
これはデータベースの統計データを保存するpg_statisticテーブルが更新されていないためおこる症状です。
RDSコンソールでアップデートするだけでは自動で行われないため、手動で最適化処理ANALYZEを実行する必要があります。

  • ANALYZE実行
    今回はmastodonを動かしているEC2にPostgresをインストールし、RDSに接続することでANALYZEを実行しました。
psql -h [RDSのエンドポイント] -U [ユーザ名] -d [DB名]
password:

ユーザ名、DB名、パスワードはmastodonの.env.productionファイルに記載しているものでOKです。

> ANALYZE VERBOSE;

DB内に入ったらANALYZEコマンドを実行します。
VERBOSEオプションは無くても良いですが、途中経過が表示されるので確認のために付けました。

最終的には

一番新しいstableのmastodon v3.2.2まで上げる予定です。
そこで問題などがまた出たら追記予定です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?