subversionでnamedのDBを管理する


私は、もともと/etc/namedbや自分のWeb PageのcontentsをCVSで管理していました。
CVSは、Network越しでデータが管理できるだけでなく、分散した管理人がデータ保守を 行うにも非常に便利なツールです。勿論source code revision contolにも非常に便利 です。

しかし、僕はどうやら生来の新しもの好きらしく、SVNが広がり始めたのを見て取りあ えずさわってみよう。ならば、折角サーバー環境を変えたわけだから、そこの管理にpwd SVNを使おうと考えたのが、このメモの発端です。



SVN Server作成とlocalマシンのファイル管理

まず、SVN Serverをつくります。と言っても、今回は全てのSVNアクセスをssh経由に するので、あまりやることはありません。
まず、subversionをInstallします。今回は、NetBSD Packageで、subversion-baseを Installしておきました。
CVSでいうroot repositoryの位置を決めます。今回は、/var/db/svnrootとしましょう。
ssh Server-A
su
mkdir /var/db/svnroot
mkdir /var/db/svnroot/server-A /var/db/svnroot/server-B
svnadmin create /var/db/svnroot/server-A/namedb
svnadmin create /var/db/svnroot/server-B/namedb
で、今回はnamedbを管理するわけですから、/etc/namedbのデータをつくっておきましょう。 それが終わったら、インポートして、ついでにcheckoutしておきましょう。
cd /etc
svn import /etc/namedb file:///var/db/svnroot/server-A/namedb -m "Initial Import"
mv namedb namedb.orig
svn co file:///var/db/svnroot/Server-A/namedb /etc/namedb
ここまでやったら、一応、中身が正しいかどうかを確認します。
diff -R namedb.orig namedb
ここで、.svnディレクトリー以外に差がなければOKです。これでsvnで管理できるようにな りましたので、BackUpは消します。
cd /etc
rm -rf namedb.orig

remoteマシンのファイル管理

Server-AにSVN Serverをつくりました。そこで、今度は、Server-Bの/etc/namedbを Server-AのRepositoryに入れましょう。
ssh server-B
su
cd /etc
svn import /etc/namedb svn+ssh://server-A/var/db/svnroot/server-A/namedb -m "Initial Import"
mv namedb namedb.orig
svn co svn+ssh://Server-A/var/db/svnroot/Server-A/namedb /etc/namedb
ここまでやったら、一応、中身が正しいかどうかを確認します。
diff -R namedb.orig namedb
ここで、.svnディレクトリー以外に差がなければOKです。これでsvnで管理できるようにな りましたので、BackUpは消します。
cd /etc
rm -rf namedb.orig


通常のファイル管理

基本的には、svn ci, svn commit, svn co, svn updateを知っていれば大丈夫です。
CVSでのcheckin(ci)、commit、 checkout(co)、updateと同様に使いましょう。
  1. svn updateで最新の状況と現状を合わせる
  2. ファイルを編集する
  3. svn ci を用いてcheckinする
  4. svn commit
  5. svn updateで結果を取り込む(確認作業)


ちょっと凝ったこと

cvs ignoreと同等の機能を利用する

僕はnamedb dirにSlaveになっているサイトのDataを入れているので、Directoryは必要なん ですが、中身は扱う必要がありません。CVSならば.cvsignoreを使えば良いんですが、svnは コマンドを利用してignoreを設定してやる必要があります。
cd any/where/server-A/namedb/bak
svn propedit svn:ignore . --editor-cmd=vi
(エディタ画面でアスタリスク(*)を入力する)
svn ci -m "bak dir is needed without any file."
svn commit
svn update

cd any/where/server-B/namedb/bak
svn propedit svn:ignore . --editor-cmd=vi
(エディタ画面でアスタリスク(*)を入力する)
svn ci -m "bak dir is needed without any file."
svn commit
svn update

ssh Server-A
cd /etc/namedb
svn update
ssh Server-B
cd /etc/namedb
svn update

管理されているディレクトリの移動

CVSでは、Repositoryで管理されているディレクトリーを「管理記録を残したまま」移動することは、 構造上不可能ですが、SVNはこれが出来るようになっています。やり方は簡単です。
foo/bar
  +- .svn
  +- Dir-A
  +- Dir-B
  +- OLD
  +   +- .svn
  |   +- Dir-OA
  |   +- Dir-OB
と言うような構造になっているディレクトリのDir-BをOLD/Dir-OCにしたい場合には、以下のように します。
  1. cd foo/bar
  2. svn update
  3. svn move DIR-B OLD/Dir-OC
  4. svn ci
  5. svn commit
  6. svn update

Last modified: Fri May 29 01:05:02 JST 2009