4.5. Ports Collection の利用

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

4.5.1. Ports Collection の準備

ports をインストールするためには、まず Ports Collection を用意しなくてはなりません。 Ports Collection とは、/usr/ports 以下に置かれる Makefile, 修正パッチ、 説明文などの一連のファイルのことです。

FreeBSD のシステムインストール時に、 sysinstall が Ports Collection をインストールするかどうかを尋ねてきたはずです。 No を選んだ場合、以下の作業をおこない Ports Collection をインストールしてください。

CVSup を利用する方法

ここでは、CVSup プロトコルを利用して Ports Collection をインストールする方法や最新の状態に保つ方法を簡単に説明します。 CVSup についてもっと知りたいのであれば、 CVSup を使う をご覧ください。

Note: csup は、 FreeBSD システムにおける CVSup プロトコルの実装です。 FreeBSD 6.2 から導入されました。 古い FreeBSD release のユーザは、 net/csup port/package からインストールしてください。

はじめて csup を使う際には、 /usr/ports が空であることを確認してください! 他の方法により Ports Collection がすでに用意されていると、 csup は削除されたパッチを Ports Collection から取り除かないでしょう。

  1. csup を実行してください。

    # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
    

    cvsup.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.6.7) にあります。

    Note: 自分用の ports-supfile を使って、 コマンドラインから CVSup サーバを指定することを省略したいと思う方もいるでしょう。

    1. そのような場合には、 まず root ユーザ権限で、 /usr/share/examples/cvsup/ports-supfile/root や、あなたのホームディレクトリなどへコピーしてください。

    2. 次に ports-supfile を編集します。

    3. CHANGE_THIS.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.6.7) にあります。

    4. その後、以下のように csup を実行してください。

      # csup -L 2 /root/ports-supfile
      
  2. csup(1) コマンドを時間をおいて実行すると、 最新の変更点がダウンロードされて、あなたの手元の Ports Collection に加えられます。 Ports Collection 全体が再度ダウンロードされることはありません。

Portsnap を利用する方法

Portsnap は Ports Collection を配布するための新しいシステムです。 Portsnap の機能についての詳細は Portsnap を使う を参照してください。

  1. 圧縮された Ports Collection のスナップショットを /var/db/portsnap にダウンロードしてください。 この作業が終われば、ネットワークへの接続を終了してもかまいません。

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

    # portsnap extract
    

    すでに /usr/ports が用意されていて、 アップデートだけを行ないたいのであれば、 代わりに以下のコマンドを実行してください。

    # portsnap update
    

sysinstall を利用する方法

ここでは、sysinstall を利用してインストールメディアから Ports Collection をインストールする方法について説明します。 この方法では、リリース時の古い Ports Collection がインストールされることに注意してください。 もし、インターネットへの接続が可能であれば、 これまでに説明した方法を使ってください。

  1. root ユーザ権限で、以下のように sysinstall を実行してください。

    # sysinstall
    
  2. スクロールダウンして Configure を選び、 Enter を押してください。

  3. スクロールダウンして Distributions を選び、 Enter を押してください。

  4. スクロールダウンして ports を選び、 Space キーを押してください。

  5. Exit までスクロールアップして、 Enter を押してください。

  6. CDROM や FTP といったインストールメディアを選択してください。

  7. Exit までスクロールアップして、Enter を押してください。

  8. X を押して、 sysinstall を終了してください。

4.5.2. ports のインストール

一番最初に知らなければならないのは、 Ports Collection は “スケルトン” と呼ばれるもので構成されているという事実です。 port スケルトンは簡単に言うと、アプリケーションを FreeBSD 上で正しくコンパイルしインストールする方法を提供する最小限のファイルのセットのことです。 それぞれの port スケルトンには、次のファイルが含まれています。

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

port はソースコードからアプリケーションを構築する方法を 提供しますが、実際のソースコードは含んでいません。 ソースコードは CD-ROM やインターネットから入手できます。 ソースコードはソフトウェア作者のお気に入りの形式で配布されます。 たいてい、tar と gzip で作成された圧縮アーカイブとして配布されますが、 他のツールで圧縮されていたり、圧縮されずに配布されることもあります。 どのような形式で配布されているかに関わらず、 これらのプログラムのソースコードは “distfile” と呼ばれています。 以下では FreeBSD port をインストールする 2 つの方法について説明します。

Note: ports をインストールするには、 root としてログインする必要があります。

Warningport をインストールする前に、 Ports Collection が最新であることを確認してください。 また、そのアプリケーションに関連したセキュリティ上の問題がないことを http://vuxml.freebsd.org/ で確認してください。

