インターネットを通じたソースツリーの同期

原作: Jordan K. Hubbard .

訳: 岩崎 満 . 13 September 1997.

インターネット接続 (または電子メール) を使用して, あなたの興味の対 象によって FreeBSD プロジェクトのソースのある一部分または全体の最新を 追いかける方法は色々あります. 私たちが提供している基本的なサービスは Anonymous CVS, CVSup と CTM です:

Anonymous CVS と CVSup は pull 同期モデルを採用しています. CVSup の場合, ユーザ (または cron スクリプト) が cvsup 起動し, どこかにある cvsupd サーバとやりとりしてファイルを 最新状態にします. 届けられる更新情報はその時点の最新のものであり, また必要な時にだけ取り寄せられます. 興味のある特定のファイルやディレクトリに 限定して更新することも簡単にできます. クライアント側のソースツリーの状態・ 設定ファイルの指定に従い, サーバによって更新情報が 素早く生成されます. Anonymous CVS は, このプログラムがリモートの CVS リポジトリから直接変更点を pull できるようにした cvs(1) への拡張であるという点で, CVSup よりもずっと単純です. CVSup は効率の点ではるかにまさっていますが, Anonymous CVS の方が簡単に利用できます.

一方, CTM はあなたが持っているソースとマスタアーカイブ上に あるそれとの対話的な比較をおこないませんし, あるいは向こう側から変更点を pull したりもしません. そのかわりに, 前回の実行時からの変更を認識するスクリプトが マスタ CTM マシン上で一日に数回実行され, すべての変更を compress して通し番号を振り, さらに電子メールで転送できるようにエンコードします (印字可能な ASCII キャラクタのみです). 受信した後は, これらの ``CTM のデルタ'' は自動 的にデコード, 検査してユーザのソースのコピーに変更を適用する ctm.rmail(1) によって処理可能となります. この処理は CVSup や Anonymous CVS よりずっと効率 的であり, pull モデルというよりむしろ push モデルで あるため, 私たちのサーバ資源の負荷は軽くなります.

もちろん他のトレードオフもあります. うっかりアーカイブ の一部を消してしまっても, CVSup は壊れた部分を検出して再構築してくれます. CTM はこれをやってくれませんし, Anonymous CVS はおそらく他の何よりも深く混乱してしまうことが多いでしょう. もしソースツリーの一部を消してしまったら, (最新の CVS ``ベースデルタ''から) 一からやり直し, CTM か anoncvs を使って悪い部分を消去し, 再同期させることによって すべてを再構築しなければなりません.

Anonymous CVS, CTM, CVSup についての 詳しい情報については, 以下の節を参照してください:

Anonymous CVS

原作: Jordan K. Hubbard

訳: 杉村 貴士 . 19 July 1998.

導入

Anonymous CVS (もしくは, anoncvs として知られています) は離れたところにある CVS リポジトリと同期を取るために FreeBSD に付属している CVS ユーティリティに含まれている機能です. 他にもありますが, それは FreeBSD のユーザが, 特別な権限なしに FreeBSD プロジェクトの公式な anoncvs サーバに読み取り専用で CVS の操作をすることができるようにするためのものです. それを使うには, 単に CVSROOT 環境変数を設定して適切な anoncvs サーバを指定し, そして cvs(1) コマンドを使って手元にある リポジトリのようにアクセスするだけです.

CVSup と anoncvs のサービスは本質的に同じ機能ではないか ということも言われていますが, ユーザが同期を取る方法を選ぶときに影響を与えるような さまざまなトレードオフが存在します. 要約して言えば, CVSup はネットワーク資源の使い方においては非常に効率がよく, またはるかに技術的に洗練されたものですが, 相当な手間がかかります. CVSup を使うには, 特別なクライアントをまずインストールして設定しなくては 1bit も取ってくることができず, またそのとき CVSup では collections と呼んでいるかなり大きなかたまりだけからしか 取ってこれません.

それに対して anoncvs では, CVS モジュールの名前を指定することで特定のプログラムの (ls や grep のような) 個々のファイルから調べることができます. もちろん, anoncvs は CVS リポジトリの読み取り専用の操作に対してのみ適しているので, もしあなたが FreeBSD プロジェクトのものと共有されたなにか ローカルなリポジトリを作ってそこでの開発を 行おうというときには, CVSup だけが唯一の手段となってしまいます.

Anonymous CVS を使う

cvs(1) を設定して Anonymous CVS リポジトリを使うには単に CVSROOT 環境変数を設定して FreeBSD プロジェクトの anoncvs サーバを指定するだけのことです. この文書を書いているときには, 次のサーバが利用できるようになっています.

  • USA: anoncvs@anoncvs.freebsd.org:/cvs

CVS はかつて存在した (もしくは, 時にはこれから存在するものも :) ほとんどどんなバージョンの FreeBSD のソースを ``check out'' することができますが, あなたは cvs(1) の リビジョン (-r) のオプションや FreeBSD プロジェクトのリポジトリの中で それをどのように指定したらいいものかということを よく知っておく必要があります.

