foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

CentOS へ WebDAV svn をインストールする。

環境

問題

CentOSSubversionリポジトリSSL 公開したい。

解決方法

以下の手順で作業を進める。

Apache mod_authz_svn のインストール

CentOS の場合はリポジトリにファイルがない。
後述する mod_dav_svn のインストールでまとめてインストールされるので、次のステップへ進む。

Apache mod_dav_svn のインストール

yum でインストールする。

# yum install mod_dav_svn

上記により /etc/httpd/conf.d/subversion.conf が自動作成される。

今回は下記の依存モジュールもアップデートした。

Subversion リポジトリ ユーザーの作成

リポジトリを配置するためにユーザーを作成する。
/var へリポジトリを配置してもいいが、メンテナンスの際に管理者になる必要が出てしまうので、ユーザーを作成することにする。

# useradd svn
# passwd svn

Subversion リポジトリディレクトリの作成

上記で作成したユーザーのホーム ディレクトリに、リポジトリディレクトリを作成する。

$ mkdir /home/svn/repos

Subversion リポジトリの作成

svnadmin コマンドでリポジトリを作成する。
今後、リポジトリを増やす場合は下記を繰り返す。

$ svnadmin create /home/svn/repos/REPO-NAME

Subversion リポジトリ権限の設定

上記で作成したリポジトリの権限を設定する。
chmod 707 としてはいけない。
chmod 707 ではファイルに実行権限が付いてしまう。

$ chmod -R o+w /home/svn/repos/REPO-NAME

公開リポジトリ向け Apache 設定ファイルの編集

/etc/httpd/conf.d/subversion.conf を編集する。
疎通確認をしつつ、設定作業をするためこの段階では以下の状態で設定する。

# vi /etc/httpd/conf.d/subversion.conf

ファイル末尾に下記を追記する。

<Location /repos>
    DAV svn
    SVNParentPath /home/svn/repos
</Location>

公開リポジトリ向け Apache の再起動

# service httpd restart

公開リポジトリ向け疎通確認

ブラウザおよび svn クライアントから下記アドレスへアクセスする。

http://example.com/repos/REPO-NAME

非公開リポジトリ向け Apache 設定ファイルの編集

改めて subversion.conf を編集する。
認証方法がベーシック認証になっているが、SSL 通信のためパスワードは暗号化される。

<Location /repos>
    SSLRequireSSL

    DAV svn
    SVNParentPath /home/svn/repos

    AuthType Basic
    AuthName "Authentication"
    AuthUserFile /home/svn/repos/.htpasswd
    Require valid-user
</Location>

非公開リポジトリ向け Apache アクセス ファイルの作成

Apache の htpasswd を使う。

$ htpasswd -c /home/svn/repos/.htpasswd USER-NAME
New password: ********
Re-type new password: ********

複数のユーザーがいる場合は、下記操作を繰り返す。
初回設定と異なり -c オプションが無い点に注意。

$ htpasswd /home/svn/repos/.htpasswd USER-NAME2
New password: ********
Re-type new password: ********

非公開リポジトリ向け Apache の再起動

# service httpd restart

非公開リポジトリ向け疎通確認

ブラウザおよび svn クライアントから下記アドレスへアクセスする。
プロトコルが http ではなく、https になっている点に注意。

https://example.com/repos/REPO-NAME

非公開リポジトリ向け Subversion アクセス ファイルの作成

Apache の認証情報と mod_dav_svn の認証情報をリンクさせるために、アクセス ファイルを作成する。
アクセス ファイルの本来の目的はアクセス制御である。
そのため作成は必須ではない。
だが、アクセス ファイルを作成しないと、コミット ユーザーがログに記録されない。
まずは subversion.conf を編集し、AuthzSVNAccessFile を追加する。

# vi /etc/httpd/conf.d/subversion.conf
<Location /repos>
    SSLRequireSSL

    DAV svn
    SVNParentPath /home/svn/repos
    AuthzSVNAccessFile /home/svn/repos/authz

    AuthType Basic
    AuthName "Authentication"
    AuthUserFile /home/svn/repos/.htpasswd
    Require valid-user
</Location>

次にアクセス ファイルを配置する。
アクセス ファイルはリポジトリの個数とは関係なく、1ファイルだけ配置する。

$ vi /home/svn/repos/authz
[/]
* = 
USER-NAME1 = rw
USER-NAME2 = rw
:
USER-NAME3