2019-06-14  プログラミング Windows Web

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 ライフをお過ごしください 😎

最終更新日 2024-12-13
この記事を共有しませんか?
ブックマーク ポスト