CTM for OpenBSD

CTM とは ?

CTM は、ソースツリーへの変更を定期的に電子メールで利用できるよう、 Poul-Henning Kamp により設計されたシステムです。 モデム接続のような遅いインターネット接続を利用している場合、これは、 現在のソースツリーや CVS リポジトリを最新のものに保つ良い方法でしょう。

OpenBSD CTM は、OpenBSD の CVS リポジトリのすべてのモジュールを配布すること ができます。また、チェックアウトされたバージョンの配布に使用することもできます。 CTM はツリーへの変更を配布するのに、非常に狭い帯域幅しか使用せず、さらに それを gzip -9 を使用して圧縮しているのです。 CVSup とは対照的に、CTM はプレーンな C 言語で記述 されていますので、OpenBSD がサポートするすべてのプラットフォームで利用可能です。 他のすべての OpenBSD の CVS リポジトリにアクセスする方法がプルシステム なのに対し、CTM はプッシュシステムと呼ばれる実装となっています。

CTM に関するどんな問題、示唆、報告、または質問でも、 CTM 保守担当の Hans Günter Weigand に連絡を 取ってください。 (CTM のサポートについては、他の OpenBSD の人たちには尋ねないようにしてください。 なにしろ、彼らは他のことで手いっぱいなのですから。よろしくお願いします。)

どのように動くのでしょう ?

CTM についての基本的な考え方は、特殊な CVS モジュールやソースツリーのための 特別なメーリングリストを講読するということです。毎日、その間にツリーに 加えられたすべての変更が含まれた電子メールを、あなたは受け取ることになるでしょう。 そのような差分のセットはデルタと呼ばれています。 実際には、CTM サーバは 12 時間ごとに新しいデルタを作成しています。

ベースセットから始めますが、これに対して、後のデルタをパッチとして当てるのです。 CTM を使い始めるためには、最新のベースセットおよびその後に生成されたすべてのデルタを ダウンロードします。一度、それらを処理すれば、メーリングリストから受け取るその後の デルタを処理できるようになります。ベースセットは、回線状況が良くなくてもダウンロードが 容易になるよう、1400kB ずつに分割されています。

ベースセットは 50 個の相対デルタごとに生成されますので、追いかけるために 50 個以上の 相対デルタを落とす必要はありません。

現時点では、2 種類のベースセットがあります。私たちはかなりの間、 tar.gz ファイルを手動で作成していたのですが、 本当の CTM ベースデルタに戻しました。後者は、 md5(1) チェックサムを含み、これは自動生成されていますので、こちらの方が少しだけ安全でしょう。 これら 2 種類のベースセットは、そのファイル名で区別できるはずです。 たとえば、tar.gz ファイルの場合なら、 OpenBSD-cvs.1450.tar.gz となるのに対して、CTM ベースデルタなら OpenBSD-cvs.1500A.gz となります。 詳細な取り扱い説明は以下を参照してください。

CTM はどのくらいの帯域幅を使用するのでしょう ?

以下にリストされたサイトから、FTP でベースデルタおよび最近までの すべての相対デルタを取得します。サイズは以下のとおりです。

CTM はどのように使用するのでしょう ?

注: 次の例は、OpenBSD-cvs を明確にカバーしています。 その他のソースセットも同様の方法で扱われています。

以下は、CTM デルタを取得可能な FTP サーバのリストです。

注: は これらのデルタをミラーしてくれる、世界中のサイトを 大変な関心を持って探しています。

ソースツリーと CVS リポジトリ、どちらを選ぶべきでしょう ?

他の要素の中でも、これに関しては、あなたのディスクスペースに依存します。 CTM はローカルに変更されたファイルをほとんど反映することができないので、 より良い選択となるのは確実に CVS リポジトリ の方でしょう。自分の CVS リポジトリから、ソースツリーの作業用コピーを チェックアウトもできますし、安定版のブランチを追いかけることもできますし、 自分のローカルな変更を自分のソースツリー中でキープすることもできるのです。 CVS は、あなたのローカルな変更をマージできるくらい良くできたものです。 さらに、あなたは、cvs commitcvs tag のようなコマンドを除いた、すべての範囲の CVS コマンドを利用可能でもあるのです。