アプリケーションをインストールする前に、 portaudit を使って セキュリティに関する脆弱性を自動的に調べることができます。 このツールは Ports Collection (ports-mgmt/portaudit) に用意されています。 新しく port をインストールする前に、 portaudit -F コマンドを実行すると、 最新の脆弱性に関するデータベースがダウンロードされます。 セキュリティの検査およびデータベースの更新は、 日々のセキュリティチェックで行なわれます。 詳しくは、portaudit(1) および periodic(8) のマニュアルページを参照してください。

Ports Collection は、ネットワークに接続できることを想定しています。 もし接続できなければ、distfile のコピーを /usr/ports/distfiles に手動で置いてください。

まず、インストールしたい port のディレクトリに移動してください。

# cd /usr/ports/sysutils/lsof

lsof ディレクトリに移動すると、 port スケルトンがあるのが確認できると思います。 次に行なうのは、port のコンパイルまたは “ビルド (build)” です。 これは、プロンプトから単に make と入力するだけで行なえます。 そうすると、次のような出力が現われるはずです。

# make
>> lsof_4.57D.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.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure output snipped]
...
===>  Building for lsof-4.57
...
[compilation output snipped]
...
#

コンパイルが終了してプロンプトに戻ることを確認してください。 次に port のインストールを行ないます。 port をインストールするのに必要なのは、 make コマンドに一つの単語、 install を指定することだけです。

# make install
===>  Installing for lsof-4.57
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#

プロンプトに戻ったら、 インストールしたプログラムは実行できるようになっています。 lsof は高い権限で動作するプログラムなので、 セキュリティに関する警告が表示されます。 ports のコンパイルや インストール中に表示されるこれらの警告に注意してください。

コンパイル時に作成される作業用ディレクトリを削除すると良いでしょう。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを残しておくと、ディスク容量を消費するだけでなく、 port を新しいバージョンへアップデートする際に問題を引き起こす可能性があります。

# make clean
===>  Cleaning for lsof-4.57
#

Note: makemake install および make clean と三つに分けられた手順の代わりに、 最初から make install clean と実行することで、 余分な手順を二つ省くことができます。

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

FreeBSD Mall の FreeBSD Toolkit のようなサードパーティ製の DVD-ROM 製品の中には distfiles を収録しているものがあります。 これらを Ports Collection で使うことができます。 DVD-ROM を /cdrom にマウントしてください。 ほかのマウントポイントを使用したければ、 CD_MOUNTPTS 変数を設定してください。 ディスク上に必要な distfiles が存在すると、 自動的に利用されます。

Note: port には CD-ROM への収録を許可しないライセンス条項を持つものがあることに 注意してください。 これにはダウンロード前に登録を必要としたり、 再配布が禁止されているなどという理由があります。 CD-ROM に含まれていない port をインストールしたい場合には、 ネットワークに接続する必要があります。

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

ネットワークに常時接続できないユーザのために make fetch コマンドが用意されています。 (ネットワークに接続している時に) このコマンドを ports のトップディレクトリ (/usr/ports) で実行してください。 必要なファイルがダウンロードされます。 このコマンドは /usr/ports/net といった、より下の階層のカテゴリにおいても使うことができます。 ある port がライブラリやその他の ports に依存している場合には、 それらの distfiles はダウンロードされないことに注意してください。 port が依存しているものもダウンロードしたければ fetch の代わりに fetch-recursive を使って下さい。

Note: 前述した make fetch と同じように、トップディレクトリで make を実行するとすべての port がビルドされます。 しかしながら ports の中には同時に存在できないものがあったり、 異なる ports の別のファイルが同じ名前で インストールされる場合があることに注意してください。

めったにないことかもしれませんが、 MASTER_SITES (ファイルをダウンロードしてくる場所) に書かれているサイト以外から tarball を持ってくることが必要になる場合があります。 そのような場合には以下のように MASTER_SITES を変更してください。

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

上の例では MASTER_SITESftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ に変更しています。

Note: ports の中にはビルドオプションを指定できる (または要求してくる) ものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには www/mozilla, security/gpgmemail/sylpheed-claws などがあります。 利用可能なオプションがある場合にはメッセージが表示されます。

4.5.2.1. ports ディレクトリの変更

作業ディレクトリやターゲットディレクトリを デフォルトのものから変更したほうが有用な場合 (もしくは変更しなければならない場合) があります。 WRKDIRPREFIX 変数と PREFIX 変数を変更することで、 違うディレクトリを使用することができます。 たとえば、

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

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

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

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

もちろん、

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

とすれば両者を組み合わせることが可能です (省略せずに記述したらこのページに収めるには長すぎるのですが、 考え方は理解していただけたと思います)。

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

4.5.2.2. imake の使用

(X Window System に含まれる) imake を使用する ports の場合は PREFIX が機能せず、 /usr/X11R6 にインストールしようとします。 また、Perl 関連の ports も同様に PREFIX を無視して Perl ツリーにインストールします。 これらの ports で PREFIX がきちんと参照されるように変更するのは、ほとんど不可能です。

4.5.2.3. ports の再構築

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

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

