Ubuntu 22.04のPleromaのバージョンを2.6.3から2.7.1に更新した。
それに伴い、Erlang/ElixirをUbuntu標準のリポジトリから導入したものから、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 checkout
はgit 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の使えるリソースを増やす、タイムアウトになるまでの時間を延ばすなどで対応できるか。
- (2024-12-30)これは
- Subway Tooterで画像投稿しようとすると、「MIMEタイプ image/png には対応できません」「MIMEタイプ image/jpeg には対応できません」などと出て、アップロードができない
- WebのPleroma-FEからは投稿できる
- (2024-12-30)これはPleromaが2.7.0からMastodon API
/api/v1/instance
にconfiguration[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のタグがついてるけど動いてるように見えない…。
- ワークアラウンド pleromaの
参考
- Installing on Debian Based Distributions - Akkoma Documentation
- AkkomaのインストールガイドにはasdfによるElixirのインストールについて書いてあった。今回インストールしたバージョンはこれを参考にしている。一方Pleromaのインストールガイドは軽く触れてる程度である。
- Pleroma: Switching to asdf ($2121092) · Snippets · GitLab
- Pleromaを動かすのにasdf版のElixirに移行するガイド
- How to install Elixir on Ubuntu 22 using asdf | Apollin Arek Panek
- Getting Started | asdf
- asdf公式のインストールガイド