4.5. Ports Collection の利用
戻る〓 | 第4章 アプリケーションのインストール - packages と ports | 〓次へ

## 4.5. Ports Collection の利用

Ports Collection は、`Makefile`, 修正パッチ、 説明文などの一連のファイルのことです。 これらのファイルの各セットは、 個々のアプリケーションをコンパイルして FreeBSD にインストールするために用いられ、port と呼ばれています。

デフォルトでは、Ports Collection は、`/usr/ports` 以下のサブディレクトリに置かれます。

port を用いてアプリケーションをコンパイルできるようにするには、 まず最初に Ports Collection をインストールする必要があります。 FreeBSD のインストール時に Ports Collection をインストールしていない場合には、 以下の方法のどれかを用いてインストールしてください。

手順4.1 Portsnap を利用する方法

FreeBSD のベースシステムには、Portsnap が含まれています。 これはは Ports Collection を取得するための速くて使いやすく、 多くのユーザに推奨されるツールです。 このユーティリティは、FreeBSD のサイトに接続し、セキュリティキーを検証し、 Ports Collection の最新版をダウンロードします。 セキュリティキーは、 ダウンロードしたすべてのファイルの検証に用いられます。

1. 圧縮された Ports Collection のスナップショットを `/var/db/portsnap` にダウンロードするには以下を実行してください。

       # portsnap fetch

2. 初めて Portsnap を使う時は、 スナップショットをまず `/usr/ports` に展開してください。

       # portsnap extract

3. 上で示した Portsnap を初めて利用する際に行うコマンドを実行した後は、 以下のコマンドで `/usr/ports` をアップデートしてください。

       # portsnap fetch
       # portsnap update

   `fetch` を使う場合には、以下のよう `extract` または `update` を連続して行うことができます。

       # portsnap fetch update

手順4.2 Subversion を用いる方法

ports ツリーの管理が必要な場合や、 ローカルで変更点をメンテナンスする必要がある場合には、 Subversion を使って Ports Collection を取得する方法があります。 Subversion のより詳細な説明については、 Subversion Primer を参照してください。

1. Subversion を使って ports ツリーをチェックアウトする前に、 Subversion をインストールしておく必要があります。 ports ツリーがすでにインストールされていれば、 以下のようにして Subversion をインストールできます。

       # cd /usr/ports/devel/subversion
       # make install clean

   ports ツリーが利用できない場合や、 package の管理に pkg を使っているのであれば、package から Subversion をインストールできます。

       # pkg install subversion

2. ports ツリーをチェックアウトしてください。

       # svn checkout https://svn.FreeBSD.org/ports/head /usr/ports

3. Subversion で最初のチェックアウトを行ったら、必要に応じて `/usr/ports` をアップデートしてください。

       # svn update /usr/ports

Ports Collection は、ソフトウェアのカテゴリを表すディレクトリを持ちます。 各カテゴリには、各アプリケーションのサブディレクトリがあります。 各アプリケーションのサブディレクトリには、 プログラムを FreeBSD 上で正しくコンパイルしてインストールする方法を提供する、 ports スケルトン と呼ばれるファイルのセットが含まれています。 それぞれの port スケルトンには、 次のファイルおよびディレクトリが含まれています。

- `Makefile`: このファイルにはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する命令文が含まれています。

- `distinfo`: このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、 チェックサム情報が含まれています。

- `files`: このディレクトリには FreeBSD 上でプログラムをコンパイルし、 インストールするための修正パッチが含まれています。 このディレクトリには、その port の構築に必要なその他のファイルが入る場合もあります。

- `pkg-descr`: このファイルにはプログラムに関する、 より詳しい説明文が含まれます。

- `pkg-plist`: これは、その port によってインストールされる全ファイルのリストです。 これにはプログラムを削除する際に、 どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。

これらの他に `pkg-message` や特殊な状況に対応するためのファイルを含む ports もあります。 これらのファイルについての詳細および ports の一般的な説明については、 port 作成者のためのハンドブック をご覧下さい。

