スポンサーリンク

CTM_MAIL(1) FreeBSD 一般コマンドマニュアル CTM_MAIL(1)

名称

ctm_smail, ctm_dequeue, ctm_rmail − メールを介しての ctm(1) デルタの送受 信

書式

ctm_smail [−l log] [−m maxmsgsize] [−c maxctmsize] [−q queue-dir] ctm-delta mail-alias

ctm_dequeue [−l log] [−n numchunks] queue-dir

ctm_rmail [−Dfuv] [−l log] [−p piecedir] [−d deltadir] [−b basedir] [file ...]

解説

ctm_smail, ctm_dequeue, ctm_rmailctm(1) コマンドと組み合わせて、ソー スツリーへの変更を電子メールで配布するために使われます。 ctm_smail ユー ティリティには圧縮した ctm(1) のデルタとそれを送るメーリングリストを与え ます。するとデルタを送信できる大きさに切り分けて、メールメッセージとして エンコードしたものをメーリングリストに送ります (メールの負荷を分散させる ためにキューに入れるように選択できます)。各受信者は ctm_rmail を使い (手 動または自動で) デルタのデコードと再組み立てを行い、それをソースツリーに 適用するために ctm を呼び出すようにも指定できます。現在、いくつかのソース ツリーが、いくつかのサイトによって配布されています。その中には freefall.FreeBSD.org が配布している FreeBSD-current のソースと CVS のツ リーもあります。

ctm_smail のコマンドラインの引数には以下があります:

       −l log

stderr に出力する代わりに、 (コマンドラインのエラー以外の) エラー 診断と情報メッセージにタイムスタンプを付けた物がファイル log に書 き込まれます。

−m maxmsgsize
ctm_smail
が送信できるメールメッセージの最大サイズを制限します。 メールヘッダとその他の細かい物をこの制限に入れていないためおよそ の値となります。指定されないとデフォルトは、メールの限界と噂され る 64k に対してヘッダのための 1535 バイトを残した 64000 バイトで す。

−c maxctmsize
送信されるデルタの最大サイズを制限します。この制限より大きいデル タは謝罪メールをメーリングリストに送り出します。これは大幅な変更 でユーザのメールボックスを圧迫してしまうのを避けるためです。これ はエンコードする前のサイズなので注意して下さい。エンコードされる とメールヘッダを付ける前でサイズは 4/3 倍になります。指定されない と無制限になります。

−q queue-dir
デルタのかけらをメールする代わりに、後で ctm_dequeue を使ってメー ルされるように指定されたディレクトリに格納します。この機能によっ て、巨大なデルタを数時間または数日にも渡って分散させ、ネットワー クのバンド幅が狭かったりメールのスプール領域が小さい受信者へのイ ンパクトを押えることが可能です。

ctm-delta は送信されるデルタで、 mail-alias はデルタを送信するメーリング リストです。メールメッセージは sendmail(8) を使って送信されます。

ctm_dequeue のコマンドラインの引数には以下があります:

−l log
stderr
に出力する代わりに、 (コマンドラインのエラー以外の) エラー 診断と情報メッセージにタイムスタンプを付けた物がファイル log に書 き込まれます。

−n numchunks
1 回の ctm_dequeue の実行で送信するメールメッセージの数を制限しま す。デフォルトでは、 ctm_dequeue は 1 回の実行で 1 つのメールメッ セージを送信します。

queuedirctm_smail が格納したメールメッセージのあるディレクトリです。 numchunks 個までのメールメッセージが実行ごとに送信されます。受信者のメー リングリストは、溜められたファイルにすでにエンコードされています。

ctm_smail がキューにエントリを追加している最中や、複数の ctm_smail を並行 に実行している最中でも ctm_dequeue を安全に実行できますが、配布される各ツ リーごとに独立したキューのディレクトリを使うべきです。これはエントリがア ルファベット順に処理されるので、デルタの作成時刻ではなく、デルタ名に従っ て 1 つのツリーが他の物より前に処理されて不公平になるからです。

ctm_rmail のコマンドラインの引数には以下があります:

−l log
stderr
に出力する代わりに、 (コマンドラインのエラー以外の) エラー 診断と情報メッセージにタイムスタンプを付けた物がファイル log に書 き込まれます。

−p piecedir
デルタのかけらをこのディレクトリに集めます。それぞれのかけらは 1 つのメールメッセージに対応します。かけらは完全なデルタが出来上が ると削除されます。もし このフラグが指定されないと、入力ファイルは 読まれませんが、 −b フラグが指定されていれば完成しているデルタは ctm を使って適用されるかもしれません。

−d deltadir
このディレクトリ内の完成したデルタを集めます。デルタは、すべての かけらが揃っている時に 1 つ以上のかけらから組み立てられます。

−b basedir
完成しているデルタを このソースツリーに適用します。このフラグが指 定されていない場合、デルタは格納されますが適用はされません。ユー ザは手動、または ctm_rmail−p フラグ無しで使ってデルタを適用で きます。もしデルタが basedir の .ctm_status ファイルとマッチしな い場合 (もしくは .ctm_status が存在しない場合) には、デルタは適用 されません。

