スポンサーリンク

Windows Vista上に Apache+Subversion+Tortoise SVN をインストールして,ネットワーク越しにリポジトリを利用できるようにする手順

自分ひとりでSVNを使いたい場合は,PC内にリポジトリを作成し,そこからチェックアウトするだけ。
必要なソフトは,Tortoise SVNだけで済む。


しかし,複数のメンバでリポジトリを共有したい場合は,Tortoise SVNに加えて

  • Apache
  • Subversion

をインストールする必要がある。

そうすればHTTP経由でリポジトリを利用できるようになり,Webブラウザからもリポジトリを閲覧できる。


もしメンバが1人だけで,自宅で個人的に作業するような場合でも,「ブラウザ経由でリポジトリを見れる」というのは便利だ。


上記のような環境を,Windows Vista 上で構築するための手順を下記に記す。

※ちなみに,Subversionの入手先サイトが2010年に変更されたため,世の中の古いWebページの情報は不正確になっていたりする。

  • (1)Tortoise SVNのインストール
  • (2)Subversionのインストール
  • (3)リポジトリの動作テスト
  • (4)ユーザ認証の設定
  • トラブルシュート

前提事項

  • XAMPPはインストール済みとする。(xampp-win32-1.7.1.zip,D:\xampp\)
  • Windows Vistaの管理者ユーザで作業するものとする。
  • Tortoise SVNの基本的な利用法を知っているものとする。(自信ない場合は下記ページを参照)

Tortoise SVNの使い方を覚えてもらうためのページ (初級,中級)
http://language-and-engineering.hatenablog.jp/entry/20110114/p1

(1)Tortoise SVNのインストール

http://tortoisesvn.net/downloads.html
から,「Tortoise SVN 32bit」を押下して
TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi
をダウンロード。

実行。
すべてNext。
※一度だけUACダイアログが出た

Windows再起動。


http://tortoisesvn.net/downloads.html
の下部から,ランゲージパック:Japaneseの32bit Setupとして
LanguagePack_1.6.16.21511-win32-ja.msi
をダウンロード。

実行。
※一度だけUACダイアログが出た

再起動は不要

適当なフォルダを右クリック>Tortoise SVN>Settings>General>Language>Japanese

これで日本語化された。


(2)Subversionのインストール

http://subversion.apache.org/packages...
の一番下のほうから
「Windows」の「Win32Svn」をクリック。
http://sourceforge.net/projects/win32...
に遷移する。

「Download」から
Setup-Subversion-1.6.17.msi
をダウンロード。

実行。
すべてNext。
※一度だけUACダイアログが出た


以下の2ファイルを D:\xampp\apache\modules内にコピー

  • C:\Program Files\Subversion\bin\mod_authz_svn.so
  • C:\Program Files\Subversion\bin\mod_dav_svn.so


D:\xampp\apache\conf\httpd.confをエディタで編集。
ポイントは3つ。

(2−1)下記2行がコメントアウトされていないことを確認
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

※これらはApacheがWebDAVを利用するために必要なモジュールである。

WebDAV を利用する(mod_dav、mod_davfs)
http://www.turbolinux.com/products/se...

  • WebDAV とは、HTTP プロトコルの拡張でクライアントからの Web サーバーのコンテンツの管理を可能にする機能
(2−2)下記2行のコメントアウトを外す
#LoadModule dav_svn_module modules/mod_dav_svn.so
#LoadModule authz_svn_module modules/mod_authz_svn.so

※これらはWebDAVがSVNと連携するために必要なモジュールである。

(2−3)末尾に下記の記述を追加
<Location /svn>
  DAV svn
  SVNParentPath "D:/svnprojects"
</Location>

※これらのディレクティブの詳細な意味は下記URLを参照。

mod_dav_svn 設定ディレクティブ
http://www.caldron.jp/~nabetaro/svn/s...

  • DAV svn : バックエンドとして Subversion を使うよう httpd に指示
  • SVNParentPath directory-path : サブディレクトリが Subversion のリポジトリになっている、親ディレクトリのファイルシステム中の位置を指定


