原作: John Polstra
<jdp@FreeBSD.ORG>
.
訳: 岩崎 満
<iwasaki@jp.FreeBSD.org>
.
27 February 1997.
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 プロジェクトでは使用されていません.
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-2.1.0 から FreeBSD-current までの, どのバージョンでも動作します.
まとめると, 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 を 組み立ててみましょう.
sup の場合と同様に, CVSup を通して入手できるファイルは 「コレクション」と呼ばれる名前の付けられたグループにまとめられています. 利用可能なコレクションについては ここ で説明しています. ここでは, FreeBSD システムのメインのソースツリー全体 を受け取るための設定例を紹介します. 輸出規制されている暗号化サポートのコード以外のすべてを含む "src-all" という 単一の大きなコレクションがあります. この例では私たちがアメリカ合衆国か カナダにいるものと仮定します. その場合, "cvs-crypto" という一つの付化的な コレクションで暗号化コードを入手することができます. supfile を組み立てる最初のステップとして, これらのコレクションを一行に一つづつ 記述します:
src-all cvs-crypto
CVSup を使用すると, かつて存在していたことのある, 事実上どのバージョンの ソースでも受け取ることができます. これは cvsupd サーバがすべてのバージョンを含む CVS リポジトリに基づいて動作することにより, 実現されています. "tag=" および "date=" の value フィールドを使用して, 欲しいバージョンの 一つを指定します.
"tag=" フィールドはリポジトリ中のシンボリックタグを指定します. tag には revision tag と branch tag の二種類があります. revision tag は特定のリビジョンを指します. これは, 毎日同じ状態に保つことになります. 一方 branch tag は, ある時点での開発分流の最新のリビジョンを指します. branch tag は特定のリビジョンを指定している訳ではないので, 今日と明日では 異なるリビジョンを参照することになるかもしれません.
以下はユーザが興味を持っていると思われる branch tag です:
メインの開発分流であり, FreeBSD-current として知られています. 注意: "." は句読点ではありません. tag の名称です.
FreeBSD-2.2 の先頭の開発分流です.
FreeBSD-2.1.x 用の開発分流であり, FreeBSD-stable として知られています.
以下はユーザが興味を持っていると思われる revision tag です:
FreeBSD-2.2.1.
FreeBSD-2.2.0.
FreeBSD-2.1.7.
FreeBSD-2.1.6.1.
FreeBSD-2.1.6.
FreeBSD-2.1.5.
FreeBSD-2.1.0.
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 配布サイト "cvsup.FreeBSD.org" を使用します:
*default host=cvsup.FreeBSD.org
どのように cvsup を実行しても, この設定は "-h hostname" を 使用してコマンドラインで変更することができます.
"prefix=" フィールドは, cvsup に受け取ったファイルをどこに置くかを 伝えます. この例では, ソースファイルを直接メインのソースツリー "/usr/src" に置きます. "src" ディレクトリはすでにファイルを受け取るために 選択したコレクションで暗黙に指定しているので, これは正しい仕様となります:
*default prefix=/usr
cvsup クライアントは "base" ディレクトリと呼ばれる場所に, ある status ファイルを維持しています. すでに受け取った更新情報を追従し続け ることで, これらのファイルは CVSup がより効果的に動作することを支援し ます. 標準の base ディレクトリ "/usr/local/etc/cvsup" を使用します:
*default base=/usr/local/etc/cvsup
supfile に指定がない場合は, この設定をデフォルトで使用しますので, 実際には上の行は必要ありません.
base ディレクトリが存在しない場合は作成しておきましょう. base ディレクトリが存在しない場合, cvsup クライアントは実行を拒否します.
通常 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 の例の全体です:
*default tag=. *default host=cvsup.FreeBSD.org *default prefix=/usr *default base=/usr/local/etc/cvsup *default release=cvs delete use-rel-suffix compress src-all cvs-crypto
さて, 更新の準備ができました. これを実行するコマンドラインは 実に簡単です:
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 経由で入手できるファイルコレクションは階層的に組織化されています. いくつか大きなコレクションがあり, それらは小さなサブコレクションに 分割されています. 大きなコレクションは, そのサブコレクション毎に 受信することと同じことになります. 下の一覧ではコレクション間の階層関係を 字下げして表現します.
最も一般的に使用するコレクションは 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-cad release=cvs
CAD ツール.
ports-chinese release=cvs
中国語サポート.
ports-comms release=cvs
通信ソフトウェア.
ports-converters release=cvs
文字コードコンバータ.
ports-databases release=cvs
データベース.
ports-devel release=cvs
開発ユーティリティ.
ports-editors release=cvs
エディタ.
ports-emulators release=cvs
他の OS のエミュレータ.
ports-games 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
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-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-contrib-crypto release=cvs
輸出規制された FreeBSD プロジェクト外部からのユーティリティおよび
ライブラリ, 比較的無修正 (/usr/src/contrib-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 バグトラッキングデータベースです.
src-sys release=lite2
lite2 kernel のマージ用の CVS リポジトリです.
src-sys release=smp
SMP プロジェクト用の CVS リポジトリです.
www release=current
インストールされた World Wide Web のデータです. WWW ミラーサイトが使用します.
CVSup のほとんどの FreeBSD 関連の議論は FreeBSD の技術的な議論のメーリングリスト
<freebsd-hackers@FreeBSD.ORG>
で
おこなわれています. ソフトウェアの新しいバージョンは FreeBSD アナウンスメーリングリスト
<freebsd-announce@FreeBSD.ORG>
で
アナウンスされます.
質問とバグ報告はプログラムの作者, cvsup-bugs@polstra.com へ 送ってください.