さくらのVPSにSubversionとTracを移行する

前回のさくらのVPSにAPACHE+MYSQLを入れるの続き。
自宅サーバにおいていたSubversionとTracをさくらのVPSに移行する。ついでにTrac 0.11から0.12へアップグレードする。

subvrsion + tracのインストール

root@さくらのVPSで作業。この時点のlenny unstableからTrac 0.12が入るため、0.11からのデータのマイグレーションが必要になる。

aptitude -t unstable install subversion libapache2-svn libapache2-mod-python python python-subversion python-setuptools
easy_install Pygments Babel==0.9.5 Genshi==0.6
easy_install Trac TracGoogleAnalytics
mkdir -p /var/cache/python-eggs
chown www-data:www-data /var/cache/python-eggs

easy_installで指定しているTrac〜は使っているTracのプラグイン。

subversionの移行

(リポジトリは基本的に匿名アクセスを読み込みだけ許可して、一部のリポジトリはプライベートにしている)

1. 認証関連のファイル作成

root@さくらのVPSで作業。Subversionでユーザ認証するファイルを用意。自分一人だけなので新規に作った方が手っ取り早い。
htpasswd -c /etc/apache2/.htpasswd username

リポジトリごとのアクセス権を設定。現行サーバの内容をコピペ。内容は省略、詳しくはAuthzSVNAccessFileで検索すべし。
vi /etc/apache2/.htsvnaccess

2. リポジトリの移行

作業中に誰も書き込まないなら多分ファイルをそのままtarで固めて持って行ってもよいが、技を知っているのでまっとうなやり方で。

# 移行元サーバのユーザ
cd /var/lib/svn
sudo svnadmin dump /var/lib/svn/repo > /tmp/repo_svn.dump
scp /tmp/repo_svn.dump wwwXXXXX.sakura.ne.jp:/tmp

svnadminがdumpしたファイルをgzipしてみたけどほとんどサイズが変わらなかったどうも圧縮したファイルをdumpしてくれているようだ。

# root@さくらのVPS
mkdir -p /var/lib/svn
cd /var/lib/svn
svnadmin create repo
svnadmin load repo < /tmp/repo_svn.dump
chown -R www-data:www-data /var/lib/svn

この作業はリポジトリごとにやらないと行けないので沢山あると面倒である。

3. apacheの設定

こんな感じで/svnでアクセスさせる。

<Directory "/var/lib/svn">
  AllowOverride All
  Options FollowSymLinks MultiViews ExecCGI
  Order allow,deny
  Allow from all
</Directory>

  <Location /svn>
    DAV svn
    SVNParentPath /var/lib/svn
    AuthzSVNAccessFile /etc/apache2/.htsvnaccess
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /etc/apache2/.htpasswd
    Satisfy Any
    Require valid-user
  </Location>

Tracの移行

1. リポジトリの移行

tracのdumpは覚えてない。うっすらすごい面倒だった記憶もあるのだが定かではない。tracも作業中に誰も書き込まなければそのままファイルを固めて持っていけばいいはず。(というか行けた)

# 移行元のユーザで
cd /var/lib
sudo tar -cfz /tmp/trac.tar.gz trac
scp trac.tar.gz wwwXXXXX.sakura.ne.jp:/tmp
# root@さくらのVPS
cd /var/lib
tar xfz /tmp/trac.tar.gz

ファイルのアクセス権の変更はデータを全部更新してからやる。

2. AuthzSourcePolicyの変更

root@さくらのVPSで作業。0.11->0.12ではAuthzSVNAccessFile(authz_file)の設定を使っている場合、permission_policiesにAuthzSourcePolicyを追加しないといけない。

参考: http://trac.edgewall.org/wiki/TracUpgrade#Auhtzpermissionchecking

/var/lib/trac/repo/conf/trac.ini
[trac]
authz_file = /etc/apache2/.htsvnaccess
authz_module_name = repo
base_url =
check_auth_ip = true
database = sqlite:db/trac.db
default_charset = utf-8
default_handler = WikiModule
htdocs_location =
ignore_auth_case = false
mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search
metanav = login,logout,settings,help,about
permission_store = DefaultPermissionStore
permission_policies = AuthzSourcePolicy,DefaultPermissionPolicy,LegacyAttachmentPolicy
repository_dir = /var/lib/svn/repo
repository_type = svn
timeout = 20

本家のページよると省略した場合のデフォルトがDefaultPermissionPolicy,LegacyAttachmentPolicyらしいのでそれに合わせて追加。

リポジトリのtrac.iniファイルなので、リポジトリごとに設定が必要。

3. logを最小にする

VPSだとHDの容量が限られているのであまりログを出さないようにしておく。

/var/lib/trac/repo/conf/trac.ini
[logging]
log_file = trac.log
log_level = CRITICAL
log_type = file

のようにlog_level = CRITICALかlog_type = noneにしておく。
参考: http://trac.edgewall.org/wiki/TracLogging

これもリポジトリごとに必要。そういえば前プロジェクト共通のデフォルト的なtrac.iniもあったような気がするが記憶がこれまた定かではない。

4. tracのリポジトリのマイグレーション

rootで作業。

trac-admin /var/lib/trac/repo upgrade
trac-admin /var/lib/trac/repo wiki upgrade
trac-admin /var/lib/trac/repo repository resync '*'
chown -R www-data:www-data /var/lib/trac

マイグレーションもリポジトリごとに必要。全部のリポジトリの更新が終わったら所有者をwww-dataに変更。tracはapacheで動くのでapacheのユーザが書き込めないといけない。

5. apacheの設定

こんな感じで、/tracでアクセスさせる。tracにもユーザ認証はsubversionと同じ認証ファイルを使う。(同じにしないと、tracでログインしたときにソース閲覧機能のアクセス権が引き継げない)

<Directory "/var/lib/trac">
  AllowOverride All
  Options FollowSymLinks MultiViews ExecCGI
  Order allow,deny
  Allow from all
</Directory>

  # Trac mod_python configuration
  SetEnv PYTHON_EGG_CACHE /var/cache/python-eggs
  <Location /trac>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracUriRoot "/trac"
    PythonOption TracEnvParentDir "/var/lib/trac"
  </Location>
  <LocationMatch /trac/[^/]+/login>
    AuthType Basic
    AuthName "Trac"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
  </LocationMatch>

以下のコマンドでapacheを再起動すれば終わり。

/etc/init.d/apache2 restart

gitの移行

1. gitのインストール

rootで作業。

aptitude -t unstable install git-core
addgroup gitusers
adduser username gitusers

2. gitのデータ移行

これもtracと同じやり方でtarで固めて持っていく。gitはssh認証で使うので、scpなりでもってきたアーカイブをsshで接続するユーザが読み書きできる状態にしておく。

# 移行元のユーザで
cd /var/lib
sudo git -cfz /tmp/git.tar.gz git
scp git.tar.gz wwwXXXXX.sakura.ne.jp:/tmp
# root@さくらのVPS
cd /var/lib
tar xfz /tmp/git.tar.gz
chown -R username:gitusers git

ちょっとTrac 0.11->0.12のtrac.iniファイルの更新ではまった。ググる前におとなしく本家の情報をみるべき。まぁ、これで普通に開発はできるようになった。あとちょっと続く。