port は実際のソースコード (`distfile` とも呼ばれます) を含んではいません。 port の構築の展開部で、ダウンロードされたソースは自動的に `/usr/ports/distfiles` に保存されます。

### 4.5.1. ports のインストール

この節では、Ports Collection を利用してプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。 利用可能な `make` のターゲットや環境変数についての詳細は ports(7) をご覧ください。

### 警告:

いかなる port でも、構築する前には、 前節に書かれているように、Ports Collection をアップデートしてください。 サードパーティ製のソフトウェアをインストールすると、 セキュリティの脆弱性を引き起こす可能性があります。 その port に関連したセキュリティ上の問題がないことを、まずは https://vuxml.freebsd.org/ で確認してください。または、 新しい port をインストールする前に、 `pkg audit -F` を実行してください。 毎日のシステムのセキュリティ確認時に、 自動的にセキュリティの検査およびデータベースの更新を行うようにこのコマンドを設定できます。 詳しくは、pkg-audit(8) および periodic(8) を参照してください。

Ports Collection は、ネットワークに接続できることを想定しています。 また、superuser の権限も必要となります。

port をコンパイルしてインストールするには、 インストールしたい port のディレクトリに移動してください。 その後、プロンプトから `make install` と入力してください。 すると、次のような出力が現われるはずです。

    # cd /usr/ports/sysutils/lsof
    # make install
    >> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
    >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
    ===>  Extracting for lsof-4.88
    ...
    [extraction output snipped]
    ...
    >> Checksum OK for lsof_4.88D.freebsd.tar.gz.
    ===>  Patching for lsof-4.88.d,8
    ===>  Applying FreeBSD patches for lsof-4.88.d,8
    ===>  Configuring for lsof-4.88.d,8
    ...
    [configure output snipped]
    ...
    ===>  Building for lsof-4.88.d,8
    ...
    [compilation output snipped]
    ...
    ===>  Installing for lsof-4.88.d,8

    ===>  Installing for lsof-4.88.d,8
    ...
    [installation output snipped]
    ...
    ===>   Generating temporary packing list
    ===>   Compressing manual pages for lsof-4.88.d,8
    ===>   Registering installation for lsof-4.88.d,8
    ===>  SECURITY NOTE:
          This port has installed the following binaries which execute with
          increased privileges.
    /usr/local/sbin/lsof
    #

`lsof` は高い権限で動作するプログラムなので、 インストールする時にセキュリティに関する警告が表示されます。 インストールが終わったら、プロンプトが戻ります。

シェルによってはコマンドの実行ファイルを探す時間を短縮するために、 環境変数 `PATH` に登録されている ディレクトリのコマンド一覧をキャッシュするものがあります。 `tcsh` シェルを使っているのであれば、 フルパスを指定することなく新しくインストールしたコマンドを利用できるように、 `rehash` を実行してください。 `sh` シェルを使っているのであれば かわりに `hash -r` を実行してください。 詳細については、 あなたの使っているシェルのドキュメントをご覧ください。

インストールの間に、作業用ディレクトリが作成されます。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを削除することで、ディスク容量を節約でき、また port を新しいバージョンへアップデートする際に問題が起こる可能性を小さくします。

    # make clean
    ===>  Cleaning for lsof-88.d,8
    #

### 注記:

port を構築する際に、 `make install clean` と実行することで、 これらの余分な手順を省くことができます。

#### 4.5.1.1. ports のインストールのカスタマイズ

ports の中にはビルドオプションを指定できるものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには `www/firefox`, `security/gpgme` や `mail/sylpheed-claws` などがあります。 port が他のカスタマイズ可能なオプションを持つ ports に依存する場合には、デフォルトでは、ユーザに port のオプションをメニューから選択させる設定のため、 何度もユーザとの対話が起こり待たされることがあります。 これを避けるには、まず最初に port スケルトンで `make config-recursive` を実行して設定を一括で行い、その後 `make install [clean]` を実行して port を構築してインストールしてください。

