お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。

Mastodonのアップデートやメンテナンスが出来るようにしてみた

投稿日:
ソフトウェア::Mastodon

先日、Ubuntu実機IPv6シングルスタック環境にMastodonを入れた時に軽く改造していたが、どうせならGitHubで管理したいよね、するなら他所みたいに本家をフォーク下リポジトリでやりたいねと思ったので、やってみた。

やったこと

  • 本家リポジトリをフォークしたリポジトリで作業できる下地を作成
  • Mastodon v4.4.3からMastodon v4.5.0-alpha.2にアップデート
  • VSCodeのRemoteSSHを利用し、本番環境でのバックエンドとフロントエンドの軽微な改修を行い、普段使っているGit環境でGitHubに署名付きコミット
  • 引用リブログ対応

快適な作業環境を作る

毎回sudo su - mastodonしてコンソールからゴリゴリやるとか苦行でしかないのでVSCodeのRemoteSSHでしばけるようにする。

  1. mastodonグループに自分を入れてVSCodeで直に触れるようにする
    sudo usermod -aG mastodon $USER
    
  2. VSCodeを落として再起動してSSHを繋ぎ直す
  3. 普通に編集やコミットが出来るようになっていればOK
  4. コミットするときにCIが走るが本番向け設定では動かないので、--no-verifyを付けてターミナルからコミットする

本家最新と合流する

  1. 本家リポジトリからフォークしたリポジトリを作る
  2. リモートリポジトリを切り替える
    git remote remove origin
    git remote add origin <自分のリポジトリURL>
    
  3. ビルドする

    # mastodonのホームに環境があるため、ここだけはユーザー切り替えが必要
    sudo su - mastodon
    # 依存関係の更新
    gem update --system
    # Ruby本体の更新
    RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install
    # この設定がないとエラーが出てbundle installできなかった
    export LD_PRELOAD=/lib/x86_64-linux-gnu/libjemalloc.so.2
    # Gemのインストール
    bundle install
    # JSやCSSなどのフロントエンドのビルド
    RAILS_ENV=production bundle exec rails assets:clobber
    RAILS_ENV=production bundle exec rails assets:precompile
    
    # 再起動、念のためにstop->start
    sudo systemctl stop mastodon-{web,sidekiq,streaming}
    sudo systemctl start mastodon-{web,sidekiq,streaming}
    

コードのいじり方

正直よくわかっておらず雰囲気でやっている。

Ruby本体

.rbファイルをいじった後にmastodon-webサービスを再起動で恐らくOK。streaming関係を触ったらそっちの再起動も必要だろう。

フロントエンド

CSSやVue周りのファイルをいじった場合はビルドのために以下のコマンドを流す必要がある。サービスの再起動が必要かどうかまではよくわかっていない。

RAILS_ENV=production bundle exec rails assets:clobber
RAILS_ENV=production bundle exec rails assets:precompile

引用リブログの有効化

paste-image-2025-8-23_7-38-23-588.png

こういう奴をできるようにする方法。

.env.productionを開きEXPERIMENTAL_FEATURES=outgoing_quotesを追記。

この手の実験的機能のフラグはenvironment.tsに定義されているものが使えると思われる。カンマ区切りで利用するようだ。

トラブルシューティング

「/lib/x86_64-linux-gnu/libjemalloc.so.2 cannot allocate memory in static TLS block」エラーへの対処

以下のエラーが出る場合、export LD_PRELOAD=/lib/x86_64-linux-gnu/libjemalloc.so.2を打ち込んでおくと改善した。

Unfortunately, an unexpected error occurred, and Bundler cannot continue.

First, try this link to see if there are any existing issue reports for this error:
https://github.com/rubygems/rubygems/search?q=%2Flib%2Fx86_64-linux-gnu%2Flibjemalloc.so.2++cannot+allocate+memory+in+static+TLS+block+-+%2Fhome%2Fmastodon%2Flive%2Fvendor%2Fbundle%2Fruby%2F3.4.0%2Fgems%2Fdate-3.4.1%2Flib%2Fdate_core.so&type=Issues

If there aren't any reports for this error yet, please fill in the new issue form located at https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md. Make sure to copy and paste the full output of this command under the "What happened instead?" section.