WindowsにSubversion 1.12サーバーを構築する

過去に Windows 用の Subversion 1.9 サーバー構築手順を紹介したとことがあります。その後 Apache Subversion のバイナリ配布形態に変化があり 以前の記事の手順通りでは Subversion 環境構築できなくなってしまいました。

本稿は Subversion サーバー構築手順のアップデート記事 2019 年版 です。Windows Subversion 1.12 サーバーを構築する手順を解説します。今回は手軽に環境構築できるオールインワン パッケージも用意しました。

手軽に Subversion 環境を構築したい方は以下のリンクをクリックしてください。
 👉 オールインワン パッケージを使って Subversion 環境を構築する

以前の記事では Apache Haus から Apache HTTP サーバー本体と Subversion モジュール mod_svn をダウンロードしてセットアップする手順を紹介していました。その後 Apache Haus では Subversion モジュール mod_svn が配布されなくなり 残念ながら以前の記事の手順通りにはいかなくなってしまいました。

Apache Haus Subversion モジュール mod_svn の配布を終了してからは 有志の方々が Subvesion モジュールの Windows 用バイナリをビルドして公開してくださっています。Jan-E さん nono303 さん ありがとうございます!

今回は Apache Haus からダウンロードできる Apache HTTP サーバー本体と nono303 さんが公開してくださっている Subversion モジュール win-svn を組み合わせる手順を紹介します。

Apache 2.4 をダウンロードする

Apache Haus から Apache HTTP サーバーをダウンロードします。

構成の異なるいくつかのバイナリが提供されています。ファイルをダウンロードするときに APR のバージョンを気にしておいてください。あとで同じ APR バージョンを使用している Subversion モジュールをダウンロードするためです

私は APR 1.7.0 APR-Util 1.6.1 を使用している x64 版の Apache 2.4 + OpenSSL 1.1.1 + VC15 という構成を選択しました。

VC14 VC15 VS16 の違いについてはあまり気にしなくても大丈夫です。Visual Studio 2015 VC14 Visual Studio 2017 VC15 Visual Studio 2019 VS16 Visual C++再頒布可能パッケージは共通化されており どれを選択しても同じライブラリ vcruntime140.dll に依存します。

Visual Studio 2013 VC12 以前は バージョンごとに C++再頒布可能パッケージも細かく分かれていました。VC11 VC9 と記載されている Apache バイナリを使用する場合は バージョンごとに適切な C++再頒布可能パッケージをインストールする必要があります。

Subversion 1.12 をダウンロードする

下記サイトから Subversion モジュールをダウンロードします。

releases リンクから ZIP 形式でダウンロードできます。私は 2019 6 月時点での最新版 1.12.0.zip をダウンロードしました。この ZIP アーカイブには x86/x64 AVX 命令対応あり/なし デバッグ用シンボルファイル *.pdb が含まれているためファイルサイズが大きいです。

Subversion モジュールを選択するときに Apache と同じ APR バージョンを選択するのが望ましいです。マイナーバージョンが少し異なる程度なら大丈夫だと思いますが Apache Subversion で使用する APR のバージョンが大きく異なると 正しく動作しないかもしれません。

VC ランタイム Visual C++再頒布可能パッケージ をダウンロードする

下記のサイトから Visual C++再頒布可能パッケージをダウンロードします。

その他のツールとフレームワーク を展開すると Visual Studio 2019 Microsoft Visual C++再頒布可能パッケージ の表示があり x64 または x86 のラジオボタンを選択して右側のダウンロードボタンをクリックします。

https://visualstudio.microsoft.com/ja/downloads/

セットアップ開始

3 つのファイルが揃ったら セットアップを始めます。

VC ランタイム Visual C++再頒布可能パッケージ のインストール

vc_redist.x64.exe を実行してインストールします。ライセンス条項を読んで 同意する場合は ライセンス条項および使用条件に同意する のチェックを入れてください。その後 インストール をクリックします。

タイトル表示が 2015-2019 となっており Visual Studio 2015 VC14 Visual Studio 2017 VC15 Visual Studio 2019 VS16 に対応していることが分かります。

