CVSUPD(8) | System Manager's Manual | CVSUPD(8) |
cvsupd
—
ネットワーク上で
CVS
レポジトリを配布するためのサーバ
cvsupd
[-ev
]
[-A
addr]
[-b
base]
[-c
collPath]
[-C
maxClients]
[-l
log]
[-p
port]
[-P
range]
[-s
scanDir]
[-Z
comprLevel]
cvsupd
はネットワーク配布のためのパッケージである
CVSup
のサーバプログラムです。
サーバと組み合わせて動作するクライアントプログラム
に関しては cvsup(1)
を参照してください。
通常使用時には
cvsupd
に
‘
’
オプションを指定して実行しなければなりません。
-C
maxClientscvsupd
はバッググラウンドデーモンとして実行され、
リモートクライアントからの接続要求に対応します。それぞれの接続について
cvsupd
は子プロセスを fork
し、クライアントが要求したファイルを送ります。
以下のオプションがサポートされています:
-A
addr-b
base-c
collPathsup
’ です。-C
maxClientsこのオプションが指定されていない場合、
cvsupd
はフォアグラウンドで動作して
1
クライアントに対してのみサービスを行い、
それが終わると終了します。
-e
cvsupd -e ...
>>/var/tmp/cvsupd.out 2>&1
-l
log@
facility (例
‘@local0
’)
のような形式で指定された場合、ロギングは指定された
facility を使い syslog
経由で行われます。
そうでない場合、
log
はログファイルの名前として扱われます。
そのファイルがすでに存在している場合には、新しいメッセージはファイルの最
後に追加されます。
サービスを受ける各クライアントについて、少なくとも 2 つのメッセージが 記録されます。最初のメッセージはユーザ名とホスト名でクライアントを 識別します。最後のメッセージは更新の成功・失敗と、合計のネットワーク I/O の量をキロバイト単位(1K = 1024)で報告します。エラーやその他の知らせる べき状態を知らせるために、この 2 つ以外のメッセージが送られることがあ ります。
-p
port-P
rangelo-hi
’
の範囲のどちらかの形で指定できます。-s
scanDir-v
-Z
comprLevelcvsupd
がクライアントに提供するファイルコレクションは、様々な設定ファイルで記述
します。
設定ファイルは
base/colldir
ディレクトリ下に置きます。ここで
base は -b
base
コマンドラインオプションで指定されたもの、もしくはデフォルト値の
/usr/local/etc/cvsup です。
collDir は -c
オプションで指定されたディレクトリのいずれか、もしくはデフォルト値の
‘sup
’ です。
各コレクションの設定ファイルは、
base/collDir
下に作ったコレクション名と同名のサブディレクトリに個別に置かれます。
例えば ‘src-base
’
コレクションの設定ファイルは
base/collDir/src-base
に置かれます。
コレクションのサブディレクトリ中には、
releases
ファイルとリストファイルが置かれます。
releases
ファイルはリリースごとに一行の記述を含みます。
各行の最初の語はリリース名です。例えば
‘cvs
’
となります。
その後には、順不同で以下のようなフレーズが続きます:
list=
fileprefix=
directoryprefix
が指定されていない場合のデフォルト値は
base です。keywordprefix=
directory$Header$
’ と
‘$Source$
’
を絶対パスに展開するためにのみ用いられます。
普通は、 direcotry
はマスターの CVS
レポジトリを持っているマシンにおける、その
CVS
レポジトリの絶対パスです。
keywordprefix
を用いると、
CVSup
は必ず、
実際のレポジトリの位置によらず全てのマシン上で
RCS
キーワードを同一の形に展開します。super=
collectionsuper
キーワードは、こういった階層的な配置において、そのコレクションの
親コレクションを指定します。
このキーワードは省略してもかまいません。省略された場合には、
cvsupd
は現在のコレクションと利用可能な他のコレクションの間に
何の関連もないとみなします。
super
キーワードから得た情報は、サーバがミラーサイトとして動作している時に、
適切な scan
ファイルを見つけるために使われます。
CVSup
を使ったミラーサイトの運用
をご覧ください。
nocheckrcs
norcs
norsync
norsync
または
rnorsync
を使ってください(後述)。認識できないキーワードは受け付けられますが、無視されます。
これは sup(1)
パッケージとの後方互換性のためです。
cvsupd
が提供するリリースが
1 つだけであっても、
releases
ファイルは必要であることを覚えておいてください。
リストファイルは、クライアントのコレクションのバージョンを更新する方法
を詳しく指定します。
各行には 1
つだけコマンドが書かれます。空行と
‘#
’
から始まる行は無視されます。
指定される全てのファイル名は
releases
内で指定されている
prefix
ディレクトリからの相対パスとして扱われます。
リストファイルのコマンドの多くは、ファイル名のパターンを引数として
受け付けます。
このパターンは
sh(1)
が受け付けるパターンに似ており、
‘*
’,
‘’?,
‘
[...]
’
を組み合わせたワイルドカードが使えます。
omitany
パターンだけは例外ですが、その他の場合には、ファイル名に含まれる
スラッシュ文字は、パターン中のスラッシュ文字とだけマッチします。
例えば ‘*
’ は
‘.prifole
’
というファイル名にマッチします。
upgrade
pattern ...always
pattern ...omitany
コマンドを上書きすることを除いて、
upgrade
コマンドと同一です。omitany
pattern ...omitany
に対するパターンの解釈は他のパターンと異なります。
一般のパターンでは、パス名に含まれるスラッシュ文字はパターン中の
スラッシュ文字にのみマッチしますが、
omitany
に与えるパターンでは、スラッシュ文字は他の文字と同じように扱われます。
したがって、
‘*.c
’ は
‘.c
’
で終わるすべてのパス名にマッチします。例えば
‘foo/bar/lam.c
’
も含まれます。
symlink
pattern ...rsymlink
pattern ...symlink
に似ていますが、もしディレクトリがマッチした場合、そのディレクトリ
ツリー以下のすべてのシンボリックリンクもマッチしたものとして扱われます。norsync
pattern ...cvsupd
の “append”
最適化の方が rsync
アルゴリズムよりも効率的だからです。rnorsync
pattern ...norsync
に似ていますが、もしディレクトリがマッチした場合、そのディレクトリ
ツリー以下の全てのファイルがマッチしたものとして扱われます。execute
command (pattern ...)
’
までの全ての語からなります。
‘%s
’
という文字列はすべて、クライアントホストで更新されたファイルのパス名に
置き換えられます。
存在する
‘%%
’
はすべて ‘%
’
に置き換えられます。
コマンドは文字列を
/bin/sh
に渡すことで実行されます。
空白文字で区切って複数のパターンを指定することができます。
それらのファイルは
prefix
ディレクトリからの相対パスとして解釈されます。
それぞれのパターンは、ファイルが
server
上に存在する場合でも適切なファイルにマッチするように記述しなければなり
ません。 例えば RCS
ファイル名の
‘,v
’
サフィックスは、たとえチェックアウトモードの結果としてクライアント上にそ
のサフィックスが存在しない場合でもマッチしなければなりません。
ファイル名に含まれるスラッシュ文字は、パターン中のスラッシュと正確に一
致しなければなりません。
CVS の ‘Attic
’
ディレクトリはマッチングの処理に暗黙的に含まれるで、パターン中で直接指
定してはいけません。
マッチするファイルは、それが
Attic
かどうかに関わらず発見されます。
execute
文がディレクトリにマッチした場合、コマンドが実行されるのは、
ディレクトリが新規に作成されたとき、またはディレクトリの属性が変更され
たときです。
コマンドはディレクトリから上ったとき、つまりそのディレクトリ内の
ファイルとサブディレクトリの処理が終わった後に実行されます。
複数の execute
文が 1
つのファイルにマッチした場合、全ての関係するコマンドが順に実行
されます。
セキュリティ上の理由で、クライアントは全ての
execute
文を無視するかもしれません。
認識できないコマンドは受け付けられますが、無視されます。これは sup(1) との後方互換性のための動作です。
ミラーサイトとは、
CVSup
を用いてマスターのサイトからファイルの取得と更新を行い、
CVSup
経由で他のサイトにファイルを再配布するサーバのことです。ミラーサイトは、
大きなプロジェクトで負荷を複数のサーバに分散するためによく使われます。
配布されるファイルは元々はマスターサイトに置かれます。各ミラーサイトは
マスターサイトを基にして、自分が持っているコピーを定期的に更新します。
次に、クライアントはミラーサイトのどれかから更新分のファイルを取得しま
す。
cvsupd
には、ミラーサイトの効率を劇的に向上させるための特殊な動作モードがあり
ます。このモードはコマンドラインで
-s
scanDir
オプションを指定すると有効になります。
-s
オプションを指定しないと、
cvsupd
は要求された各コレクションのファイルに対してファイルツリー全体を調
べて、全てのファイルについて
stat(2)
システムコールを実行します。この動作は接続した全てのクライアントに対し
て行われます。どのファイルがいつ変更されるか分からないからです。このよ
うな調べ方をするとファイルを持っているディスクに対してシークの負荷が大
きくかかり、同時にサービスを受けられるクライアントの数が制限されること
になります。
ミラーサイトの場合には、コレクション内のファイルが更新されるのは新しい
バージョンを
CVSup
経由で受け取る時だけであることが分かっています。
-s
オプションを使うと、
cvsupd
はこの性質を生かして、ファイルツリーの調査を全く行わずにすみます。
そのため、サーバのディスク負荷は大幅に削減されます。ファイルツリーを調
べる代わりに、
cvsupd
はコレクション内のファイルに関する必要な情報を
scan
ファイルを読むことによって取得します。scan
ファイルは、
cvsup
クラアイントがミラーサイト上のファイルをマスターサイトにあるオリジナル
のデータを使って更新する際に、クライアントが作成します。
CVSUP(1)
では、これらのファイルは
list
と書かれています。どちらの呼び方でも同じファイルを指しています。
cvsupd
はクライアントにサービスする際は毎回、最後のマスターサイトからの更新の
ときに生成された scan
ファイルを見つけます。したがって、サーバは
コレクション内にあるファイルに関する最新の情報を常に持っており、
ファイルツリーを調べる必要はありません。
-s
オプションの後には、scan
ファイルがあるディレクトリ名を指定します。こ
れは普通、起点ディレクトリのサブディレクトリであり、
cvsup
クライアントがリストファイルを管理している場所と一致していなければなり
ません。デフォルトでは、
cvsup
は起点ディレクトリのサブディレクトリである
sup
にこれらのファイルを置きます。これに合わせるには、
cvsupd
は ‘-s
sup
’
で実行しなければなりません。
-c
オプションによって
cvsup
のリストファイルの位置がデフォルト値から変更されている場合、
cvsupd
の scan
ディレクトリも同じように変更しなければなりません。
-s
オプションにはデフォルト値はありません。コマンドラインで明示的に指定し
ていなければ、scan
ファイルは全く使われません。
全てのコレクションに対して
scan
ファイルが存在する必要はありません。
cvsupd
はまずクライアントが要求したコレクションについて
scan ファイルを探しま
す。その scan
ファイルが存在しなければ、
cvsupd
は順にスーパーコレクションの
scan
ファイルを探していき、最初に見つかっ
た scan
ファイルを使います。
(詳しくは
ファイルコレクションレポジトリを準備する
で説明されている
super
キーワードの説明を参照してください。)
適切な scan
ファイルがなければ、
cvsupd
は最終的にファイルツリーを全て調べます。
デフォルトの動作ではサーバへのアクセスは制限されていませんが、接続する
クライアントの IP
アドレスに基づくかなり柔軟な機構があります。この機構は
アクセス制御ファイル
base/cvsupd.access
に規則を書くことによって有効になります。アクセス制御ファイルは
テキストファイルであり、1
行に 1
つの規則が書かれます。コメントは
‘#
’
で始まり、その行の最後まで続きます。空白文字は無視されますが、隣り合う
トークンを区切る場合は除きます。空行は無視されます。
それぞれの規則は以下の要素からなります:
+
’
は許可規則、
‘*
’
は認証規則、
‘-
’
は拒否規則を表します。ホスト名は読み込まれる時に数値アドレスに変換されます。 ホストが複数個のアドレスを持っている場合、それぞれのアドレスに対する 規則が個別に追加されます。これは望み通りの動作をするかもしれませんし、 そうでないかもしれません。
ホスト名は注意して使うべきです。解決に時間がかかる名前があると、 サーバの動作が著しく遅くなるからです。
/
’
の後に書いて指定します。例えば、
‘/24
’ は 0xffffff00
というマスクを示します。
matching
マスクは省略してもかまいません。省略した場合のデフォルト値は
‘/32
’ です。クライアントがサーバに接続した際、クライアントの IP アドレスは 規則に対して順番にチェックされていきます。 それぞれの規則は以下のように処理されます:
リストの最後には、どんな IP アドレスにもマッチする 認証 規則が暗黙的に置かれています。したがって、アクセスが許可も拒否もされず に処理が終わった場合は、アクセスは認証機構によって制御されます。
規則の一般的な使用方法の例を以下に示します。
-spam.cyberpromo.com
+mirror.FreeBSD.org
-user.FreeBSD.org 1
-198.211.214/24
-198.211.214/24 3
-198.211.214/24/32 3
上記 2 つの例の違いに注意してください。 前者の例はネットワークごとの制限を行い、後者の例はホスト単位の制限を行っ ています。両者の相違点は counting マスクです。最初の例はマスクが 24 ビットなので、指定したアドレスブロッ クに含まれる全てのホストについて共通のカウンタが作られます。後者の例は マスクが 32 ビットなので、ホストごとに別々のカウンタが作られます。
-0.0.0/0/24 1
*0.0.0.0/0
アクセス制御ファイルを更新する際にサーバを止める必要はありません。 しかし、編集の際にはコピーを取って別の場所で編集し、それからアトミック に新しいファイルに置き換えるべきです。ファイルを更新した後にサーバに シグナルを送る必要はありません。サーバはファイルが触られたことを 検出し、再読み込みを自動的に行います。 さらに、サーバは 3 時間ごとにファイルを再読み込みします。 これは DNS の変更で解決されるホスト名が変わるかもしれないので、これに 対応するためです。
個々の規則における文法違反はログに記録され、違反している規則は無視され ます。ホスト名解決の失敗もログに記録されます。
CVSup
はサーバへのアクセスの制御に使える認証機構を備えています。この認証機構
はパケットの盗聴攻撃や再生攻撃の影響を受けない
challenge-response
プロトコルを使っています。ネットワーク上ではどちらの方向にもパスワード
は流れません。クライアントとサーバはどちらとも、相手が何者であるかを
独立して確認できます。
クライアントの認証は base/cvsupd.access ファイル内の 認証 規則が成功するか、 “規則が適用されないままファイル末尾まで来た” 場合に呼び出されます。 cvsupd.access が存在しない場合はクライアントの認証は行われません。
base/cvsupd.passwd
ファイルには認証時に使う情報が入っています。このファイルには、
サーバへのアクセスが許可されたクライアントについてのレコードが書かれて
います。ファイル中では
1 行に 1
レコードが書かれます。
‘#
’
で始まる行と、空白文字しか含まない行は無視されます。
ファイル中の別の場所では空白文字は必ず意味を持ちます。フィールドは
‘:
’
文字で区切ります。
ファイルの最初のレコードは特別です。最初のレコードはサーバ自身を表しま す。サーバのレコードは以下の形式になります:
serverName:privateKey
ServerName
はサーバのカノニカル名です(例:
‘CVSup.FreeBSD.ORG
’ )。
この名前がクライアントに送られ、クライアントはこの名前を使って適切なク
ライアント名と、認証のために共有している秘密の文字列を選びます。
この名前では大文字と小文字は区別されません。
PrivateKey は
‘:
’
を除く任意の文字からなる文字列です。
サーバがランダムな
challenge
文字列を生成してクライアントに送った時、
サーバは推測が困難な
challenge 文字列を privateKey
を使って作ります。challenge
文字列はランダムであり、まず予測できないの
で、 privateKey
は実はあまり重要ではありません。そうしたければ空のままでもかまいません
が、文字列の前の
‘:
’
は必ず必要です。
ファイル中の残り全てのレコードは、個々のクライアントに対応します。 クライアント用のレコードは以下の形となります:
clientName:sharedSecret: class:comment
空のフィールドがある場合でも、全てのフィールドが存在しなければなりません。
ClientName
はレコードが適用されるクライアントの名前です。慣習では、全ての
クライアント名には
e-mail
アドレスが使われます(例:
‘BillyJoe@FreeBSD.ORG
’ )。
クライアント名では大文字と小文字は区別されません。
SharedSecret
は、クライアントとサーバだけが知っている秘密の文字列です。
この文字列はクライアントが選んだパスワードから
cvpasswd
ユーティリティを使って生成されます。
クライアントは
sharedSecret
を知っていることを示すことにより、自分の身分をサーバに対して証明します
(その逆も同じです)。
sharedSecret
フィールドを
‘*
’
にすることにより、クライアントのアクセスを禁止できます。
共有している秘密の文字列がネットワーク上を流れることはありませんし、
秘密の文字列からクライアントのパスワードを調べることもできません。しか
し、共有している秘密の文字列があれば、改造した
cvsup
を使ってクライアントのふりをすることができるかもしれません。したがって、
cvsupd.passwd
必ずファイルはサーバしか読めないように注意してください。
Class は将来使うために予約しています。空にしてください。
Comment はサーバの管理者が便利なように、クライアントに関する備考が書かれていま す。例えば、クライアントの本名や、別の連絡手段などです。
cvsupd.passwd ファイルを更新する際にサーバを止める必要はありません。 しかし、編集の際にはコピーを取って別の場所で編集し、それからアトミック に新しいファイルに置き換えるべきです。ファイルを更新した後にサーバに シグナルを送る必要はありません。
cvsupd.passwd ファイル中では、個々のレコードの文法違反はログに記録され、違反している レコードは無視されます。
アクセス制御と認証機構の関係を以下にまとめます。重要な原則は、アクセス 制御が先に行われる点です。アクセス制御の結果によって認証が行われるかど うかが決まります。
チェックアウトモードでは、
CVSup
は co(1)
で説明されているように
RCS
キーワードを展開します。
CVSup
は標準的キーワードは全て展開し、さらに非標準のキーワードである
‘$CVSHeader$
’
も展開します。
この展開は
‘$Header$
’
と同様に行われますが、RCS
ファイルのパス名が絶対パスではなく
prefix
ディレクトリからの相対パスで表記される点が異なります。
ここで prefix
は CVS
レポジトリのルートディレクトリです。
標準 RCS
キーワードの別名を定義し、それぞれのキーワードの解釈を選択的に
有効・無効にすることも可能です。
この設定は、
prefix/CVSROOT/options
ファイルに書かれているキーワードによって、
レポジトリ全体を単位として制御されます。
1 行には 1
つのキーワードが書かれます。
‘#
’
から行末まではコメントと見なされます。
また空白行は無視されます。
歴史的な経緯のために文法は変てこです。
キーワードの別名を定義するには、次の形式の行を使います :
tag=alias[=
keyword]
tag=FreeBSD=CVSHeader
$FreeBSD$
’
を定義し、これは
‘$CVSHeader$
’
と同様に展開されます。
二番目の ‘=
’
と keyword
がない場合、キーワードのデフォルト値は
‘Id
’ です。
選んだ特定のキーワード以外を全て無効にするには、次の形式の行を使います:
tagexpand=ikeyword[,...]
tagexpand=iFreeBSD,Id
$FreeBSD$
’ と
‘$Id$
’
以外の全てのキーワードの展開を行わなくなります。
最初の ‘i
’ は
“include” の意味です。
選択した特定のキーワード以外を全て有効にするためには、次の形式の行を使 います:
tagexpand=ekeyword[,...]
tagexpand=eFreeBSD,Id
$FreeBSD$
’ と
‘$Id$
’
以外の全てのキーワードの展開を行うようになります。
先頭の ‘e
’ は
“exclude” の意味です。
サーバの起動よりも後に作られた base/cvsupd.HALT というファイルが存在すると、サーバは全ての新規接続要求を受け入れなくな ります。 すでに接続されているクライアントは最後まで実行されますが、新しい接続は一 切受け付けなくなります。 この仕組みは不便で非力なため、おそらく将来のリリースでは変更されるでしょ う。
cvsupd
は、コマンドラインで指定するログファイルを除いて、新しいファイルの作成
やファイルへの書き込みは行いません。
cvsupd
が動作していることによってシステムにダメージを与える可能性はほとんどあり
ません。
それよりも可能性の高いセキュリティ上の危険として、
cvsupd
が騙されて公開すべきでないファイルを送り出してしまうことがあります。
cvsupd
ではこのようなことがないように細心の注意を払っています。
それでもやはり、最大の防御は
cvsupd
を
‘nobody
’
のような全く権限のないユーザで実行し、誰でも読めるファイルしか提供でき
ないようにすることです。
CVSup
は、ネットワーク上を流れるデータの暗号化には対応していません。
機密性が必要であれば、
ssh
を使って接続をトンネリングしてください。
co(1), cvpasswd(1), cvs(1), cvsup(1)
http://www.polstra.com/projects/freeware/CVSup/
John Polstra ⟨jdp@polstra.com⟩
ファイル名の末尾が
‘,v
’
になっていない RCS
ファイルは認識されません。
‘Attic
’
という名前のディレクトリは全て
CVS Attic
と見なされ、特別な扱いを受けます。
August 31, 1999 | FreeBSD |