にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

Pleroma 2.6.3→2.7.1へ更新

Ubuntu 22.04のPleromaのバージョンを2.6.3から2.7.1に更新した。
それに伴い、Erlang/ElixirをUbuntu標準のリポジトリから導入したものから、asdfで導入したものに変更した。

環境

共通

  • さくらのVPS 1GB
  • OS: Ubuntu 22.04 LTS
  • Pleromaのインストール方法: ソースからインストール

更新前

更新後

  • Erlang: 25.3.2.15(asdfでインストール)
  • Elixir: 1.15.8-otp-25(asdfでインストール)
  • Pleroma: 2.7.1

問題点

Ubuntu 22.04標準のリポジトリでインストールしたElixirのバージョンがPleroma 2.7.1の要求する最低バージョン(1.13)を満たしていないため、Pleroma更新時に問題になることが予想されていた。

Pleroma 2.6.3では辛うじて動いていたが、更新する際にElixirのバージョンを上げる必要があった。

Elixirの新しいバージョンをインストールするためにはasdfを利用することにした。

手順

Pleromaを停止してデータベースをバックアップ(一応)

sudo apt update
sudo apt upgrade
sudo service pleroma stop
sudo -Hu postgres pg_dump -d pleroma_dev -v --format=custom -f /home/nixeneko/share/pleroma.20241201.pgdump
sudo -Hu postgres pg_dump -d pleroma_dev -v --format=plain -f /home/nixeneko/share/pleroma.20241201.sql

念のため2形式でバックアップしてるが、基本的には--format=plainの方は不要だと思う。

Ubuntu公式リポジトリから入れたErlang/Elixirをアンインストール

これは必須ではないが、意図せずこちらが実行される事態は避けたいので消した。

sudo apt remove elixir erlang-dev erlang-nox
sudo apt autoremove

asdf導入、asdfを利用してErlang/Elixirをインストール

Erlangの依存関係をインストール

GitHub - asdf-vm/asdf-erlang: Erlang plugin for asdf version managerなどを参考に、Ubuntuのバージョンによってインストールするものは変更する必要がある。

sudo apt install build-essential autoconf m4 libncurses5-dev libwxgtk3.0-gtk3-dev libwxgtk-webview3.0-gtk3-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk
asdfをダウンロードしてきてインストール

Getting Started | asdfを参考に、asdfの最新バージョンに応じてコマンドは変更する必要があるかもしれない。

cd /opt/pleroma
sudo -Hu pleroma bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.1
nano ~/.bashrc

~/.bashrc末尾に次の内容を追記して保存し、閉じる。

#asdf
. "$HOME/.asdf/asdf.sh"
#asdf completion
. "$HOME/.asdf/completions/asdf.bash"

~/.bashrcを読み込む。

exec bash

インストールできたか確認する。

asdf --version

すると、次のように表示される。

v0.14.1-f00f759
Erlangインストール

list-allなどを参照しながら、今回は25系の最新っぽいやつを入れた。

asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf list-all erlang
asdf install erlang 25.3.2.15
asdf global erlang 25.3.2.15
Elixirインストール

list-allなどを参照しながら、今回は1.15系の最新っぽいやつで、Erlangのバージョンに合わせてOTP 25のものを入れた。

asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
asdf list-all elixir
asdf install elixir 1.15.8-otp-25
asdf global elixir 1.15.8-otp-25

インストールできたか確認する。

elixir --version

すると、次のように表示される。

Erlang/OTP 25 [erts-13.2.2.11] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]

Elixir 1.15.8 (compiled with Erlang/OTP 25)

Pleroma更新

コードを2.7.1に更新
cd /opt/pleroma
git pull
git checkout v2.7.1

git checkoutgit switch使った方がいいのかな。