C++再頒布可能パッケージが既にインストールされている場合は以下のような画面が表示されます。この場合は 改めて C++再頒布可能パッケージをインストールする必要はありません。閉じる を押してください。

Apache 2.4 のインストール

httpd-2.4.39-o111c-x64-vc15.zip を展開すると 中に Apache24 というフォルダーが入っています。これを C:¥Apache24 にまるごとコピーします。

Subversion のインストール

win-svn-1.12.0.zip を展開します。展開したファイルの構造は以下のようになっています。

  • win-svn-1.12.0
    • README.md
    • vs16
      • x64
      • x64-avx
      • x86
      • x86-avx

64 ビット版の Apache と組み合わせるので x64 フォルダーを使用します。

x64¥deps フォルダーの中に複数のファイルがあります。これらのファイルの内 拡張子が .dll となっているファイルをすべて C:¥Apache24¥bin にコピーします。拡張子が .pdb となっているファイルをコピーする必要はありません。エクスプローラーの 種類 列で並べ替えると .dll だけをまとめて選択するのが簡単です

C:¥Apache24¥bin にコピーするときに上書きの確認ダイアログが表示されますが Apache 側のファイルを優先するために上書きせずにスキップしてください。

上書き確認のダイアログが表示されるのは Apache Subversion APR Apache Portable Runtime など同じライブラリを使用しているためです。ファイルの上書きをスキップしたため Subversion Apache に同梱されていた APR ライブラリを使用することになります。ここで問題が起こらないように あらかじめ Apache Subversion で同じ APR バージョンを使用している配布パッケージを選択しておくことが重要になります。

次に x64 フォルダー直下の拡張子が .exe .dll となっているファイルをすべて C:¥Apache24¥bin にコピーします。.pdb .so はコピーしません

最後に x64 フォルダー直下の拡張子 .so ファイルを C:¥Apache24¥modules にコピーします。

リポジトリールートの作成

次に Subversion リポジトリーのルートフォルダーを作成します。私は C:¥svn としました。

httpd.conf の作成

リポジトリールート C:¥svn httpd.conf を以下の内容で作成します。先頭の 2 行は Apache24 フォルダーとリポジトリールートフォルダーを配置した場所に合わせて書き換えてください。

C:¥Apache24¥conf に既定の httpd.conf がありますが C:¥Apache24¥conf¥httpd.conf を直接編集するのはオススメしません。Apache をバージョンアップするときに誤って上書きしてしまう事故が起こりやすいからです。実際に運用する httpd.conf は別のフォルダーで管理して Apache の起動時パラメーターで httpd.conf のフルパスを指定するのが安全です。

httpd.conf
Define SRVROOT "C:/Apache24" Define SVNROOT "C:/svn" Listen 80 ServerName localhost ServerAdmin admin@example.com ServerRoot "${SRVROOT}" ################################################################################ LoadModule alias_module modules/mod_alias.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_lock_module modules/mod_dav_lock.so LoadModule deflate_module modules/mod_deflate.so LoadModule dir_module modules/mod_dir.so LoadModule filter_module modules/mod_filter.so LoadModule headers_module modules/mod_headers.so LoadModule log_config_module modules/mod_log_config.so LoadModule md_module modules/mod_md.so LoadModule mime_module modules/mod_mime.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so LoadModule watchdog_module modules/mod_watchdog.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so ################################################################################ KeepAlive On KeepAliveTimeout 60 MaxKeepAliveRequests 1000 Header unset Server Header unset X-Powered-By <IfModule mpm_winnt_module> AcceptFilter http none AcceptFilter https none EnableSendfile off EnableMMAP off </IfModule> ErrorLog "logs/error.log" LogLevel warn HostnameLookups off <IfModule log_config_module> BufferedLogs On LogFormat "%h %l %u %t ¥"%r¥" %>s %b %T ¥"%{Referer}i¥" ¥"%{User-Agent}i¥"" combined LogFormat "%h %l %u %t ¥"%r¥" %>s %b" common CustomLog "logs/access.log" combined </IfModule> <IfModule mime_module> TypesConfig conf/mime.types </IfModule> <IfModule dir_module> DirectoryIndex index.html </IfModule> <IfModule ssl_module> SSLProtocol all -SSLv2 SSLSessionCache "shmcb:${SRVROOT}/logs/ssl_scache(512000)" SSLSessionCacheTimeout 300 </IfModule> <Location /> Options None AuthType Basic AuthName "Subversion" AuthUserFile "${SVNROOT}/passwd" Require valid-user DAV svn SVNParentPath "${SVNROOT}" SVNListParentPath on SVNAdvertiseV2Protocol off </Location>

