ぱそくま ろご
linux > Subversion > apache httpdを使ったsvnサーバーの立て方

apache httpdを使ったsvnサーバーの立て方

apache httpdを使ったsvnサーバーの立て方概要

svnserveとの通信は基本svnプロトコルを使用する必要があります。 ブラウザーはsvnプロトコルに対応していないので、ブラウザーで閲覧する場合は別途WEBサーバーが必要となります。 ここではapache httpdでsvnを実装する方法を紹介します。apache httpdでsvnを扱うために必要なことは

  1. svnadminでプロジェクトの作成。
  2. httpd.confの設定。

の2つだけです。プロジェクトの作成はすでにご紹介していますので、ここではhttpdの設定をご紹介します。

サーバーを立てる前に

まずはじめにmod_dav_svn.soファイルがあるかを確認してください。通常は/etc/httpd/modulesにインストールされています。ない場合はyumでインストールしてください。

  • [paso ~] su
  • パスワード:[rootのパスワード]
  • [root ~] yum -y install mod_dav_svn
  • Loaded plugins: fastestmirror
  • .
  • .
  • Complete!


httpd.confの設定

CentOSなどLinux系の場合、/etc/httpd/conf/httpd.confに/etc/httpd/conf.d/にある*.confを読むように設定されています。 ここでは設定ファイルを/etc/httpd/conf.d/に置いた場合(ファイル名はsubversion.confとします。)の例をご紹介します。

/etc/http/conf.d/subversion.confの中身

  • [root ~] more /etc/httpd/conf.d/subversion.conf
  • #SVNに必要なモジュールです。
  • LoadModule dav_svn_module modules/mod_dav_svn.so
  • LoadModule authz_svn_module modules/mod_authz_svn.so
  • #svn用のドメインで運用するため、バーチャルホストで運用
  • <VirtualHost *:80>
  •   ServerName svnserver.pasokuma.net
  •   <Location /svnrpos> <-http://svnserver.pasokuma.net/svnrposでリポジトリにアクセス可能
  •     DAV svn
  •     SVNParentPath /var/svn #svnの親のパス
  •     SVNListParentPath on #svnの親パスを見えるようにする
  •     #念のため、ダイジェスト認証も追加(不要な場合は記述不要です。)
  •     AuthType Digest
  •     AuthName "repos"
  •     AuthUserFile /var/svn/.htdigest
  •     Require valid-user
  •   </Location>
  • </VirtualHost>
  • [root ~]

上記の内容を記述したファイルを設置したら、httpd(先にapachectl -tでconfファイルのチェックをお勧めします。)を再起動してください。 ブラウザーで[http://svnserver.pasokuma.net/svnrpo]アクセスし、、ローカルの/var/svn以下のディレクトリが表示されれば成功です。 ディレクトリが表示されない場合は、大抵、

  • SVNParentPathの値(パス)が間違っている場合
  • また、プロジェクトのディレクトリがapacheのアクセス権限がない場合

のどちらかです。パスの確認したり、chmodやchownで適切な権限を与えてください。

注意点1 - txn-current-lockがアクセスできない場合の処置

「Can't open file 'xxx/txn-current-lock': Permission denied」と表示されることがあります。 この場合、

  • リポジトリのディレクトリ自体にapacheの書き込み権限がない
  • SELinuxの設定でapacheでのローカルファイルの変更を許可していない

が考えられます。それぞれの対処は以下の通りです。

svnリポジトリに書込み権限がない場合

  • [paso ~] su
  • パスワード:[rootのパスワード]
  • [root ~] chown -R apache:apache [プロジェクトのルートディレクトリ]

SELinuxが原因でsvnリポジトリに接続できない場合

  • [paso ~] su
  • パスワード:[rootのパスワード]
  • [root ~] setenforce 0
  • [root ~] getenforce
  • Permissive

なお、厳密にSELinuxの設定を行いたい場合は、svnに接続できないの「SELinuxで許可されていない場合」を参考にしてください。