以前のバージョンで利用していた依存関係などを初期化する
MIX_ENV=prod mix deps.clean --all
MIX_ENV=prod mix local.rebar --force
MIX_ENV=prod mix local.hex --force
rm -r _build
Pleromaのコンパイルマイグレーション・データベースのVACUUM ANALYZE
MIX_ENV=prod mix deps.get
MIX_ENV=prod mix compile
MIX_ENV=prod mix ecto.migrate
MIX_ENV=prod mix pleroma.database vacuum analyze

なんかvacuum analyzeするときに次のエラーが出てたのでやや気になるが、動いてはいるみたい。

11:12:38.182 [debug] Tzdata polling for update.

11:12:39.619 [info] tzdata release in place is from a file last modified Wed, 21 Oct 2020 18:40:20 GMT. Release file on server was last modified Thu, 05 Sep 2024 18:47:42 GMT.

11:12:39.634 [debug] Tzdata downloading new data from https://data.iana.org/time-zones/tzdata-latest.tar.gz

11:12:40.678 [debug] Tzdata data downloaded. Release version 2024b.

11:12:40.810 [error] GenServer :tzdata_release_updater terminating
** (ArgumentError) errors were found at the given arguments:

  * 2nd argument: not a tuple

    :erlang.element(1, :error)
    (tzdata 1.0.5) lib/tzdata/util.ex:223: Tzdata.Util.to_int/1
    (tzdata 1.0.5) lib/tzdata/parser.ex:38: Tzdata.Parser.process_rule/1
    (tzdata 1.0.5) lib/tzdata/parser.ex:24: Tzdata.Parser.process_tz_list/1
    (tzdata 1.0.5) lib/tzdata/parser.ex:86: Tzdata.Parser.process_zone/5
    (tzdata 1.0.5) lib/tzdata/parser.ex:24: Tzdata.Parser.process_tz_list/1
    (tzdata 1.0.5) lib/tzdata/parser.ex:86: Tzdata.Parser.process_zone/5
    (tzdata 1.0.5) lib/tzdata/parser.ex:24: Tzdata.Parser.process_tz_list/1
Last message: :check_if_time_to_update
State: []
pleromaユーザーのbashから抜ける
exit
Systemdユニットの設定を変更

/etc/systemd/system/pleroma.serviceを編集する。

sudo nano /etc/systemd/system/pleroma.service

次の内容を探し、

; Path to the Mix binary.
ExecStart=/usr/bin/mix phx.server

これを次の内容に変更する。

; Path to the Mix binary.
Environment="PATH=/var/lib/pleroma/.asdf/shims:/var/lib/pleroma/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/var/lib/pleroma/.asdf/shims/mix phx.server
ユニットファイル再読み込みとPleroma再始動
sudo systemctl daemon-reload
sudo systemctl restart pleroma

できた!

(2024-12-05時点)現状の不具合

  • Subway Tooterから通知を取得するときに、タイムアウトして500が返ってくることがある
    • (2024-12-30)これはVACUUM FULLしたら時間内に終わるようになった。データベースが肥大化してきたので時間がかかるのは仕方ない面があるかも。だめならPostgreSQLの使えるリソースを増やす、タイムアウトになるまでの時間を延ばすなどで対応できるか。
  • Subway Tooterで画像投稿しようとすると、「MIMEタイプ image/png には対応できません」「MIMEタイプ image/jpeg には対応できません」などと出て、アップロードができない
    • WebのPleroma-FEからは投稿できる
    • (2024-12-30)これはPleromaが2.7.0からMastodon API/api/v1/instanceconfiguration[media_attachments][supported_mime_types]が追加され、内容が["application/octet-stream"]となっているのが原因。Subway Tooterは投稿可能な形式かの確認にここを見ているため動作変更によりアップロードできなくなった。
      • ワークアラウンド pleromaのlib/pleroma/web/mastodon_api/views/instance_view.exを編集し、利用したいMIMEタイプを追加するかconfiguration[media_attachments][supported_mime_types]の出力部分を削除し、コンパイルし直す。
      • Pleromaがこれを修正する気があるのかは謎、一応bugのタグがついてるけど動いてるように見えない…。

参考