前回のさくらの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
[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の容量が限られているのであまりログを出さないようにしておく。
[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ファイルの更新ではまった。ググる前におとなしく本家の情報をみるべき。まぁ、これで普通に開発はできるようになった。あとちょっと続く。