ports コレクション
原作: &a.jraynard;.
訳: &a.masaki;, &a.saeki;.
11 November 1996.
FreeBSD の ports コレクションを利用すると, 最小限の労力で
非常に幅広くのアプリケーションのコンパイルとインストールがおこなえます.
やってみたことのある方はよくご存知でしょうが, オープンな規格とは
全くの誇大広告であって, あるプログラムを異なるバージョンの Unix 上で
動作させることは退屈で手間のかかる仕事です.
求めているプログラムが自分のシステムでうまくコンパイルでき,
正しいところにインストールできて, 完璧に動作するとしたらとてもラッキーです.
しかし, あいにくこれは滅多にないことなのです.
ほとんどのプログラムについて, あなたは髪を掻きむしることになるでしょうし,
かなりのプログラムでは, 白髪混じりの頭になってしまったり, あるいは慢性の
脱毛症にすら なってしまうかもしれません...
いくつかのソフトウェアディストリビューションでは, 設定用のスクリプトを
配布することでこの問題を解決しようとしています.
これらのスクリプトの中には非常に精巧なものもありますが, 残念ながら,
中にはこれまで聞いたこともないようなシステムの名前をしゃあしゃあと
言い放ったうえに, まるでシステムレベルの Unix プログラミングに関する
最終試験のような, たくさんの質問をしてくる場合があります.
(例えば, 「このシステムの gethitlist 関数は fromboz への const ポインタを
返しますか? それとも const fromboz へのポインタを返しますか?」,
「このシステムには Foonix スタイルの, 容認できない例外処理をおこなう
ルーチンがありますか? もしもないとしたら, それはなぜですか?」)
幸いなことに, ports コレクションがあれば, これらのきつい作業はすべて
完了しています. 'make install' とタイプするだけで, 動作するプログラムを
入手することができるのです.
なぜ ports コレクションを作ったのか?
FreeBSD の基本システムは, 非常に多くのツールやユーティリティから
構成されています. しかし, よく使われるプログラムのうち多くのものが,
この基本システムには含まれていません. その理由は:-
- 「私は x と y と z のプログラムがシステムにないと生きていけない」と
いう類のプログラム (例えば Lisp ベースのエディタや DOS フロッピーを扱うための
mtools など) は, 人によって全然違うから. (Emacs に我慢ならないという人や,
DOS フロッピーをまったく使わないという人も大勢いるのです. そういう人は
Emacs や mtools が基本システムに含まれていなくても何の問題もないでしょう.)
- 基本システムに組み込むには特殊すぎるから. (CAD やデータベースなど)
- 「時間があったら, ちょっと見てみようかな」というような類の,
それがシステムに含まれていないことが致命的とは言えないプログラムだから.
(おそらく, 何らかの言語などでしょう.)
- お楽しみのためのプログラムは, FreeBSD のような真面目な
オペレーティングシステムといっしょに配布するべきではないから. ;-)
- たくさんのプログラムを基本システムに組み込んだとしても, もっともっと
組み込みたいという要求が出てくるので, どこかで制限を引かなくてはならないため.
(そうしなければ FreeBSD の配布物は, とてつもなく膨大になってしまうでしょう.)
すべての人が自分のお気に入りのプログラムを手作業で移植しなければ
ならないとしたら, (途方もない膨大な作業の繰り返しをさておいたとしても)
それは明らかに不合理な話です.
そこで, FreeBSD プロジェクトでは, 標準のツールを使って移植のプロセスを
自動化する巧妙な方法を考え出しました.
なお, これは単純ながら非常に柔軟なツールを組み合わせることで,
非常に強力な働きをさせるという「Unix 流」の作業の優れた実例です.
ports コレクションはどのように動くのでしょうか?
インターネットでは通常, [ の形で
プログラムが配布されています. これは, Makefile とソースコードで構成され,
普通は何らかの説明書 (あいにく, いつもわかりやすく書かれているとは
限りませんが) が付属しています.
ことによるとコンフィグレーションスクリプトも含まれているかもしれません.
]
標準的な手順では, FTP で tarball を入手して, 適当なディレクトリで展開します.
次に説明書を読んで, 必要な変更をおこないます. そして, 設定スクリプトを実行し,
標準の make コマンドを使ってソースのコンパイルとインストールをおこないます.
FreeBSD の ports も tarball の仕組みを利用していますが, これはユーザが
苦労して作業することを期待したものではなく, どのようにすれば FreeBSD 上で
そのプログラムが動くようになるかという「ノウハウ」を [ を使用して収めているものです.
スケルトンは, カスタマイズ済みの ][ も
提供していますので, ほとんどすべての ports は同じ手順でインストールすることが
できます.
]
もしあなたが ( または
にある) ports スケルトンを見ていて, そこに潜んでいる
あらゆる種類の先端的なロケット工学的なものを見つけられると期待していると,
つまらなそうなファイルやディレクトリがそこにあるだけなのを見て,
がっかりするかもしれません.
(ports を手に入れる方法については, すぐに [ の節でお話します.)
]「一体どうしたらいいんだ? ここにはソースコードが全然ないじゃないか?」
というあなたの叫びが聞こえるようです.
心配いりません. おとなしく読んでいけば, すべてが (たぶん) 明らかに
なるでしょう.
試しに ports をインストールして, 何が起きるのかを見てみましょう.
かなり典型的な例だと思いますので, ここでは `bash' (Bourne-Again Shell として
知られています) を選びます.
Note 自宅で試してみる場合には, root になる必要があるでしょう.
# cd /usr/ports/shells/bash
# make install
Checksums OK.
===> Extracting for bash-1.14.5
===> Patching for bash-1.14.5
===> Applying FreeBSD patches for bash-1.14.5
===> Configuring for bash-1.14.5
===> Building for bash-1.14.5
[とてもとても大量のメッセージをコンパイラが出力します...]
===> Installing for bash-1.14.5
make -f bash-Makefile bindir=/usr/local/bin prefix=/usr/local install
(cd ./documentation/; make )
rm -f builtins.txt
nroff -man builtins.1 > builtins.txt
install -c -o bin -g bin -m 555 bash /usr/local/bin/bash
install -c -o bin -g bin -m 555 bashbug /usr/local/bin/bashbug
( cd ./documentation/ ; make mandir=/usr/local/man/man1 man3dir=/usr/local/man/man3
infodir=/usr/local/info install )
[ -d /usr/local/man/man1 ] || mkdir /usr/local/man/man1
[ -d /usr/local/info ] || mkdir /usr/local/info
../support/install.sh -c -m 644 bash.1 /usr/local/man/man1
../support/install.sh -c -m 644 builtins.1 /usr/local/man/man1/bash_builtins.1
../support/install.sh -c -m 644 features.info /usr/local/info/bash.info
gzip -9nf /usr/local/man/man1/bash.1 /usr/local/man/man1/bash_builtins.1
===> Registering installation for bash-1.14.5
ここではあなたが混乱しないように, コンパイル時とインストール時の出力を
多少省略してあります. もしもあなた自身で実行されたら, 最初にこのような
出力結果を得るはずです:-