ports のインストール方法について知ればおそらく、 インストールした後になって間違っていたことに気付いた時などに備えて、 それらを削除するにはどうすれば良いのか疑問に感じることでしょう。 さて、前の例 (例のまま何も変更していない人は lsof) を削除してみましょう。 packages を削除する時とまったく同じく (packages の章 で説明したように) pkg_delete(1) コマンドで ports を削除できます。

# pkg_delete lsof-4.57

4.5.4. ports のアップグレード

まず最初に pkg_version(1) コマンドを使って、 古くなってしまった ports の中で新しいバージョンにアップデート可能なものを Ports Collection からリストアップしてください。

# pkg_version -v

4.5.4.1. /usr/ports/UPDATING

Ports Collection を更新したら、port をアップグレードする前に /usr/ports/UPDATING ファイルに目を通してください。 このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。

もし、この節に書いてあることと UPDATING に書かれていることが矛盾している場合には、 UPDATING を優先してください。

4.5.4.2. portupgrade を用いた ports のアップグレード

portupgrade は、 インストールした ports のアップグレードを簡単に行なうためのユーティリティです。 ports-mgmt/portupgrade port から利用できます。 他の port と同じように make install clean コマンドでインストールしてください。

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

pkgdb -F コマンドを使って、 インストールされている ports を調べてください。 矛盾が検出された場合には修復してください。 アプリケーションをアップデートする前には、 この作業を定期的に行なうとよいでしょう。

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

# portupgrade -ai

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

# portupgrade -R firefox

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

# portupgrade -PP gnome2

また、ビルドやインストールを行なわず、 distfiles (-P が指定されている場合は packages) だけをダウンロードしたければ、 -F オプションを指定してください。 詳細は portupgrade(1) を参照してください。

4.5.4.3. Portmanager を用いた ports のアップグレード

インストールした ports のアップグレードを簡単に行なうためのもうひとつのユーティリティが Portmanager です。 ports-mgmt/portmanager port から利用できます。

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

インストールされているすべての ports を次のような簡単なコマンドでアップグレードできます。

# portmanager -u

Portmanager の作業を確認しながら行いたい場合には、 -ui オプションを使ってください。 Portmanager を使って、 システムに新しい ports をインストールすることもできます。 通常の make install clean コマンドと異なり、 選択した port をビルドしインストールする前に、 依存している port をすべてアップグレードします。

# portmanager x11/gnome2

選択した port の依存関係について問題が発生した場合には、 Portmanager を使って修復することができます。 修正が終ったら、問題を含んでいた port は再構築されます。

# portmanager graphics/gimp -f

詳細については portmanager(1) を参照してください。

4.5.4.4. Portmaster を用いた ports のアップグレード

インストールした ports のアップグレードを行うためのもう一つのユーティリティが Portmaster です。 Portmaster は、 どの ports をアップグレードすべきかの判断を、 (他の ports に依存せずに) “base” システムのツールと /var/db/pkg/ の情報から行うよう設計されています。 ports-mgmt/portmaster から利用できます。

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

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

  • Root ports (他の port に依存しません。他の port からも依存されません。)

  • Trunk ports (他の port に依存しませんが、他の port から依存されます。)

  • Branch ports (他の port に依存し、他の port からも依存されます。)

  • Leaf ports (他の port に依存しますが、他の port からは依存されません。)

-L オプションを使うと、 インストールした 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)
===>>> apache-2.2.3
        ===>>> New version available: apache-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

Note: Portmaster のデフォルトの設定では、 インストールされている port を削除する前にバックアップ用の package が作成されます。 このバックアップは、新しいバージョンのインストールに成功すると削除されます。 -b オプションを使うと、 Portmaster はバックアップを自動的に削除しません。 -i オプションを追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。

アップグレードの過程でエラーに遭遇した場合には、 -f オプションを使ってすべての ports のアップグレードや再構築をできます。

# portmaster -af

Portmaster を使ってシステムに新しい ports をインストールしたり、新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。

# portmaster shells/bash

詳細については portmaster(8) を参照してください。

4.5.5. ports とディスク容量

Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports からソフトウェアをビルドしてインストールした後には、 常に作業用の work ディレクトリを make clean コマンドで削除するようにしましょう。 以下のコマンドで Ports Collection を掃除することができます。

# portsclean -C

distfiles ディレクトリには、たくさんのソースファイルがたまっていきます。 手動でそれらのファイルを削除してもよいのですが、 どの ports からも使われていない distfiles を次のコマンドで削除できます。

# portsclean -D

また、システムにインストールされている port から使われていない distfiles をすべて削除するには、以下のコマンドを使ってください。

# portsclean -DD

Note: portsclean ユーティリティは portupgrade ツール群の一部です。

インストールした ports のうちで、 必要なくなったものは削除してください。 ports-mgmt/pkg_cutleaves port は、 この作業を自動化するツールです。