タグには 2 種類あって, リビジョンタグとブランチタグがあります. リビジョンタグは特定の改訂版を指しており, それはいつも同じものを意味しています. 一方ブランチタグは, 指定されたときの指定された開発の流れにおける 最も新しい改訂版を示しています. ブランチタグは特定の改訂版を指していないために, その意味はきょうと明日では違うものになっているでしょう.

ユーザが興味を持つであろうブランチタグの一覧です.

HEAD

主要部をなす流れ, すなわち FreeBSD-current のための名前です. また, どのリビジョンも 指定されなかったときにはこれになります.

RELENG_3

FreeBSD-3.x の開発のための流れです. FreeBSD-stable としても知られています. ports コレクションには無効です.

RELENG_2_2

FreeBSD-2.2.x の開発のための流れです. 2.2-stable としても知られています. ports コレクションにはふさわしくありません.

RELENG_2_1_0

FreeBSD-2.1.x の開発のための流れです - このブランチは大部分がすたれています. ports コレクションにはふさわしくありません.

ユーザが興味を持つであろうリビジョンタグの一覧です.

RELENG_2_2_6_RELEASE

FreeBSD-2.2.6. ports コレクションにはふさわしくありません.

RELENG_2_2_5_RELEASE

FreeBSD-2.2.5. ports コレクションにはふさわしくありません.

RELENG_2_2_2_RELEASE

FreeBSD-2.2.2. ports コレクションにはふさわしくありません.

RELENG_2_2_1_RELEASE

FreeBSD-2.2.1. ports コレクションにはふさわしくありません.

RELENG_2_2_0_RELEASE

FreeBSD-2.2.0. ports コレクションにはふさわしくありません.

RELENG_2_1_7_RELEASE

FreeBSD-2.1.7. ports コレクションにはふさわしくありません.

RELENG_2_1_6_1_RELEASE

FreeBSD-2.1.6.1. ports コレクションにはふさわしくありません.

RELENG_2_1_6_RELEASE

FreeBSD-2.1.6. ports コレクションにはふさわしくありません.

RELENG_2_1_5_RELEASE

FreeBSD-2.1.5. ports コレクションにはふさわしくありません.

RELENG_2_1_0_RELEASE

FreeBSD-2.1.0. ports コレクションにはふさわしくありません.

ブランチタグを指定したときには, 普通はその開発の流れにおける 最も新しいバージョンのファイルを受け取ることができます. もし以前のバージョンのものが欲しいときには, 日付を -D date オプションを使って指定すればよいです.

例

本当はなにかする前には cvs(1) のマニュアルページの全体を ちゃんと読んでからのほうがいいのですが, Anonymous CVS の使い方の本質的なところを簡単に例を挙げて説明します.

Example 18-1. -current (ls(1)) をちょっと確認してから消してみます.

         % setenv CVSROOT
          anoncvs@anoncvs.freebsd.org:/cvs
          % cvs co ls
          % cvs release -d
          ls

Example 18-2. ls(1) のバージョンを 2.2-stable ブランチから調べてみます.

         % setenv CVSROOT
          anoncvs@anoncvs.freebsd.org:/cvs
          % cvs co -rRELENG_2_2
          ls % cvs release -d
          ls

Example 18-3. FreeBSD 2.2.2 と FreeBSD 2.2.6 とで ls(1) の変更点のリストを (unidiff で) 作ってみます.

         % setenv CVSROOT
          anoncvs@anoncvs.freebsd.org:/cvs
          % cvs rdiff -u
          -rRELENG_2_2_2_RELEASE -rRELENG_2_2_6_RELEASE
          ls

Example 18-4. 他のどんなモジュールの名前が 使われているか検索してみます.

         % setenv CVSROOT
          anoncvs@anoncvs.freebsd.org:/cvs
          % cvs co modules
          % more
          modules/modules % cvs
          release -d modules

他の資料

次の資料は CVS を学ぶのに役に立つでしょう.

CTM

原作: Poul-Henning Kamp . 更新: 19-October-1997.

訳: 花井浩之 13 September 1997.

CTM はリモートのディレクトリツリーを中央のツリーに同期させるための 手段です. これはFreeBSDのソースツリーの配布を行なうために開発されまし たが, 時が経つにつれて別の目的にも有用であることがわかるかも しれません. デルタを作り出す処理に関するドキュメントは現在ほとんど ありません. 従って, もしあなたがCTM を他のことに使いたいなら Poul-Henning Kamp にさらなる情報を問い合わせてください.

なぜCTMを使うの?

CTM を使うことにより FreeBSD ソースツリーのローカルコピー を手にいれることができます. ソースツリーが使えることの魅力は数多くあります. 完全な cvs ツリーを追いかけるにしても, ひとつのブランチを追いかける にしても CTM は必要な情報を与えてくれます. もしあなたがFreeBSDのアクティブな開発者であるにもかかわらず お粗末なTCP/IP接続しか持っていなかったり, またはTCP/IP接続が 行なえないとしたら, あるいは単に変更が自動的に送られてきて ほしいというのであれば CTM はそんなあなたのために 作られたのです. アクティブなブランチでは 1 日に最大三つまでのデルタを受け取る必 要があります. これが自動的に e-mail で送られてくるという方法を ぜひ検討してみてください. デルタのサイズは常にできるだけ小さく保たれています. 大抵の場合5KBよりも小さく, たまに(10回に1回程度)10-50KBになり, ときおり100KBかもっと大きくなる でしょう.

