プロジェクト

全般

プロフィール

Redmineをtar版からsvn版に切り替える

Redmineでこれまで標準的だったtar版からSVN取得版への変更手順。
SVN版にすることでバージョン指定やアップデートが非常に楽になります。

ここではtar版の5.1.2からSVN版の5.1.8への切り替え兼バージョンアップを行います。
手順としてはtar版の更新手順をベースにSVN版の新規構築手順を一部混ぜる形です。
もし既存バージョンがSVN版と近いバージョンではない場合は、一度tar版→tar版での
アップグレードでSVNのリポジトリカバー範囲まで更新した方が良いと思います。

近いバージョンであれば動作に必要なリソースはそのまま利用できるため、まずは同一
マイナーバージョンでの切り替えがおすすめです。完全同一バージョンでもいいですが、
あまり手間は変わらないので同一マイナーの最新かひとつ前にすることをお勧めします。
(練習としてSVN化後の最新版に1回更新作業を行えるため)

補足として最後に固定バージョンから同一マイナーバージョンのstable版にリポジトリ
を切り替えて、SVNを用いた更新作業を実施します。

準備

バックアップ

  • まずサービスを落としておきます
    # systemctl stop httpd
    
  • ディレクトリをリネーム退避します(設定のコピーに使います)
    # cd /usr/local
    # mv redmine redmine_old
    
  • データベースのバックアップを取得します
    「config/database.yml」を参考にDB名とユーザ名を読み替えてください。
    # mysqldump --no-tablespaces -u redmine -p redmine > redmine_dump.sql
    