管理用コンソールを起動するバッチファイルの作成

リポジトリールート C:¥svn SvnConsole.bat を以下の内容で作成します。3 行目は Apache24 フォルダーを配置した場所に合わせて書き換えてください。

SvnConsole.bat
@ECHO OFF SET SRVROOT=C:¥Apache24 SET WORKDIR=%~dp0 SET WORKDIR=%WORKDIR:~0,-1% SET PATH=%SRVROOT%¥bin;%PATH% FOR /F %%v IN ('svn --version --quiet') DO SET SVN_VERSION=%%v @echo Subversion %SVN_VERSION% @echo; @echo * How to run Apache. (Type Ctrl+C to stop the process.) @echo %WORKDIR%^>httpd -f %WORKDIR%¥httpd.conf @echo; @echo * How to install Apache as a service. (Administrator privileges required.) @echo %WORKDIR%^>httpd -n Subversion -k install -f %WORKDIR%¥httpd.conf @echo %WORKDIR%^>net start Subversion @echo; @echo * How to uninstall the service. (Administrator privileges required.) @echo %WORKDIR%^>net stop Subversion @echo %WORKDIR%^>httpd -n Subversion -k uninstall @echo; @echo * How to create a new repository. @echo %WORKDIR%^>svnadmin create NAME @echo; @echo * How to create a new user. @echo %WORKDIR%^>htpasswd passwd NAME %COMSPEC% /K "cd /d %WORKDIR%"

パスワードファイル passwd の作成

リポジトリールート C:¥svn に空のファイル passwd を作成します。空のファイルはエクスプローラーの適当なところで右クリックして 新規作成テキスト ドキュメント を選択すると作成できます。その後 ファイル名を passwd に変更します。拡張子はありません

ユーザーの認証は Subversion ではなく Apache によって行われます。そのため Apache がサポートしている様々なユーザー認証を使用することができます。この記事ではパスワードファイルを使った認証について説明していますが httpd.conf Apache の構成を変えることで Windows 認証や LDAP 認証などに切り替えることも可能です。

Subversion 管理用コンソールの起動

ここまでの作業を確認しておきましょう。リポジトリールート C:¥svn には 3 つのファイル httpd.conf passwd SvnConsole.bat が配置されています。

これで準備が整いました。SvnConsole.bat を実行します。Subversion のバージョン表示と 使い方が表示されれば OK です。

ユーザーアカウントの作成

Subversion リポジトリーを使用するユーザーアカウントを作成します。

* How to create a new user.
  C:¥svn>htpasswd passwd NAME

このヘルプメッセージの NAME となっている部分にユーザー名を指定してコマンドを実行します。taro というユーザーアカウントを作成する場合は次のようになります。

コマンドプロンプト
C:¥>svn>htpasswd passwd taro

設定するパスワードを 2 回入力するとユーザーアカウントの作成が完了します。

コマンドプロンプト
C:¥svn>htpasswd passwd taro New password: **** Re-type new password: **** Adding password for user taro C:¥svn>

Subversion リポジトリーの作成

Subversion リポジトリーを作成します。

リポジトリーを作る単位は人によって様々です。Visual Studio ソリューションや Android Studio プロジェクトごとにリポジトリーを作成することもできますし 1 つのリポジトリーの中に複数の Visual Studio ソリューションや Android Studio プロジェクトを格納することもできます。