httpd.confを保存。


D:\svnprojectsというフォルダを作成。
ここをリポジトリDBのルートとして使う事にする。

XAMPPコンパネを管理者権限で実行し,Apacheを再起動。(Stop→Start)



あとは,この
D:\svnprojects
というフォルダに,次のような名前のファイルを置いておこう。

「フォルダ作成後右クリックしてSVNリポジトリ作成」

このファイルの中身は空でよい。


こうしておけば,このフォルダを見るだけで,このフォルダの使い方がわかる。

つまり,フォルダのドキュメントを,フォルダ自身に組み込むことができる。

手順書はどこだっけ?使い方はどうするんだっけ?と探しまわる必要もない。

「もし対象物に説明が必要であれば,対象物そのものに説明を埋め込んでしまえ。」

という発想は,作業効率化の上で非常に大事である。*1


(3)リポジトリの動作テスト

さて,hogeというプロジェクトのリポジトリを作成したい。

D:\svnprojects\hogeというフォルダを作成。

このフォルダ上で右クリック>Tortoise SVN>ここにリポジトリを作成
「リポジトリの作成に成功しました。」のダイアログが出る。


ブラウザから下記のURLにアクセス
http://localhost/svn/hoge/
「hoge - Revision 0: /」と表示されればOK。


チェックアウト用のフォルダとして,
D:\svnrepos\hogeというフォルダを作成。

フォルダ上で右クリック>SVN チェックアウト
リポジトリのURLに「http://localhost/svn/hoge」
でOKを押下し,チェックアウト実行。

D:\svnrepos\hoge上に.svnが生成される。

D:\svnrepos\hoge上に適当なフォルダとファイルを作成し,SVN追加・コミットする。

ブラウザ上で
http://localhost/svn/hoge/
を開くと,
「hoge - Revision 1: /」
となっており,コミットしたフォルダとファイルが見れる。


これで,HTTP経由でのSVNリポジトリの利用環境が整った。

ただし,この時点ではすべてのユーザが匿名であり,認証がかかっていない。

(4)ユーザ認証の設定

ユーザ名とパスワードで認証した者のみが,リポジトリにアクセスできるようにする。

D:\xampp\apache\conf\httpd.confをエディタで編集

下記のように修正

<Location /svn>
  DAV svn
  SVNParentPath "D:/svnprojects"
</Location>

↓

<Location /svn>
  DAV svn
  SVNParentPath "D:/svnprojects"

  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile "D:/svnprojects/svnpasswd"
  Require valid-user
</Location>

httpd.confを保存。

コマンドプロンプトを管理者権限で開く。
下記のコマンドを実行。

C:\Windows\system32>cd /d D:\svnprojects

D:\svnprojects>D:\xampp\apache\bin\htpasswd -c svnpasswd user1
Automatically using MD5 format.
New password: *****
Re-type new password: *****
Adding password for user user1

D:\svnprojects>D:\xampp\apache\bin\htpasswd svnpasswd user2
Automatically using MD5 format.
New password: *****
Re-type new password: *****
Adding password for user user2

user1に対してpass1,
user2に対してpass2 というパスワードをそれぞれ設定した。


この時点で,パスワードファイルとして
D:\svnprojects\svnpasswd
が生成されており,中身は下記のように暗号化されている。

user1:$apr1$KAF7njb.$.4KgKs.XovhFYqNTnrmkT0
user2:$apr1$6v83JS1s$mdoJnyPJFFO4JafSTQxnX/


XAMPPコンパネを管理者権限で実行し,Apacheを再起動(Stop→Start)

この時点で,SVNリポジトリに対するユーザ認証が有効になる。

試しに,hogeプロジェクト上のファイルに変更を加えてコミットしようとすると,
「ユーザ名とパスワードを要求」
のダイアログが表示される。

user1/pass1で「認証を保存」してOKを押下すれば,コミット完了。


参考:

[Windows]Apache2.2 + Subversion 認証を使ったアクセス
http://halu834.blog17.fc2.com/blog-en...