開発ソースから直接に得られたものを使うことについては, あらかじめ パッケージにされたリリースとは違い, いろいろと注意することが あります. これは特に ``current'' のソースを選んでいるときは 重要です. 最新の FreeBSD を追いかけるを読むことを お勧めします.

CTMを使うには何が必要?

二つのものが必要でしょう: CTM プログラムとそれに与える (``current'' レベルを得るための)最初のデルタです.

CTM プログラムはバージョン2.0のリリース以来FreeBSDの一部にな りました. もしソースのコピーを持っているなら /usr/src/usr.sbin/CTMにあります.

もしFreeBSDの2.0以前のバージョンなら, 最新のCTMのソースを直接

ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm

から入手できます. CTM に与える ``デルタ'' は二つの方法, FTPまたはe-mail, で得ること ができます. もしインターネットにFTPアクセスできるなら, 次のFTPサイト:

ftp://ftp.FreeBSD.ORG/pub/FreeBSD/CTM

または, その ミラーサイト が CTM へのアクセスをサポートします. 適切なディレクトリに FTP して README ファイルを入手し, そこから スタートしてください.

e-mail によってデルタを得たいという場合は:

CTM 配布メーリングリストのいずれかに参加するために へ subscribe のメールを送ってください. ``ctm-cvs-cur'' は完全な cvs ツリー をサポートします. ``ctm-src-cur'' は開発先端ブランチをサポートします ``ctm-src-2_2'' は 2.2 リリースのブランチのサポートです. (もしmajordomoを使って参加する方法を知らない のであれば, 最初にhelp という語を含むメッセージを送ってください. --- 使い方の説明が送られてくるでしょう.)

メールで CTM による更新ファイルを受け取り始めると, 中身を取り出して使用 するために ctm_rmail プログラムを使うかもしれません. それを完全 に自動で行ないたいなら, /etc/aliases から ctm_rmailプロ グラムを直接使うこともできます. さらに詳しいことはctm_rmail manページを御覧ください.

Note: CTM デルタを得るためにどの方法を使うのであっても, メーリングリストに参加するべきです. このメーリングリストは将来的には CTMシステムの操作に関する アナウンスがポストされる唯一の場になるでしょう. メーリングリストに加わるためにはsubscribe ctm-announce と書いた一行だけのメールを へ送ってください.

はじめてCTMを使い始める

CTM デルタを使い始めるためには, これは以降作られる全ての デルタの出発点を手にいれる必要があります. 最初にあなたが何をすでに持っているかをはっきりさせましょう. すべての人は ``空''のディレクトリから始めなければなりません. ツリーをサポートしてるあなたの CTM を稼働するためには 指定した``空'' のデルタを使う必要があります. いくつかの分岐点 では, あなたの都合により CD 内に分配されている``スタータ'' デルタを使用できるようになっています. しかしながら, これは 頻繁に行われることではありません.

適切な出発点が決まれば, その出発点を CTM が 維持するツリーへ変換するための ``スタータ'' 初期デルタを使う必要が あります.

移行デルタは番号の後ろに X をつけたものがそうです (たとえばsrc-cur.3210XEmpty.gz). X の後ろは最初の開始ポイントに対応します. Empty は 空のディレクトリです. ルールとして Empty からの移行デルタは 100 デルタごとに 作られます. ところで, これらは非常に大きいです! XEmptyのデルタは 数十MBの gzip で圧縮されたデータというのが普通です.

一度スタートするためのベースデルタを得ると, それに続く多数の 全てのデルタも必要になるでしょう.

CTMを日常で使う

デルタを適用するためには, 単に

# cd /where/ever/you/want/the/stuff
# ctm -v -v /where/you/store/your/deltas/src-xxx.*

とします.

CTM はどれがgzipされているか理解します. 従って最初に gunzipしておく必要はありません. ディスクの節約にもなります.

全体の処理に関して確信するまでは CTM は(ソース)ツリーに対して 何もしません. また, デルタを確かめるためには -c フラグを使うことができます. このフラグがあると CTM はツリーに対して実際には何も行ないません. 単にデルタの完全性を確認し, 現在のツリーに問題なく使用できるかを確認 するだけです.

CTM には他にもオプションがあります. 詳細に関しては マニュアルページを参照するかソースを見てください.

もし誰かが ``ユーザ インターフェース'' の部分に関して助けてくれるなら 私はとても嬉しいです. なぜならどういうオプションが何を, どのよう に, いつ行なうようにするべきか決めかねているからです.

以上でやることは本当に全部です. 新しいデルタを入手した時には, ソースを最新のものにするためにそれを CTMに通すだけです.

もしデルタを再ダウンロードするのが 骨の折れる作業であれば, デルタを 消さないでおいてください. なにかおかしなことが起こった場合には置いておけば良かった と思うかもしれません. もしフロッピーディスクしか持っていない状況 であってもコピーを取るのに fdwriteを使うことを考えてください.

ローカルの変更を保存する

