Subversion + Apache2 for Windows 覚書

テーマ:Subversion+Apachec for Windows Server構築手順覚書

■行ったこと

  Subversion: Windowsへのインストールと基本的な設定

1.前提条件

対象OSについて
Windows XP SP2, Windows Server 2003(どちらでも動作確認済)

■ディレクトリ構成

Windows Server 2003において
内容 パス
Apache2.0 D:\OPT\Apache2
Subversion D:\OPT\Subversion
リポジトリ作成場所 D:\workspace
作業コピーを置く場所 D:\test(クライアント:Windows XP SP2)

2.Apache2.0のインストール

Apache HTTP SERVER PROJECT から 2.0系をダウンロードする。
今回は、 apache_2.0.59-win32-x86-no_ssl.msi を利用。
apache_2.0.59-win32-x86-no_ssl.msi をダブルクリック。
Network Domain、Server Name は、決まっているものがあればそれを、なければとりあえず localhost を設定。
Administrator Email Address は何か入れないとサービスの登録に失敗する。


Apacheのインストールで以下の表示がでる場合、

    「The Aug 01 09:08:42 2006」「error」(OS 2)指定されたファイルが見つかりません。
    No installed service named "Apache2".
    Note the errors or messages above, and press the key to exit
原因

(1)IISのようなソフトで既にポート80が使用されている。[netstat -an]でポート80が使用されているかチェックできる。IISが原因だった。対象のソフトがあれば、アンインストールかApacheの使用するポートを変更する。ポートの変更は、conf/httpd.confを修正。8080にした。

(コマンドプロンプト上)
    |------------------------------------------------------------------------------------
    |    C:\Program Files>netstat -an
    |    Active Connections
    |      Proto 	Local Address 	Foreign Address 	State
    |      TCP 	0.0.0.0:80 	0.0.0.0:0 	LISTENING
    |------------------------------------------------------------------------------------


(2)httpd.confにエラーがある。
インストール時 Administrator Email Address に何も入力しない場合もこの状態となる。 httpd.conf の ServerAdmin に管理者メールアドレスを指定する。httpd.conf のチェックは apache.exe があるフォルダーへ移動し、以下のコマンドでチェックする。

      apache -t 
原因解決後、Apache起動

Apacheのサービス登録

        apache -k install -n "Apache2" 
        ※削除する場合は、apache -k uninstall -n "Apache2" 

Apacheの起動

        apache -k start

動作確認
ブラウザで httpd://localhost/ にアクセスして Apacheの画面確認(ポート変更していない場合)。
例えば、8000にポート変更した場合は、ブラウザで httpd://localhost:8000/ にアクセス

3. Subversionのインストール

Subversion公式ページ: subversion.tigris.org

SubversionのWindows版バイナリをインストールする。

  1. subversion: Documents & files: Windows Binaries からWindows版バイナリをダウンロードする。
  2. D:\OPT\Subversion にインストールする。(今回は、svn-1.4.0.exe)にした。
  3. セットアップ時に「Install and configure Subversion modules …」のオプションをチェックしておく。
  4. インストール完了後、下記の環境変数が設定されていることを確認する。「3」で、有効にしたオプションの効果で、D:\OPT\Apache2\conf\httpd.confに以下の行が追加されていることを確認する。
環境変数
APR_ICONV_PATH D:\OPT\Subversion\Subversion\iconv が設定されている。
PATH D:\OPT\Subversion\Subversion\bin が追加されている。
(httpd.conf上)
    |================================================================================
    |LoadModule dav_svn_module "D:/OPT/Subversion/Subversion/bin/mod_dav_svn.so"
    |LoadModule authz_svn_module "D:/OPT/Subversion/Subversion/bin/mod_authz_svn.so"
    |
    |
    |
    |	DAV svn
    |	SVNPath D:/workspace/svn-repos
    |
    |	AuthType Basic
    |	AuthName "Subversion Repository"
    |	AuthUserFile D:/workspace/svn-repos/svn_passwd
    |	Require valid-user
    |
    |================================================================================
■インストール確認

コマンドプロンプトを起動して、svn --version と入力して以下の表示が出ればOK。