### ヒント:

`config-recursive` を実行する際、 `all-depends-list` を実行すると、設定すべき ports の一覧を得ることができます。 多くの場合は、すべての依存 ports のオプションが定義され、 ports オプションの画面が表示されなくなり、 すべてのオプションが設定されたことを確認できるまで `make config-recursive` を実行すると良いでしょう。

port の構築後、 再びこのメニューを表示させてオプションの追加や削除、 設定の変更を行う方法はたくさんあります。 一つ目は port のディレクトリに `cd` で移動し、 `make config` と入力する方法です。 別の方法は `make showconfig` を使う方法です。 他の方法は `make rmconfig` の実行です。 このコマンドを実行すると選択されているすべてのオプションが削除され、 設定をもう一度やり直すことができます。 これらの方法や他の方法についての詳細は、 ports(7) マニュアルで説明されています。

ports は、いくつかの環境変数を参照する fetch(1) を用いてソースファイルをダウンロードします。 FreeBSD システムがファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 `FTP_PASSIVE_MODE`, `FTP_PROXY`, `FTP_PASSWORD` の環境変数を設定することなります。 対応している環境変数の一覧については fetch(3) をご覧ください。

インターネットに常時接続できないユーザのために `make fetch` コマンドが用意されています。 このコマンドを `/usr/ports` で実行してすべての distfiles をダウンロードするか、 `/usr/ports/net` といったカテゴリや、あるスケルトンにおいても実行できます。 ある port がライブラリやその他の ports に依存している場合には、 別のカテゴリの ports の distfiles はダウンロードされないことに注意してください。 port が依存しているすべての distfiles をダウンロードしたければ、 `make fetch-recursive` を使ってください。

めったにないことかもしれませんが、 ローカルに distfiles のリポジトリがあるような場合に、 `MASTER_SITES` 変数を変更することで `Makefile` で指定されているダウンロードの場所を 変更することができます。 設定する場合には、変更先を以下のようにして指定してください。

    # cd /usr/ports/directory
    # make MASTER_SITE_OVERRIDE= \
    ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch

`WRKDIRPREFIX` 変数と `PREFIX` 変数を変更することで、 作業ディレクトリやターゲットディレクトリをデフォルトのものから変更できます。

    # make WRKDIRPREFIX=/usr/home/example/ports install

とすると、ports は `/usr/home/example/ports` でコンパイルされ、すべて `/usr/local` 以下にインストールされます。

    # make PREFIX=/usr/home/example/local install

この場合、port のコンパイルは `/usr/ports` でおこない、`/usr/home/example/local` にインストールします。そして

    # make WRKDIRPREFIX=../ports PREFIX=../local install

とすれば両者を組み合わせることが可能です。

これらを環境変数に設定する方法もあります。 どのように環境変数を設定するかについては、 あなたの使っているシェルのマニュアルページを参照してください。

### 4.5.2. インストールした ports の削除

インストールされた ports は、 `pkg delete` コマンドで削除できます。 このコマンドの使用例は、pkg-delete(8) マニュアルページにあります。

あるいは、port のディレクトリにて `make deinstall` を実行することでも削除できます。

    # cd /usr/ports/sysutils/lsof
    make deinstall
    ===>  Deinstalling for sysutils/lsof
    ===>   Deinstalling
    Deinstallation has been requested for the following 1 packages:

    	lsof-4.88.d,8

    The deinstallation will free 229 kB
    [1/1] Deleting lsof-4.88.d,8... done

port が削除されるときに表示されるメッセージを読むことをお勧めします。 もし削除した port に依存するアプリケーションがあった場合には、 その情報が表示されますが、port の削除は行われます。 そのようなケースでは、依存を直すためにアプリケーションを再インストールするとよいでしょう。

### 4.5.3. ports のアップグレード

