はじめに
Redmineバージョン、1.0(別システムで稼働)→4.1(以後FreeBSD)、3.4→4.0→4.1→4.2とアップグレードしてみた。手順としては変わりなかったので、まとてみた。
- 事前にpkg/portsシステムがサポートしているFreeBSDバージョンを確認する必要がある。
- あまりにも古い環境では、先にOSをアップデートしてから作業する必要がある。
- あるいは新環境を新たに用意し、バックアップ/リストアにより、旧環境より移行するのもアリと思われる。
- 通常、バックアップ/リストアによる移行は面倒ではあるのだが、この手の作業としては十分以上に楽であることを確認している。
- Redmineのアップグレード方法については、本家資料にて詳しく説明が存在する(日本語版)。
- ただし
ruby
やsubversion
、bundler
といった仕組みを知った上での作業となるのだが、これはpkg/portsシステムとの作法(仕組み)とは以下の点で違いすぎる。-
bundler
を(直接)触っている。 -
subversion
でデプロイしている。
-
- この辺りの事情を考慮して上記資料を補完する。元資料の流れを流用しつつ、以下のように変えていく。
- 動作環境の確認(ニュアンスが変わる)
- バックアップ(若干手順を詳細に)
- アップグレード(完全入れ替え)
- データベースの更新
- クリーンナップ
動作環境の確認
FreeBSD版Redmine(ports/www/redmine
)は長らく(2017/07/16~2020/06/25)、3.4をベースをベースにアップデートが行われてきた関係で、古いRuby(2.4)、古いRails(4.2)で稼働していた。またRuby2.4のFreeBSDでのサポートは、2020年03月31日をを最後に削除されたため、それ以後の新規インストールは事実上不可能であった。
Ruby2.6、Rails5.2ベースのRedmine4(ports/www/redmine4
)をインストールすることになるわけであるが、こちらはRedmine4.0/4.1の流れとなる。
そしてRedmine4.2(ports/www/redmine42
)では、Ruby2.7/Rails5.2ベースとなるため、別途分岐している。
※ここではRubyへの依存はRedmineのみであることを前提とし、それ以外のRuby依存portsについては取り扱いを想定しない(整合性付くかは不明なので)。
※特にpkgでの話となるが、デフォルトのRubyバージョンはその時点でのportsデフォルトに準拠するため、RemdineのRubyサポートバージョンの状況によらず、変更になっている場合がある。例えば公式にはRedmine4.1ではRuby2.6までのサポートとなっているが、現在(2021年12月)はRuby2.7環境での稼動となる。
バックアップ
バックアップに当たり、以下の点を確認する。
- インストールバージョン・環境
- インストールプラグインおよびそのバージョン
- バックアップ対象となるデータの確認
インストールバージョン
厳密に確認しなくても良いが、更新前後で何が変わったかを把握するため、記録に残しておくことをお勧めする。
具体的には管理者権限でRedmineにログインして「管理」→「情報」を表示する。
インストールプラグイン
上記の手順と同じく「管理」→「プラグイン」を表示する。
ここでの確認はインストールされているプラグインが何であるか、そのバージョンは…といった情報を記録に残しておくことが重要であるが、それよりも、Redmine4に対応しているかどうかが問題になる。
ただしその確認は一概には難しいので、プラグインの作者ページのリンクをたどって調べる必要がある。あるいはプラグインディレクトリのページで、サポート状態を確認する。
プラグインが存在することに対する対応は難しいところがあるので、入れてるなら、最後、入れ忘れないようにしよう、としか言いようがないのでそのユースケースについては書かない。
バックアップ
バックアップについてはRedmineのバックアップとリストアを見てもらうとして、文中の「インストールディレクトリ直下の files
ディレクトリ」は /usr/local/www/redmine/files
を意味する。
config/configuration.yml
は /usr/local/www/redmine/config/configuration.yml
にある。
また各々使用しているデータベースでのバックアップを実行する。原典の資料に異存はないため、ここでは詳細は扱わない。そちらをチェックして欲しい。
あと個人的、別途テーマを入れてるなら、そちらのバックアップも必要であると考える。具体的には /usr/local/www/redmine/public/themes
ディレクトリである。ただし、Redmine本体からインストールされているテーマもあるので、要否を確認すること。
取り急ぎチェックすべきは以下のパスである。
- 確認すべきファイル
/usr/local/www/redmine/config/configuration.yml
/usr/local/www/redmine/config/databases.yml
/usr/local/www/redmine/config/secrets.yml
-
/usr/local/www/redmine/config/initializers/secret_token.rb
※generate_secret_tokenで生成されたファイル
- 確認すべきディレクトリ
-
/usr/local/www/redmine/public/themes/*
※alternate
、classic
を除く /usr/local/www/redmine/files/*
-
config/initializers/secret_token.rb
については本家資料によると config/secrets.yml
にあるべきファイルのようであるが、指示通り差作業すると起動しない罠が…。何が正しいのか。
アップグレード
いよいよここからpkg/portsシステム固有となる部分。ここに関しては元の資料への参照はゼロになります。
Redmine3.4のアンインストール
pkg delete -y ruby
全部アンインストールしましょう。
また、/etc/make.conf
中の DEFAULT_VERSIONS
から ruby=2.4
の設定を削除すること。
Redmine4.1または4.2のインストール
pkgの場合
pkg install -y redmine4
または
pkg install -y redmine42
portsの場合
事前に /etc/make.conf
中の DEFAULT_VERSIONS
に ruby=2.6
または ruby=2.7
の設定を追加すること。
cd /usr/ports/www/redmine4 && make install
または
cd /usr/ports/www/redmine42 && make install
片っ端からインストールしましょう。
X11が不要であれば(サーバーユースでは不要だと思うが)、/etc/make.conf
に OPTIONS_UNSET=X11
という行を追加しておく。
別途プラグインのインストール
※pkg/portsとしては現在存在しない点に注意
cd /usr/ports/www/redmine-なにか && make install
必要に応じて追加インストールを実施します。またこの時、インストール後の手順についてメッセージが表示されていること(DBのマイグレーションなど)があるので、メッセージの指示に基づいて作業する。
自前でプラグインをインストールしている場合は、説明しようが無いため、詳細は省略。
注意点
- Redmine4.0時点ではRMAGICKは使えない。
- Redmine4.1ではRMAGICKを別の実装(MINI_MAGICK)に置き換えたので再び使えるようになっている。
データベースの更新
cd /usr/local/www/redmine && bundle exec rake db:migrate RAILS_ENV=production
プラグインのマイグレーションも合わせて実施する。
cd /usr/local/www/redmine && bundle exec rake redmine:plugins:migrate RAILS_ENV=production
Railsの作法に則って、何度実行しても問題無いので、サクサク実行しましょう。
クリーンナップ
cd /usr/local/www/redmine && bundle exec rake tmp:cache:clear RAILS_ENV=production
再起動
キャッシュのクリアが終ったら、Redmineを再起動する。
service redmine stop
rm -f /usr/local/www/redmine/tmp/pids/thin.pid
service redmine start
まぁ大きな変更もあったことだし、一度全部、再起動してしまうのもアリ。
よくあるトラブルとその対応
Q.500エラーが表示されます! どうすればいいですか?
A.まずは、ログファイル(/usr/local/www/redmine/log/production.log
)を確認しよう。
下記のようなメッセージ(特に Completed 500 Internal Server Error
)が得られたら、問題は特定できています。
Started POST "/login" for XXX.XXX.XXX.XXX at 2021-12-30 03:39:36 +0900
Processing by AccountController#login as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXXXXXXXXXXXXXXXX", "back_url"=>"/", "username"=>"nork", "password"=>"[FILTERED]", "login"=>"ログイン"}
Current user: anonymous
Completed 500 Internal Server Error in 29ms (ActiveRecord: 2.3ms)
NameError (undefined local variable or method `twofa_scheme' for #<User:0x000000080ccbe2b0>
Did you mean? twofa_active?):
app/models/user.rb:406:in `twofa_active?'
app/controllers/account_controller.rb:321:in `password_authentication'
app/controllers/account_controller.rb:307:in `authenticate_user'
app/controllers/account_controller.rb:41:in `login'
lib/redmine/sudo_mode.rb:61:in `sudo_mode'
上記ケース(NameError (undefined local variable or method 'twofa_scheme'
)では、データベースの更新を実施していなかったのが原因(未定義を参照しようとしたエラー)なので、下記のコマンドを実行して解決する。
cd /usr/local/www/redmine && bundle exec rake redmine:plugins:migrate RAILS_ENV=production
Q.そもそもRedmineが立ち上がってくれません!
A.まずは、ログファイル(/log/thin.log
)を確認しよう。
下記のようなメッセージ(特に tmp/pids/thin.pid (Errno::EACCES)
)が得られたら、問題は特定できています。
/usr/local/lib/ruby/gems/2.7/gems/thin-1.8.1/lib/thin/daemonizing.rb:177:in `delete': Permission denied @ apply2files - tmp/pids/thin.pid (Errno::EACCES)
from /usr/local/lib/ruby/gems/2.7/gems/thin-1.8.1/lib/thin/daemonizing.rb:177:in `remove_pid_file'
from /usr/local/lib/ruby/gems/2.7/gems/thin-1.8.1/lib/thin/daemonizing.rb:66:in `block in daemonize'
Exiting!
Redmineが立ち上がってないこと、あるいは動いている場合は停止した後、下記の通りファイルを削除します。
rm -f /usr/local/www/redmine/tmp/pids/thin.pid
Q.ログファイルが /log/thin.log
ってなんですか!まともな位置に置かれないのですが?
A.起動ディレクトリ(= /
)直下に log/thin.log
ファイルが作成されます。これが嫌なら下記のコマンドを実行します。
sysrc redmine_flags+=" -l /usr/local/www/redmine/log/thin.log"
よくある質問とその答え
Q.データベースの更新が怖いです。ほんとに大丈夫ですか?
A.大丈夫だ。問題無い。バックアップなんぞせんd(ぴー)【コンプライアンス的に以後の発言がイレースされました】
Q.データベース以外での更新ポイントは無いのですが?
A.無いことも無いが、実際にはほとんど無い。db:migrate
実施時に、「余計なもの」についてメッセージが表示されるので、その指示に応じて対応すること。
自分は config/email.yml
というファイルが残っていた旨、レポートされたため、config/configuration.yml
ファイル中の設定が正しいことを確認して、config/email.yml
を削除した。
また原書には「セッション保護用の秘密鍵を生成」という指示があるが、今時のインストールでそれをやってないことは無いと思うので無視できると思う。
極めて古いバージョン(Redmine1等)からのアップデートを維持しているのであれば、その辺りは原書の指示を読み直す必要がある。
一度今のバージョンに合わせて見直したのであれば、以後のバージョンアップは今のバージョンを前提として更新していくことになる。何が言いたいかと言えば、旧バージョンのことは忘れてよい。
Q.データベースの更新を実施しない場合どうなりますか?
A.検証してないので不明だが、カラムの変更やテーブルの変更を行っていたようなので、ある程度は動くが、ある機能を使用するとエラーになる、といった現象が発生するのでは無いかと思われる。
Q.やばい!全然データベースの更新してません!
A.大丈夫だ。今からでも更新して間に合わないこともない。まとめて変更を適用だ!
Q.もしかしたらアップデートする度に、db:migrate
と tmp:cache:clear
しても大丈夫?
A.大丈夫だ。問題無い。redmine:plugins:migrate
も合わせて実施かな。
あまり長期間に渡って運用したことが無いので、問題になるかは不明。