SVN版の準備

  • チェックアウト先のディレクトリを準備します
    # cd /usr/local/
    # mkdir redmine
    # chown apache.apache redmine
    
  • tagsから固定バージョンをチェックアウト(co)します
    branches(stableの最新)またはtags(固定バージョン)URLはこちらから参照します
    https://svn.redmine.org/redmine
    # sudo -u apache svn co https://svn.redmine.org/redmine/tags/5.1.8 redmine
    リソースがダウンロードされます
    
  • 正しくチェックアウトしているか確認します
    # cd redmine
    # sudo -u apache svn info
    指定したチェックアウト元URLやリポジトリ情報が表示されることを確認
    
  • 従来の設定ファイルを移行します
    # cp -p ../redmine_old/config/configuration.yml config/
    # cp -p ../redmine_old/config/database.yml config/
    
  • 添付ファイルを移行します
    # cp -Rp ../redmine_old/files .
    
  • プラグインを移行します
    # cp -Rp ../redmine_old/plugins .
    
  • redmineのアドレス以下にリンクを追加するためpublicシンボリックを仕込んでいる場合は再度作成します
    (弊環境がそうなだけで、普通の環境にはあまりないと思います。example.com/redmine/portalみたいなリンクが作れます。)
    # ln -s /var/www/html/home public/portal
    # ll public/portal
    lrwxrwxrwx 1 root root 21  8月 21 19:33 public/portal -> /var/www/html/home
    
    • favicon.icoを変更している場合もここに配置します
  • テーマをカスタムしている場合、必要に応じて移行します
    # cp -Rp ../redmine_old/public/themes/テーマ名 public/themes/
    
    • 弊環境ではデフォルトテーマのCSSをカスタマイズしているので、これを移行します
      先頭付近の下記において、既存h2~h4をコメントしborder-bottomつきh2~h4を転記します。
      # less ../redmine_old/public/stylesheets/application.css
      # vi public/stylesheets/application.css
      --------------------
      h1, h2, h3, h4, h5, h6 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
      #content h1, h2, h3, h4, h5, h6 {color: #555;}
      #h2 {font-size: 20px;}
      #h3 {font-size: 16px;}
      #h4 {font-size: 13px; border-bottom: 1px solid #ccc; font-weight:normal;}
      h2, .wiki h1 {font-size: 20px; border-bottom: 1px solid #bbb; margin-left: 0em;}
      h3, .wiki h2 {font-size: 16px; border-bottom: 1px solid #bbb; margin-left: 0.5em;}
      h4, .wiki h3 {font-size: 13px; border-bottom: 1px dotted #bbb; margin-left: 1.0em;}
      h4 {border-bottom: 1px dotted #bbb;}
      
  • wikiの許可タグを変更している場合に記載内容を転記して移行します
    # grep "ALLOWED_TAGS =" ../redmine_old/lib/redmine/wiki_formatting/textile/redcloth3.rb
    # vi lib/redmine/wiki_formatting/textile/redcloth3.rb
    --------------------
        #ALLOWED_TAGS = %w(pre code kbd notextile)
        ALLOWED_TAGS = %w(pre code kbd notextile br iframe)
    
  • bundlerの設定を行います
    # bundle config set --local without 'development test'
    
  • bundlerを更新し、バンドルパッケージを更新します
    # bundle update --bundler
    # bundle install
    
  • セッション鍵を初期化します
    # bundle exec rake generate_secret_token
    
    • RHEL8系列の場合nokogiriでglibc非互換のエラーが出るバージョンがあるため、まだ直っていなければ
      「Gemfile」のnokogiri部分を下記のように変更し、もう一度「bundle config set」からやり直します。
      # vi Gemfile
      ----------------------------------------
      #gem 'nokogiri', Gem.ruby_version >= Gem::Version.new('3.1') ? '1.18.3' : '~> 1.15.7'
      gem 'nokogiri', '~> 1.16.0'
      
  • データベース、プラグインデータベースをマイグレーションします
    # bundle exec rake db:migrate RAILS_ENV=production
    # bundle exec rake redmine:plugins:migrate RAILS_ENV=production
    
  • キャッシュをクリアします
    # bundle exec rake tmp:cache:clear RAILS_ENV=production
    
  • サービスを再開します
    # systemctl start httpd
    
  • 問題が無ければ上記で起動するはずです。
    ログインして「管理」→「情報」ページでバージョンやセルフチェック状況を確認します。
    https://example.com/redmine/admin/info

しばらく運用して問題なさそうであればバックアップを削除してかまいません。

stable版への切り替えとアップデートの動作確認

通常の運用時は参照リポジトリを「stable版」としておき、アップデートするだけとしたほうが楽なので
上記の「固定バージョン」からの変更とアップデートを行います。

なおマイナーバージョンが変わる際もマイナーバージョンごとの「stable版」に分かれているため、
同じように参照リポジトリを変える必要がありますので参考としてください。

  • 念のため既存の更新同様にサービスを落としてバックアップを行います
    (SVN版では既存インストール先で上書き更新されるので、mvではなくtarで行います)
    # systemctl stop httpd
    # cd /usr/local
    # tar czf redmine_yyyymmdd.tar.gz redmine
    # mysqldump --no-tablespaces -u redmine -p redmine > redmine_dump.sql
    
  • インストール先に入り、リポジトリ情報を確認します
    # cd redmine
    # sudo -u apache svn info
    既存バージョンのリポジトリ情報が確認できること
    
  • この作業は異なるstableバージョンを切り替える場合のみに行います。
    メンテナンスバージョンのみの更新時は不要です。
    • リポジトリ参照元を変更します
      https://svn.redmine.org/redmine
      sudo -u apache svn switch https://svn.redmine.org/redmine/branches/5.1-stable
      ファイルが更新されます
      
    • マイナーバージョン、メジャーバージョンを更新する場合、設定ファイルに互換性が無い場合が
      あるため、大幅な更新時は新規ファイルをベースに設定ファイルを作り直すことを検討してください。
  • 下記を実行しリソースを更新します(前述のswitchを実行していると更新済のためそのまま完了します)
    # sudo -u apache svn update
    ファイルが更新されます
    
  • 再度リポジトリ情報を確認します
    # sudo -u apache svn info
    新しいバージョンに変わっていること
    
  • RHEL8系列の場合nokogiriでglibc非互換のエラーが出るバージョンがあるため、まだ直っていなければ
    「Gemfile」のnokogiri部分を下記の変更が上書きされて戻っていないかを確認します。
    # vi Gemfile
    ----------------------------------------
    #gem 'nokogiri', Gem.ruby_version >= Gem::Version.new('3.1') ? '1.18.3' : '~> 1.15.7'
    gem 'nokogiri', '~> 1.16.0'
    
  • bundlerを更新し、バンドルパッケージを更新します
    # bundle update --bundler
    # bundle install
    
  • redmineのアドレス以下にリンクを追加するためpublicシンボリックを仕込んでいる場合は上書きされて消滅していれば再度作成します
    (弊環境がそうなだけで、普通の環境にはあまりないと思います。example.com/redmine/portalみたいなリンクが作れます。)
    # ll public/portal
    lrwxrwxrwx 1 root root 21  8月 21 19:33 public/portal -> /var/www/html/home
    ↑が存在しない場合、下記を実行します
    
    # ln -s /var/www/html/home public/portal
    # ll public/portal
    lrwxrwxrwx 1 root root 21  8月 21 19:33 public/portal -> /var/www/html/home
    
    • favicon.icoを変更している場合もここに配置します
  • 弊環境ではデフォルトテーマのCSSをカスタマイズしているので、上書き更新されていればこれを変更します
    先頭付近の下記において、既存h2~h4をコメントしborder-bottomつきh2~h4を転記します。
    # vi public/stylesheets/application.css
    --------------------
    h1, h2, h3, h4, h5, h6 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
    #content h1, h2, h3, h4, h5, h6 {color: #555;}
    #h2 {font-size: 20px;}
    #h3 {font-size: 16px;}
    #h4 {font-size: 13px; border-bottom: 1px solid #ccc; font-weight:normal;}
    h2, .wiki h1 {font-size: 20px; border-bottom: 1px solid #bbb; margin-left: 0em;}
    h3, .wiki h2 {font-size: 16px; border-bottom: 1px solid #bbb; margin-left: 0.5em;}
    h4, .wiki h3 {font-size: 13px; border-bottom: 1px dotted #bbb; margin-left: 1.0em;}
    h4 {border-bottom: 1px dotted #bbb;}
    
  • wikiの許可タグを変更している場合、上書き更新されていれば記載内容を転記して移行します
    # vi lib/redmine/wiki_formatting/textile/redcloth3.rb
    --------------------
        #ALLOWED_TAGS = %w(pre code kbd notextile)
        ALLOWED_TAGS = %w(pre code kbd notextile br iframe)
    
  • データベース、プラグインデータベースをマイグレーションします
    # bundle exec rake db:migrate RAILS_ENV=production
    # bundle exec rake redmine:plugins:migrate RAILS_ENV=production
    
  • キャッシュをクリアします
    # bundle exec rake tmp:cache:clear RAILS_ENV=production
    
  • サービスを再開します
    # systemctl start httpd
    
  • 問題が無ければ上記で起動するはずです。
    ログインして「管理」→「情報」ページでバージョンやセルフチェック状況を確認します。
    https://example.com/redmine/admin/info
    • 次の警告はしばらく無視してOKです
      キューアダプターがデフォルト (開発・テスト用) 以外のものに変更済み (!)
      
  • しばらく運用して問題なさそうであればバックアップを削除してかまいません。

プラグインの更新

  • 「管理」→「プラグイン」で「アップデートを確認」を行います
  • 警告マークで更新すべきものがあった場合、配布元からリソースを取得します
  • サービスはダウンしておきます
    # systemctl stop httpd
    
  • 下記のパスに転送し展開します
    cd /usr/local/redmine/plugins/
    wget プラグイン.zip
    --------------------
    sudo -u apache unzip プラグイン.zip
    
  • プラグインディレクトリへの配置以外に、配布元で指定の手順があれば実行します。
    • 例(プラグイン用にパッケージの導入やビルドが必要なケース)
      # bundle install --without development test --no-deployment
      # bundle exec rake redmine:plugins NAME=プラグイン名 RAILS_ENV=production
      
  • サービスを再開します。
    # systemctl start httpd
    
  • 再度「管理」→「プラグイン」で「アップデートを確認」を行います
  • プラグイン更新されており、警告が消えていることを確