(コマンドプロンプト上)
        |================================================================================
        |D:\>svn --version
        |svn, バージョン 1.4.0 (r21228)
        |   コンパイル日時: Sep 11 2006, 17:46:59
        |
        |Copyright (C) 2000-2006 CollabNet.
        |Subversionオープンソースソフトウェアです。
        |http://subversion.tigris.org/ を参照してください。
        |この製品には、CollabNet (http://www.Collab.Net/) によって開発されたソフトウェア
        |が含まれています。
        |
        |以下のリポジトリアクセス (RA) モジュールが利用できます:
        |
        |* ra_dav : WebDAV (DeltaV) プロトコルを使ってリポジトリにアクセスするモジュール。
        |  - 'http' スキームを操作します
        |  - 'https' スキームを操作します
        |* ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。
        |  - 'svn' スキームを操作します
        |* ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。
        |  - 'file' スキームを操作します
        |================================================================================

4. リポジトリの作成

リポジトリファイルシステムはFSFSとBerkeley DBの2種類がある。svnadminの--fs-typeで指定することができる。今回は、FSFSタイプでリポジトリを作成。

(コマンドプロンプト上)
    |================================================================================
    |D:\>mkdir workspace
    |D:\>cd workspace
    |(FSFSの場合)
    |D:\workspace>svnadmin create --fs-type fsfs svn-repos
    |(Berkeley DBの場合)
    |D:\workspace>svnadmin create --fs-type bdb svn-repos
    |================================================================================

※オプションに--fs-typeを指定しない場合はデフォルトでfsfsとなる。

5. WebDAVでのリポジトリ公開

D:/OPT/Apache2/conf/httpd.confに以下を追加する。LoadModuleのdav_svn_moduleとauthz_svn_moduleはすでにインストーラによって追加されているはずなので、dav_moduleがコメントアウトされているようなら、コメントを外す。


ここでは、D:/workspace/svn-reposにあるリポジトリhttp://127.0.0.1:8000/workspace/svn-reposとして公開する設定をしている。ユーザー認証はApacheBASIC認証で行い、リポジトリに記録されるユーザー名はここで認証されたユーザー名になる。パスワードファイルは 、D:/workspace/svn-repos/svn_passwd を指定している。

※クライアント側からも、動作確認はした方がよい。
その場合、http://(サーバーのIPアドレス):8000/workspace/svn-reposを指定すればよい。
以下の内容を、httpd.confに対して編集が終了したらApache2.0を再起動する。

(httpd.conf)
        |================================================================================
        |(省略)
        |LoadModule dav_module modules/mod_dav.so
        |LoadModule dav_svn_module "D:/opt/Subversion/Subversion/bin/mod_dav_svn.so"
        |LoadModule authz_svn_module "D:/opt/Subversion/Subversion/bin/mod_authz_svn.so"
        | (省略)
        |
        |
        |   DAV svn
        |   SVNPath D:/workspace/svn-repos
        |
        |   AuthType Basic
        |   AuthName "Subversion Repository"
        |   AuthUserFile D:/workspace/svn-repos/svn_passwd
        |   Require valid-user
        |
        |==============================================================================
BASIC認証用のパスワードファイルの作成


Apacheのhtpasswdコマンドでパスワードファイルsvn_passwdを作成する。
ここではhogehogeとtestuserというユーザーを作成している。

(コマンドプロンプト上)
        |================================================================================
        |D:\>cd workspace\svn-repos
        |D:\workspace\svn-repos>D:\OPT\Apache2\bin\htpasswd -c svn_passwd hogehoge
        |Automatically using MD5 format.
        |New password: ********
        |Re-type new password: ********
        |Adding password for user hogehoge
        |
        |D:\workspace\svn-repos>D:\OPT\Apache2\bin\htpasswd svn_passwd testuser
        |Automatically using MD5 format.
        |New password: ********
        |Re-type new password: ********
        |Adding password for user testuser
        |================================================================================
■動作確認

httpスキームでリポジトリをチェックアウトしてみる。

(コマンドプロンプト上)
        |================================================================================
        |D:\>mkdir test
        |D:\>cd test
        |D:\test>svn co --username hogehoge http://127.0.0.1:8000/workspace/svn-repos hogehoge_wc
        |認証領域: http://localhost:80 Subversion Repository
        |'hogehoge' のパスワード: ********
        |リビジョン 0 をチェックアウトしました。
        |================================================================================


同様に、クライアントからチェックアウトしてみる。
ただし、Subversion もしくは、TortiseSVNが、インストール済みの環境で行う。
D:\testに、チェックアウトした。

(クライアントのコマンドプロンプト上)
        |================================================================================
        |D:\>mkdir test
        |D:\>cd test
        |D:\svn_work>svn co --username hogehoge http://(サーバーのIPアドレス):8000/workspace/svn-repos hogehoge_wc
        |認証領域: http://localhost:80 Subversion Repository
        |'hogehoge' のパスワード: ********
        |リビジョン 0 をチェックアウトしました。
        |================================================================================

6. svnserveでのリポジトリ公開

svnserveとは、Subversion独自プロトコルで通信する軽量サーバー。

リポジトリ(ここではD:/workspace/svn-repos)のconfディレクトリにあるsvnserve.confでsvnserveの設定を行う。svnserve.confを以下のように編集する。

(D:/workspace/svn-repos/conf/svnserve.conf上)
    |================================================================================
    |# conf/svnserve.conf
    |[general]
    |anon-access = read
    |auth-access = write
    |password-db = passwd
    |realm = Subversion Repository
    |================================================================================
※anon-accessは匿名アクセス、auth-accessは認証済みのアクセスでread/write/noneの値を取る。ここでは、匿名アクセスは読み取りのみ、認証されているアクセスはリポジトリへの書き込みを許可している。

※#のコメントを外すとき、行の先頭には空白を入れずに左詰にすること。

そうしないと、svnserveを起動したときに、今回の設定の場合、
以下のようなエラーが出る。

      svn: D:\workspace\svn-repos\conf\svnserve.conf:12: Option expected


認証情報は、password-dbで指定したpasswdファイルを使用する。svnserve.confと同じconfディレクトリに作成する。(デフォルトで存在しているのでそれを編集する)
usersセクションにhogehogeとtestuserというユーザーのエントリを記述している。一行につき「ユーザー名 = パスワード」という形式で、パスワードは平文で記述する。

(D:/workspace/svn-repos/conf/passwd上)
================================================================================
# conf/passwd
[users]
hogehoge = hogehogepass
testuser = testuserpass
================================================================================
svnserveの起動
  • rで指定したディレクトリ配下のリポジトリが公開される。
svnserveは、デフォルトで、ポート3690をListenにする。
(コマンドプロンプト上)
================================================================================
D:\>svnserve -d -r D:/workspace
(終了するときはCtrl+C)
================================================================================
■動作確認
svnスキームでリポジトリをチェックアウトしてみる。
(コマンドプロンプト上)
================================================================================
D:\>cd test
D:\test>svn co --username hogehoge svn://localhost/svn-repos hogehoge_wc
リビジョン 0 をチェックアウトしました。
================================================================================
※anon-access = read で匿名アクセスを許可しているので、上の例ではパスワードを訊いてこない。
svnserveのWindowsサービス
ここではSC.EXEというWindowsサービスの管理コマンドを使用してsvnserveをサービス化する。SC.EXEでのサービス化機能はSubversion 1.4.0からサポートされるようになった。SC.EXEはWindows XPWindows Server 2003には標準で入っているが、Windows 2000だとリソースキットが必要。SCE.EXE単体での入手は、Microsoftのダウンロードセンターを探しても見つからないので無理な模様。 SC.EXEのヘルプを見るには、scかsc /?とタイプすればよい。サブコマンドはsc createと(サブコマンドの)引数なしでタイプすると見ることができる。
svnserveをWindowsサービスに登録
サービス登録するには、sc createコマンドを以下のように指定して実行する。 第一引数はサービス名でscではこの名前でサービスを指定して操作を行う。 binpathはsvnserveの起動コマンドライン。DisplayName?は「管理ツール」→「サービス」の一覧に表示される名前で、dependは依存しているサービス名になる。
(実際は一行で指定)
================================================================================
D:\>sc create svnserve
binpath= "D:/opt/Subversion/bin/svnserve.exe --service -r D:/workspace"
DisplayName= "Subversion: svnserve"
depend= Tcpip
================================================================================
svnserveサービスの起動・停止
起動には、sc start,停止にはsc stopコマンドを発行する。net start/stopとの違いはscは非同期であること。netコマンドのように処理終了まで待ったりはせずに制御が呼び出し元に返る。
(起動)
================================================================================
D:\>sc start svnserve
================================================================================
(停止)
================================================================================
D:\>sc stop svnserve
================================================================================
svnserveをWindowsサービスから削除
サービスを停止してから削除した方がよい。開始のまま削除すると、sc deleteコマンド発行しても開始のままで、停止をすると「管理ツール」→「サービス」の一覧から消える。
(コマンドプロンプト上)
================================================================================
D:\>sc delete svnserve
================================================================================

7.参考資料・URL

メインで参考にした資料(ほとんどこのページの引用) ありがとうございます。 404 File Not Found Subeversion環境の構築の動画 ありがとうございます。 「実演テスト駆動開発」 WEB+DB PRESS Vol.35特集 特設サイト IISがすでに入っている場合、apache2の設定変更方法について ありがとうございます。 Subversion によるバージョン管理(本の内容がWebに公開されている) ありがとうございます。 bluegate.org

8.やっとくといいこと

  1. taskmanagerは、プロセスIDを表示させておく。
  2. netstat -anvoコマンドで、プロセスIDも見る。