バージョン管理ツールを導入した

作業場にバージョン管理ツールを導入した。
プログラムの世界では当たり前に用いられている Subversion という Linuxアプリと、TortoiseSVN というWindowsアプリを組み合わせて使う。
サーバのファイル構成をミラーリングのようなことをしつつローカル環境内で作業できるので、作業PCのHDDが逝っても、サーバが生きてればデータの復旧が出来るし、その逆もまたしかりで、もの凄く安心。
今回、この設定でいくつか躓いたので、今後また同じような状況に直面したときのためにメモをとっておく。

■参考サイト
http://fedorasrv.com/subversion.shtml

・httpd.conf
apacheの動作を制御する設定ファイル。
IP単位でのアクセス制御とか、個別ユーザのディレクトリ(http://domain/~userName)ではなく、ドメインへの直接のアクセスをした場合に表示されるページの置き場だとか、色々設定できる。
その辺の説明を読みながらいじれば何の問題もない

・subversion.conf(鬼門)
ApacheにおけるSubversionの動作を決める設定ファイル
Subversionをapache経由で動かす場合、apache側がSubversionを認識できていなくてはいけない。
指定ディレクトリへのアクセスがあった場合、apacheを使ってデータの出し入れを行うように設定する。

(1)<Location /repos>
SVNParentPathを使う場合、後ろから2番目のディレクトリに相当するフォルダ名を指定。
SVNPathを使う場合はちょっと不明。(たぶん、上記と同じ考え方で良い)
Locationの後に書かれたディレクトリは、実際にこのリポジトリにアクセスする際に使われる文字列で、実体を持っていなくても構わない。

(2)SVNParentPath /var/www/svn
SVNParentPathは、プロジェクトをまとめているフォルダの指定
SVNPathは、各プロジェクトを羅列していく場合に使う。だいたい、面倒なので、SVNParentPAthを使うのがよさそう。

(3)
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1.0/24 ← 内部ネットワークアドレスを指定(範囲指定)

Orderは、大ざっぱな許可条件と拒否条件の評価順。
deny,allowであれば、先に拒否する条件を評価し、あとからピンポイントで許可設定を行う。
allow,denyであれば、先に許可する条件を評価し、あとからピンポイントで拒否設定を行う。
上の例の場合は、先にまず、すべてを拒否した後でローカル内のアクセスを全許可している。
各項目の頭文字は、大文字でも小文字でも良いようだ。

(4)
<LimitExcept GET PROPFIND OPTIONS REPORT>

Require SSL connection for password protection.

SSLRequireSSL

AuthType Basic
AuthName “Authorization Realm”
AuthUserFile /etc/httpd/conf/.htpasswd
Require valid-user
</LimitExcept>

SSLRequireSSLは、アクセスをSSL接続専用にする。
AuthType Basicは、ベーシック認証と呼ばれる認証によってリポジトリへのアクセスを行う宣言(古典的なWEB認証と同じ)
AuthNameは、認証ウインドウに表示するメッセージっぽい。
AuthUserFile は、アクセス用パスワードファイルのパスを記入。
Requireは、どのユーザーのパスワードを有効化し、認証を通すか設定する。
ここで指定している .htpasswd は以下のコマンドで生成できる。

htpasswd -c [FILE PATH] [USER NAME]

-b をつけた場合は以下のように指定し、パスワードの入力も同時に行える。

htpasswd -c -b [FILE PATH] [USER NAME] [PASSWORD]

この .htpasswd は、通常のWEB認証の物とは別に作成しても良く、リポジトリ単位で個別に生成するようなことも可能っぽい。

(5)
[root@fedora ~]# mkdir /var/www/svn ← リポジトリ格納ディレクトリ作成
[root@fedora ~]# chown apache:apache /var/www/svn ← リポジトリ格納ディレクトリ所有者をApache実行ユーザーに変更
[root@fedora ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映

新しく作成するリポジトリ格納ディレクトリは、apache経由でアクセスする場合、オーナーとグループをapacheにしておく必要がある。
また、restorecon -R [REPOSITORY PATH] や chcon -R [REPOSITORY PATH] を使い、SELinux向けの設定を行う必要がある。(SELinuxについては詳しく知らない)

・ssl.conf
その辺の説明を読みながらやれば問題はない。
設定は、しっかり全部の問いに答えた方が止さそう。

今回一番詰まったのはSubversionの(1)。
非常に単純だけど、わかりにくかった。
エラーも、403 forbiddenErrorだし、Permission deniedと表示されるから、SELinuxやhttpd.confあたりに問題があると思い込み、酷く無駄な時間を過ごしてしまった。

とりあえずこれで、バージョン管理システムが導入できたので、明日はどのようにリポジトリを構成するかしっかり考えよう。