2008/05/12

SubversionのリポジトリをNFS上で

Subversion の repository を NAS 上へと移行させ、その領域を NFS として export し、FreeBSD で NFS mount して運用することにしてみました。勿論、Subversion のバックエンドは FSFSです(BerkeleyDB で NFS は危険だよ)。

可動実験として commit を試してみたところ、
svn: Can't get exclusive lock on file '/foo/bar/reps/db/transactions/0-1.txn/rev-lock': Operation not supported
というメッセージが。しばし、悩んでしまいました。

原因は、FreeBSD側で lockd/statd をあげていなかったこと。今まで、この NFS サーバは、暫定的試用でしか使っていなかったため、設定が漏れていたようです。うーん、間抜けだ。lockd に頼るのは危険、とは分かっていますが、意味なく完全 disable はマズイでしょう...。

/etc/rc.conf に
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
と書いたところ、無事 commit 出来るようになりました。良かった、良かった。

ちなみに FreeBSD で、該当ファイルシステム上に exclusivelock 付きのファイルが作れるかどうかは、lockf(1) を使うのが簡単です。

lockf(1) では、open(2) にO_EXLOCK つけて lock の確認を行っています(rev 1.11.8.1)。apr-1.2.8 では、HAVE_FCNTL_H がenable されていれば、exclusive lock は fcntl(2) の F_WRLCKで行いますから、結果、同じになる、というわけです。

例えば上の状況だと、
% cd /foo/bar
% lockf foo test
lockf: cannot open foo: Operation not supported
という感じになりますから、あぁ、lockd 問題か、と簡単に気がつくことが出来ました。便利便利。

0 件のコメント:

コメントを投稿