やること
ざっと書き出すと以下の作業になる。
- postgresqlのバックアップを取得する
- リポジトリをCentOS Stream 9のものにする
- 更新処理
- nginxライブラリのオーナー変更
- アセットの再作成
- dnf moduleのリセット
- logrotateが止まっているので動かす
postgresqlのバックアップを取得する
失敗してサーバーがぶっ壊れましたというときのためにpostgresqlのバックアップを取得する。mastodon関連のプロセスを停止してバックアップを取得。
# systemctl stop mastodon-*
# su - postgresql
$ pg_dumpall -c > backups/20240504.dump
リポジトリをCentOS Stream 9のものにする
リポジトリをCentOS Stream 9のものに変更する。標準のリポジトリはCentOS Stream 9のものをインストールするだけ。他はCentOS Stream 8用を削除してCentOS Stream 9用をインストールする。うちの環境だとRemiリポジトリが競合を起こした。特に使用していないのでRemiリポジトリは削除した。epel-nextはepelで入るしrpmfusionはepelの削除で消えるのでやらなくてもいいけど一応書いておく。なおリポジトリの更新に関しては
CentOS Stream 8をStream 9にアップグレードしてみた | ツインターボのブログ
CentOS 8、CentOS Stream 8 を CentOS Stream 9にアップグレードする - 技術的な何か。
を参考にした。
dnf remove remi-release.noarch
dnf install http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-repos-9.0-24.el9.noarch.rpm http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-stream-release-9.0-24.el9.noarch.rpm http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/centos-gpg-keys-9.0-24.el9.noarch.rpm
dnf remove epel-release
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
dnf install https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm
dnf remove rpmfusion-free-release
dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
更新処理
上のサイト及び
CentOS Streamを8から9にアップグレードする | Nemutai
を参考に更新処理を行う。なおCentOS Stream 9ではpowertoolsリポジトリはなくなり代わりにcrbというリポジトリになっている。それから--enablerepo=crbを追加している。これをしないとpowertoolsリポジトリから入れたものが移行されない。crbに同一パッケージの新バージョンがあったら標準リポジトリではなくそちらが使われる?まあ、その時はその時で。動かないわけではないだろう。
# dnf --releasever=9 --enablerepo=crb --allowerasing --setopt=deltarpm=false distro-sync
# rpmdb --rebuilddb
# dnf remove subscription-manager
# dnf clean all
# dnf upgrade
# dnf groupupdate "Core" "Minimal Install"
# reboot
nginxライブラリのオーナー変更
CentOS(というかREHL系)でMastodonを動かす場合、nginxのuserをmastodonにする必要がある。結果、nginxのライブラリーのオーナーもmastodonに変更する必要がある。OSの更新でここのオーナーが元に戻ってしまうので再度変更をしておく。
# chown -R mastodon:root /var/lib/nginx
アセットの再作成
OpenSSLのバージョンがCentOS Stream 8は1系だがCentOS Stream 9は3系となる。このためアセットの再作成を行わないとmastodon-webとmastodon-sidekiqがエラーとなる。基本はrubyをアンインストールして再インストールなのだが使用中でアンインストールできないというエラーが。これはアンインストール(bundle exec gem uninstall -aIx)ではなくバージョン戻し(bundle pristine)で対応できた。またprecompileでエラーとなるがこれはnodejsのバージョンが古いことが原因だった。CentOS Stream 9に更新後に入っていたnodejsのバージョンは18。安定版の最新は20。20にすることでエラーは消えた。またヒープサイズを従来より拡大しないとエラーになる。アセットの再作成に関してはいつもお世話になっている
Mastodon メンテナンスメモ(移植版)
を参考にした。またRubyが使用しているOpenSSLのバージョンを確認するのに
Ruby で使われる OpenSSL のバージョンを更新する - どいブログ
が参考になった。
[mastodon]$ export NODE_OPTIONS="--max-old-space-size=8192"
[mastodon]$ rbenv uninstall 3.2.3
[mastodon]$ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.3
[mastodon]rbenv global 3.2.3
[mastodon]gem install bundler --no-document
[live]bundle pristine
[live]RAILS_ENV=production bundle exec rails assets:clobber
[live]RAILS_ENV=production bundle exec rails assets:precompile
dnf moduleのリセット
あとdnfのmoduleがCentOS Stream 8とCentOS Stream 9では使えるものが異なるようでdnfコマンドを実行する度にエラーが表示されるのでリセットしておく。インストールしていないものもエラーが出るので面倒である。エラーが表示されても実害はないのだが。
logrotateが止まっているので動かす
参考にしたサイトにいろいろと目を通して気がついた。こういうのは数日回してみないとわからないな。
# systemctl status logrotate