Mastodon地域インスタンス「箕面どん」をv.2.4.0にアップデートしました

かなり前になるが、新しいソーシャルネットワーキングサービス「Mastodon」を紹介したのを、覚えておられるだろうか。
当初は「大阪丼」(https://mstdn.osaka)に参加していたが、思うところあり、独立して箕面市(非公認)の地域インスタンス「箕面どん」を立ち上げた。
箕面どん

さくらのクラウドでサーバーをレンタルし、CentOS 7.4上で構築している(非Docker)。導入自体は「スタートアップスクリプト」があるので、比較的簡単にできた。
当時のMastodonのバージョンが2.3.3であったが、最近2.4.0がリリースされたので、アップデートに取り組んだ記録である。
鯖缶の方々の様子を見ると、データベースを飛ばして全て消えてしまうなど、いろいろなアクシデントが起こるアップデート作業。僕自身も1度目は失敗し、2度目の挑戦でやっと上手くいった。
初心者の方々にも参考になるように、ここに過程を書きとどめておきたい。

なお、全体の流れは下記サイトを参考にした。
「さくらのクラウド」スタートアップスクリプトによるMastodonを、v2.3.3からv2.4.0rc3にバージョンアップした時につまずいた話。

1.サーバーのバックアップ

万が一に備えて、必ずやっておきたい作業である。僕も1回目失敗したとき、バックアップのおかげで、復旧することができた。
pg_dump/pg_dumpallなどのコマンドを使って、データベースだけバックアップする方法もあるが、僕はさくらのクラウドのアーカイブ機能を使って、ハードディスクを丸ごとバックアップした。復元も簡単なので、お勧めである.

2.PostgreSQLを9.6にアップデート

v.2.4.0からPostgreSQL 9.4以上が必須となる。さくらのクラウドでは9.2なので、アップデートが必要である。10を試してみたが、さくらのクラウドのCentOS 7.4上ではエラーで動かなかったので、9.6.9を下記のようにインストール、データベースを初期化した。

# 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

コマンドの意味は下記サイトに詳しい。
CentOS 7.3にインストールしたPostgreSQL 9.4から9.6へアップデートする

3.pg_upgradeというコマンドをインストール

【註】
この過程は必ずしも必須ではない。ソースを入れ替えるので、危険性を内在している可能性がある。PostgreSQLの新バージョンが出る度にインストールする方針の方は、する必要なないと思われる。

この作業をする前に、今動いているPostgreSQLサーバーを停止しておく必要がある(←これ、重要)。
停止しておかないとインストールに失敗する。

# systemctl stop postgresql

停止しているかどうか確認。

# systemctl status postgresql

そして、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/

このコマンドはエラーになるので、下記サイトを参考に、pg_upgradeを入れ替える。
pg_upgradeでつまずいた

なお、さくらのクラウドのCentOSにはwgetが入っていないのでインストール。vimも好みで入れる。

# yum install wget
# yum install vim

(1)ソースをダウンロードして展開

# 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

(2)src/bin/pg_upgrade/server.cを修正

# vim src/bin/pg_upgrade/server.c

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

(3)ビルドする(インストールはしない)

# ./configure && make

(4)yumバージョンと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 .

ここまでして再度postgresユーザーに切り替え、下記のコマンドを打つと、ズラズラとOKが表示されて、インストールに成功する。

$ /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/

なお、最初に紹介したサイトでは、pg_upgradeをインストールした後で「後処理」をしているが、僕の環境では上手くいかなかった。それでも問題なくサーバーは動いているので、無視しても大丈夫である。

他に、以下の設定ファイルを書き換えた。

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

METHOD欄を全て、trustに書き換え。
【2018年6月3日追記】
この設定は、あくまでさくらのクラウドでスタートアップスクリプトを使って、インスタンスを立ち上げた場合に有効である。
その他の環境の場合、データベースへのアクセスを無制限に許してしまい、大変危険である。
その場合は、設定をmd5などにして、暗号パスワードを設定することをお勧めする。
以下のサイトを参考にされたし。
pg_hba.confの設定

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

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

紹介したサイトではその後、コマンドを9.6用に差し替えているが、それをするにはPostgreSQLの古いバージョンを削除しなくてはならない。
僕の環境ではそれをすると、bundle installでpgがインストールできないという現象にぶつかった。
コマンドを総入れ替えしなくても特に問題はないだろうと考え、見送った。

4.PostgreSQL 9.6に切り替える。

以下のコマンドを打って、旧バージョンの自動起動を無効にし、9.6を有効化、自動起動させて、CentOSを再起動する。

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

自分のインスタンスにアクセスし、正常に動いているかどうか確認する。

5.ruby 2.5.1のインストール

Mastodon v.2.4.0ではruby 2.5.1が必須である。
インストール作業はmastodonユーザーに切り替えて行う必要がある(重要!)。これをしておかないと2.4.0のインストールに失敗する。

# su - mastodon

ruby 2.5.1のインストールには、下記サイトを参考にした。
rbenv を使って ruby をインストールする(CentOS編)

(1)rbenvをインストール(clone)する

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

(2)環境設定

# PATH に追加
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

# .bash_profile に追加
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# 上記設定の再読み込み
$ exec $SHELL -l

(3)ruby-build を インストール(clone)する

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

(4)ruby 2.5.1をインストール

$ rbenv install -v 2.5.1

(5)環境確認

再読み込み。

$ rbenv rehash

先ほどインストールした最新版に設定

$ rbenv global 2.5.1

確認

$ ruby -v
ruby 2.5.1p57 (2018-3-29 revision 63029) [x86_64-linux]

6.Mastodon v.2.4.0をインストール

ここまで下準備をして、ようやく2.4.0をインストールできる。
インストールには下記サイトを参考にした。
Mastodonのアップデート
Mastodonのバージョンアップの時に入力するコマンド(non-Docker)

# su - mastodon
$ cd live
$ git fetch
$ git checkout $(git tag | sed -e "/rc/d" | tail -n 1)
$ gem install bundler
$ bundle install
$ yarn install
$ RAILS_ENV=production bundle exec rails db:migrate
$ RAILS_ENV=production bundle exec rails assets:precompile
$ sudo systemctl restart mastodon-*.service

僕の環境では、RAILS_ENV=production bundle exec rails assets:precompileでエラーが出たが、mastodon serviceを再起動したら、問題なくアップデートされていた。
自分のインスタンスのアバウト画面で、2.4.0と表示されていたら成功である。

では、素晴らしきMastodon Lifeを!

2 個のコメント

    • haya2_ on 2018年6月4日 at 10:09 AM
    • 返信

    貴重な情報を共有いただきありがとうございます。

    1. 参考になり、幸いです。
      Mastodonでこの記事を公開したところ、特にデータベースの設定にいくつか指摘をいただきました。
      それを反映して記事を書き直しています。
      おかげさまで、信頼性の高い記事が書けたと思います。

コメントを残す

メールアドレスは公開されません

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください