FreeBSD ハンドブック : アプリケーションのインストール : ports コレクション : ports コレクションはどのように動くのでしょうか?
Previous: なぜ ports コレクションを作ったのか?
Next: FreeBSD ports コレクションの入手

4.2. ports コレクションはどのように動くのでしょうか?

インターネットでは通常, tarball の形で プログラムが配布されています. これは, Makefile とソースコードで構成され, 普通は何らかの説明書 (あいにく, いつもわかりやすく書かれているとは 限りませんが) が付属しています. ことによるとコンフィグレーションスクリプトも含まれているかもしれません.

標準的な手順では, FTP で tarball を入手して, 適当なディレクトリで展開します. 次に説明書を読んで, 必要な変更をおこないます. そして, 設定スクリプトを実行し, 標準の make コマンドを使ってソースのコンパイルとインストールをおこないます.

FreeBSD の ports も tarball の仕組みを利用していますが, これはユーザが 苦労して作業することを期待したものではなく, どのようにすれば FreeBSD 上で そのプログラムが動くようになるかという「ノウハウ」を スケルトン を使用して収めているものです. スケルトンは, カスタマイズ済みの Makefile も 提供していますので, ほとんどすべての ports は同じ手順でインストールすることが できます.

もしあなたが (あなたの FreeBSD システム または FTP サイト にある) ports スケルトンを見ていて, そこに潜んでいる あらゆる種類の先端的なロケット工学的なものを見つけられると期待していると, つまらなそうなファイルやディレクトリがそこにあるだけなのを見て, がっかりするかもしれません. (ports を手に入れる方法については, すぐに FreeBSD ports コレクションの入手方法 の節でお話します.)

「一体どうしたらいいんだ? ここにはソースコードが ないじゃないか?」 というあなたの叫びが聞こえるようです.

心配いりません. おとなしく読んでいけば, すべてが (たぶん) 明らかに なるでしょう. 試しに ports をインストールして, 何が起きるのかを見てみましょう. ここではサンプルとして開発者向けの便利なツール, `ElectricFence' を選択します. このスケルトンを選んだ理由は, 他の ports に比べても素直で理解しやすく 書かれているからです.

Note 自宅で試してみる場合には, root になる必要があるでしょう.

 # cd /usr/ports/devel/ElectricFence
# make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===>  Extracting for ElectricFence-2.0.5
===>  Patching for ElectricFence-2.0.5
===>  Applying FreeBSD patches for ElectricFence-2.0.5
===>  Configuring for ElectricFence-2.0.5
===>  Building for ElectricFence-2.0.5
[大量のメッセージをコンパイラが出力します...]
===>  Installing for ElectricFence-2.0.5
===>  Warning: your umask is "0002".
      If this is not desired, set it to an appropriate value
      and install this port again by ``make reinstall''.
install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===>   Compressing manual pages for ElectricFence-2.0.5
===>  Registering installation for ElectricFence-2.0.5

ここではあなたが混乱しないように, コンパイル時の出力を すべて取り除いてあります.

もしもあなた自身で実行されたら, 最初にこのような 出力結果が得られるはずです:-

# make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.

`make' プログラムは, あなたの手元にソースコードがないことを検出し, 処理を続けられるようにソースを FTP でダウンロードしようとします. この例では, あらかじめ手動でソースコードを用意してあったので, 持ってくる必要はありませんでした.

では, 続けて `make' プログラムが何をしているのか見てみましょう.

  1. ソースコード tarball のありかを 確認します. 手元にファイルが存在しなければ, FTP サイトから入手しようとします.
  2. チェックサム テストを実行して, その tarball が事故か何かで途中で切れていたり, ASCII モードで ダウンロードされていたり, 転送中にニュートリノによって傷められたりして 改変されたりしていないかどうかを確認します.
  3. tarball を一時的な作業用ディレクトリに展開します.
  4. FreeBSD 上でコンパイルしたり, 動作させるのに必要な すべての パッチ をソースコードに当てます.
  5. 構築のために必要なコンフィグレーションスクリプトを実行します. コンフィグレーションスクリプトの質問には正確に答えてください.
  6. (いよいよ!) ソースコードをコンパイルします.
  7. 実行形式のプログラム, マニュアル, その他のサポートファイルを, システムのプログラムと混ざってしまわないように /usr/local 以下に インストールします. ports はすべて同じ場所にインストールされ, システムのあちこちにばらまかれることはありません.
  8. インストール結果はデータベースに登録されます. これにより, インストールしたプログラムがもしも気に入らなかったときも, システムから すべての痕跡をきれいに 消去 することができます.

以上のステップが make の出力と一致しているかどうか確認してください. 今まで確認していなかったのなら, 今からするようにしてください!


FreeBSD ハンドブック : アプリケーションのインストール : ports コレクション : ports コレクションはどのように動くのでしょうか?
Previous: なぜ ports コレクションを作ったのか?
Next: FreeBSD ports コレクションの入手