開発者としてはソースツリー中のファイルを 使って実験したり変更したく なるものです. CTM はローカルの変更を制限つきでサポートします: ファイル foo の存在をチェックする前に, foo.ctm を参照しにいきます. このファイルが存在する場合, CTM は foo の代りにこれを処理します.

この動作はローカルの変更を保持する簡単な手段を 提供します: 単に変更したいファイルを拡張子 .ctm 付きのファイル名で コピーするだけです. あとは自由にコードをハックでき, .ctm ファイルの方は CTM が最新状態に保ってくれます.

CTM のその他の面白いオプション

更新で変更されるファイルを正確に知る

CTM のソースリポジトリに対する変更のリストを -l オプションを使って決定することができます.

これは, 変更のログを保存したい, 変更されたファイルをなんらかの方法で 前・後処理したい, または単にこだわりたい :-) 場合には, 役に立つでしょう.

更新前にバックアップを取る

CTM の更新によって変更されるファイルすべてのバックアップを 取りたくなることがあります.

-B backup-file オプションを指定すると CTM は デルタで変更されるファイルすべてを backup-file としてバックアップするようになります.

更新で変更されるファイルを制限する

CTM の更新の範囲を制限したり一連のデルタのから ほんの数ファイルを 抽出したくなることがあります.

-e と -x オプションを用い正規表現を 指定することで, CTM が処理するファイルのリストを制御することが できます.

例えば, lib/libc/Makefile の最新のコピーを保存してある CTM デルタのコレクションから抽出するには, 以下のコマンドを実行します.

# cd /where/ever/you/want/to/extract/it/
# ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*

CTM デルタで指定されたファイルごとに, -e そして -x オプションがコマンドラインで指定された順序で 適用されます. すべての-e そして -x オプションが適用された後に更新対象と選択された場合に限り, CTM はそのファイルを処理します.

CTMの将来計画

重要なもの

  • なんらかの CTM システムへの認証機構を用い, 不正な CTM の更新の 検出を可能とする.

  • CTM へのオプションを整理する. さもないと混乱し, 直観に反したもの になります.

残念なことに私は非常に忙しいです. 従ってこれを行なうどんな手助け でも歓迎します. その際, 自分が何をやりたいかを私に 言うのを忘れずに.

その他

``DESに染まった'' (例えば, 国外への持ち出しが規制された)ソースは まったく含まれません. 手に入るのは``国際''バージョンだけです. もし興味のある人が多いようであれば, 我々はsec-curシーケンスも セットアップするつもりです. ports コレクションに対するデルタのシーケンスもあります. しかし, まだあまり興味は持たれていないようです. もしこれに対するメーリング リストが欲しい時も私に言ってください. 我々はセットアップすることを 考えます.

ありがとう!

Bruce Evans

辛辣なペンと価値のないコメントに対して.

S�ren Schmidt

よく辛抱してくれました.

Stephen McKay

ctm_[rs]mailを書いてくれました. とても感謝して います.

Jordan K. Hubbard

彼が頑固として譲らなかったため, 私もこの CTM をもっと良いものに しないわけにはいきませんでした. 彼の頑固さに感謝します.

ユーザの人みんな

気に入ってくれることを願っています...

CVSup

原作: John Polstra .

訳: 岩崎 満 . 27 February 1997.

CVSup の紹介

CVSup は, リモートのサーバホストにあるマスタ CVS リポジトリから ソースツリーを配布し更新するための ソフトウェアパッケージです. FreeBSD のソースは, カリフォルニアにある中心的な開発マシンの CVS リポジトリの 中でメンテナンスしています. CVSup を使用することで, FreeBSD ユーザは 簡単に自分のソースツリーを最新の状態に しておくことができます.

CVSup は pull モデルとよばれる更新のモデルを採用しています. pull モデルでは, 各クライアントが更新したい場合に更新したい時点で, サーバに更新の問い合わせをおこないます. サーバはクライアントからの 更新の要求を受け身の状態で待ちます. したがって, すべての更新は クライアント主導でおこなわれます. サーバは頼まれもしない更新情報を 送るようなことはしません. ユーザは CVSup クライアントを手動で実行して 更新をおこなうか, cron ジョブを設定して定期的に自動実行する必要があります.

用語 CVSup のように大文字で表記しているものは, ソフトウェアパッケージ 全体を指します. 主な構成物は, 各ユーザマシンで実行するクライアントである cvsup, FreeBSD の各ミラーサイトで実行するサーバ cvsupd です.

FreeBSD の文書やメーリングリストを読んだ際に, sup についての言及を 見かけたかもしれません. sup は CVSup の前に存在していたもので, 同様の 目的で使われていました. CVSup は sup と同じように使用されており, 実際, sup と互換性のあるコンフィグレーションファイルを使用します. CVSup の方がより高速で柔軟性もあるので, もはや sup は FreeBSD プロジェクトでは使用されていません.

CVSup のインストール

FreeBSD 2.2 以降を使用している場合, CVSup をインストールするもっとも 簡単な方法は, FreeBSD ports コレクション の port または対応する バイナリ package を使うことです. どちらを使うかは, CVSupを自分で作りたいかどうかによります.

