ubuntu10でsubversionをWebDAV経由でアクセス可能にする

今回やりたかったことはsubversionをWebDAV経由でアクセス可能にする設定。その際にDigest認証を利用するところでハマったのですが、ubuntuはapache2の設定が他のディストリと比べて独特なので、最終目的に至るまでに調べたことをまとめてみます。

とりあえず、sudo aptitude install apache2 subversion libapache2-svnを実行・インストールし終えたところから。

apache2の設定について

参考ページ

参考ページにも記載されている通り、ubuntuでのapache2の設定はhttpd.confでは行なわず、/etc/apache2にあるapache2.confを核とした複数のファイルで設定を行ないます。大雑把なイメージとしては

apache2.conf
最も基本的なapache設定ファイル。ServerRootなど
ports.conf
HTTP(S)ポート番号の指定に特化した設定ファイル
conf.d/以下
DefaultChasetやエラーページ、セキュリティといった、apache2の基本設定の中でも分離・細分化された各種設定ファイル置き場
mods-available/以下
aptitudeでインストールされるなど、利用可能なapacheモジュール毎の設定ファイル群
mods-enabled/以下
mods-available以下にあるモジュールの内、有効化されたモジュール(のソフトリンク群)。a2enmodすると対象モジュールがmods-available/以下からソフトリンクが生成される
sites-available/以下
サイト個別の(vertual)ホスト設定
sites-enabled/以下
sites-available/以下にあるサイト別設定のうち、実際に有効になっている設定。

となっています。独特な設定ファイル構成になっているため最初はどこで何を設定すれば良いのか見失いがちですが、mods-available/以下でモジュール単位で設定することに代表されるよう、機能・目的単位でapacheの設定を行なうイメージが描ければ触っているうちに慣れてくるか思います。

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

subversionをWebDAVでアクセスする際の設定は/etc/apache2/mods-available/dav_svn.confで行ないます。この設定ファイルはlibapache2-svnをインストールした段階では全てコメントアウトされた状態になっています。ので、必要な記述のコメントアウトをはずしつつ各初期値を実際に合わせていけばdav_svn.confの設定は完了です。例えば、

  • http://example.com/svn/…でsubversionへアクセスする想定
  • リポジトリが/etc/subversion/repos以下に作成している
  • Digest認証のユーザ・ファイルを/etc/apache2/svn.htdigestとして作っている

という条件の場合

<Location /svn>
  DAV svn
  SVNParentPath /etc/subversion/repos
  AuthType Digest
  AuthName "SubversionRepository"
  AuthUserFile "/etc/apache2/svn.htdigest"
  Require valid-user
</Location>

コメントアウトされた部分を除くとこんな感じになります。

ここで注意したいのがユーザ・ファイルの指定についてで、Digest認証でググると時々ユーザ・ファイルの指定はAuthDigestFileで行なう、などの記述を見かけますがそれはapache2.0での指定の場合で、apache2.2ではAuthUserFileで行ないます

また、自分が実際にすごくハマった点なのですが、Digest認証のユーザ・ファイルを作成する際、ごく普通に

sudo htdigest -c SubversionRepository user-name

で作成できるので当然Digest認証も有効になってるものと思いがちですが、実際は初期のapacheの設定ではmods-available/以下にモジュールがあるだけで有効にはなっていません。有効になっているモジュールは

ll /etc/apache2/mods-enabled

を確認すれば分かるようになっています。Digest認証が無効のままアクセスしようとするとInternal Server Errorが出て、/var/log/apache2/error.logにconfiguration error: couldn’t check user. No user file?と残るので、このメッセージを見かけたら有効なモジュールを再確認してみてください(但し他の条件でこのエラーメッセージが出るケースもあります)。

モジュールを有効にするにはsudo a2enmod モジュール名を実行します。

参考ページ