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 となります。 詳細な取り扱い説明は以下を参照してください。
以下にリストされたサイトから、FTP でベースデルタおよび最近までの すべての相対デルタを取得します。サイズは以下のとおりです。
CTM 関連のいくつかのメーリングリストがあります。CVS リポジトリの更新の ためのメーリングリスト、ソースツリーのためのメーリングリスト、X11 部分の両方のためのメーリングリストと、そして ports ツリー、さらに CTM のデルタ生成の際のメッセージログのためのメーリングリストです。
以下のコマンドで、適切なメーリングリストを講読できます。
CVS リポジトリ用 (CVSROOT、ports、src および www モジュール、 ただし、X11 と XF4 は含みません):
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.orgX11 モジュールの CVS リポジトリ用:
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.orgXF4 モジュールの CVS リポジトリ用:
echo subscribe OpenBSD-cvs-xf4 | mail majordomo@OpenBSD.orgソースモジュールのチェックアウトされたコピー用:
echo subscribe OpenBSD-src | mail majordomo@OpenBSD.orgX11 モジュールのチェックアウトされたコピー用:
echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.orgports モジュールのチェックアウトされたコピー用:
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.orgCTM のログ用:
echo subscribe ctm-log | mail majordomo@OpenBSD.org
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz cd target ctm -v -v -v .../OpenBSD-cvs.1500A.gz
あるいは、
cat split/OpenBSD-cvs.1450.tar.gz.* > OpenBSD-cvs.1450.tar.gz cd target tar -xzvf .../OpenBSD-cvs.1450.tar.gz
ここで、split とは、ダウンロードしたファイルを置いた ディレクトリのことであり、そして target とは、 ソースセットをアンパックする場所として選択したディレクトリのことです。
もし、完全なツリーが得られたことが確認できれば、これらのベース セットファイルを保存しておく必要はありません。が、もちろん、ベースセット ファイルをバックアップ目的で保存しておいても良いでしょう。いずれにしても、 作業を継続する前に、ベースセットの番号をちゃんと控えておいてください。
cd target ctm -v -v -v deltas/OpenBSD-cvs.*
ここで、target とは、ソースセットのツリーのディレクトリ のことであり、そして deltas とは、デルタの置かれている ディレクトリのことです。
ctm_rmail -p /tmp -d deltas -b target folder
ここで、folder とは、デルタのメールを含む メールフォルダのことです。このコマンドが、CTM デルタをデコードし、 それを deltas ディレクトリに保存するのです。デルタは、 OpenBSD-cvs.XXXX.gz という形態の ファイルであり、ここで XXXX とは、デルタの番号のことです。 そして、そのデルタを、ベースセットをアンパックした target の場所にあるディレクトリツリーに適用します。
メーリングリストからデルタを受け取るごとに、この最後のステップを 繰り返します。お好み次第で、procmail、maildrop、あるいは他の同様の ports コレクション のプログラムを使用して、 このステップを自動化することも可能です。
以下は、CTM デルタを取得可能な FTP サーバのリストです。
ftp://togetic.kd85.com:/pub/OpenBSD-ctm/
このサーバは、CTM デルタ生成プロセスによって、自動的にアップデートされています。 ベースセットは、 base ディレクトリの下のひとつの大きなファイルとして存在 しており、分割ファイルは base-split ディレクトリの下にあります。
このサーバは、メーリングリストからの CTM デルタによってアップデートされています。 このサーバは、base サブディレクトリの下に、 ftp://togetic.kd85.com:/pub/OpenBSD-ctm/ をミラーした、分割ベースデルタを付加的に持っています。
は、
と同じサーバであり、そして、 ftp://ctm.se.OpenBSD.org のミラーとなっています。
注: 私は これらのデルタをミラーしてくれる、世界中のサイトを 大変な関心を持って探しています。
他の要素の中でも、これに関しては、あなたのディスクスペースに依存します。 CTM はローカルに変更されたファイルをほとんど反映することができないので、 より良い選択となるのは確実に CVS リポジトリ の方でしょう。自分の CVS リポジトリから、ソースツリーの作業用コピーを チェックアウトもできますし、安定版のブランチを追いかけることもできますし、 自分のローカルな変更を自分のソースツリー中でキープすることもできるのです。 CVS は、あなたのローカルな変更をマージできるくらい良くできたものです。 さらに、あなたは、cvs commit や cvs 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
CTM に関する重要な注意事項とアナウンスは、announce@OpenBSD.org メーリングリストに投稿されるでしょう。
OpenBSD プロジェクトのための OpenBSD/CTM のロゴは、 Phillip F Knaack によってデザインされました。