FreeBSD-2.1.6 または 2.1.7 を使用している場合は, 残念ながら FreeBSD-2.1.{6,7} には存在しないバージョンの C ライブラリが必要となるため バイナリ package は使用できません. しかし, port は FreeBSD 2.2 とまったく同じように 簡単に使うことができます. 単に tar ファイルを展開し, cvsup ディレクトリへ cd して make install とタイプするだけです.

CVSup は Modula-3 で書かれているため, package と port 両方とも Modula-3 ランタイムライブラリが インストールされていることが必要です. これらは port の lang/modula-3-lib および package の lang/modula-3-lib-3.6 にあります. これらのライブラリの port や package に対して cvsup と同じ管理方法を取っていれば, CVSup の port や package をインストールする際に, これらのライブラリも自動的に コンパイルそして/またはインストールされます.

Modula-3 ライブラリはかなり大きく, これらの転送やコンパイルはすぐに 終わるものではありません. この理由から, 三つめの選択肢が提供されています. 以下のアメリカ合衆国にある配布サイトのどちらからでも, FreeBSD 用の スタティックリンクされた CVSup 実行形式が入手可能です:

また, 世界中にあるたくさんの FreeBSD FTP ミラーサイト からも入手可能です. :

ほとんどのユーザはクライアントのみが必要になるでしょう. これらの 実行形式は完全に自己完結しており, FreeBSD-2.1.0 から FreeBSD-current までの, どのバージョンでも動作します.

まとめると, CVSup をインストールするための選択肢は以下の通りです:

  • FreeBSD-2.2以降: スタティックバイナリ, port, package

  • FreeBSD-2.1.6, 2.1.7: スタティックバイナリ, port

  • FreeBSD-2.1.5 以前: スタティックバイナリ

CVSup のコンフィグレーション

CVSup の動作は, supfile と呼ばれるコンフィグレーションファイルで 制御します. FreeBSD-2.2 からは, supfile のサンプルがディレクトリ /usr/share/examples/cvsup の下にあります. 2.2 以前のシステムを 使用している場合は, これらの サンプルを ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/ から入手することができます.

supfile には以下の cvsup に関する質問への答えを記述します:

次のセクションで, これらの質問に順番に答えながら典型的な supfile を組み立てていきます. 最初に supfile の全体構造を説明します.

supfile はテキストファイルです. コメントは # から行末までです. 空行とコメントだけの行は無視します.

残りの各行には, ユーザが受け取りたいファイル群について記述します. 行の始めは, サーバ側で定義した論理的なファイルのグループである ``コレクション''の名称です. コレクションの名称を指定して, 欲しいファイル群を サーバに伝えます. コレクション名の後には, ホワイトスペースで区切られた 0個以上のフィールドが続きます. これらのフィールドが上記の質問に対する 答えになります. フィールドには 2種類あります: flag フィールドと value フィールドです. flag フィールドは delete や compress のような 単独のキーワードから成ります. また, value フィールドもキーワードで 始まりますが, キーワードの後にはホワイトスペースは入らず, = と 二つめの単語が続きます. 例えば, release=cvs は value フィールドです.

通常, supfile には受け取りたいコレクションを一つ以上指定します. supfile を組み立てる一つの方法として, コレクション毎にすべての関係の あるフィールドを明示的に指定する方法があります. しかし, これでは supfile のすべてのコレクションに対して ほとんどのフィールドが同じになるため, 行が非常に長くなってしまい不便になります. これらの問題を避けるため, CVSup ではデフォルトを指定することのできる メカニズムが提供されています. 特殊な擬似コレクション名 *default で始まる行は, supfile 中の後続の コレクションに対して使用する flag フィールドと value フィールドの デフォルトを設定するために利用できます. 個々のコレクションで固有の値を 指定すると, デフォルト値を無効にできます. また *default 行を追加すると, supfile の途中からデフォルト値の変更や追加が可能になります.

