「あたりまえのことを誰よりもあたりまえにやれ。それがあたりま えのことじゃないことがすぐにわかるから」- あるグル
インストールから始めよう。
一般的に言って、GNU arch のインストール時にはそれほど大きな 問題は起こらないのが普通だ。GNU arch は外部環境にほとんど依存しな いからだ。たとえば glibc のようなライブラリは利用せず、hackerlab という奇妙な名前の自前のライブラリを使ってシステムが構築されている。 本質的に外部に依存するのは、GNU tar, GNU diff, GNU patch のような プログラムで、これらのプログラムが古かったり GNU 互換ではないと不 具合が生じることはある。
GNU arch をインストールするにはまずは最新のソースコードを手 に入れる必要がある。公式なダウンロード先は以下の URL だ:
http://regexps.srparish.net/src/tla/
ここでは tla-1.2 を利用する。wget や curl のようなプログラ ムで取得する。
$ wget http://regexps.srparish.net/src/tla/tla-1.2.tar.gz … $
tla が GNU arch のコマンドとしての名前だ。何の略かという話に なるとTom Lord's Arch とか、Three Letter Acronym とか、いろいろ言 われる。深い意味はない。こジャレたウィットの解説を言った本人の口か ら聞くほど野暮なことはない。とにかく tla と言う。ソースコードを展 開すると、以下のようになる:
$ tar zxvf tla-1.2.tar.gz … $ cd tla-1.2 $ ls =ARCH-USERS-README =INSTALL =RELEASE-ID COPYING configs src {arch} $
普通の人であれば、おそらくこの時点で驚くだろう。こういうのが GNU arch の一番困ったところだ。これから楽しいバカンスに行こうとい うのに、家の前でいきなり車に引かれそうになる。ls の出力で '=' や' {','}'という文字を目にすることはそう多くはないが、普通のアルファベッ トと同じようにファイル名に利用できる文字とされており、GNU arch は 特殊なファイルを分別するのに、さまざまな場面で積極的にこのような文 字を利用するのだ。C 言語などを知っている人なら、識別子に対して '_' のような文字も含めて考えるだろう。このようなものだと思って割り切る のが一番良いようだ。
このような特殊文字の多用の是非については GNU arch メーリング リストで非常に頻繁に議論されてきた。メリットとしては、通常のバージョ ン管理対象となるファイルとの間に区別を設けることで特殊な処理をする 場合に便利であることをあげることができる。詳しくはインベントリとファ イルグループを議論する XXX で触れる。デメリットとしては、新規ユー ザを驚かせてしまい、学習曲線を不要に高くしてしまうこと、Unix のシェ ル上での補間機能がうまく効かない場合が出てくること、また他プラット フォームへの GNU arch の移植を困難にすること、などがあげられる。い ずれにせよ、ここではただ一言ですませる。つまり、「気にするな」だ。
いま展開した tla のディレクトリに戻って話を進めると、'='で始 まるファイルはいずれも普通のファイルだ。また {arch} はディレクトリ だ。ここではたまたまそうなっているが、'=' がかならず普通のファイル に利用されるとは限らない。ディレクトリであることもある。
実際のコンパイルは、=INSTALL ファイルに書いてあるとおり、src ディレクトリの下に =build というディレクトリを作ってからそこに移動 して実行する:
もう一度いう。'=' のような文字は気にするな。
$ cd src $ ls COPYING Maintfile PLUGIN configure docs-tla links {arch} ChangeLog.d Makefile.in build-tools docs-hackerlab hackerlab tla $ mkdir =build $ cd =build $
通常のプログラムのインストールと同様、設定スクリプトの実行、 実際の構築、構築後のインストール、という 3 段階で進む。最後の段階 以外はすべてこの =build ディレクトリの中にしか書き込まない。インス トール前であれば =build ディレクトリを丸ごと消せば初期状態に戻る。
設定は以下のようにする
$ ../configure --prefix=/usr/local Standard Configuration Settings: system = i686-pc-linux-gnu package = lord@emf.net--2004/dists--devo--1.0--patch-9(configs/emf.net-tla/devo.tla-1.2) … src configuring src... $
--prefix オプションはインストールフェーズで実際に GNU arch をインストールする先になる。--prefix を省略すると、. /src/=build/=install がインストール先になるので、まだ GNU arch を あまり信用していない人はここにインストールして動作を試すこともでき る。気に入らなければひとつ上の =build ディレクトリからまるごと削除 すれば tar を展開した直後の状態に戻る。他の場所にはいっさい書き込 みをしない。現時点で GNU arch は単一のプログラムとして構築され、モ ノリシックなプログラム tla のみからなるので、インストール後そのま まコピーして別の場所に持っていっても動作する。(今後のバージョンで どうなるかは保証しない)。
--prefix オプションは通常は /usr/local にすると良い。これで /usr/local/bin に tla という名前のコマンドでインストールされる。間 違って /usr/local/bin と指定しないこと。これだと/usr/local/bin/bin にインストールされてしまう!
実際に構築する。長いメッセージが出力される。
$ make set -e ; \ for dir in build-tools hackerlab links tla docs-tla; do \ make -C $dir all ; \ done make[1]: Entering directory `/home/octopus/tla-1.2/src/=build/build-tools' set -e ; \ for dir in standards; do \ make -C $dir all ; \ … set -e ; \ for dir in src; do \ make -C $dir all ; \ done make[2]: Entering directory `/home/octopus/tla-1.2/src/=build/docs-tla/src' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/home/octopus/tla-1.2/src/=build/docs-tla/src' make[1]: Leaving directory `/home/octopus/tla-1.2/src/=build/docs-tla' $
最後にインストールする。
$ make install set -e ; \ for dir in build-tools hackerlab links tla docs-tla; do \ make -C $dir install ; \ done make[1]: Entering directory `/home/octopus/tla-1.2/src/=build/build-tools' set -e ; \ for dir in standards; do \ make -C $dir install ; \ … set -e ; \ for dir in src; do \ make -C $dir install ; \ done make[2]: Entering directory `/home/octopus/tla-1.2/src/=build/docs-tla/src' make[2]: Nothing to be done for `install'. make[2]: Leaving directory `/home/octopus/tla-1.2/src/=build/docs-tla/src' make[1]: Leaving directory `/home/octopus/tla-1.2/src/=build/docs-tla' $
実際に動作するかどうかは以下のコマンドで確認できる
$ tla help tla sub-commands ---------------- * help help : provide help with arch * User Commands … * Published Revisions Commands grab : grab a published revision * Miscellaneous Scripting Support parse-package-name : parse a package name valid-package-name : test a package name for validity Use tla command -h for help on `command', or tla command -H for detailed help $
かなりたくさんのコマンドがある。100近くもあるが、実際によく 利用するのは一握りだ。あとは実験的なコマンドであるか、GNU arch に 精通してからしか利用することはない。GNU arch のコマンドが多いのは、 単純なコマンドを組み合わせることによってさまざまな複雑な機能を実現 できるようになっているからだ。ちょうど Unix のツール群と同じ考え方 です。ひとつひとつのコマンドはゾウリムシみたいに単純だが、うまく組 み合わせると恐ろしくいろんなことができる。この考え方にはデメリット もある。実際の利用で、どのコマンドの後にどのコマンドを実行すればよ いか、あるいはどのコマンドとどのコマンドをどのように組み合わせれば 必要なひとまとまりの機能を実現できるか、がすぐにはわからないところ だ。つまり、典型的なワークフローがどんなものか、すぐには見えない。
このドキュメントではよく利用されるコマンドと、その利用の順序 についてグループ分けして説明していこうと思う。私の考えでは、ワーク フローの観点から見たとき、GNU arch には 3 個のグループに分けるのが いいと思う。
インストール後の必ずやる必要のある設定
バージョン管理対象を追加するたびに一度だけやる操 作
日々の操作
この三つだ。
最初のグループは、GNU arch をインストールしたら必ずやらなく てはならない作業で、一度やれば二度以上やることは非常に稀なもの。二 つ目のグループは、新規に何かある特定のデータをバージョン管理しよう とするときの初期化処理、最後のグループは、初期化処理が済んだバージョ ン管理下にあるデータに対しておこなう日々の処理。この 3 番目のグルー プに属するコマンドは非常に少なく、せいぜい 5 個くらいだろう。
もちろん、GNU arch に慣れるにつれて残りのコマンドにも興味が わいてくるだろう。そのいくつかは処理を高速化したり、他の人のアーカ イブと協調して作業するのに必要だったり、GNU arch の根底を支える非 常に原始的な—そしてそれゆえ深遠な—コマンドであったりす る。詳しくは補遺のリファレンスを参照してほしい。一通り理解した後は リファレンス部分だけで話しが完結するような構成にしておいた。ここに はすべてのコマンドの一覧、書き込みの有無、典型的な例、CVS コマンド との対応、などについての記述がある。特に書き込みが全く発生しないコ マンドについては気軽に実行してその振る舞いを見ることができるだろう。 そして人によっては GNU arch の泥臭い実装の背後にある恐ろしく単純なデ ザインにおどろくかも知れない[3]。
このドキュメントは GNU arch のあらゆるレベルのユーザに対して 役立つように書いたつもりだが、特にはじめて GNU arch を使おうと いう人の敷居をさげるのに役立てば、と思っている。