FreeBSD ハンドブック
Prev | Appendix A. FreeBSD の入手方法 | Next

# A.6. Portsnap を使う

## A.6.1. はじめに

Portsnap は FreeBSD port ツリーを安全に配布するシステムです。 約一時間毎に port ツリーの “スナップショット” が作成され、 圧縮され、電子署名されています。 作成されたファイルは HTTP 経由で配布されています。

CVSup 同様、 Portsnap は、更新に pull モデルを採用しています。 圧縮され、電子署名された ports ツリーは web サーバに置かれ、 サーバはクライアントからの更新の要求を受け身の状態で待ちます。 ユーザは、portsnap(8) を手動で実行して更新をおこなうか、cron(8) ジョブを設定して定期的に自動実行する必要があります。

技術的な理由から、Portsnap は “live” port ツリー (`/usr/ports/`) を直接更新しません。 そのかわり圧縮された port ツリーのコピーは、デフォルトで `/var/db/portsnap/` に保存されます。 この圧縮されたコピーは live port ツリーの更新に使われます。

> Note: Ports Collection からインストールした Portsnap では、 圧縮されたスナップショットは `/var/db/portsnap/` ではなく `/usr/local/portsnap/` に保存されます。

## A.6.2. インストール

FreeBSD 6.0 以降では、 Portsnap は、FreeBSD のベースシステムにあります。 古いシステムを使っている場合には、 `ports-mgmt/portsnap` package をインストールしてください。

## A.6.3. Portsnap の設定

Portsnap の動作は、 `/etc/portsnap.conf` で設定できます。 ほとんどのユーザにとっては、デフォルトの設定で十分でしょう。 詳細は portsnap.conf(5) マニュアルページを参照してください。

> Note: Ports Collection からインストールした Portsnap では、設定ファイルは `/etc/portsnap.conf` ではなく、 `/usr/local/etc/portsnap.conf` となります。 この設定ファイルは、port のインストール時には作成されません。 設定ファイルのサンプルが配布されていますので、 以下のコマンドでコピーしてください。

>     # cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf

## A.6.4. 初めて Portsnap を使う

初めて portsnap(8) を使う時は、 まず、圧縮された全 ports ツリーのスナップショット (2006 年の初めの時点で約 41 MB) を `/var/db/portsnap/` (Ports Collection から Portsnap をインストールした場合は、`/usr/local/portsnap/`) にダウンロードしてください。

    # portsnap fetch

圧縮されたスナップショットをダウンロードしたら、 ports ツリーのコピーを `/usr/ports/` に展開します。 もし、すでに他の方法 (例えば、CVSup など) によって ports ツリーがこのディレクトリに作成されていたとしても、 この作業を行なってください。 `portsnap` が ports ツリーをアップデートする際に、 どの部分をアップデートすべきかを判断できるようにするためです。

    # portsnap extract

> Note: デフォルトのインストール状態では、 `/usr/ports` は作成されていません。 FreeBSD 6.0-RELEASE を使っている場合は、 `portsnap` を実行する前に作成しておいてください。 最近の FreeBSD や Portsnap を使っている場合は、 初めて `portsnap` コマンドを使った時に自動的に作成されるでしょう。

## A.6.5. ports ツリーのアップデート

圧縮された ports ツリーのスナップショットをダウンロードし、 `/usr/ports/` に展開した後は、 二つの作業で ports ツリーをアップデートします。 まず、最新の圧縮されたスナップショットを ダウンロード します。 その後、ダウンロードしたスナップショットを用いて ports ツリーを アップデート します。 この二つの作業は、`portsnap` の一つのコマンドで実行できます。

    # portsnap fetch update

> Note: 古いバージョンの `portsnap` ではこの構文は使えません。 失敗した場合は、以下を試してください。

>     # portsnap fetch
>     # portsnap update

## A.6.6. cron で Portsnap を動かす

Portsnap サーバにアクセスが集中する “flash crowds” を避けるため、 cron(8) ジョブで `portsnap fetch` は動かないでしょう。 その代わり、`portsnap cron` という特別なコマンドがあります。 このコマンドは、3600 秒の間のランダムな時間の後に スナップショットのダウンロードを開始します。

また、`cron` ジョブで `portsnap update` を実行しないでください。 port の構築もしくはインストールと同時に実行してしまうと、 重大な問題を引き起こす原因となるからです。 しかし、`-I` フラグをつけて `portsnap` を実行することで、 ports の `INDEX` ファイルを安全にアップデートできます。 (`cron` ジョブで `portsnap -I update` を実行した場合は、 あとでツリーをアップデートするために、 `portsnap update` を `-I` フラグを外して実行する必要があるでしょう。)

以下の行を `/etc/crontab` に加えると、 `portsnap` は圧縮されたスナップショットや `/usr/ports/` の `INDEX` ファイルをアップデートします。 もし、インストールした ports の中で古くなったものがあれば、 メールで知らせてくれます。

    0 3 * * * root portsnap -I cron update && pkg_version -vIL=

> Note: システムの時刻がローカル時間に設定されていない場合は、 Portsnap サーバへの負荷を分散させるため、 上の行の `3` を 0 から 23 の間のランダムな値に置きかえてください。

> Note: 古い版の `portsnap` では、 (`cron update` のように) 二つのコマンドを並べて使うことはできません。 追加した行がうまくいかなければ、 `portsnap -I cron update` を `portsnap cron && portsnap -I update` に置きかえてください。

Prev | Home | Next
CVSup を使う | Up | CVS タグ