Last Update: "2007/05/07 11:51:08 makoto"
devel
cvsync
cvsync は CVS 保管庫の同期を取るソフトウェアです。
もっと簡単に言えば、CVS リポジトリをそっくり写すためのものです。
それを効率よく行なえるような工夫がされています。
同じようなものに CVSup (CVS Update protocol) があります。
しかし
これは
Modula-3
で書かれていて、
その Modula-3 の処理系は x86 のアセンブリ言語で書かれた部分があるなどの
理由で i386 などの限られた機構(architecture)だけで利用出来ます。
実際には、
cvsup のためだけに作られた限定 modula-3,
ezm3
ものがあって、
いくつかのアーキテクチャ用に移植が行なわれているはずです
(Mac OS X にも移植されているはずですが上記 URL にはありませんね)。
さて、
これに対して cvsync は、
どの arch でも使えるのが嬉しいところです。
使えるようにするには、
pkgsrc/devel/cvsync/ で make と make install をします。
cvsync サーバでどのようなものを取得出来るかは、
http://www.cvsync.org/に書いてありますが、
次のような形式を使います。
% cvsync cvsync://<host>[:<port>]/
実際には次のような入力と反応になります。
ttyp1:makoto@u2 20:53:00/050126(~/Mail)> cvsync cvsync://cvsync.org/
Connecting to cvsync.org port 7777
Connected to 61.115.120.90 port 7777
Running...
Name: cvsync, Release: rcs
Comment: CVSync CVS Repository
Name: cvsync-www, Release: rcs
Comment: To mirror CVSync web pages
Finished successfully
上の例では cvsync.org に「何がありますか」と聞きましたが、その代りに
cvsync.allbsd.org に聞くと、もっと沢山の一覧が表示されます。
cvsync.conf
cvsync の設定は cvsync.conf に書きます。
/usr/pkg/share/examples/cvsync に設定例があります。それを見て
/usr/pkg/etc/cvsync.conf に設定します。
例えば一番簡単な例だと、次のようになります。
config {
hostname cvsync.allbsd.org
collection {
name netbsd release rcs
prefix /export/cvsync
}
}
これは、cvsync.allbsd.org という機械に取りに行って、
「名前が netbsd で、リリース が rcs のもの」を持って来て、それを
/export/cvsync
の下に置く、と読みます。
つまり、この例では netbsd 関係の
CVS 保管庫の全ての内容を
/export/cvsync 以下に取得します。
それを実際に実行するには、
上のように書いておいて後は単に cvsync と入力するだけです。
その結果次のようなディレクトリが作られます。
ttypf:makoto@st4200 19:22:08/050126(~)> ls /export/cvsync/
CVSROOT/ htdocs/ othersrc/ pkgsrc/ src/ xsrc/
もし /usr/pkg/etc/cvsync.conf 以外の位置を参照したい時には
cvsync -c ~/etc/cvsync.conf
のように -c を使ってその名前を指定します。
これらの方法で
全部持って来ると、次のような大きさになります。これは
2005/01 現在の数字です。合計では 3.2GBytes くらいになります。
directory | size(kBytes) |
2005/01 | 2006/09 |
CVSROOT | 59 | 61 |
htdocs | 238,371 | 490,799 |
othersrc | 22,738 | 27,253 |
pkgsrc | 398,468 | 562,714 |
src | 1,864,931 | 2,511,947 |
xsrc | 642,828 | 948,898 |
合計 | 3,167,396 | 4,050,873 |
もし全部ということではなく、src だけが必要という場合なら、cvsync.conf の中の
name netbsd
と書いてある部分を
name netbsd-src
に変更します。
config {
hostname cvsync.allbsd.org
collection {
name netbsd-src release rcs
prefix /export/cvsync
}
}
ソースの取出
上で cvsync について説明しましたが、これで手元に持って来ると、
それは CVS 保管庫になりますから、後は cvs の操作です。
例えば、この後で、
% mkdir /export/cvs-work
% cd /export/cvs-work
% cvs -d /export/cvsync co src
と入力すると最新の src を手元に持出せます。
問題
cvs co した時に、次のような問題が起きることがあります。
% cvs [update aborted]: EOF in key in RCS file /export/cvsync/src/distrib/utils/sysinst/factor.c,v
この指摘された譜を rcscan を使って調べると、次のように言われるはずです。
% rcscan /export/cvsync/src/distrib/utils/sysinst/factor.c,v
ERROR: /export/cvsync/src/distrib/utils/sysinst/factor.c,v
この場合は、
簡単に言えば、自分のサーバ側の譜がこわれています。可能性は二つあります。
- 元のサーバは正常で自分のサーバ側がこわれている
- cvsync している元のサーバ側でもこわれている
この一つ目の場合には
単純にこれを消して、もう一度 cvsync
をすれば、たいていの場合は解決します。
ただ、これでは、また次のところで同様に操作が必要で、
cvs co を見ている必要があります。そこで、次のようにするのも一つの方法です。
% setenv CVSYNC /export/cvsync ( 一例です)
% cd $CVSYNC
% find . -name \*,v -exec rcscan -q '{}' \; | awk -F : '{print "rm -f", $2}
% find . -name \*,v -exec rcscan -q '{}' \; | awk -F : '{print "rm -f", $2} | sh
(または)
% find . -name \*,v -exec rcscan -q '{}' \; | awk -F : '{print "rm -f", $2} | tee | sh
(上の例のうち、3 行目は単に確認ですから、実際には不要ですが、初めての時には
御自分で確認のために試して見て下さい)。
この後に cvsync をもう一度実行すると、全て回復するはずです。
desired version
cvs [update aborted]: could not find desired version 1.13 \
in /e/cvsync/cvsync/pkgsrc/cad/geda-examples/PLIST,v
ttyp0:makoto@tc2120 12:07:19/070411(/export/pkgsrc)> grep 1.13 cad/geda-examples/CVS/Entries
/PLIST/1.13/Mon Oct 23 09:43:13 2006//
Removing this Entries line will fix this problem.
ttyp0:makoto@tc2120 13:19:40/070411(/export/pkgsrc)> cvs update cad/geda-examples
cvs update: Updating cad/geda-examples
cvs update: move away cad/geda-examples/PLIST; it is in the way
C cad/geda-examples/PLIST
cvs update: move away cad/geda-examples/distinfo; it is in the way
C cad/geda-examples/distinfo
ttyp0:makoto@tc2120 13:20:54/070411(/export/pkgsrc)> cvs update cad/geda-examples
cvs update: Updating cad/geda-examples
U cad/geda-examples/PLIST
U cad/geda-examples/distinfo
ttyp0:makoto@tc2120 13:20:56/070411(/export/pkgsrc)> cat cad/geda-examples/CVS/Entries
/DESCR/1.1.1.1/Wed Apr 11 03:07:19 2007//
/Makefile/1.15/Wed Apr 11 03:07:19 2007//
/PLIST/1.5/Wed Feb 21 13:23:57 2007//
/distinfo/1.11/Wed Feb 21 13:23:57 2007//
D
ttyp0:makoto@tc2120 13:21:08/070411(/export/pkgsrc)>
参考:
- NetBSD General Commands Manual cvsync(1)
-
http://www.cvsync.org/man/cvsync.1.html
|