これまでの予備知識を基に, FreeBSD-current のメインのソースツリーを受け取って更新するための supfile を 組み立ててみましょう.

  • どのファイルを受け取りたいのか?

    CVSup を通して入手できるファイルは ``コレクション'' と呼ばれる名前の付けられたグループにまとめられています. 利用可能なコレクションについては ここ で説明しています. ここでは, FreeBSD システムのメインのソースツリー全体 を受け取るための設定例を紹介します. 輸出規制されている暗号化サポートの コード以外のすべてを含む src-all という 単一の大きなコレクションがあります. この例では私たちがアメリカ合衆国か カナダにいるものと仮定します. その場合, cvs-crypto という一つの付化的な コレクションで暗号化コードを入手することができます. supfile を組み立てる最初のステップとして, これらのコレクションを一行に一つづつ 記述します:

    src-all
    cvs-crypto
    
  • どのバージョンのものが欲しいのか?

    CVSup を使用すると, かつて存在していたことのある, 事実上どのバージョンの ソースでも受け取ることができます. これは cvsupd サーバがすべてのバージョンを含む CVS リポジトリに基づいて動作することにより, 実現されています. tag= および date= の value フィールドを使用して, 欲しいバージョンの 一つを指定します.

    Warning: tag= のフィールドの指定は正確に行うように十分注意 してください. いくつかのタグは特定のコレクションに 対してのみ有効です. タグの綴りが違っていたり不適切なタグを指定すると, CVSupはユーザが消し たくないファイルまで削除してしまいます. 特に ports-* のコレクション に対しては tag=. だけ を指定するようにしてください.

    tag= フィールドはリポジトリ中のシンボリックタグを指定します. tag には revision tag と branch tag の二種類があります. revision tag は特定のリビジョンを指します. これは, 毎日同じ状態に保つことになります. 一方 branch tag は, ある時点での開発分流の最新のリビジョンを指します. branch tag は特定のリビジョンを指定している訳ではないので, 今日と明日では 異なるリビジョンを参照することになるかもしれません.

    以下はユーザが興味を持っていると思われる branch tag です:

    tag=.

    メインの開発分流であり, FreeBSD-current として知られています.

    Note: 注意: . は句読点ではありません. tag の名称です. このタグの指定は総ての コレクションに対して有効です.

    tag=RELENG_3

    FreeBSD-3.x 用の開発分流であり, FreeBSD-stable として知られています. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2

    FreeBSD-2.2.x 用の開発分流であり, 2.2-stable として知られています. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_0

    FreeBSD-2.1.x 用の開発分流です. この分流はほとんど利用されていません. このタグの指定は ports-* のコレクションに対しては無効です.

    以下はユーザが興味を持っていると思われる revision tag です:

    tag=RELENG_3_0_0_RELEASE

    FreeBSD-3.0. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_8_RELEASE

    FreeBSD-2.2.8. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_7_RELEASE

    FreeBSD-2.2.7. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_6_RELEASE

    FreeBSD-2.2.6. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_5_RELEASE

    FreeBSD-2.2.5. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_2_RELEASE

    FreeBSD-2.2.2. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_1_RELEASE

    FreeBSD-2.2.1. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_2_0_RELEASE

    FreeBSD-2.2.0. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_7_RELEASE

    FreeBSD-2.1.7. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_6_1_RELEASE

    FreeBSD-2.1.6.1. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_6_RELEASE

    FreeBSD-2.1.6. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_5_RELEASE

    FreeBSD-2.1.5. このタグの指定は ports-* のコレクションに対しては無効です.

    tag=RELENG_2_1_0_RELEASE

    FreeBSD-2.1.0. このタグの指定は ports-* のコレクションに対しては無効です.

    Warning: tag 名を示した通りにタイプされているか十分注意してく ださい. CVSup は tag 名が正しいかどうかを見分けることはできません. tag が間違っていた場合, たまたまファイルがまったく存在しない正しい tag が 指定されたものとしてCVSup は動作します. その場合は, 現在あるソースが削 除されるでしょう.

    branch tag を指定した際には, 通常はその開発分流の最新バージョンの ファイルを受け取ります. いくらか前のバージョンを受け取りたい場合は, date= の value フィールドを使って日付を指定することで, これを実現することが できます. cvsup(1) のマニュアルページで, その方法を説明しています.

    例として, FreeBSD-current を受け取りたいとします. 次の行を supfile の始めに追加します:

    *default tag=.
    

    tag= フィールドも date= フィールドも指定しなかった場合に 動き出す重要な特殊なケースがあります. そのケースでは, 特定のバージョンの ファイルを受け取るのではなく, サーバの CVS リポジトリから実際の RCS ファイルを直接受け取ります. 一般的に開発者はこの処理のモードが 好きなようです. 彼らのシステム上にリポジトリそのものの コピーを維持することで, リビジョン履歴を閲覧し過去のバージョンの ファイルを検査できるようになります. しかし, これには大きなディスクスペースが必要になります.

  • どこから入手したいのか?

    更新情報をどこから入手するかを cvsup に伝えるために host= フィールドを使用します.CVSup ミラーサイト のどこからでも入手できますが, ネット上での最寄りのサイトを選ぶべきでしょう. この例では, 仮想上の FreeBSD 配布サイト cvsup666.FreeBSD.org を使用します:

    *default host=cvsup666.FreeBSD.org
    

    CVSup を実行する前にホスト名を 実在のものに変更する必要があります. どのように cvsup を実行しても, この設定は -h hostname を 使用してコマンドラインで変更することができます.

  • 自分のマシンのどこに置きたいのか?

    prefix= フィールドは, cvsup に受け取ったファイルをどこに置くかを 伝えます. この例では, ソースファイルを直接メインのソースツリー /usr/src に置きます. src ディレクトリはすでにファイルを受け取るために 選択したコレクションで暗黙に指定しているので, これは正しい仕様となります:

    *default prefix=/usr
    
  • どこに status ファイルを置きたいのか?

    cvsup クライアントは ``base'' ディレクトリと呼ばれる場所に, ある status ファイルを維持しています. すでに受け取った更新情報を追従し続け ることで, これらのファイルは CVSup がより効果的に動作することを支援し ます. 標準の base ディレクトリ /usr/local/etc/cvsup を使用します:

    *default base=/usr/local/etc/cvsup
    

    supfile に指定がない場合は, この設定をデフォルトで使用しますので, 実際には上の行は必要ありません.

    base ディレクトリが存在しない場合は作成しておきましょう. base ディレクトリが存在しない場合, cvsup クライアントは実行を拒否します.

  • その他もろもろの supfile の設定:

    通常 supfile に入れておくべき行がもう一つあります:

    *default release=cvs delete use-rel-suffix compress
    

    release=cvs は, サーバがメインの FreeBSD CVS リポジトリから その情報を取得するように指示します. ほとんどの場合はこのようにしておきますが, ここでの説明の範疇をこえるような 状況では他の指定をすることも可能です.

    delete は CVSup にファイルを削除することを許可します. CVSup が ソースツリーを完全に最新の状態に 保てるようにするためには, これは常に 指定しておくべきでしょう. CVSup は, これらの責任範囲のファイルだけを 慎重に削除します. たまたま存在する他の余分なファイルについては, まったく手をつけずに残しておきます.

    use-rel-suffix は ... 神秘的なものです. これについて本当に 知りたい人は, cvsup(1) のマニュアルページをご覧ください. でなければ, 何も考えずに指定してみてください.

    compress は通信チャネルで gzip 形式の圧縮の使用を有効にします. ご使用のネットワーク接続が T1 speed 以上である場合, この圧縮を 使用しない方がよいかもしれません. そうでない場合は十分に役に立ちます.

  • supfile の例のまとめ:

    以下は supfile の例の全体です:

    *default tag=.
    *default host=cvsup666.FreeBSD.org
    *default prefix=/usr
    *default base=/usr/local/etc/cvsup
    *default release=cvs delete use-rel-suffix compress
    
    src-all
    cvs-crypto
    

