4.5. Ports Collection の利用

このセクションでは、Ports Collection を利用してシステムにプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。

4.5.1. Ports Collection の準備

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

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

sysinstall を利用する方法

ここでは、再び sysinstall を利用して Ports Collection を手動でインストールする方法について説明します。

  1. root ユーザ権限で、以下のように sysinstall (5.2 より前の FreeBSD では /stand/sysinstall) を実行してください。

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

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

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

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

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

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

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

Ports Collection をインストールしたり、最新の状態にしておくためのもう一つの方法は CVSup を利用する方法です。 ports 用の CVSup ファイル /usr/share/examples/cvsup/ports-supfile をご覧ください。 CVSup を使うための情報や、 このファイルに関する説明は CVSup を使う (Section A.5) にあります。

CVSup を利用する方法

ここでは、CVSup を利用して Ports Collection をインストールする方法について簡単に説明します。 あなたの ports ツリーを最新の状態にしておきたい、または CVSup についてもっと知りたいのであれば、 先ほど紹介したセクションをご覧ください。

  1. まず net/cvsup-without-gui package をインストールしてください。

    # pkg_add -r cvsup-without-gui
    

    インストールについての詳細は、CVSup のインストール (Section A.5.2) を参照してください。

  2. cvsup を実行してください。

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

    cvsup.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.5.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.5.7) にあります。

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

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

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 (security/portaudit) に用意されています。 新しく port をインストールする前に、 portaudit -F コマンドを実行すると、 最新の脆弱性に関するデータベースがダウンロードされます。 セキュリティの検査およびデータベースの更新は、 日々のセキュリティチェックで行なわれます。 詳しくは、portaudit(1) および periodic(8) のマニュアルページを参照してください。

4.5.2.1. CD-ROM からの ports のインストール

FreeBSD プロジェクトの公式 CD-ROM イメージには もう distfiles は収録されていません。 あらかじめコンパイルされた packages が CD-ROM の大部分を占めています。 一方、FreeBSD PowerPak のような CD-ROM 製品は distfiles を収録しています。 FreeBSD Mall といったベンダからこれらの製品を注文できます。 このセクションではこのような FreeBSD の CD-ROM セットを持っていることを前提としています。

FreeBSD CD-ROM をドライブに入れ、 /cdrom にマウントしてください (ほかのマウントポイントを使用したければ、 CD_MOUNTPTS 変数を設定してください)。 まず、インストールしたい 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 file:/cdrom/ports/distfiles/.
===>  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 のコンパイルや インストール中に表示されるこれらの警告に注意してください。

Note: makemake install と二つに分けられた手順の代わりに、 最初から make install と実行することで、 手順の二番目の操作を省くことができます。

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

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

4.5.2.2. インターネット経由での ports のインストール

前セクションと同じように、このセクションでは、 インターネットへの接続が可能であることを前提としています。 もしインターネット接続が不可能な場合は、 CD-ROM からのインストール や、distfile を手動で /usr/ports/distfiles に置く作業が必要になるでしょう。

インターネット経由で port をインストールする方法は、 CD-ROM からインストールする場合と完全に同じです。 唯一異なる部分は distfile を CD-ROM からではなく、 インターネット経由でダウンロードするということです。

次のように、必要な手順は同じです。

# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===>  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]
...
===>  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.
#

ご覧のとおり、 出力の違いはシステムがどこから distfile を入手したか示す行だけです。

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.3. ports ディレクトリの変更

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

# make PORTSDIR=/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 PORTSDIR=../ports PREFIX=../local install

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

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

4.5.2.4. imake の使用

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

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

ports のインストール方法について知ればおそらく、 インストールした後になって間違っていたことに気付いた時などに備えて、 それらを削除するにはどうすれば良いのか疑問に感じることでしょう。 さて、前の例 (例のまま何も変更していない人は lsof) を削除してみましょう。ports のインストールと同じように、 まず最初にやらなければならないのは port のディレクトリ /usr/ports/sysutils/lsof に移動することです。 ディレクトリを移動したら、lsof を削除するのに必要な準備は終わりです。 削除するには、make deinstall コマンド を実行します。

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for lsof-4.57

極めて簡単な作業です。 これでうまく lsof をシステムから削除できました。 もう一度再インストールしたい場合には、 /usr/ports/sysutils/lsof ディレクトリから make reinstall を実行することで行なうことができます。

一度 make clean を実行してしまうと、 make deinstall および make reinstall の一連の作業はできません。 make clean を実行した後で インストールした port を削除したいのであれば、 ハンドブックの packages のセクション で説明されているように pkg_delete(1) を使ってください。

4.5.4. ports とディスク容量

Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 このように ports ツリーのサイズは大きくなりがちなので、 ports からソフトウェアをビルドしてインストールした後に、 常に、作業用の work ディレクトリを make clean コマンドで削除するようにしましょう。 このコマンドは、ビルドやインストールされた port の work ディレクトリを削除します。 また、配布ソースファイルを distfiles ディレクトリから削除したり、 必要なくなればインストールした ports を削除してもよいでしょう。

refuse ファイルを使って、 利用できる port のカテゴリを制限することもできます。 CVSup は、 このファイルにエントリされたカテゴリに属するファイルを更新しません。 refuse ファイルに関するより詳しい説明は Section A.5.3.1 にあります。

4.5.5. ports のアップグレード

Note: Ports Collection を更新したら、port をアップグレードする前に /usr/ports/UPDATING ファイルに目を通してください。 このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。

ports を最新の状態に維持し続けるのはとても大変です。 たとえば、port をアップグレードする作業は次のようになります。 まず ports のディレクトリへ移動し、port をビルドします。 次に、古い port を削除し、新しい port をインストールします。 最後にビルド後のクリーンアップを行います。 5 つの ports のアップグレードを考えただけでも大変ですよね? このようにシステム管理者にとってアプリケーションの管理は大きな悩みの種ですが、 この問題を解決してくれるユーティリティがあります。 たとえば sysutils/portupgrade は、あなたの代わりにこれらの作業をすべて行ってくれます! 通常の port をインストールするように make install clean コマンドでインストールしてください。

まず、pkgdb -F コマンドを使い、 データベースを作成します。 このコマンドはインストールされている ports を調べ、 /var/db/pkg ディレクトリにデータベースファイルを作成します。 そして portupgrade -a を実行すると、 このデータベースファイルと ports INDEX ファイルが調べられ、 更新の必要がある ports のダウンロード、ビルド、バックアップ、インストール、そしてクリーンアップが行われます。 さまざまな利用状況に対応するため、 portupgrade にはたくさんのオプションがあります。 以下では重要なオプションについて紹介します。

データベース上のすべてのアプリケーションではなく、 ある特定のアプリケーションだけを更新したいのであれば、 portupgrade pkgname を実行してください。 アップグレードしたいアプリケーションに依存するすべての packages を同時に更新したい場合には、-r オプションを付けて portupgrade を実行してください。 アップグレードしたいアプリケーションが必要とするすべての アプリケーションを更新したい場合には、 -R オプションを使ってください。

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

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

Note: 定期的に、もしくは portupgrade が要求してきたら、package データベースの整合性を保つために pkgdb -F を実行してください。 package データベースの更新中に portupgrade を中止しないでください。 整合性のないデータベースが作成されることがあります。

このようなユーティリティは他にも ports/sysutils ディレクトリにあるので、目的のものを探してください。