アーカイブ・ミラー

アーカイブ・ミラーは、あるアーカイブを別のアーカイブにそっく りそのままコピーしたものだ。GNU arch のアーカイブはネットワーク透 過性を持っていることを思い出してほしい。つまり同じマシンの上にある 二つのアーカイブ間でできることは、異るマシン間にあるアーカイブに対 しても必ずできる、という GNU arch の設計上の大原則だ。この性質を利 用すれば、アーカイブ・ミラーのソースとディスティネーションを別マシ ンに設定して、たとえばソースをリモートアーカイブ、ディスティネーショ ンをローカルアーカイブとすることも、その逆も、また両方を同じマシン 上の異るアーカイブとすることもできる。最初の場合はリモートアーカイ ブからローカルアーカイブへのコピーとなる。二番目はその逆になる。最 後のケースは何の役にたつか不思議に思うかも知れないが、たとえば一方 のアーカイブは外部に公開していない、プライベートなもので、もう一方 は公開しているアーカイブだとする。そして普通はプライベートアー カイブ上のバージョンで作業をしていて、問題がないと確信した時点でそ の内容を公開アーカイブにも反映したいような場合、ローカルアーカイブ 間のミラーも意味をもつ。

ミラー先のアーカイブには自分がミラーであることを示す情報があっ て、tla import や tla commit を実行しようとするとエラーになる。tla archive-mirror コマンドを利用する以外に、ミラーアーカイブに書き込 みを行なうことはできない。

まず、いままで直接アクセスしていたリモートアーカイブのミラー をローカルに作り、このミラーにリモートアーカイブの内容を実際にミラー したあと、このミラーにアクセスする例を示す。実際のミラーには非常に 時間がかかることもあるが、いったん転送が済んでしまえば、アクセスは 飛躍的早くなるのが普通だ。Tom Lord のマスターアーカイブを使って説 明しよう。まず、Tom のアーカイブに直接アクセスするような形にアーカ イブを登録する。それから tla abrowse でこのアーカイブを閲覧してみ てほしい。かなり時間がかかるはずだ:

$ tla register-archive lord@emf.net--2004 \
      http://regexps.srparish.net/{archives}/lord@emf.net--2004
$ tla abrowse -A lord@emf.net--2004
…
$

次にローカルマシンにミラーを作るわけだが、tla make-archive コマンドを実行する前にアーカイブ名について少し考える必要がある。ミ ラーアーカイブに何という名前をつけるか、だ。lord@emf.net--2004 と いう名前はすでに Tom のマスターアーカイブとしてたったいま利用して しまっているので、同じ名前をミラーに対して利用することはできない。 普通はアーカイブ名の後ろに "-MIRROR" という文字列をつけた lord@emf.net--2004-MIRRORという名前を使うが、必ずそうしなくてはな らないという決まりはない。アーカイブ名の形式に従ったものならどんな 名前をつけても良い。で、考えてみてほしいのだが、今後このミラーには 頻繁にアクセスすることになり、あたかもこちらが Tom のマスターアー カイブだとみなしたほうが都合が良いだろう。こっちを lord@emf.net--2004 という名前でアクセスしたい。すると今度は Tom の オリジナルの方を別の名前で呼ぶ必要が出てくる。これももちろん可能だ。 あるアーカイブ位置をどんな名前で呼んでも GNU arch が動かなくなるこ とはない。結局、Tom のオリジナルを lord@emf.net--2004-SOURCE と呼 び、ローカルミラーをlord@emf.net--2004 と呼ぶことにする。

$ tla register-archive -d lord@emf.net--2004
$ tla register-archive lord@emf.net--2004-SOURCE \
      http://regexps.srparish.net/{archives}/lord@emf.net--2004
$ tla make-archive --mirror lord@emf.net--2004-SOURCE lord@emf.net--2004 
      /home/foo/{archives}/lord@emf.net--2004
$

tla make-archive の前に、tla register-archive で lord@emf.net--2004 の削除と、同じアーカイブ位置を lord@emf.net--2004-SOURCEという名前であらためて登録していることに 注意してほしい。それからミラーアーカイブを tla make-archive で作成 している。tla make-archive コマンドは内部的に tla register-archive の処理も一緒に行なうので、lord@emf.net--2004 はローカルミラーとし て登録される。次に実際にアーカイブの転送を行なう:

$ tla archive-mirror lord@emf.net--2004-SOURCE lord@emf.net--2004
…
$

これにはアーカイブの大きさにおうじて、通常は長い時間がかかる。 何か別のことをやっていた方がよいだろう。ミラーが完了したらもう一度 tla abrowse を走らせてみよう:

$ tla abrowse -A lord@emf.net--2004
…
$

おそらく劇的に早くなっているはずだ。いったんミラーをつくれば、 今後の tla archive-mirror は差分だけの転送になるのでそれほど時間は かからなくなる。この処理は cron でやらせるのがおすすめだ。私はもち ろん Tom のすべてのアーカイブを自分のマシンにミラーしているが、一 日一回ミラーするようにしている。これで Tom のマシンに何か恐ろしい ことが起こっても、私のミラーを使って最悪 24 時間前の状態にまでは戻 せる。分散システムならではのメリットだ。GNU arch コミュニティーに はこのようなバックアップ的な意味あいでのミラーを、もっと大規模に構 築しているメンバーもいる。詳しくはXXXを見てほしい。

ミラーの話しに限ったことではないが、あるアーカイブから別のアー カイブに対する継続がある場合、最低限、継続のリビジョンでは tla cacherev コマンドでキャッシュしたほうが良い。そうしないと、せっか くあるアーカイブをミラーしても、そこからリビジョンを get しようと すると、継続をさかのぼって結局は別のアーカイブも参照しにいくことに なり、そのアーカイブが登録されていないことでエラーになったり、登録 されていてもスピードの恩恵にあずかることができないことになってしま う。これはミラーされる側のエチケットかも知れない。もちろん誰も彼に そんなことを強要することはできないが。人はみな、自由なのだ。

もうひとつの例は、公開用アーカイブと、ブライベートアーカイブ とのミラーだ。XXX

ミラーの特徴は、ユーザが自発的にミラーする必要があることだ。 tla archive-mirror コマンドを時々実行しなければミラーの意味はない。 これにたいして次節のリビジョンライブラリは、ユーザが通常の操作を行 なう過程で自然とキャッシュされていような仕組みを持っている。ここが 違うところだ。用途や場面に応じて、どの方法が最適か、自分で考えてみ てほしい。