Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名称
cvsup — CVS リポジトリ用のネットワーク配布パッケージ
書式
cvsup [-1aDeEgksvzZ] [-A addr] [-b base] [-c collDir] [-d delLimit] [-h host] [-i pattern] [-l lockfile] [-L verbosity] [-p port] [-P m|a|port|lo-hi|-] [-r maxRetries] supfile [destDir]
解説
CVSup は、ファイル群の配布と更新をネットワーク上で行うための ソフトウェアパッケージです。 CVSup という名前はパッケージ全体を指します。 CVSup はクライアントプログラムである cvsup と サーバプログラムである cvsupd からできています。 このマニュアルページは、 CVSup パッケージの 概要を説明し、クライアントプログラムである cvsup 特有の事項も説明します。 cvsupd の詳しい説 明については、 cvsupd(8) をご覧ください。 rdist や sup のような、より伝統的なネットワーク配布パッケージと異なり、 CVSup は特に CVS リ ポジトリの配布のために作られています。 CVSup は CVS リポジトリとリポジトリに含まれるファイ ル(特に RCS ファイル)の 特性を生かし、伝統的なシステムよりもずっと高速な更新を可能にしていま す。
オプション
クライアントプログラム cvsup は、少なくとも一つの引数 supfile を必要とします。 これは、サー バからの転送や更新が行われる 1 つ以上のファイルを記述した ファイルです。 supfile は、 sup で 使われる同じ目的のファイルに似た形式です。 ほとんどの場合、 cvsup は既存の sup supfiles を使 えます。 省略可能な引数 destDir も指定できます。 指定された場合には、この引数は更新された全てのファイ ルが置かれる ディレクトリを指定します。 destDir が指定されると、クライアントの元のファイルは そのまま残されます。 この機能は主にテストのためのものです。 cvsup は以下のオプションをサポートしています: -1 一時的な失敗が起き、かつ GUI が使われていない時の自動リトライを無効に します。こ のオプションを指定しないと、ネットワーク接続の切断といった 一時的な失敗が起きた 時、 cvsup はリトライを繰り返し行います。リトライの際には ランダム化された指数的 な一時退避(randomized exponential backoff) アルゴリズムを用いてリトライの間隔を 確保します。 このオプションは -r 0 と同等であり、GUI を使う時には暗黙的に指定さ れたことになります。 -a クライアントに対して自分自身の認証すること(自分が何であるかを示すこと) をサーバ に要求します。サーバの認証が失敗すると、更新はキャンセル されます。 後述の 認証 を見てください。 -A addr サーバに接続する時に割り当てるローカルのアドレス (ドット区切りの 4 つの数値、ま たはホスト名)を指定します。このオプショ ンは、ホストが複数個の IP アドレスを持っ ている場合に便利です。 -b base cvsup が管理する記録ファイルを置くベースディレクトリを指定します。 この際には、 supfile による base の指定は全て上書きされます。 -c collDir コレクションに関する情報を管理する、 base のサブディレクトリを指定します。 デ フォルト値は sup です。 -d delLimit 更新を 1 回実行した際に削除できるファイル数の上限を指定します。 この上限を超える ファイル削除の試みは致命的なエラーとなります。 このオプションを使うと、サーバ上 の一時的な設定ミスによる被害を、 ある程度防げます。 デフォルトでは無制限です。 -D cvsup にファイルの削除だけを行わせ、どんな種類の更新も行いません。 このオプショ ンは、クライアントのディスク容量が非常に少ないといった状況 で役に立ちます。ユー ザはまず -D オプションを使って cvsup を実行してできる限りの容量を空けます。次に もう一度 cvsup を実行しますが、今度は -D オプションは使いません。サーバ上でファ イルやディレクトリの名前が変更さ れた場合は、この方法を取ることにより、クライア ント上で新しいファイルが 生成されるよりも前に、全ての古いファイルが削除されるこ とが保証されます。 このオプションは、チェックアウトモードではまだ実装されていま せん。 -e サーバから受け取ったシェルコマンドを、 supfile 中の全てのコレクションに execute キーワードが追加されたかのように実行機能を有効にします。 -E サーバから受け取ったシェルコマンドを、 supfile 中の全てのコレクションに execute キーワードが追加されたかのように実行する機能を無効にします。 -g GUI を使わないようにします。 DISPLAY 環境変数が設定されていなければ、このオプ ションが暗黙的に指定されます。 -h host 接続するサーバホストを指定します。 supfile における host の指定は全て上書きされ ます。 -i pattern pattern にマッチするファイルとディレクトリだけを更新対象にするように cvsup に指 定します。ディレクトリがパターンにマッチする場合は、 そのディレクトリをルートと するサブツリー全体が含まれます。 このオプションが複数回指定された場合は、パター ンは ‘or’ 操作で結合されます。 -i オプションが指定されない場合のデフォルト動作で は、各コレクションに含ま れる全てのファイルが更新されます。 pattern は標準のファイル名パターンです。 これはコレクションのプレフィックスディ レクトリからの相対パスで 解釈されます。 スラッシュ文字は、パターン中に陽にスラッ シュが書かれた場合だけ マッチします。 ファイル名の先頭にピリオドがあっても、特別 扱いはされません。 GUI には、パターンを編集できる入力フィールドがあります。 -k チェックサムの不一致が起きた時、間違って編集されたファイル全ての一時的 なコピー を保存するようにします。 このオプションはデバッグ用のものであり、どうしてファイ ルが誤って編集さ れたのかを突き止める役に立ちます。 このオプションが指定されてい るかどうかに関わらず、不正なファイルが ずっと残っているものは、ファイルを丸ごと 転送することによって取得した 正しいファイルに置き換えられます。 このような転送は フィックスアップ(fixup, 修理の意味)と言います。 -l lockfile lockfile の生成し、更新が行われている間のロックを行います。 lockfile が既にロッ クされていると、 cvsup は自動的なリトライを行うことなく失敗します。 このオプショ ンが役に立つのは、 cron を使って cvsup を定期的に実行する時です。 これは、ある ジョブが、ネットワークの問題で予想以上の時間がかかっている 以前のジョブの邪魔を するのを防ぎます。 POSIX 形式のファイルロッキングが使われます。これは fcntl(2) で説明されています。 プロセス ID は、ロックファイルが正常に取得できた時に、このファイルに テキスト形 式で書き込まれます。 更新の終了時にロックファイルは削除されます。 -L verbosity GUI でない出力の詳しさを設定します。 レベル 0 では、エラーが起こらない限り cvsup は何も出力しません。 レベル 1 (デフォルト値)では、更新されたそれぞれのファイルが 出力されます。 レベル 2 では、それぞれのファイルに対して行われた更新に関するさら に 詳しい情報が出力されます。 メッセージは全て、標準出力に出力されます。 GUI が 使われる場合は、このオプションは無視されます。 -p port cvsup が接続を試みるサーバホストの TCP ポートを設定します。 この機能は主にテスト 用です。デフォルト値は 5999 です。 passive モード( -P オプションの説明を参照)で なければ、サーバはこれより一つ小さい番号の ポートを使って、クライアント向きの 2 つ目の接続を確立します。 -P m|a|port|lo-hi|- クライアントとサーバ間の情報のやりとりに使う補助的な TCP 接続の確立を 制御しま す。 全体では、クライアントとサーバは通信するために 4 つの片方向のチャネルを 必 要とします: 2 つはクライアントからサーバへの接続で、2 つはサーバから クライアン トへの接続です。 色々な防火壁の設定に対応するために、これら 4 つの片方向チャネル には色々 な設定ができます。 このために用意されたモードは、multiplexed モード, passive モード、 SOCKS モード、active モードです。 multiplexed モードを除く全て のモードは、古くなっています。 multiplexed モードは、他のモードが扱える全ての状 況に対応しています。 デフォルトでは、サーバが十分新しければチャネルは multiplexed モードで 確立しま す。 multiplexed モードは、1 つの TCP 接続を用いて 4 つのチャネルを作ります。 組 み込みのパケット多重化層は、TCP 接続上にある異なる論理チャネルを 多重化しま す。これは ssh's のポート転送機能とは異なるやり方で行われます。 これにより、非常 に小さい(1% 未満)通信オーバーヘッドとごくわずかの CPU 負荷がかかりますが、ほとん どどんな防火壁の中でも動作するはずです。 防火壁は、クライアントホストがサーバホ ストの 5999 番ポートへ接続を開始 することを許可していなければなりません。 これ以 外には、特殊な許可は全く必要ありません。 明示的に multiplexed モードを指定するに は、 -P m オプションを使います。 multiplexed モードは SOCKS プロキシサーバと組み合わせて使えます。 組み合わせて使 うには、単に m3socks コマンドの元で cvsup を実行し、 -P m オプションを指定しま す。 active モードは、双方向の TCP 接続を 2 つ使って 4 つの片方向チャネルを 作りま す。 クライアントからサーバへの元の接続は 2 つのチャネルを作り、 2 番目の TCP 接 続が残りの 2 つのチャネルを作ります。 2 番目の TCP 接続を確立するために、サーバ からクライアントへの接続が行 われます。 -P a で、クライアントはオペレーティング システムが選んだポート上で 接続を待ちます。 多くのオペレーティングシステムは、こ の目的には 1024-5000 の範囲の ポートを使います。 ユーザは -P port を使って特定の ポートを指定できますし、 -P lo-hi を使ってある範囲のポートも指定できます。 これ らのポート指定は SOCKS プロキシサーバでは使えません。 passive モードは、4 つの片方向チャネルを作るために TCP 接続を使うとい う点では似 ています。 しかし、passive モードでは 2 番目の TCP 接続を作るための接続は クライ アントからサーバに対して行われます。 passive モードは、外向きの接続は許可するけ れど内向きの接続は禁止してい る防火壁の中にクライアントがいる場合に便利です。 passive モードを選択するには、 -P - オプションを使います。 passive モードは SOCKS プロキシサーバでは使えません。 SOCKS プロキシサーバを使うための別モードです。 SOCKS モードでは、4 つの TCP 接続 が使われます。これらは全て片方向接続 だけです。 4 つの片方向 TCP 接続を使うこと により、SOCKS プロキシサーバの制限を 回避します。これを行わなければ、デッドロッ クが起こってしまいます。 (信じるかどうかは別にして、SOCKS サーバはブロッキング I/O コールを使い ます。) SOCKS モードは、 cvsup が m3socks コマンドの元で実行さ れ、かつ -P オプションが指定されていない時に選択されます。 後述の SOCKS と組み合 わせての CVSup の利用 もご覧ください。 -r maxRetries 自動リトライの回数を制限します。自動リトライは、ネットワーク接続が 切れるといっ た一時的なエラーが起きた時に試みられます。 デフォルトでは、GUI を使っていない 時、 cvsup は更新がうまく完了するまで何度でもリトライを行います。 リトライの間隔 は、ランダム化された指数的な一時退避アルゴリズムを使って 決められます。 GUI を使 うと、暗黙的に -r 0 が指定されます。 -r 0 は -1 オプションと同じ意味である点に注 意してください。 -s リストファイルの記録に対しての各クライアントファイルの状態のチェックを 行いませ ん。チェックをしない代わりに、リストファイルは正確であるものと 仮定します。この オプションはディスクアクセスの量を大幅に減らし、 小さなクライアントホストの負荷 で高速に更新を行います。しかし、 このオプションは、クライアントのファイルがロー カルで修正されていない場 合に限って使うべきです。ミラーサイトは、このオプション を使うと システムのディスク負荷を減るので利益があるでしょう。安全のために、 ミ ラーサイトであっても時々(一日一度くらい)は -s オプションなしで cvsup を実行すべ きです。 -s オプションを指定しないと、 cvsup はファイルごとに stat(2) システムコールを実 行し、ファイルの属性がリストファイルの記録と一致する かどうかを確認します。これ により、 CVSup 外部でのファイル変更は全て検出・訂正されることが保証されます。 -s オプションを指定し、かつローカルでファイルが 1 つ以上変更された時の 結果は未 定義です。ローカルファイルの損傷が訂正されないまま残ったり、 更新を取りこぼした り、 cvsup が実行途中で異常終了するかもしれません。 -v バージョン番号を表示して終了します。サーバへの接続は行いません。 -z 全てのコレクションの圧縮を有効にします。この動作は、 supfile において、 compress キーワードを全てのコレクションに追加した時と同様です。 -Z 全てのコレクションの圧縮を無効にします。この動作は、 supfile において、 compress キーワードを全てのコレクションから削除した時と同様です。 supfile は、更新すべきファイルのコレクションを指定するテキストファイルです。 コメントは ‘#’ で始まり、その行の最後まで続きます。コメントと空白を除くと空である行は 無視されます。残りの それぞれの行は、サーバ定義のファイルのコレクション で始まります。この行でコレクション名の後 に続くのは、0 個以上のキーワード または「キーワード=値」の組です。 デフォルトの設定は、コレクション名が *default である行で指定できます。 このデフォルトは、 supfile 内のそれ以降の行に適用されます。 *default 行は複数個あっても構いません。 新しい値 は、 supfile で前に指定されたデフォルト値に追加されるか、デフォルト値を上書きします。 コレク ションに対して明示的に指定された値は、全てのデフォルト値を 上書きします。 特によく使われるキーワードを以下に示します: release=releaseName これはコレクション内のファイルのリリースを指定します。 コレクション名と同じ く、リリース名もサーバの設定ファイル内で定義されて います。普通は各コレクション 内に 1 つのリリースしか含まれていませんが、 何個含んでもかまいません。CVS リポジ トリから得たコレクションでは、 慣習的に release=cvs をよく使います。CVS でないコ レクションでは、慣習的に release=current を使います。 base=base これは cvsup が記録ファイルを置いて管理するディレクトリを指定します。 記録ファイ ルには、クライアントマシン上にある各コレクションの状態が 書かれます。 base ディ レクトリは既に存在していなければなりません。 cvsup がこのディレクトリを作成する ことはありません。 base ディレクトリのデフォルト値は /usr/local/etc/cvsup です。 prefix=prefix これは、更新されたファイルが置かれるディレクトリです。 デフォルトでは、これは base と同じです。 絶対パスで指定しなければ、 base からの相対パスと解釈されます。 prefix ディレクトリは既に存在していなければなりません。 cvsup がこのディレクトリ を作成することはありません。 特殊な場合として、 prefix が ‘SKIP’ という名の存在しないファイルを指すシンボリッ クリンクである場合は、 cvsup はそのコレクションをスキップします。 この場合でもコ レクションに関係するパラメータの正しさはチェックされます が、コレクションのファ イルは全く更新されません。 この機能を使うと、一つのサイトの複数のマシンで標準の supfile を使いながら、更新するコレクションをマシンごとに制御することができます。 host=hostname このオプションは、全てのファイルを取り寄せる元となるサーバマシンを 指定します。 cvsup は、1 回の実行における全てのコレクションを同じホストから得ることを 必要と します。 異なる複数のホストからコレクションを更新したければ、 cvsup を複数回実行 しなければなりません。 delete このキーワードがあると、 cvsup はファイルの削除を許可します。 このキーワードがな ければ、ファイルは全く削除されません。 delete キーワードがあると、 cvsup はいわゆる exact モードに入ります。exact モー ドでは、 CVSup はできるだけクライアント側のファイルをサーバ側のファイルに対応さ せよう とします。 これは、RCS ファイルから個々の差分とシンボリックなタグを消すこ とと、 ファイル全体を消すことを含みます。 exact モードでは、 CVSup は編集された それぞれのファイルをチェックサムを使って調べ、編集によって サーバ上にあるマス ターコピーと同一のファイルができることを保証します。 あるファイルについてチェッ クサムのテストが失敗したら、 CVSup は最後の手段としてファイル全体を転送します。 一般的には、 CVSup はサーバが知っているファイルだけを削除します。 クライアントの ツリーに入っている追加のファイルは、excact モードであっ てもそのまま残されます。 より正確に述べると、 CVSup が消そうとするファイルは 2 種類です: • 過去に CVSup 自身が生成または更新したファイル。 • サーバ上で不要の印が付けられたチェックアウト済みバージョンのファイル。 use-rel-suffix リリースとタグから作ったサフィックスが cvsup が管理している各ファイルの名前に追 加されるようにします。 詳しくは リストファイル を参照してください。 compress ネットワーク上で送られるデータが全て圧縮されるようにします。 圧縮は非常に有効で あり、圧縮しなかった場合に必要な転送量と比べて 普通は 65% から 75% のバイトデー タを削減できます。 しかし、クラアイントとサーバ両方の CPU 時間という点ではコスト がかかり ます。 LAN では、圧縮は一般的に生産性を落とします。実際にはファイルの更 新が 遅くなってしまいます。 56K ビット/秒あるいはそれ以下の速度の接続では、圧縮 はほぼ確実に 得になります。 これら両極端なケースの中間の速度のネットワーク接続で は、実験を 行って参考としましょう。 -z コマンドラインオプションは、全てのコレクションに対して compress キーワードを 有効にします。supfile での指定とは無関係です。 同様に -Z コマンドラインオプショ ンは、全てのコレクションに対して compress オプションを無効にします。 norcs RCS ファイルの特別扱いをなくします。RCS ファイルは他のファイルと 同じように扱わ れます。 norsync 通常の(RCS でない)ファイルの更新の際に、Tridgell と Mackerras の rsync アルゴリ ズムを使いません。 このアルゴリズムはどんな種類のファイルでも正しく動作します が、 圧縮された tar アーカイブのようなファイルに対しては、 効率的ではありません し計算的にもコストが高く付きます。 strictrcs 更新された RCS ファイルをバイト単位の厳密な MD5 チェックサムで 確認します。通 常、 CVSup は RCS ファイルに対してもっと緩いチェックサムを用います。これは、 空 白文字による無意味な違いを無視します。異なるバージョンの CVS と RCS は、同じ RCS ファイルに対しても空白が様々に異なります。 したがって厳密なチェックサムを取る と、論理的には同じであるファイルに対 して意味がない不一致を報告するかもしれませ ん。これにより不要な “fixups” が大量に行われ、更新が遅くなることがあります。 nocheckrcs 更新された RCS ファイルに対して、MD5 チェックサムの比較を行いません。 delete キーワードが指定されていなければ、このオプションが自動的に 有効になります。 execute サーバから受け取ったシェルコマンドを実行できるようにします。 このオプションは注 意して使うべきです。というのも、セキュリティな危険を 及ぼすかもしれないからで す。 preserve cvsup に、可能な全ての属性をサーバからクライアントに転送しようと試みさせます。 サポートされる属性はホストのプラットフォームとクライアントのプラットフォーム に 依存します。FreeBSD システムでは、以下の属性がサポートされています: • 所有者 • グループ • パーミッション • フラグ • 修正時刻 これらのうち、最初の 4 つの属性は preserve キーワードで制御します。5 つ目はどん な場合でも保存されます。 preserve キーワードは、ユーザファイルや CVS リポジトリの更新に使うためのもので はありません。 これは、ホストの全体のファイルツリーを正確に複製するといった特殊 な目的 のためだけに使われます。 preserve が指定されていると、サーバホストとクラ イアントホストの何らかの違いが 問題を起こすかもしれません。 例えば、クライアント マシン上に存在しない所有者が所有するファイルを クライアントが受け取った場 合、オーナを保存することはできません。 同様にこれによって意図しないパーミッショ ンが設定されることがあります。 さらに、それ以降の更新では、毎回クライアント上の ファイルの所有者を訂正 しようとして失敗し、時間と帯域幅を無駄にしてしまうでしょ う。 最後になりますが、 preserve モードはネットワークのトラフィックを増大さ せ、更新を遅くします。 preserve モードを正しく機能させるためには、クライアントは root のアクセス権限で 実行しなければなりません。 クライアントが root でなければ、所有者、グループ、フ ラグの情報を保存し ようとする機能は無効になります。 preserve キーワードは、checkout モードでは無視されます。 umask=n コレクション内のファイルを更新する時、 cvsup に umask 値 n (8 進値)を使わせま す。 このオプションは、 preserve が指定されていると無視されます。 いくつかの追加的で、より専門的なキーワードについては後述します。 sup との後方互換性のた め、認識できなかったキーワードは黙って無視されます。
操作
cvsup は GUI(グラフィカルユーザインタフェース)を持っており、これを使うとユー ザは更新中の進 行状況と処理を監視できます。この GUI は、コマンドライン オプション -g が指定されるか、 DISPLAY 環境変数が設定されていなければ無効になります。 GUI には、 “Filter” 入力フィールドが あります。ここにパターンを入力して、更新するファイルを 制限することができます。 パターンは -i オプションの指定と同様に記述します。 複数のパターンを入力する際には、空白で区切らなければ なりません。 現在のところは、 supfile で指定されたパラメータを GUI で変更することはできません。 この点は 将来のリリースでの計画になっています。 どちらかというと必要ないものではありますが、GUI は見 て楽しいものです。
CVS モード
CVSup は、2 つの主な動作モードをサポートしています。 これらは CVS モードと checkout モードと 呼ばれるものです。 CVS モードでは、クライアントはマスターの CVS リポジトリを構成している 実際の RCS ファイルの コピーを受信します。CVS モードはデフォルトの動作 モードです。 このモードは、CVS リポジトリの 完全なコピーをクライアントマシン上でメン テナンスしようとユーザが考えている場合には適してい ます。 CVS モードは、CVS リポジトリベースでないファイルのコレクションに対して もうまく使えます。こ の場合にはファイルは解釈されることなく、単にそのま ま転送されます。
checkout モード
checkout モードでは、クライアントは特定のリビジョンのファイルを受信し ます。これはサーバの CVS リポジトリから直接チェックアウトされます。 checkout モードを使うと、クライアントは任意の バージョンをリポジトリか ら取得できます。この際、チェックアウトされる時の形で複数個のバー ジョン をサーバ上に持つ必要はありません。 しかし、checkout モードでは、その基本機能よりも ずっと柔軟に動作させる ことができます。 います。 クライアントは CVS のシンボリックタグを指定 できますし、任意の日付の指 定もできます。両方を指定することもできます。また CVSup は、この指 定に対応するファイルをリポジトリ内からチェックアウト形式で取 り出すことができます。 checkout モードはコレクション別に指定します。指定は、 supfile 内に以下のキーワードの一つある いは両方を含めることによって行います: tag=tagname シンボリックタグを指定します。このタグは、CVS リポジトリから取り出すリ ビジョン を選択するために使わなければなりません。 このタグはブランチまたは特定のリビジョ ンを示すことができます。 タグはシンボリックでなければなりません。つまり、数値の リビジョン番号は サポートされていません。 FreeBSD のソースリポジトリの場合は、以下のタグがよく使われます: RELENG_3 ‘stable’ ブランチ。 . メインブランチ( ‘current’ リリース)。 date キーワードだけが指定される と、こちらがデフォルトです。 date=[cc]yy.mm.dd.hh.mm.ss これは、CVS リポジトリからチェックアウトするリビジョンの選択に使う日付 を指定し ます。 クライアントは実際には、指定された日付と時刻のリビジョンを受け取ります。 現時点では、日付のフォーマットは柔軟ではありません。17 文字あるいは 19 文字の全 てを、説明したフォーマットで正確に指定しなければなりません。 2000 年以降の場合 は、世紀を cc で指定します。 これより前の年の場合は、最後の 2 桁だけを yy で指定 します。 日付と時刻は GMT で扱います。 デフォルトの日付は ‘.’ です。これは “でき るだけ新しいもの” という意味です。 checkout モードを有効にするためには、少なくともこれらのキーワードの いずれかを指定しなければ なりません。 どちらも指定されていなければ、 CVSup はデフォルトの CVS モードで動作します。 ブランチタグと日付が両方とも指定されると、指定されたブランチ上の 指定された日付の時点のリビ ジョンがチェックアウトされます。 日付を特定のリリースタグに付けて指定することもできます が、あまり役には 立たないでしょう。 checkout モードでは、タグや日付を更新と更新の間に変えられます。 例えば、 ‘tag=.’ という指定 を使ってコレクションが転送されたとしましょう。 ユーザは後から指定を ‘tag=RELENG_3’ に変えら れます。 これを指定すると、 CVSup はチェックアウトされたファイルを編集し、 ‘current’ バー ジョンが ‘stable’ バージョンになるようにします。 一般的には、 CVSup はどんなタグ/日付の組合 せであっても、他のタグ/日付の組合せに変換してく れます。変換は、両者の間にある RCS の差分を 既存のファイルに適用するこ とによって行います。 チェックアウトされたファイルのコレクションを、あるタグから別のタグに 変換するときには、変換 の前後で必ず同じリストファイルが使われるようにす るため、 supfile ファイル中で list キーワー ドを指定することが重要です。 リストファイルは次の リストファイル の節で説明します。 効率のた め、 cvsup は各コレクションについての記録ファイルを管理しています。 これをリストファイルと呼 びます。 リストファイルには、クライアントが現在持っているファイルとリビジョンに 関する情報が 書かれています。 このファイルには、クライアントのツリーに入っている実際のファイルと リスト ファイルが一致していることを確認するための情報も書かれています。 厳密に言うとリストファイルは必要ではありません。このファイルが削除され るか、クライアントが 持っている実際のファイルとの不一致が起こると、 cvsup は最後の手段として少し効率の悪い方法で クライアント側のファイルの識別と 更新を行います。 この際には、 CVSup の動作モードによっ て、タイムスタンプ、チェックサム、RCS ファイルの 解析結果などが使われます。 リストファイルは不可欠ではないので、 cvsup は FTP や CD-ROM から入手した既存のファイルツリー を「利用」できます。 cvsup はクライアント側のファイルのバージョンを識別し、必要に応じてこれ を更新 します。さらに、将来使うためにリストファイルを生成します。 他のシステムが作ったファイ ルツリーを使う場合の動作は、通常の更新ほど 高速ではありません。 また、サーバにかかる負荷も高 くなります。 リストファイルはコレクション固有のディレクトリに保存されます。詳しくは ファイル セクションをご覧ください。 リストファイルの名前は必ず ‘checkouts’ で始まります。 supfile 内 でキーワード use-rel-suffix が指定されていると、リリースとタグから作ったサフィックスがファイ ル名に 追加されます。 デフォルトのサフィックスは、 supfile で明示的にサフィックスを指定する ことにより上書きされます: list=suffix これはリストファイルの名前に付けるサフィックスの指定です。サフィックス の先頭の ドットは自動的に付けられます。 例えば、 ‘list=stable’ とすると、 checkouts.stable という名前のリストファイルが作られます。この場合には、リリー ス、タグ、 use-rel-suffix キーワードは関係ありません。
refuse ファイル
ユーザは受け取りたくないファイルの集合を指定できます。 こういったファイルは、いわゆる refuse ファイル内でファイル名パターンとして指定されます。 パターンは空白文字で区切られ、各行には複 数個のパターンを置くことができます。 パターンにマッチするファイルとディレクトリは、更新も削 除もされません。 これらのファイルは単に無視されます。 現在は、refuse ファイル内にコメントに書く方法はありません。 パターンは sh(1) のそれと似ていますが、スラッシュの特別扱いや、ピリオドで始まるファイル の特 別扱いがない点が異なります。 例えば、パターン ‘*.c’ は ‘.c’ で終わる全てのファイルにマッチし ます。これには ‘foo/bar/lam.c’ といったサブディレクトリ内のファイルも含まれます。 全てのパ ターンはコレクションのプレフィックスディレクトリからの相対パス として解釈されます。 これらファイルが CVS リポジトリから得たものならば——普通はそうなのです が——これらは RCS ファ イルとなります。これらのファイルには、 ‘,v’ というサフィックスが付きます。パターンについては サフィックスも考慮に入 れなければなりません。例えば、FreeBSD の文書ファイルは ‘doc’ という base ディレクトリのサブディレクトリに入っています。 そのディレクトリにある ‘Makefile’ が不要 な場合に doc/Makefile と指定してもうまく動作しません。なぜなら、サーバ上にあるファイルは ‘Makefile,v’ だからです。 もっとよい解決方法は、 doc/Makefile* と指定することです。この指定であれば、 ‘Makefile’ が RCS ファイルであろうとなかろうとマッチ します。 別の例としては、日本語、ロシア語、中国語の翻訳を避けて FreeBSD 文書 ファイルを取得するに は、以下の行を含む refuse ファイルを作ります: doc/ja* doc/ru* doc/zh* それぞれの supfile 行は、3 つの refuse ファイルによって調べられます。 大域的な refuse ファイ ルとして base/collDir/refuse があります。これは全てのコレクションとリリースに適用されます。 コレクション別の refuse ファイルとして base/collDir/collection/refuse があります。これは特定 のコレクションに適用されます。 最後に、リリースとタグ別の refuse ファイルがあります。これ は、 コレクション内の指定されたリリース/タグの組み合わせに対してのみ適用さ れます。 最後の refuse ファイルの名前は、コレクション別の refuse ファイルの名 前にサフィックスを加えることに よって付けられます。これは先に説明したリ ストファイルと同じ方法です。 どんな種類の refuse ファイルも存在しなくてもかまいません。 cvsup は、 collDir に対する base と sup の組み込みのデフォルト値を /usr/local/etc/cvsup に 持っていますが、どちらの値も上書き可能です。 base の値は -b オプションまたは supfile ファイ ル中の base=pathname エントリで変更できます。 (両方指定した場合は、 -b オプションの方が supfile のエントリよりも優先されます。) collDir の値は -c オプションでしか変更できません。こ れを変更する supfile コマンドはありません。 例えば、 base と collDir の両方にデフォルト値が設定されており、コレクションが ‘src-all’ でリ リースが ‘cvs’ である場合を考えます。 さらに、 ‘tag=RELENG_3’ に対して checkout モードが使わ れているものとします。 この場合、refuse ファイルの名前としては以下の 3 つが考えられます: /usr/local/etc/cvsup/sup/refuse /usr/local/etc/cvsup/sup/src-all/refuse /usr/local/etc/cvsup/sup/src-all/refuse.cvs:RELENG_3 supfile がコマンド base=/foo を含んでいる場合、refuse ファイルは以下のようになります: /foo/sup/refuse /foo/sup/src-all/refuse /foo/sup/src-all/refuse.cvs:RELENG_3 -b /bar が使われている場合( supfile ファイル中に base=/foo コマンドがあっても): /bar/sup/refuse /bar/sup/src-all/refuse /bar/sup/src-all/refuse.cvs:RELENG_3 そして -c stool も使われている場合: /bar/stool/refuse /bar/stool/src-all/refuse /bar/stool/src-all/refuse.cvs:RELENG_3
認証
CVSup は認証機構を備えており、これを使ってクライアントとサーバがお互いの身元 を確認すること ができます。この機構は、パケット盗聴やリプレイ攻撃の影響 を受けない challenge-response プロ トコルを用いています。ネットワーク上 では、パスワードはどちらの向きにも流れません。クライア ントとサーバのい ずれも、お互いの身元を独立に確認できます。 ファイル $HOME/.cvsup/auth には認証に使われる情報が書かれています。このファイルには、クライ アント がアクセス可能な各サーバについてのレコードが入っています。それぞれの レコードは、ファ イル中に 1 行で書かれます。 ‘#’ で始まる行は無視されます。空白文字だけの行も同様です。ただ し、ファイル 中の他の場所では空白文字も意味を持ちます。フィールドは ‘:’ 文字で区切られます。 ファイルの各レコードは以下の形式です: serverName:clientName:password:comment たとえ空であっても、全てのフィールドは存在しなければなりません。 ServerName はレコードが適用 されるサーバ名です。慣習的に、これはカノニカルかつ完全 にドメイン名が指定されたサーバ名で す(例: ‘CVSup177.FreeBSD.ORG’ )。 これはサーバが自分の名前と考えているホスト名でなければなり ません。 名前については大文字・小文字は区別されません。 ClientName はクライアントがサーバへのアクセス権を得るときに使う名前です。慣習的に、 クライア ント名には全て e-mail アドレスが使われます(例: ‘BillyJoe@FreeBSD.ORG’ )。クライアント名では 大文字・小文字は区別されません。 Password は秘密の文字列であり、クライアントが身元を証明するために使います。 パスワード文字列 は ‘:’ や改行文字を含んではいけません。 Comment はレコードを識別するための付加的な情報を持ちます。プログラムに解釈され ることはあり ません。 指定されたサーバに対する認証の設定を行うには、以下の手順を実行しなけれ ばなりません: 1. サーバ管理者または別の情報源から公式な serverName を取得します。 2. 適切な clientName を選びます。 これは有効な電子メールアドレスの形式にすべきです。これ は、サーバ管理者 が必要に応じてユーザに連絡しやすくするためです。 3. 秘密の password として任意の文字列を選びます。 4. cvpasswd ユーティリティを実行し、質問に対して パスワード を入力します。このユーティリ ティはサーバの管理者に送る行を出力し、 それからユーザの $HOME/.cvsup/auth ファイルの修 正手順を示します。この行をサーバ管理者に送るには、安全な 手段を使うべきです。 $HOME/.cvsup/auth にはパスワードが入っているので、必ず自分以外には誰も読めないようにして くださ い。 どうかを制御します。 ユーザはサーバの身元をチェックするかどうかを制御します。制御には -a コマンド ラインオプションを使います。
ミラーリングのための CVSup の使用
CVSup は CVS リポジトリ用に最適化されているので、汎用的なミラーリングとして 非常にうまく動作 します。 CVSup はどんな種類のファイルの更新にも使えます。 • RCS ファイルの更新は、個々のタグと差分の転送および、これらの クライアント側のファイルへ のマージによって行われます。 • 通常ファイルは、可能であれば rsync アルゴリズムを使って更新されます。 rsync アルゴリズム が無効にされている場合、追加されたデータを持つサーバ 上のファイル(例: ログファイ ル)は、新しく加わった末尾の部分だけを受け取 ります。 他の通常ファイルはまるごと置き換え られます。 • 空のディレクトリは残されます。 • シンボリックリンクは、サーバの設定ファイル内で symlink と rsymlink コマンドが指定されて いると更新されます。詳しくは cvsupd(8) をご覧ください。 • ハードリンクはそれぞれのコレクション内では保存されますが、コレクション 間では保存されま せん。 • デバイスノードはメジャー番号とマイナー番号を使って更新されます。 クライアントのホストと サーバのホストで異なるオペレーティングシステムが 動作していると、これは望ましい結果とな らないことがあります。
CVSup と防火壁
cvsup は、様々な設定の防火壁を超えるために数多くのモードを用意しています。 これらのモードは -P オプションか、 m3socks コマンドを使って制御できます。 cvsup を使えるようにするには、防火 壁はサーバホストの 5999 番ポートへの外向き の接続を最低限許可しなければなりません。 この条件 が満たされていれば、SOCKS の有無に関わらず多重モード (-P m) が動作するはずです。 もう少し防火壁の制限が緩ければ、passive モードや他のモードの一つを使っ て、効率を少し上げる ことができます。 詳しくは -P オプションの説明をご覧ください。 特定の種類の防火壁と CVSup を組み合わせて使う際の情報については、 ⟨http://www.polstra.com/projects/freeware/CVSup/⟩ にある CVSup FAQ をご覧ください。
SOCKS と組み合わせての CVSup の利用
SOCKS プロキシサーバ経由での通信は、現在は FreeBSD 上でしかサポートさ れていません。 これを 用いるためには、port として用意されている 修正版の Modula-3 の実行時システム( lang/modula-3-lib )とアドオンの SOCKS ライブラリ( lang/modula-3-socks )が必要です。 ま た、SOCKS ライブラリは動的リンク技術を使うので、 cvsup の実行ファイルは完全に動的リンクされ ている必要があります。 FreeBSD の port の net/cvsup は、必要に応じて cvsup を完全に動的にリ ンクします。 SOCKS の動作を有効にするには、単に lang/modula-3-socks パッケージに含まれる m3socks と組み合 わせて cvsup を実行してください。 詳細については m3socks(1) をご覧ください。
ssh を使ったポート転送
防火壁の内側のユーザは、SOCKS の代替品として、Secure Shell パッケージの ssh が持っている TCP ポート転送機能を使って防火壁を通過できます。 これを行うためには、ユーザは CVSup のサーバホス トにログインアカウントが必要です。 手順を以下に示します: 1. 以下のようにして、 ssh を使ってサーバホストとの接続を確立します: ssh -f -x -L 5999:localhost:5999 serverhost sleep 60 普通は serverhost を CVSup サーバのホスト名に置き換えるのですが、ここでは ‘localhost’ を入力します。 これにより、ポート転送に必要な設定ができます。 60 秒経って sleep が終わ るまでに cvsup を起動しなければなりません。 いったん更新が始まると、 ssh は必要な間、転 送チャネルをオープンした状態を保ちます。 2. ローカルホストで cvsup を実行します。コマンドラインには以下の行を含めます: ‘-h localhost -P m’
ファイル
/usr/local/etc/cvsup デフォルトの base ディレクトリ。 sup デフォルトの collDir サブディレクトリ。 base/collDir/collection/checkouts* リストファイル。 base/collDir/refuse グローバルの refuse ファイル。 base/collDir/collection/refuse* コレクション別の refuse ファイルと、リリースとタグ別の refuse ファイル。 $HOME/.cvsup/auth 認証用のパスワードファイル。
関連項目
ctm(1), cvpasswd(1), cvs(1), cvsupd(8), m3socks(1), rcsintro(1), ssh(1) http://www.polstra.com/projects/freeware/CVSup/
作者
John Polstra <jdp@polstra.com>
バグ
RCS ファイルは ‘,v’ で終わっていなければ RCS ファイルと認識されません。 ‘Attic’ という名前のディレクトリは CVS Attic として特別扱いされます。 SOCKS ライブラリまたはサーバのバグのため、大部分の形式の -P オプションは SOCKS では使えませ ん。 多重モード (-P m) を使えますが、他の形式の -P オプションは受け付けられません。 GUI と一部のウィンドウマネージャ(特に FVWM)の相性が良くありません。 FVWM のバージョン 1, 2 のどちらでも問題が起こるのですが、バージョン 2 の方がまだましのようです。 Style "cvsup" ClickToFocus という行を FVWM2 の .fvwmrc に追加するとかなりよくなります。 この問題はどうやらウィンドウマ ネージャのバグが原因らしく、GUI が ‘WM_TAKE_FOCUS’ プロトコルを使うと起こるようです。 回避策 としては、 -g オプションを使って、GUI を完全に無効にするとよいでしょう。