私はリポジトリーをあまり分けずに 1 つのリポジトリーの中に複数のソリューションやプロジェクトを格納するのが好きです。ということで 今回は複数のソリューションやプロジェクトを格納するために repos という名前の汎用リポジトリーを作成してみます。

* How to create a new repository.
  C:¥svn>svnadmin create NAME

このヘルプメッセージの NAME となっている部分に作成するリポジトリーの名前を指定してコマンドを実行します。repos というリポジトリーを作成する場合は次のようになります。

コマンドプロンプト
C:¥svn>svnadmin create repos

特にエラーが表示されることもなくプロンプトに復帰すれば完了です。

Apache を起動する

ここまでに作成したユーザー taro リポジトリー repos にアクセスできるか試してみましょう。

最終的には Apache Windows サービスとして登録して自動的に起動するように構成しますが まずはコマンドプロンプトから通常プロセスとして起動して動作を確認します。

* How to run Apache. (Type Ctrl+C to stop the process.)
  C:¥svn>httpd -f C:¥svn¥httpd.conf

このヘルプメッセージの通りにコマンドを入力して実行します。引数 -f で設定ファイルのパスを指定しているのがポイントです。引数を省略して httpd を実行すると 既定の設定ファイル C:¥Apache24¥conf¥httpd.conf が参照されてしまうので注意してください。

初回起動時には Windows ファイアウォールによって下記の警告が表示されるかもしれません。

アクセスを許可する を押すか もしくは Windows ファイアウォールの設定で TCP ポート 80 の受信を許可するように設定してください。

Windows ファイアウォールの受信規則の追加を GUI ではなく netsh コマンドでおこなうこともできます。netsh コマンドで Windows ファイアウォールに受信規則を追加する場合は コマンドプロンプトを管理者権限で起動しておく必要があります。

管理者: コマンドプロンプト
C:¥>netsh advfirewall firewall add rule name="HTTP" dir=in action=allow protocol=TCP localport=80

今後 HTTP だけでなく HTTPS での暗号化通信をおこなうことを考えているのであれば TCP ポート 443 の受信も許可しておくと良いでしょう。HTTPS で通信するためには証明書の追加や httpd.conf の変更なども必要となるため 今回は HTTPS の設定方法までは解説しません

Apache 実行中はコマンドプロンプトのキャレットが点滅してプロンプトに復帰していない状態になります。すぐにプロンプトに復帰してしまう場合は なんらかのエラーによって Apache が正常に起動できていない可能性が高いです。C:¥Apache24¥logs¥error.log にエラーが記録されていないか確認してみてください。

プロンプトに復帰せずに Apache が実行中になっているようであれば ブラウザーを起動して http://localhost/ にアクセスします。

ユーザー認証ダイアログが表示されるので作成したユーザー名とパスワードを入力します。ユーザー名とパスワードが正しければリポジトリーの一覧が表示されます。

リポジトリーの URL
http://localhost/repos/ のようにリポジトリー名を含むパスが正しい Subversion URL です。Subversion クライアントで接続先 URL を指定するときはリポジトリー名を含めた正しい URL を指定しましょう http://localhost/ にアクセスするとリポジトリー名の一覧を取得することができますが このルート URL は人にとって可読な情報を HTML で返すことを目的としており プログラムが処理することを想定した Subversion のプロトコル WebDAV には対応していません。

一般的な Subversion クライアントは接続先 URL http://localhost/ を指定しても Subversion リポジトリーとして認識できません。TortoiseSVN など ルート URL が返す HTML を独自に解析してリポジトリーの一覧として扱ってくれる特殊な Subversion クライアントもあります

Apache を起動したコマンドプロンプトで Ctrl + C を押すと Apache が終了してプロンプトが復帰します。

Apache Windows サービスとして登録する

最後に Apache Windows サービスとして登録して実行します。Windows サービスとして登録するためには管理者権限が必要になります。SvnConsole.bat をダブルクリックするのではなく 右クリックして 管理者として実行 を選択してコマンドプロンプトを起動してください。

