🐘

Ubuntu 22.04で開発版のMastodonを動かしてみる

2023/08/08に公開

この記事では、デスクトップ版のUbuntuで、RAILS_ENVNODE_ENVのPumaとNodeなどを走らせて、Mastodonの開発環境を動かしてみます。この記事は、これまでに少しずつやっていた作業をまとめたものです。残念ながら執筆時には検証できない手順も含まれています。

それぞれのコマンドを実行して表示されたメッセージを読み、エラーが出るなど期待どおりの結果が得られなかった場合にはコメントなどで知らてください。

OSの準備

Ubuntuのインストーラを起動してインストールし常用環境として設定します。

Mastodonに必要なパッケージのインストール

Mastodonのドキュメントを参考に、標準的なインストールではインストールされないパッケージをインストールします。sudoできるユーザーで下記を実行します。

sudo apt update
sudo apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

手元ではUbuntu版のPostgreSQLがインストールされているようです。

sudo apt update
sudo apt install -y postgresql libpq-dev 

手元ではNodeはsnap版、Yarnはdebパッケージ版が入っていました。

sudo snap install node --classic
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo sh -c 'apt update && apt install yarn'

RubyやMastodonのビルドに必要なパッケージをインストールします。

sudo apt update
sudo apt install -y \
  imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \
  g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
  bison build-essential libssl-dev libyaml-dev libreadline6-dev \
  zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
  nginx redis-server redis-tools postgresql postgresql-contrib \
  certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

手元ではrbenvはUbuntu版のものを利用しています。

sudo apt update
sudo apt install rbenv

PostgreSQLの準備

Mastodonを走らせるユーザーとしてデータベースの操作をできるようにします。ここではMastodonを走らせるユーザー名をzundaとしています。適宜読み替えてください。sudoできるユーザーで下記を実行します。

sudo -u postgres psql

を実行し、データベースと接続できたら下記のクエリを発行します。zundaを、Mastodonを走らせるユーザー名に置き換えてください。

create role zunda with createdb login;
quit

rbenvの準備

Mastodonを走らせるユーザーとしてrbenvの環境を準備します。ここではMastodonを走らせるユーザーはbashを利用していると仮定しています。他のシェルを利用している場合は適宜読み替えてください。

echo 'eval "$(rbenv init -)"' >> ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Rubyのインストール

Mastodonを走らせるユーザーとしてMastodonで利用するバージョンのRubyをrbenvでインストールします。この例では3.2.2としています。

rbenv install 3.2.2

Mastodonのコードの取得

Mastodonを走らせるユーザーとしてMastodonのコードを取得します。取得元やブランチなどは適宜読み替えてください。

まず適当なディレクトリ(下記の例ではc/srcとしています)を作りそこに移動します。

mkdir -p ~/c/src
cd ~/c/src

その下にmastodonディレクトリにコードを取得し、そこに移動します。

git clone https://github.com/mastodon/mastodon.git
cd mastodon

foremanのインストール

foremanというコマンドがあるとPumaやNodeなどを一度に起動するのに便利です。rbenvでインストールしてmastodonディレクトリの.ruby-versionで指定されたRubyのバージョンに対応したものをインストールしておきます。

Mastodonを走らせるユーザーとしてmastodonディレクトリで下記を実行します。

gem install --user-install foreman

Mastodonのビルド

Mastodonを走らせるユーザーとしてmastodonディレクトリで下記を実行します。

export RAILS_ENV=development
export NODE_ENV=development
export NODE_OPTIONS=--openssl-legacy-provider
bundle config with development
bundle install
yarn install --pure-lockfile
bundle exec rails db:migrate
bundle exec rails assets:precompile

余分なファイルがあると上記のbundle exec rails assets:precompileなどが失敗することがあるようです。その場合は下記のようなコマンドで余分なファイルを消してやりなおしてみます。git cleanコマンドではレポジトリに登録されていないファイルはすべて正慶されますので必要な場合には他の場所にバックアップしておいてください。

git clean -dxf
bundle exec rails assets:clobber

Mastodonの稼動

Mastodonを走らせるユーザーとしてmastodonディレクトリで下記を実行します。

export RAILS_ENV=development
export NODE_ENV=development
export NODE_OPTIONS=--openssl-legacy-provider
foreman start -f Procfile.dev 

PumaやNodeなどのプロセスからのログが端末に表示されます。しばらくするとブラウザなどで http://localhost:3000/ を開くことで開発版のMastodonが表示されます。

ログインする場合は、メールアドレスとしてadmin@localhostを入力します。パスワードは、db/seeds/04_admin.rbにありますので、Mastodonを走らせるユーザーとしてmastodonディレクトリで下記のようなコマンドを実行して探してみてください。

grep password db/seeds/04_admin.rb

あとひといき

上記の手順で起動したMastodonはストリーミングがうまく動いていないようです。そのうちなんとかしたい。

サーバ側のログ

stream.1  | ERR! Error: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string

ブラウザではws://localhost:4000/api/v1/streaming/?へのGETに401 Unauthorizedを受けとっている。

Discussion