しかしながら、欠点としては、それが必要とするディスクスペースの量があるでしょう。 チェックアウトされたソースツリーは約 370MB 程度を必要としますが、あなたは 自分自身の CVS リポジトリを持っているとして、そのために 1GB 以上も必要と なり、それに加えて 370MB がチェックアウトしたツリー用に必要となります。 この中には、たとえば、ソースのコンパイルなどの、ビルド中に生成されるファイル のために必要な (アーキテクチャに依存する) 100MB 以上の領域は含まれていないのです。

もし、ソースツリーを得られたなら、ローカルな変更を反映する必要があるでしょう。 これを行うためのひとつの方法としては、union ファイルシステムがあります (mount_union(8) を参照)。しかし、上層および下層の両方が、同じ物理的ファイルシステム上にある 場合、union ファイルシステムは不安定であるとのレポートも出されています。 もし、上層と下層を別々のファイルシステムに配置できるのであれば、特に問題は ないでしょう。これについての例は次のとおりです。

CTM で更新されたツリーが /usr/src-ctm にあり、そして、 自分自身で変更を加え、そこでビルドされる実際のソースツリーが /usr/src にあると仮定します。 /usr/src は初期状態では空のディレクトリであるべきです。 次のコマンドで、union マウントをセットアップできるでしょう。

	mount -t union -o -b /usr/src-ctm /usr/src

/usr/src 中のファイルに加えられた変更は、 src-ctm 中のファイルを隠して、/usr/src 中に 含まれるファイルになるでしょう。もし、src-ctm のツリー下の ファイルに CTM 経由でこのような変更が加えられても、上層のファイルが下層を 隠すかのように、これらの変更が見えるわけではありません

定期的に union をアンマウントして、 ローカルから union ファイルシステムに移ったファイルをサーチすべきでしょう。

	umount /usr/src
	find /usr/src -type f

コマンド ls -W および rm -W も、 /usr/src の中の "whiteouts" という名前のオブジェクトが src-ctm のファイルを隠すでしょうから、役に立つことでしょう。

CVS リポジトリを入手したら、そこからソースツリーをチェックアウトするのに、 cvs checkout コマンドを使用することができます。 毎回、CTM での更新時に、ソースリポジトリを更新するのに、 cvs update コマンドを使用することができます。

初期状態の src リポジトリを得るには、

	cd /usr
	cvs -qd YOUR_CVS_REPOSITORY checkout -P src

として、それぞれの CTM の更新後、以下のコマンドを実行します。

	cd /usr/src
	cvs -q update -Pd

OpenBSD の CTM はどの程度安定しているのでしょう ?

CTM は 5 年以上も OpenBSD で使用されてきており、また、FreeBSD では さらに長い期間使用されてきました。CTM は非常に信頼性があり、安定しています。

CTM を維持するために何が行われているのでしょう ?

数々の (小さな) 変更と最適化が可能です。 それらの中で、 あなたの御意見・御希望は、にメールしてください !

さらなる情報

もし、CTM についてさらに知りたい場合には、それを始める良い場所として、 FreeBSD ハンドブックがあります。 また、すべての CTM ユーティリティのためのマニュアルページもあります。

要約:

CTM に関する重要な注意事項とアナウンスは、announce@OpenBSD.org メーリングリストに投稿されるでしょう。

謝辞

OpenBSD プロジェクトのための OpenBSD/CTM のロゴは、 Phillip F Knaack によってデザインされました。


OpenBSD www@openbsd.org
$OpenBSD: ctm.html,v 1.11 2005/08/15 20:46:06 saad Exp $