いろいろな異なる方法でどのようにしてリポジトリにアクセスするかを見て きました。しかし、複数の方法で同時にあるリポジトリにアクセスすることは 可能—あるいは安全に—なのでしょうか? 答えはイエスです。少し ばかり慎重になる必要はありますが。
ある時刻において、以下のようなプロセスがあなたのリポジトリに対して 読み出しアクセス、あるいは書き込みアクセス要求を出しているかも知れません :
regular system users using a Subversion client (as themselves) to access the repository directly via file://
URLs;
リポジトリにアクセスするプライベートに 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 リポジトリのために管理することは頭痛の種を増やすだけのことです。 自分のニーズに本当に合ったサーバ構成を選択し、そこにしがみついて 離れない、これがおすすめの方法です!