ports のインストール後、時間が経過すると、Ports Collection で新しいバージョンのソフトウェアを利用できるようになります。 この章では、 どのようにしてアップグレードする必要のあるソフトウェアを判断するか、 そしてアップグレードの方法について説明します。

インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、手順4.1「Portsnap を利用する方法」 もしくは 手順4.2「Subversion を用いる方法」 で書かれているアップデートのコマンドを使ってください。 FreeBSD 10 以降のシステム、または、pkg に変換されたシステムでは、 以下のコマンドを実行すると、現在利用可能なバージョンよりも古い ports の一覧が表示されます。

    # pkg version -l "<"

FreeBSD 9.`X` より前のシステムでは、 現在利用可能なバージョンよりも古い ports の一覧を表示されるには、以下のコマンドを実行してください。

    # pkg_version -l "<"

### 重要:

アップグレードする前に `/usr/ports/UPDATING` を、ファイルの頭から、ports を最後にアップデートした日、 もしくはシステムをインストールをした日に最も近い日まで目を通してください このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。 アップグレードする必要のある ports に関連した手順に注意し、 アップグレードする際にはこれらの手順に従ってください。

#### 4.5.3.1. ports のアップグレードおよび管理ツール

Ports Collection には、 実際にアップグレードを行うためのユーティリティがいくつか用意されています。 それぞれのユーティリティは長所と短所を持っています。

歴史的に、最もインストールされ使われているのは、 Portmaster または Portupgrade です。 Synth は新しいユーティリティです。

### 注記:

特定のシステムにおいて、 どのツールを選択するとベストかについては、 システム管理者によります。 これらのどのツールでも、使う前には、 データのバックアップをとることが推奨されます。

#### 4.5.3.2. portmaster を用いた ports のアップグレード

ports-mgmt/portmaster は、 インストールされている ports のアップグレードをおこなう、 とても小さなユーティリティです。 FreeBSD のベースシステムとしてインストールされているツールだけを使い、 他の ports やデータベースに依存しないように設計されています。 port からこのユーティリティをインストールするには以下のようにしてください。

    # cd /usr/ports/ports-mgmt/portmaster
    # make install clean

Portmaster は、 ports を 4 つのカテゴリに分類します。

- Root ports: 他の port に依存せず、 他の port からも依存されない ports。

- Trunk ports: 他の port には依存しないが、 他の port から依存されている ports。

- Branch ports: 他の port に依存し、 他の port からも依存されている ports。

- Leaf ports: 他の port に依存するが、 他の port からは依存されない ports。

これらのカテゴリの一覧や、アップデート可能な port の一覧を表示するには以下のようにしてください。

    # portmaster -L
    ===>>> Root ports (No dependencies, not depended on)
    ===>>> ispell-3.2.06_18
    ===>>> screen-4.0.3
            ===>>> New version available: screen-4.0.3_1
    ===>>> tcpflow-0.21_1
    ===>>> 7 root ports
    ...
    ===>>> Branch ports (Have dependencies, are depended on)
    ===>>> apache22-2.2.3
            ===>>> New version available: apache22-2.2.8
    ...
    ===>>> Leaf ports (Have dependencies, not depended on)
    ===>>> automake-1.9.6_2
    ===>>> bash-3.1.17
            ===>>> New version available: bash-3.2.33
    ...
    ===>>> 32 leaf ports

    ===>>> 137 total installed ports
            ===>>> 83 have new versions available

以下のコマンドを使うと、 古くなった ports をすべてアップデートします。

    # portmaster -a

### 注記:

Portmaster のデフォルトの設定では、 インストールされている port を削除する前に、 バックアップ用の package が作成されます。 このバックアップは、 新しいバージョンのインストールに成功すると削除されます。 `-b` を使うと、 Portmaster の自動的なバックアップの削除は行いません。 `-i` を追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。 多くのオプションが利用可能です。 portmaster(8) マニュアルページから、 それらの使用方法に関する詳細な説明を読んでください。