−D
ctm による適用が成功した後でデルタを削除します。 ctm はデルタのフ ルセットからファイルの小グループを回復する機能を持つので、このフ ラグを避けて (そしてすべてのデルタを取って) おくのが良いでしょ う。

−f
fork して ctm でのデルタの適用をバックグラウンドで実行します。こ れは sendmail から ctm_rmail を自動的に呼び出す場合に有効です。な ぜなら ctm は終了までに、とても長い時間を要し、それによって他の人 のメールを遅らせる原因になり、理論的にはリモート側の sendmail の タイムアウトによるメールの不要な再送信や、 MH の slocal のような メールフィルタによる ctm_rmail の強制終了を引き起こす可能性がある からです。膨大な数のバックグラウンドの ctm プロセスでマシンに負荷 がかかる心配はありません。同時に 2 つ以上の ctm が起動されないよ うにロックが行われているからです。

−u
完成したデルタを適用する時に −u フラグを ctm コマンドに渡します。 これによって作成、変更されたファイルの変更時刻が CTM デルタの作成 時刻にセットされます。

−v
完成したデルタを適用する時に −v フラグを ctm コマンドに渡します。 これによってより多くの情報出力が得られます。すべての ctm からの出 力は ctm_rmail のログファイルに記録されます。

引数のファイル (もし無ければ 標準入力 ) がデルタのかけらとしてスキャンさ れます。 1 つのファイルから複数のデルタのかけらを読む事ができるので、メー ルドロップ全体を 1 回のコマンドでスキャンして処理できます。

ctm_rmail を並行に (異なる入力ファイルで) 複数回起動しても安全です。 sendmail がメールを非同期に配送した時にこのようなことが起こり得ます。これ は処理を順序通りに保つためにロックが行われているからです。

ファイルフォーマット

以下は実際の (とても小さい) デルタのかけらの重要部分です:

From: owner-src-cur
To: src-cur
Subject: ctm-mail src-cur.0003.gz 1/4

CTM_MAIL BEGIN src-cur.0003.gz 1 4
H4sIAAAAAAACA3VU72/bNhD9bP0VByQoEiyRSZEUSQP9kKTeYCR2gDTdsGFAwB/HRogtG5K8NCj6
v4+UZSdtUQh6Rz0eee/xaF/dzx8up3/MFlDkBNrGnbttAwyo1pxoRgoiBNX/QJ5d3c9/X8DcPGGo
lggkPiXngE4W1gUjKPJCYyk5MZRbIqmNW/ASglIFcdwIzTUxaAqhnCPcBqloKEkJVNDMF0Azk+Bo
dDzzk0Ods/+A5gXv9YyJHjMCtJwQNeESNma7hOmXDRxn
CTM_MAIL END 61065

メッセージのサブジェクトは常に ‘‘ctm-mail’’ で始まりデルタの名前、いくつ 目のかけらか、そして全部でいくつのかけらがあるのかが続きます。データは ‘‘CTM_MAIL BEGIN’’ と ‘‘CTM_MAIL END’’ という行で囲まれており、サブジェク ト行の情報の複製、加えて単純なチェックサムが付きます。

デルタが maxctmsize を超えると、代わりに以下のようなメッセージが送られま す:

From: owner-src-cur
To: src-cur
Subject: ctm-notice src-cur.0999.gz

src-cur.0999.gz is 792843 bytes.  The limit is 300000 bytes.

このデルタは ftp から得られます。

これでもうあなたのものです!

使用例

src-cur の 32 番目のデルタを src-guys として sendmail に登録されている素 晴らしいコードハッカーのグループに、メールのサイズをおよそ 60000 バイトに 制限して送るためには以下のように出来ます:

      ctm_smail -m 60000 /wherever/it/is/src-cur.0032.gz src-guys

メールボックスの各 ctm-mail メッセージをデコードして、それらを完全なデル タに組み立て、そして出来上がったデルタやそこらに転がっているデルタはどれ も、以下のように適用出来ます:

      ctm_rmail -p ~/pieces -d ~/deltas -b /usr/ctm-src-cur $MAIL

( ctm_rmail はメッセージを削除しないので注意して下さい。削除には どんな メールリーダでも使用できます。)

receiver-dude という名前の自動的にデコードとデルタの組み立てを行うけれど も、それらの適用は行わないようなメールエイリアスは、以下の行を /etc/mail/aliases ファイルに入れる事で作成可能です ( /ctm/tmp/ctm/deltas ディレクトリ そして /ctm/log ファイルが daemon ユーザか wheel グループで書き込み可能な事を仮定しています) :

      receiver-dude: "|ctm_rmail -p /ctm/tmp -d /ctm/deltas -l /ctm/log"
      owner-receiver-dude: real_dude@wherever.you.like

2 行目は、失敗した場合にそれを通常のメールボックスか、またはどこか好きな 所へ転送するためにあります。

