別サーバにあるTracからRedmineへデータを移行する手順

経緯

先日、開発用サーバに立ててあるBTS(バグ管理システム)ツール"Trac"のデータを
別のサーバに立ててある同様のBTSツール"Redmine"に移行する事になった。


Redmine公式の"他システムからの移行"ページによると、
tracからredmineへの移行を実行するスクリプトがあり、それを利用した移行手順が載っているが、
これは同一サーバ内にTracRedmineが同居していることを前提とした手順なので、
別サーバに立ててある場合についての手順は載ってなかった。


先輩に訊いてみたところ、バグチケットの移行の例はあったものの、
Wikiを含めたデータを丸ごと移行した前例はないとの事だったので
今回調査してここに移行手順を載せることにする。


この手順では、以下の前提に則って書いてあるのであしからず。


移行手順

1.tracがあるサーバにて

tracディレクトリを"tar.gz"で圧縮して、ユーザディレクトリに移動させる

  $ sudo su - #rootユーザに変更
  $ cd /var/
  $ ./stop_trac.sh #圧縮中に更新されないようにTracを止めておく
  $ tar -zcvf trac.tar.gz trac
  $ mv trac.tar.gz /home/[ユーザ]/

2.ローカルPCにて

tar.gzファイルをscpで持ってくる

  $ scp [ユーザ]@[tracがあるサーバ]:~/trac.tar.gz .

tar.gzファイルをredmineがあるサーバにscpで送る

  $ scp trac.tar.gz [ユーザ]@[redmineがあるサーバ]:

3.Redmineがあるサーバにて

Redmineがあるサーバでtar.gzファイルを展開する

  $ cd /home/[ユーザ]/
  $ tar -zxvf trac.tar.gz

もし失敗した時のためにRedmineのDBのバックアップをとっておく

  #DBがmysqlの時
  $ mysqldump -u[ユーザ名] redmine > redmine.dump2012XXXX

オプション設定。以下の条件が当てはまっていたら、それぞれに対応した※(後述)を実行する。

  • (Tracのバージョンが0.12の場合 ※1)
  • (TracのデータをSqlite3で格納していた場合 ※2)
  • (RedmineのサーバのRubyバージョンをRVMで切り替えている場合 ※3)

データ移行スクリプトを実行する

  $ cd /var/www/[redmineのパス]
  $ sudo su - www-data                      #www-dataユーザに変更
  $ mkdir files                                         #実行する時に必要なディレクトリを作成
  $ rake redmine:migrate_from_trac RAILS_ENV=“development”
     #実行後以下の問い合わせが来るのでそれぞれ入力する
     Trac directory []:  #Tracが置いてあるパスを入力
     Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite]: #Tracで使用したDBの種類を入力
     Database encoding [UTF-8]: #DBの文字コードを入力(何も入力せずEnter押すだけでもOK)
     Target project identifier []: #Redmine上で使うプロジェクトの名称を入力
     ↓
     Trac directory []: /trac/home/[ユーザ]/trac/[プロジェクトのディレクトリ]
     Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite]:sqlite3
     Database encoding [UTF-8]:
     Target project identifier []: [プロジェクト名] 

入力すると処理が走って、数分経てば完了する。

                                                  • -

※1 Tracのバージョンが0.12の場合:
移行スクリプトは0.12をサポートしていない。
[参考URL: http://www.redmine.org/issues/6868 http://www.redmine.org/issues/5764 ]
なので、スクリプトファイルを一部修正しなければいけない。

  1). スクリプトファイルを修正:
  $ sudo su -  #rootユーザに変更
  $ vi /var/www/[Redmineのパス]/lib/tasks/migrate_from_trac.rake
     78           def fake(time)
     79             @fake_diff = real_now - time

     ↓ time = 0 if time.nil? を追加

     78           def fake(time)
     79             time = 0 if time.nil?
     80             @fake_diff = real_now - time

  2). パッチファイルを当てる
  $ wget http://www.redmine.org/attachments/download/4049/migrate_from_trac.diff
  $ patch -p0 < migrate_from_trac.diff
    パッチを当てるファイル名の問い合わせに migrate_from_trac.rake を指定
                                                        • -

※2 TracのデータをSqlite3で格納していた場合:
Ruby用のSqlite3をインストールする

  $ sudo gem install sqlite3-ruby
                                                        • -

※3 RedmineのサーバのRubyバージョンをRVMで切り替えている場合:
RVMでバージョンを指定しないと、スクリプトを認識してくれないので指定する。

  $ cd /var/www/[redmineのパス]
  $ sudo su - www-data
  $ rvm use 1.8.7
                                                      • -

FAQ 移行に関して出てくるありがちな疑問

Q1.TracのユーザがRedmineに登録されなかった。どうして?
 A.Trac上でユーザが作成されていても、チケットの担当が割り振られていないとRedmine上にユーザは作成されない。
  ユーザを移したい時はどこかしらのチケットに割り振るように。


Q2.TracRedmineでユーザIDが重複したら、ユーザ情報(ログインパスワードなど)は上書きされちゃうの?
 A.Redmine側のユーザ情報は保持される。Tracで受け持ってるチケットを引き継いでくれるので意外と便利。