CVSup の実行

さて, 更新の準備ができました. これを実行するコマンドラインは 実に簡単です:

# cvsup supfile

もちろん, ここでの supfile は作成したばかりの supfile のファイル名です. X11 環境で実行するものと仮定して, cvsup は 通常の操作に必要なボタンを持つ GUI ウィンドウを表示します. ``go'' ボタンを押して, 実行を監視してください.

この例では実際の /usr/src ツリーを更新しているので, cvsup にファイルを更新するのに必要なパーミッションを与えるために, ユーザ root で実行する必要があります. コンフィグレーションファイルを作ったばかりで, しかも以前にこのプログラムを実行したことがないので, 神経質になるのは 無理もない話だと思います. 大切なファイルに触らずに試しに実行する簡単な 方法があります. どこか適当な場所に空のディレクトリを作成して, コマンドラインの引数で指定するだけです:

# mkdir /var/tmp/dest
# cvsup supfile /var/tmp/dest

指定したディレクトリは, すべての更新されるファイルの 更新先ディレクトリとして使用します. CVSup は /usr/src の下の ファイルを検査しますが, 変更や削除はまったくおこないません. かわりに /var/tmp/dest/usr/src に更新されたすべてのファイルが 置かれるようになります. この方法で実行した場合は, CVSup は base ディレクトリの status ファイルを更新せずにそのままにします. これらのファイルの新しいバージョンは指定されたディレクトリ に書き込まれます. /usr/src の読み取り許可がある限り, このような 試し実行のためにユーザ root になる必要はありません.

X11 を利用していないとか単に GUI が気に入らない場合は, cvsup 起動時にコマンドラインに 二つほどオプションを追加する必要があります:

# cvsup -g -L 2 supfile

-g オプションは cvsup に GUI を使用しないように伝えます. X11 を利用していない場合には自動的に指定されますが, そうでない場合は 明示的に指定します.

-L 2 オプションは cvsup にファイル更新中の詳細情報をプリントアウト するように伝えます. 冗長性には -L 0 から -L 2 までの三つのレベル があります. デフォルトは 0 であり, エラーメッセージ以外はまったく出力 しません.

たくさんの他のオプション変数があります. それらの簡単な一覧は cvsup -H で表示されます. より詳しい説明はマニュアルページをご覧ください.

動作している更新の方法に満足したら, cron(8) を使って cvsup を定期的に 実行させる準備をすることができます. cron から起動する際には, 明示的に cvsup が GUI を使わないようにする必要があります.

CVSup ファイルコレクション

CVSup 経由で入手できるファイルコレクションは 階層的に組織化されています. いくつか大きなコレクションがあり, それらは小さなサブコレクションに 分割されています. 大きなコレクションは, そのサブコレクション毎に 受信することと同じことになります. 下の一覧ではコレクション間の階層関係を 字下げして表現します.

最も一般的に使用するコレクションは src-all, cvs-crypto, そして ports-all です. 他のコレクションは特別な目的を持つ人達だけが 使用しており, ミラーサイトはそれらのすべてを 持っていないかもしれません.

cvs-all release=cvs

メインの FreeBSD CVS リポジトリであり, 輸出規制された暗号化コードは含まれていません.

distrib release=cvs

FreeBSD の配布とミラーに関連するファイルです.

doc-all release=cvs

FreeBSD ハンドブックおよびその他のドキュメントの ソースです.

ports-all release=cvs

FreeBSD の ports コレクションです.

ports-archivers release=cvs

アーカイビングのツール.

ports-astro release=cvs

天文学関連の ports.

ports-audio release=cvs

サウンドサポート.

ports-base release=cvs

/usr/ports のトップにあるその他のファイル.