集められた全デルタを適用して、適用したものを削除するには以下のようにしま す:

      ctm_rmail -D -d /ctm/deltas -b /ctm/src-cur -l /ctm/apply.log

柔軟性を最大限生かすためには、この procmail スクリプトからの引用の利用を 考えてみて下さい:

      PATH=$HOME/bin:$PATH

     :0 w
      * ^Subject: ctm-mail cvs-cur
      | ctm_incoming

以下のシェルスクリプト ~/bin/ctm_incoming と一緒に使います:

      #! /bin/sh
      PATH="$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
      export PATH

     cd $HOME/ctm && ctm_rmail -f -p pieces -d deltas -l log -b /ctm

これは全部の ctm デルタを ~/ctm/deltas に置き、それらを /ctm 内のツリーに 適用し、失敗したものは、すべてあなたの通常のメールボックスに落します。 ctm_incoming での PATH の操作は、このサンプルを取って来た ( FreeBSD でな い) マシンで ctm_rmail から ctm(1) の実行を可能にするためのものです。

セキュリティ

CTM 自身、安全ではないプロトコルです - ソースコードへ加えられた修正が信頼 できるところから送られたことを認証しませんので、通常の電子メール等の信頼 できない媒体から CTM デルタを得た場合には注意が必要です。 CTM デルタを偽 造して、正当なものを交換または上書きし、悪意あるコードをあなたのソースツ リーに挿入することは、攻撃者にとって比較的簡単です。正当なデルタの到着が なんらかの方法で妨げられた場合、これを感知できるのは、後のデルタが同じ ファイルを触ろうとする時点です。この時点で、MD チェックサムが失敗します。

これを回避して安全なものにするために、 FreeBSD.org が作った CTM 部品に は、 GNU Privacy Guard ユーティリティ互換なフォーマットで暗号的に署名して います。このユーティリティは /usr/ports/security/gpg および Pretty Good Privacy v5 ユーティリティ /usr/ports/security/pgp5 から入手できます。適切 な公開鍵は ctm@FreeBSD.org を finger することで得られます。

このように署名された CTM デルタは、検知されることなく攻撃者が改変すること はできません。それゆえ、CTM デルタを電子メールで受信する場合には、 GPG ま たは PGP5 を使用して署名を確認することを勧めます。

環境変数

デルタを適用するのならば ctm(1)gunzip(1) が PATH に含まれていなければ なりません。

関連ファイル

       QUEUEDIR/*

メールメッセージとしてエンコードされて、メーリングリストに送信さ れるのを待っているデルタのかけら。

PIECEDIR/*
残りのかけらの到着を待っているデルタのかけら。

DELTADIR/*
完成したデルタ。

BASEDIR/.ctm_status
このソースツリーに次に適用されるべきデルタの名前と番号を含むファ イル。

診断

ctm_smail, ctm_dequeue, ctm_rmail ユーティリティは正常に終了するとステー タスとして 0 を、何らかの障害があった場合は 1 を返します。 ctm_rmail ユー ティリティは、メールの配送プログラムから呼ばれる事を想定しています。そし てそのため入力されたメールメッセージが (送信者にではなく、なるべく あなた の通常のメールドロップに) 返送されるべき状態になった時にのみ障害を通知す るようになっています。いいかえれば、完成したデルタを ctm で適用する際に発 生した障害はメールを返送する程に重要なエラーではないと判断されて、 ctm_rmail は終了ステータスとして 0 を返すということです。

通常の操作では、 ctm_smail は以下のようなメッセージで報告します:

      ctm_smail: src-cur.0250.gz 1/2 sent to src-guys

または、キューに入れたなら、

      ctm_smail: src-cur.0250.gz 1/2 queued for src-guys

ctm_dequeue ユーティリティは以下のようなメッセージで報告します:

      ctm_dequeue: src-cur.0250.gz 1/2 sent

ctm_rmail ユーティリティは以下のようなメッセージで報告します:

      ctm_rmail: src-cur.0250.gz 1/2 stored
      ctm_rmail: src-cur.0250.gz 2/2 stored
      ctm_rmail: src-cur.0250.gz complete

もし入力ファイルのいずれもが正しいデルタのかけらを含んでいないと、 ctm_rmail は以下のように報告します:

      ctm_rmail: message contains no delta

そして終了ステータスとして 1 を返します。もしメールフィルタが当てにならな いのなら、これを使って気まぐれなメッセージをリダイレクトして本当のメール ボックスに入れる事ができます。

これらのメッセージは stderr かログファイルに出力されます。 ctm(1) からの メッセージも同様にここに現れます。エラーメッセージは それ自身が説明的であ るべきです。

関連項目

ctm(1), ctm(5)

作者

Stephen McKay <mckay@FreeBSD.org>

日本語訳

野首 寛高 (h-nokubi@nmit.mt.nec.co.jp): FreeBSD 用に翻訳

FreeBSD 10.0 January 24, 1995 FreeBSD 10.0

スポンサーリンク