いろいろな異なる方法でどのようにしてリポジトリにアクセスするかを見て きました。しかし、複数の方法で同時にあるリポジトリにアクセスすることは 可能—あるいは安全に—なのでしょうか? 答えはイエスです。少し ばかり慎重になる必要はありますが。
ある時刻において、以下のようなプロセスがあなたのリポジトリに対して 読み出しアクセス、あるいは書き込みアクセス要求を出しているかも知れません :
Subversion クライアントを使って
(自分自身の名のもとに)file:///
URLを
指定することで直接リポジトリにアクセスする通常のユーザによって:
リポジトリにアクセスするプライベートに SSH-起動されたsvnserve プロセスに接続する通常のシステムユーザによって:
デーモンとして、またはinetdによって起動されたsvnserve プロセスが、特定の固定されたユーザとして実行されることによって:
Apache httpd プロセスが、特定の固定されたユーザとして実行 されることによって
管理者が直面する一番よくある問題はリポジトリの所有権とパーミッションです。
上のリストにあるすべてのプロセス(あるいはユーザ)は Berkeley DB ファイルに対する
読み書きの権限を持っていますか? あなたが Unix風のオペレーティングシステム
を使っているとして、一番素直な解決方法は、すべての潜在的なリポジトリユーザ
を新しいsvn
グループに入れてしまい、リポジトリをその
グループによって完全に所有されている形にしてしまうことです。しかし
それだけでは十分ではありません。プロセスはデータベースファイルに、排他的な
umask で書き込むかも知れません—それは他のユーザがアクセスするのを
妨害してしまいます。
それでリポジトリユーザの共通グループ設定の後の次のステップはすべてのリポジトリ
アクセスプロセスで、正しい umask を使うことです。リポジトリに直接アクセスする
ユーザの場合はsvnプログラムをくるんでしまうスクリプトを
作り、その先頭でumask 002を設定してから実際のsvn
クライアントプログラムを実行すれば良いでしょう。同様のラッパースクリプトを
svnserveについても書き、Apache の起動スクリプト
apachectl
の先頭にもumask 002コマンドを
追加しましょう。たとえば:
$ cat /usr/bin/svn #!/bin/sh umask 002 /usr/bin/svn-real "$@"
また別のよくある問題が Unix風システムではよく起こります。
リポジトリが利用されると BerkeleyDB は必要におうじて新しい
ログファイルを作り動作を記録します。リポジトリ自体は
完全にsvnグループによって所有されていても
このようにして新規に作られたファイルが同じグループによって
所有される必要はありません。これが理由でユーザにとっては
また別のパーミッションの問題がおこります。うまい回避策としては
リポジトリのあるdb
ディレクトリにたいして
グループ SUID ビットを立てることです。これによって
すべての新たに作成されるログファイルは親ディレクトリと
同じ所有グループになります。
いったんこの問題を乗り越えてしまえば、あなたのリポジトリは すべての必要なプロセスからアクセスすることができるようになって いるはずです。少し面倒で複雑ですが、複数のユーザが書き込みアクセス を共有することで起こる問題は、しばしばきれいに解くことができない 古典的な問題です。
ありがたいことに、ほとんどのリポジトリ管理者はそのような複雑な
設定をする必要はないでしょう。
同じマシン上にあるリポジトリにアクセスしたいと思うユーザは
file://
アクセス URL を利用することに制限されて
いるわけではありません— http://
や
svn://
URL中にサーバ名として localhost
を指定する形でApache HTTP サーバやsvnserve
を使うこともできるのです。そして複数のサーバプロセスを Subversion
リポジトリのために管理することは頭痛の種を増やすだけのことです。
自分のニーズに本当に合ったサーバ構成を選択し、そこにしがみついて
離れない、これがおすすめの方法です!