Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

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 に対する basesup の組み込みのデフォルト値を
     /usr/local/etc/cvsup に持っていますが、どちらの値も上書き可能です。 base
     の値は -b オプションまたは supfile ファイル中の base=pathname エントリで
     変更できます。 (両方指定した場合は、 -b オプションの方が supfile のエント
     リよりも優先されます。) collDir の値は -c オプションでしか変更できませ
     ん。これを変更する supfile コマンドはありません。

     例えば、 basecollDir の両方にデフォルト値が設定されており、コレクショ
     ンが ‘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 アルゴリズムが無効にされている場合、追加されたデータを持つサー
         バ 上のファイル(例: ログファイル)は、新しく加わった末尾の部分だけを受
         け取 ります。 他の通常ファイルはまるごと置き換えられます。
     ·   空のディレクトリは残されます。
     ·   シンボリックリンクは、サーバの設定ファイル内で symlinkrsymlink コ
         マンドが指定されていると更新されます。詳しくは 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 を完全に無効にするとよいでしょう。