SubversionをApacheから使う

すでに Subversion は導入済みだったんだけど、SSL でログインして使うやり方だったので、これを ApacheWEBDAV として使う(http://でアクセスできる)ようにします。

インストール

ググると dav_svn.conf という設定ファイルに svn系の設定を書くらしいのですが、そんなファイルはどこを探してもないため、当初のインストールが Subversion 単独だった模様。入れ直してみます。

$ s apt-get install subversion subversion-tools libapache2-svn

subversion はすでに最新バージョンです。
以下のパッケージが新たにインストールされます:
  libapache2-svn subversion-tools
Enabling dav as a dependency
Module dav installed; run /etc/init.d/apache2 force-reload to enable.
Module dav_svn installed; run /etc/init.d/apache2 force-reload to enable.
subversion-tools (1.4.6dfsg1-2ubuntu1) を設定しています ...

無事入りました。

$ s find / -name dav_svn.conf

/etc/apache2/mods-available/dav_svn.conf
/etc/apache2/mods-enabled/dav_svn.conf

設定ファイル(dav_svn.conf)も2つできてます。

リポジトリの作成

先にリポジトリを作成しておきます。あと ApacheSubversion ファイルを読めるように www-data ユーザにファイルオーナーを変更しておきます。

$ s mkdir /home/svn
$ s svnadmin create /home/svn/repos
$ s svn mkdir file://localhost/home/svn/repos/trunk -m "created trunk"
$ s svn mkdir file://localhost/home/svn/repos/tags -m "created tags"
$ s svn mkdir file://localhost/home/svn/repos/branches -m "created branches"
$ s chown -R www-data /home/svn

※ repos というリポジトリを必ず作らないといけないということではありません。自分の管理したいプロジェクトの名前で作ってください。(trunk、tags、branches についても同様ですが、こちらは管理上推奨されている構成のため、このまま作ったほうが無難)

設定

dav_svn.conf に設定を書こうと思っていたのですが、ググるapache の方の設定ファイルでいいよという記事があったのでそちらにすることにします。

$ e /etc/apache2/sites-available/my_site


  ServerName svn.5-55.jp
  
    DAV svn
    SVNPath /home/svn/repos
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/dav_svn.passwd
    Require valid-user
  
  
    DAV svn
    SVNPath /home/svn/repos/proj1
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/dav_svn.passwd
    Require valid-user
  

$ s /etc/init.d/apache2 restart

この設定を追加することで、http://svn.5-55.jp でアクセスできます。なお、http://svn.5-55.jp/proj1 で proj1 リポジトリにもアクセスしたいため、その分の記述も追加してあります。(詳細は後述)
また、誰でもアクセスできるのは嫌なので、Basic認証も入れておきました。このためのパスワードを登録しておきます。

$ s htpasswd -c /etc/apache2/dav_svn.passwd xxx

xxx はユーザIDです。-c は一番最初だけ付けてください。

テスト

http://svn.5-55.jp/ でアクセスすると、ユーザIDとパスワードを聞いてきて入力するとちゃんとこのような画面が表示されました。

Revision 3: /
    * branches/
    * tags/
    * trunk/
Powered by Subversion version 1.4.6 (r28521).

リポジトリのコピー(移動)

proj1 を作ったのは、別サーバで管理していたリポジトリをもってきたかったためです。リポジトリのコピー(移動)手順は次の通り。

  1. 元サーバのリポジトリディレクトリを丸ごと移動先のサーバのTEMPへコピーする。
  2. 以下すべて移動先で作業。リポジトリのDUMPをとる。
  3. 新しいリポジトリのCREATE。
  4. 新しいリポジトリへDUMPをLOADする。
  5. クライアント(TortoiseSVN)からテストしてみる。
元サーバのリポジトリ・コピー

元サーバのリポジトリディレクトリごと新サーバの適当なディレクトリにコピーします。(元サーバで svnadmin が使えれば、元サーバでDUMPをとって、DUMPファイルのみをコピーすればいいのですが、元サーバにはネットワーク越しでディレクトリ・アクセスしかできないという前提です)

copy \\192.168.101.xxx\svn\proj1 \\ubuntu804\tmp

こんなコマンド一発でコピーできるわけじゃありませんが、SoftEtherで
つながっている元サーバの svn\proj1 ディレクトリを Samba でつながっ
ている新サーバの tmp ディレクトリ配下にコピーするというイメージです。
リポジトリのDUMP
$ cd /home/samba/tmp
$ svnadmin dump proj1 > proj1.dump
新しいリポジトリのCREATE
$ s svnadmin create /home/svn/repos/proj1
$ s chown -R www-data /home/svn/repos/proj1
新しいリポジトリへDUMPをLOAD
$ cd /home/samba/tmp
$ s svnadmin load /home/svn/repos/proj1 < proj1.dump
クライアント(TortoiseSVN)からテスト

※ /etc/apache2/sites-available/my_site に proj1 の Location を書いて、Apache を再起動させておいてください。
さて、エクスプローラの右クリックで「TortoiseSVN」→「リポジトリ ブラウザ」を選択します。URL を聞いてきますので、http://svn.5-55.jp/proj1 と入力( 5-55.jp のところはもちろん貴方のサイト)してください。
一番最初は Basic認証でユーザID、パスワードを聞かれますので、設定したユーザID、パスワードを入力すると、リポジトリツリーが表示されるはずです。

クライアント(TortoiseSVN)でリポジトリの再配置

正しくリポジトリがコピー(移動)できたら、いままで使っていた作業エリアのリポジトリ先を再配置で変更しておきます。
エクスプローラで、作業エリアのディレクトリ上で右クリックして「TortoiseSVN」→「再配置」を選択します。ダイアログに元URL(例えば、file://192.168.101.xxx/svn/proj1)と先URLが出てきますので、http://svn.5-55.jp/proj1 と入力すれば OK です。

参考

  1. こちら(→ http://sarabande.info/w/index.php/Ubuntu/Subversion )のページがすごく参考になりました。ありがとうございます。
  2. Basic認証については、こちら(→ Subversionのインストールと設定(Apache編) )を参考にしました。
  3. dav_svn.conf を使うやり方は、こちら(→ UbuntuにApache2でSubversionサーバーを構築する - すらすら はてぶろ )
  4. こちら(→ http://tech.gowest.co.jp/?p=10 )も参考にさせていただきました。
  5. subversion自体の詳細解説は、こちら(→ http://www.caldron.jp/~nabetaro/svn/svnbook-1.4-final/svn.ref.html )がお奨めです。
  6. リポジトリの移動に関しては、こちら(→ /var/log/maeda.log: Subversionのリポジトリの内容を別リポジトリに移動する。 )を参考にさせていただきました。