「さくらのクラウド」スタートアップスクリプトによるMastodonを、v2.3.3からv2.4.0rc3にバージョンアップした時につまずいた話。
いつもはこちらのnoteに追記する話なのですが。
あまりにも大きなつまずきだったので、今回は別のnoteに記します。
サーバーは「さくらのクラウド」のもので、CentOS 7.3。しかもスタートアップスクリプトという仕組みを使い、初心者でも比較的簡単にMastodonのサーバーを立ち上げられました。
上記のnoteのとおりいろんな試行錯誤を経て、Mastodonのインスタンス「十日町市のMastodon」を立ち上げてから1年以上が経ちました。
そして今回。
1年以上も経験値をためて自信が付いたのもつかの間。
v2.4.0rc3にバージョンアップするのにあたり、大きな壁に阻まれました。
というのも
↑こちらにもあるように、既存のデータベース「PostgreSQL」のバージョンが9.2.18のままだとMastodonをv2.4.0rc3にバージョンアップするのに支障があるとわかったのです。
そして ↓こちらに書かれてありますが、ひとまずgit revertを使ってバージョンアップする方法もあるそうです。
というわけで、PostgreSQLを9.4以降にバージョンアップすることがなかなか難しかったので、以下の通りメモとして残します。
まずはデータのバックアップから
「さくらのクラウド」にはコントロールパネルが用意されており、そこから「ディスク」や「アーカイブ」のメニューを選択し、現時点のバックアップを行いました。
もちろんpg_dump/pg_dumpallといったコマンドを使えばデータベースのデータのみのバックアップをしたり復元ができるようです。しかしなにぶん初心者なもので、コントロールパネルからディスクを丸ごとコピーしておき、有事の際は丸ごと復元するほうがわかりやすいと思って、そうしました。
PostgreSQL 9.6.9のインストール
下記の手順でコマンドを使っていきました。
Mastodon v2.4.0rc3の動作要件が9.4以降とのことなので、じぶんは9.6(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
以上で、サーバーにPostgreSQLの9.6.9をインストールできます。
ただ、これだけでは終わりません。
pg_upgradeを実行
最近のPostgreSQLにはpg_upgradeというアップグレード用の便利なコマンドがあるとわかりました。ので、じぶんはこれを使いました。
具体的には下記のようなコマンドを実行します。
# 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がうまくいったら
-bash-4.2$ pg_ctl start
-bash-4.2$ ./analyze_new_cluster.sh
-bash-4.2$ psql -l
-bash-4.2$ ./delete_old_cluster.sh
といった後処理をします。
※2018年5月27日に追記
ひとつ書き忘れていました。
/var/lib/pgsql/9.6/data/postgresql.conf
の127行目にある
dynamic_shared_memory_type = posix
という記述の先頭に#を付けてコメントアウトしたんでした。
この行を示すエラーが出たのでいろいろ調べてみてそうしたんですけど、あるいはposixの部分をnoneに変えても良さそうでした...。
新旧のPostgreSQLの停止・起動
exitコマンドでrootに戻り、従来のPostgreSQL(じぶんの環境ではバージョン9.2.18)を停止します。
# systemctl stop postgresql
そして今回の新しいPostgreSQL v9.6.9を起動します。
# systemctl start postgresql-9.6
さらに、今後も新しいPostgreSQLを自動起動させるために
9.2.18を無効化
# systemctl disable postgresql
9.6.9を自動起動設定
# systemctl enable postgresql-9.6
というコマンドを実行。
ほかにやったことといえば
/var/lib/pgsql/9.6/data/pg_hba.conf
のMETHOD欄をすべて「trust」に変更しました。
そのうえで
# systemctl restart mastodon*
を実行してMastodonを再起動しました。
psqlコマンドもバージョンアップ
以上でPostgreSQLを9.2.18から9.6.9にアップグレードできました。
ただ、PostgreSQLを制御するのに必要なpsqlコマンドが9.2.18のままでした。なので、このコマンドも9.6.9のものにバージョンアップします。
↑こちらを参考しました。
ただ、パスを通すときは
# vi .bash_profile
export PATH=$PATH:/usr/pgsql-9.6/bin
を追記しました。
こちらのほうがサーバーの再起動時にも自動的にパスが通るようです。
うまくいったら
# su - postgres
-bash-4.2$ psql
test=# SELECT version();
とすれば、下記の画面のように結果が表示されて、psqlコマンドも9.6.9になったことがわかります。
また、PostgreSQL自体も9.6.9になっていることが確認できます。
Mastodonをv2.4.0rc3にバージョンアップ
ここまでの作業によって、PostgreSQL 9.6.9とともにMastodonのv2.3.3が稼働できるようになりました。
というわけで、ここでようやくMastodonをv2.3.3からv2.4.0rc3にバージョンアップしていきます。
ちなみに、Rubyを事前に2.5.1へバージョンアップする必要もありました。以前にも同様の作業をしたことがあるので、このnoteを参考にしながらバージョンアップ。ただし問題なく終わったように見えたのですが
$ ruby -v
でバージョン表記を確認しても2.5.0p0となっていて2.5.1になりません。
そこで
$ rbenv local --unset
を実行したらバージョン表記が2.5.1になりました。
という事前準備もしつつ、いつもの方法でMastodonをバージョンアップしていきます。
ところが、bundle installを実行したらpgというgemファイルがうまくインストールできません。
$ gem install pg -v '1.0.0'
を実行していもうまくいきません。
そこでこちらを参考にしながら
# yum -y install postgresql-devel
さらに
$ gem install pg --with-pg-config=/usr/pgsql-9.6/bin/pg_config
をして、再度bundle installでうまくいきました。
あとはいつものようにyarn install、db:migrate、assets:precompile。
そしてexitしてrootに戻り
# systemctl restart mastodon*
で再起動。
いつものことながらWeb UIがうまく表示されなかったので
$ NODE_ENV=production ./bin/webpack
をして、再度Mastodonを再起動。
これにて、めでたくMastodonをv2.4.0rc3にバージョンアップできました。
こう書いてみるとあっという間のように感じますが、実際は1週間ほど悶々とした日々を過ごしました。
Mastodonが動かなくなるたびにサーバーをシャットダウンしてアーカイブしておいたデータをディスクに復元しつつ試行錯誤の繰り返し...。
動いたときはこのうえなく嬉しかったですね。
この快感はやめられないものがあります。
このnoteがだれかのお役にも立てれば。
これからも「十日町市のMastodon」をよろしくお願いします。