Ubuntu 22.04で開発版のMastodonを動かしてみる
この記事では、デスクトップ版のUbuntuで、RAILS_ENVとNODE_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