Mastodon v2.4.0にするためにやったこと

あいかわらずひっそりとおひとりさまMastodonインスタンスを運営しているのですが、今回のアップデートはやることがいろいろあったので、備忘録としてメモ。

以下のサイトを参考にさせていただきました。ありがとうございました。
素人がMastodonインスタンス運用でハマったトラブルシューティング10選+α v1.2.2→v1.3.2→v1.4.0.2(v1.4rc2)→v1.4.7→v1.5.0rc1→v1.5.1→v1.6|西村 治久《ソーシャルな隠居》|note
「さくらのクラウド」スタートアップスクリプトによるMastodonを、v2.3.3からv2.4.0rc3にバージョンアップした時につまずいた話。|西村 治久《ソーシャルな隠居》|note
CentOS 7.3にインストールしたPostgreSQL 9.4から9.6へアップデートする - ビー鉄ブログ
Mastodon地域インスタンス「箕面どん」をv.2.4.0にアップデートしました – tonetalk
ゼロからはじめるMastodon インスタンス運用編 | さくらのナレッジ

なお、私のインスタンスは、さくらのクラウドさんのスタートアップスクリプトにお世話になって立ち上げたもの(CentOS7)です。
エディタ(vim)、ダウンローダ(wget)等は適宜、別にインストールしました。

(1)PostgreSQLのアップデート

(1-1)リポジトリをインストールして、データベースを設定・初期化する。

yum install https://download.postgresql.org/pub/repos/yum/9.6/ redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum list | grep postgresql96
yum install postgresql96-server
alternatives --display pgsql-psql
alternatives --display pgsql-pg_dump
PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --no-locale" /usr/pgsql-9.6/bin/postgresql96-setup initdb

各ステップでエラーがないことをちゃんと確認しながら進める。
*最後のデータベースの初期化(普通の人は失敗しない……)でうっかりタイプミスして失敗したのを見逃していて、データベース(/var/lib/pgsql/9.6/data/base)ができていなかった→あとでpg_upgradeを利用して、旧バージョンのデータを新バージョンに移行するときに、移行先のデータベースがないよと怒られた→/var/lib/pgsql/9.6/data/をまるっと削除して、もっかいinitdbすれば大丈夫。

(1-2)pg_upgradeでデータを移行する
(1-2-1)稼働中のPostgreSQLサーバーを停止する

systemctl stop postgresql
systemctl status postgresql

まずとにもかくにも稼働中のPostgreSQLサーバーを停止する。しないと最後に「There seems to be a postmaster servicing the old cluster. Please shutdown that postmaster and try again.」と言って怒られる。怒られた後に旧PostgreSQLサーバーを停止してもまあ大丈夫。

(1-2-2)ソースをダウンロード・展開して、src/bin/pg_upgrade/server.cを修正する

これを修正しないとpg_upgradeがうまくいかないんですって。

cd /usr/local/src
wget https://ftp.postgresql.org/pub/source/v9.6.9/postgresql-9.6.9.tar.gz
tar zxf postgresql-9.6.9.tar.gz
cd postgresql-9.6.9
vim src/bin/pg_upgrade/server.c

(GET_MAJOR_VERSION(cluster->major_version) < 903) ?
となっているところを
(GET_MAJOR_VERSION(cluster->major_version) < 900) ?
と変更する。

(1-2-3)ビルドして、修正後のバージョンと置き換える

./configure && make
cd /usr/pgsql-9.6/bin/
mv pg_upgrade pg_upgrade.rpm
cp /usr/local/src/postgresql-9.6.9/src/bin/pg_upgrade/pg_upgrade .

(1-2-3)pg_upgradeを実行する
postgresユーザに切り替えるのを忘れないこと。

su - postgres
-bash-4.2$ /usr/pgsql-9.6/bin/pg_upgrade -d /var/lib/pgsql/data -D /var/lib/pgsql/9.6/data -b /usr/bin/ -B /usr/pgsql-9.6/bin/

(1-3)設定ファイルを書き換える

vim /var/lib/pgsql/9.6/data/pg_hba.conf

METHOD欄を全部「trust」にする。

vim /var/lib/pgsql/9.6/data/postgresql.conf

127行目の
dynamic_shared_memory_type = posix
という行の先頭に#を付けてコメントアウトする。

(1-4)PostgreSQL 9.6に切り替える。

systemctl disable postgresql
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
reboot

自分のインスタンスを見に行って、ちゃんとデータベース移行できて動いていることを確認する。
(確認できるととても嬉しくて安心する)

(2)rubyのアップデート

mastodonユーザに切り替えるのを忘れないこと。
ruby 2.5.1にするにあたって、インストール可能なrubyのバージョンのリストを更新する。

su - mastodon
cd ~/.rbenv/plugins/ruby-build 
git pull origin master

v.2.5.1がリストに出てくるので、それをインストールする。

rbenv install 2.5.1
rbenv rehash
rbenv global 2.5.1

できました。

(3)mastodonのアップデート
いつもの感じで、mastodonの最新バージョンを確認していく。

su - mastodon
cd /home/mastodon/live 
git fetch
git stash
git tag

今回はv2.4.0にするので、v2.4.0のブランチに移動して作業していく。

git checkout v2.4.0
git stash pop
git branch

おけおけ。

gem install bundler 
bundle install --deployment --without development test 
yarn install 
RAILS_ENV=production bundle exec rails db:migrate 
RAILS_ENV=production bundle exec rake mastodon:maintenance:add_static_avatars 
RAILS_ENV=production bundle exec rails assets:precompile 
exit
systemctl restart mastodon*

f:id:pollyanna:20180603173208j:plain
やったね!