* How to install Apache as a service. (Administrator privileges required.)
  C:¥svn>httpd -n Subversion -k install -f C:¥svn¥httpd.conf
  C:¥svn>net start Subversion

このヘルプメッセージに表示されている 1 つ目のコマンドを入力して実行します。引数 -n ではサービスの名前を任意に設定することができます。ここではサービスの名前を Subversion としていますが好きな名前に変更しても構いません。

管理者: コマンドプロンプト
C:¥svn>httpd -n Subversion -k install -f C:¥svn¥httpd.conf

アクセスが拒否されました というメッセージが表示される場合はコマンドプロンプトが管理者権限で実行されているか確認してください。コマンドプロンプトを管理者権限で実行している場合にはタイトルバーに 管理者 と表示されます。

Windows サービスの登録が正常に終了した場合はコマンドプロンプトに数行のメッセージが表示されます。

管理者: コマンドプロンプト
C:¥svn>httpd -n Subversion -k install -f C:¥svn¥httpd.conf Installing the 'Subversion' service The 'Subversion' service is successfully installed. Testing httpd.conf.... Errors reported here must be corrected before the service can be started. C:¥svn>

続けて サービスを起動します。サービス名を変更している場合は下記の Subversion の部分を自分で設定したサービス名に置き換えてください

管理者: コマンドプロンプト
C:¥svn>net start Subversion

サービスは正常に開始されました と表示されれば OK です。サービスのスタートアップの種類は 自動 になっているので 今後はコンピューターを再起動しても自動的に Subversion がサービスとして起動してくれます。

管理者: コマンドプロンプト
C:¥svn>net start Subversion Subversion サービスを開始します. Subversion サービスは正常に開始されました。 C:¥svn>

サービスを停止するときは以下のコマンドを実行します。

管理者: コマンドプロンプト
C:¥svn>net stop Subversion

コントロール パネル管理ツールサービス を開いて GUI 操作で Subversion サービスの開始や停止をおこなうこともできます。

Windows での Apache + Subversion 構築の手順は以上です。

オールインワン パッケージ

より手軽に Subversion サーバー環境を構築できるように 以下の内容をまとめたオールインワン パッケージを用意しました。

  • Apache 2.4.39
  • Subversion 1.12
  • VC ランタイム
  • httpd.conf
  • 管理用コンソール起動用バッチファイル

ダウンロード

svn-1.12+httpd-2.4.39-x64.zip (14.3MB)

svn-1.12+httpd-2.4.39-x86.zip (14.7MB)

※ ファイル名に x64 と付いているのが 64 ビット版 x86 と付いているのが 32 ビット版です。実行環境に合ったものをお使いください。

※ VC ランタイムもバンドルしているので 別途 C++再頒布可能パッケージをインストールする必要はありません。ただし Windows 10/Windows Server 2016 よりも前の Windows ではユニバーサル CRT の追加インストールが必要になることがあります。ユニバーサル CRT Windows Update でもインストールされるため通常は意識する必要はありませんが DLL が不足しているといったエラーが出るようであれば下記を参照してユニバーサル CRT をインストールしてみてください。

svn-1.12+httpd-2.4.39-*.zip をダウンロードして展開すると 中に Apache24 フォルダーと svn フォルダーが入っています。これを C ドライブ直下に展開して以下のフォルダー構成としてください。

  • C:¥
    • Apache24
    • svn

あとは Subversion 管理用コンソールの起動 から読み進めてユーザーアカウントの作成 リポジトリーの作成 Windows サービスの登録をおこなってください。

インストールフォルダーを C:¥Apache24 C:¥svn 以外に変更したい場合は以下の 2 つのファイルをテキストエディターで開いて先頭 1~3 行目にある C:¥Apache24 C:¥svn を適宜 書き換えてください。

  • svn¥httpd.conf
  • svn¥SvnConsole.bat

それでは 楽しい Subversion ライフをお過ごしください 😎

この記事を共有しませんか?