ports-benchmarks release=cvs

ベンチマークプログラム.

ports-biology release=cvs

植物学関連のプログラム.

ports-cad release=cvs

CAD ツール.

ports-chinese release=cvs

中国語サポート.

ports-comms release=cvs

通信ソフトウェア.

ports-converters release=cvs

文字コードコンバータ.

ports-databases release=cvs

データベース.

ports-deskutils release=cvs

コンピュータが発明される前に 卓上で使われていたものたち.

ports-devel release=cvs

開発ユーティリティ.

ports-editors release=cvs

エディタ.

ports-emulators release=cvs

他の OS のエミュレータ.

ports-games release=cvs

ゲーム.

ports-german release=cvs

ドイツ語サポート.

ports-graphics release=cvs

グラフィックユーティリティ.

ports-japanese release=cvs

日本語サポート.

ports-korean release=cvs

韓国語サポート.

ports-lang release=cvs

プログラミング言語.

ports-mail release=cvs

メールソフトウェア.

ports-math release=cvs

数値計算ソフトウェア.

ports-mbone release=cvs

MBone アプリケーション.

ports-misc release=cvs

色々なユーティリティ.

ports-net release=cvs

ネットワーキングソフトウェア.

ports-news release=cvs

USENET ニュースのソフトウェア.

ports-plan9 release=cvs

Plan9 からの色々なプログラム.

ports-print release=cvs

印刷ソフトウェア.

ports-russian release=cvs

ロシア語サポート.

ports-security release=cvs

セキュリティユーティリティ.

ports-shells release=cvs

コマンドラインシェル.

ports-sysutils release=cvs

システムユーティリティ.

ports-textproc release=cvs

文書処理ユーティリティ (デスクトップパブリッシングは含まない).

ports-vietnamese release=cvs

ベトナム語サポート.

ports-www release=cvs

World Wide Web 関連のソフトウェア.

ports-x11 release=cvs

X window システムをサポートする ports.

ports-x11-clocks release=cvs

X11 上で動作する時計の数々.

ports-x11-fm release=cvs

X11 上で動作するファイラ.

ports-x11-fonts release=cvs

X11 のフォントとフォントユーティリティ.

ports-x11-toolkits release=cvs

X11 のツールキット.

ports-x11-wm release=cvs

X11 のウィンドウマネージャ.

src-all release=cvs

メインの FreeBSD ソース群であり, 輸出規制された暗号化コードは 含まれていません.

src-base release=cvs

/usr/src のトップにあるその他のファイル.

src-bin release=cvs

シングルユーザモードで必要な ユーザユーティリティ (/usr/src/bin).

src-contrib release=cvs

FreeBSD プロジェクト外部からの ユーティリティおよびライブラリ, 比較的無修正 (/usr/src/contrib).

src-etc release=cvs

システムコンフィグレーションファイル (/usr/src/etc).

src-games release=cvs

ゲーム (/usr/src/games).

src-gnu release=cvs

GNU Public License 下にあるユーティリティ (/usr/src/gnu).

src-include release=cvs

ヘッダファイル (/usr/src/include).

src-kerberosIV release=cvs

KerberosIV セキュリティパッケージ (/usr/src/kerberosIV).

src-lib release=cvs

ライブラリ (/usr/src/lib).

src-libexec release=cvs

システムプログラムであり, 通常は他のプログラムから実行される (/usr/src/libexec).

src-release release=cvs

FreeBSD の release を構築するために必要なファイル (/usr/src/release).

src-sbin release=cvs

シングルユーザモード用の システムユーティリティ (/usr/src/sbin).

src-share release=cvs

多様なシステム間で共有可能なファイル (/usr/src/share).

src-sys release=cvs

カーネル (/usr/src/sys).

src-tools release=cvs

FreeBSD の保守用の色々なツール (/usr/src/tools).

src-usrbin release=cvs

ユーザユーティリティ (/usr/src/usr.bin).

src-usrsbin release=cvs

システムユーティリティ (/usr/src/usr.sbin).

www release=cvs

World Wide Web のデータ用のソースです.

cvs-crypto release=cvs

輸出規制された暗号化コードです.

src-crypto release=cvs

輸出規制された FreeBSD プロジェクト外部からのユーティリティおよび ライブラリ, 比較的無修正 (/usr/src/crypto).

src-eBones release=cvs

Kerberos および DES (/usr/src/eBones).

src-secure release=cvs

DES (/usr/src/secure).

distrib release=self

CVSup サーバ自身のコンフィグレーションファイルです. CVSup ミラーサイトが使用します.

gnats release=current

GNATS バグトラッキングデータベースです.

mail-archive release=current

FreeBSD 関連メーリングリストのアーカイブ.

www release=current

インストールされた World Wide Web のデータです. WWW ミラーサイトが使用します.

詳細について

CVSup の FAQ や CVSup に関するその他の情報については The CVSup Home Page をご覧ください.

CVSup のほとんどの FreeBSD 関連の議論は FreeBSD technical discussions mailing list で おこなわれています. ソフトウェアの新しいバージョンは FreeBSD announcements mailing list で アナウンスされます.

質問とバグ報告はプログラムの作者, へ 送ってください.