ApacheによるWebサーバ構築 / ユーザー認証によるアクセス制限(ベーシック認証編)
http://www.atmarkit.co.jp/flinux/rens...

  • htpasswdユーティリティの使い方


※なお,一生懸命 svnserve.conf などの設定ファイルを編集しても,Apache経由でのアクセスには反映されない。

svnserver.confの設定メモ
http://www.glamenv-septzen.net/view/390

  • svnserve.conf は、svnserveによる svn:// 経由でのアクセスで使われる設定ファイル


Subversionでユーザー認証
http://www.bnote.net/linux/subversion...

  • password-dbを編集

トラブルシュート

作成したはずのリポジトリにアクセスできない

ブラウザからアクセスすると,
「Could not open the requested SVN filesystem」
と表示される場合がある。

Apacheのエラーログ(D:\xampp\apache\logs\error.log)には下記のように表示される。

[Sat Jul 23 15:37:38 2011] [error] [client 127.0.0.1] (20014)Internal error: Can't open file 'D:\\svnprojects\\hoge\\format': \xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\x91\xe3\x82\xb9\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\x81\xbe\xe3\x81\x9b\xe3\x82\x93\xe3\x80\x82
[Sat Jul 23 15:37:38 2011] [error] [client 127.0.0.1] Could not fetch resource information. [500, #0]
[Sat Jul 23 15:37:38 2011] [error] [client 127.0.0.1] Could not open the requested SVN filesystem [500, #720003]
[Sat Jul 23 15:37:38 2011] [error] [client 127.0.0.1] Could not open the requested SVN filesystem [500, #720003]

ログ内容は「D:\svnprojects\hoge\formatが見つからない」というもの。

httpd.conf内のSVNParentPathで指定しているSVNフォルダパスが,実際のリポジトリのパスと異なっている場合に発生する。
フォルダのパスの設定を見直すこと。


なお,同様のエラーが出る原因は色々ある。

SELinuxによりPermission deniedとなるケース
http://d.hatena.ne.jp/morilab/2008091...


BerkeleyDBではなくfsfsでリポジトリを作れば解決するケース
http://nyanthem.net/?p=69


SubversionのApacheモジュールがリンクしているSQLiteライブラリのバージョンに相違がある場合
http://l-w-i.net/t/subversion/dav_100...

補足1

もし,Eclipse上の既存のプロジェクトを「今後,SVNで管理したい」と思ったら,
次の手順を踏む。



まず,fuga_javaというSVNプロジェクトのリポジトリを作成。

D:\svnprojects\fuga_javaというフォルダを作成。

このフォルダ上で右クリック>Tortoise SVN>ここにリポジトリを作成

「リポジトリの作成に成功しました。」のダイアログが出る。



次に,Eclipse上でJavaプロジェクトをSVNリポジトリに登録する。

Javaプロジェクトをパッケージ・エクスプローラで右クリック>チーム>プロジェクトの共用
で,リポジトリー・タイプとしてSVNを選択。

リポジトリー・ロケーションとして,下記のURLを入力。
http://localhost/svn/fuga_java/

あとはコミットログなどを記入するだけで,Eclipseからプロジェクト内の全ソースがコミットされる。

次回以降は,パッケージ・エクスプローラ上で
対象ファイルやフォルダを右クリック>チーム>更新・コミット
などの操作をすれば,Eclipse上でもTortoise SVNと同じ要領でやっていける。

Eclipse × Subversive
http://www.baldanders.info/spiegel/lo...
Eclipse 上で既存のプロジェクトをリポジトリに登録するには,プロジェクトのコンテキストメニューから「チーム」→「プロジェクトの共用」と進む。
で,ロケーション情報を設定しプロジェクト・リポジトリ・レイアウトに進む

補足2

チケット管理+開発者間のコミュニケーションをしたい場合は,All-In-One-Tracを使うのもいいだろう。

ソフトウエアを作る環境を楽しくするフリーソフト Trac/All-In-One-Trac
http://itpro.nikkeibp.co.jp/article/C...


 

*1:詳しくは「実行可能ドキュメント」について調査のこと。