アップグレードの過程でエラーに遭遇した場合には、 `-f` を使ってすべての ports のアップグレードや再構築を行なってください。

    # portmaster -af

Portmaster を使ってシステムに新しい ports をインストールしたり、 新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。この機能を使う時には、 Ports Collection の場所を指定してください。

    # portmaster shells/bash

ports-mgmt/portmaster に関するより多くの情報は、`pkg-descr` にあります。

#### 4.5.3.3. Portupgrade を用いた ports のアップグレード

ports-mgmt/portupgrade は、 インストールした ports のアップグレードを行なうためのもう一つのユーティリティです。 このユーティリティは ports を管理するために用いられるアプリケーションのセットをインストールします。 Ruby に依存します。 port をインストールするには、以下を実行してください。

    # cd /usr/ports/ports-mgmt/portupgrade
    # make install clean

このユーティリティを使ってアップグレードを行う前に、 `pkgdb -F` を使って、 インストールされている ports の一覧を調べてください。 矛盾が検出された場合には修復してください。

システムにインストールされている port の中で古くなったものをすべてアップデートするには `portupgrade -a` を実行してください。 もし、すべての ports に対して個別にアップグレードするかどうかを確認したいのであれば、 `-i` を追加してください。

    # portupgrade -ai

ports で利用可能なすべてのアプリケーションではなく、 ある特定のアプリケーションだけを更新したいのであれば、 `portupgrade `pkgname`` を実行してください。 アップグレードするアプリケーションが依存しているすべての ports をまず先に更新したい場合には、 `-R` を使ってください。

    # portupgrade -R firefox

`-P` オプションを使うと、 portupgrade は `PKG_PATH` に登録されているローカルディレクトリから、 利用可能な package を探します。 ローカルに利用可能な packages が見つからなければ、 リモートサイトから package のダウンロードを試みます。 packages をローカルに見つけることができず、 リモートサイトからもダウンロードできない場合には、 portupgrade は ports からインストールを行ないます。 ports を使用したくなければ、`-PP` オプションを指定してください。 この最後のオプションを設定すると、 もし package が利用できなければ Portupgrade は終了します。

    # portupgrade -PP gnome3

また、ビルドやインストールを行なわず、 distfiles または packages だけをダウンロードしたければ、 `-F` オプションを指定してください。 利用可能なすべてのオプションについては、 portupgrade(1) のマニュアルを参照してください。

ports-mgmt/portupgrade に関するより多くの情報は、`pkg-descr` にあります。

### 4.5.4. ports とディスク容量

Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports をビルドしてインストールした後、 ports スケルトンで `make clean` を実行すると、作業用の `work` ディレクトリを削除します。 Portmaster を使って port をインストールする場合には、`-K` を使わなければこのディレクトリは自動的に削除されます。 Portupgrade がインストールされている場合には、 以下のコマンドはローカルの Ports Collection に見つかったすべての `work` ディレクトリを削除します。

    # portsclean -C

さらに、時間が経つにつれ `/usr/ports/distfiles` には、古くなったソースファイルがたまっていきます。 Portupgrade を使って、どの ports からも使われていないすべての distfiles を削除するには次のように実行してください。

    # portsclean -D

Portupgrade を使って、システムにインストールされている port から使われていない distfiles をすべて削除することができます。

    # portsclean -DD

もし Portmaster がインストールされているのであれば、以下を実行してください。

    # portmaster --clean-distfiles

デフォルトでは、このコマンドはインタラクティブに設定されているため、 ユーザに対して distfile を削除すべきかどうかを確認するプロンプトが表示されます。

これらのコマンドに加え、`ports-mgmt/pkg_cutleaves` は、 必要なくなった ports を削除する作業を自動化します。

戻る〓 | 上に戻る | 〓次へ
4.4. pkg によるバイナリ package の管理〓 | ホーム | 〓4.6. Poudriere を用いた package の構築

本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。