5.6. Ports Collection の利用

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

警告:

FreeBSD Ports プロジェクトは、2012 年にバージョン管理システムを CVS から Subversion へと移行しました。 一般的な ports の利用において推奨される方法は Portsnap です。 ローカルで ports をカスタマイズしたい (すなわち、ローカルで追加のパッチをメンテナンスしたい) と考えているユーザは、直接 Subversion を使うとよいでしょう。 CVSup のサービスは、 2013 年 2 月 28 日に廃止されました。

5.6.1. Ports Collection の準備

Ports Collection とは、/usr/ports 以下に置かれる Makefile, 修正パッチ、 説明文などの一連のファイルのことです。このファイルのセットは、 アプリケーションをコンパイルして FreeBSD にインストールするのに用いられます。 以下では、FreeBSD のセットアップ時に Ports Collection をインストールしなかった場合に、 Ports Collection を準備する方法について示します。

手順5.1 Portsnap を利用する方法

Portsnap は Ports Collection を取得するための速くて使いやすく、 多くのユーザに推奨されるツールです。 Portsnap の機能についての詳細は Portsnap を使う の節を参照してください。

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

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

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

    # portsnap fetch # portsnap update
手順5.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 から Subversion をインストールできます。

    # pkg_add -r subversion

    package の管理に pkgng を使っているのであれば、代わりに以下のようにして Subversion をインストールできます。

    # pkg install subversion
  2. ports ツリーをチェックアウトしてください。 パフォーマンスを良くするため、以下のコマンドにおいて、 svn0.us-east.FreeBSD.orgSubversion ミラー の中から地理的に近い場所にあるミラーに置き換えてください。 コミッタの方々は、最初に Subversion Primer を読んで、適切なプロトコルを選択してください。

    # svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports
  3. Subversion でチェックアウトした後、 /usr/ports をアップデートするには、以下を実行してください。

    # svn update /usr/ports
手順5.3 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 を終了してください。

5.6.2. CVSup/csup から portsnap への移行

警告:

2013 年 2 月 28 日までに ports ツリーの CVS へのエクスポートは終了します。 そのため、CVSup および csup を用いて ports ツリーをアップデートすることはできなくなります。

手順5.4 Portsnap への移行

移行に際しては、 /usr に約 1 GB のディスク容量と、 さらに Portsnap は約 150 MB のディスク容量を /var に必要とします。

  1. もし cron(8) を使って CVSup csup を実行するなど、 自動的な ports のアップデートを行なっているのであれば、 停止してください。

  2. 現在の ports ツリーを一時的に別の場所に移動します。

    # mv /usr/ports /usr/ports.old
  3. 新しい ports ツリーを Portsnap を使ってダウンロードして、 /usr/ports に展開してください。

    # portsnap fetch extract
  4. distfiles および保存されている packages を新しい port ツリーに移動してください。

    # mv /usr/ports.old/distfiles /usr/ports # mv /usr/ports.old/packages /usr/ports
  5. 古い ports ツリーを削除してください。

    # rm -rf /usr/ports.old
  6. もし CVSup を使用していたのであれば、アンインストールできます。

    # pkg_delete -r -v cvsup-without-gui-\*

    pkgng のユーザは、 以下のコマンドを使って削除できます。

    # pkg delete cvsup-without-gui

Portsnap の詳細と、 Portsnap を用いた ports ツリーのアップデート方法については、 Portsnap を使う の節を読んでください。

5.6.3. ports のインストール

port スケルトンは、アプリケーションを FreeBSD 上で正しくコンパイルしインストールする方法を提供するファイルのセットのことです。 それぞれの port スケルトンには、次のファイルが含まれています。

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

  • distinfo。 このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、 それらのファイルがダウンロードによって壊れていないかを (sha256(1) を使って) 確認するためのチェックサム情報が含まれています。

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

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

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

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

port は実際のソースコード (distfile とも呼ばれます) を含んではいません。 ソースコードはソフトウェアの作者が好む形式で配布されます。 以下では port をインストールする 2 つの方法について説明します。

注記:

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

警告:

port をコンパイルする前に、 Ports Collection が最新であることを確認してください。 また、その port に関連したセキュリティ上の問題がないことを http://vuxml.freebsd.org/ で確認してください。ports-mgmt/portaudit をインストールしているのであれば、 新しく port をインストールする前に、 portaudit -F コマンドを実行して、 最新の脆弱性に関するデータベースをダウンロードしてください。 セキュリティの検査およびデータベースの更新は、 日々のセキュリティチェックで行なわれます。 詳しくは、portaudit(1) および periodic(8) のマニュアルページを参照してください。

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

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

# cd /usr/ports/sysutils/lsof

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] ... #

コンパイルが終了すると、プロンプトに戻ります。 次に make install を使って、port のインストールを行ないます。

# 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 #

注記:

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

注記:

デフォルトでは、ユーザに port のオプションを選択させる設定のため、 make install だけの実行では、ユーザとの対話が起こり長時間待たされることがあります。 依存する port の数が多い場合に、これを避けるには、まず最初に make config-recursive を実行して設定を一括で行い、その後 make install [clean] を実行してください。

ヒント:

config-recursive を実行する際、 make(1) のターゲットである all-depends-list を実行すると、設定すべき ports の一覧を得ることができます。 多くの場合は、すべての依存 ports のオプションが定義され、 ports オプションの dialog(1) 画面が表示されなくなり、 すべてのオプションが意図通りに設定されたことを確認できるまで make config-recursive を実行すると良いでしょう。

注記:

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

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

注記:

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

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

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

注記:

トップディレクトリで 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/ に変更しています。

注記:

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

5.6.3.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

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

そして、

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

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

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

5.6.3.2. ports の再構築

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

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

インストールされた ports および packages は、 pkg_delete(1) コマンドで削除できます。

# pkg_delete lsof-4.57

5.6.5. ports のアップグレード

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

# pkg_version -v

5.6.5.1. /usr/ports/UPDATING を読む

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

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

5.6.5.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 を調べてください。 矛盾が検出された場合には修復してください。 アプリケーションをアップデートする前には、 この作業を定期的に行なうとよいでしょう。

システムにインストールされている port の中で古くなったものをすべてアップデートするには portupgrade -a を実行してください。 もし、すべての 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) を参照してください。

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

インストールした ports のアップグレードを行うためのもう一つのユーティリティが ports-mgmt/portmaster です。 portmaster は、 他の ports に依存せずに、base システムのツールのみを使うように設計されています。 このアプリケーションは、 どの ports をアップグレードすべきかの判断を、 /var/db/pkg/ の情報を使って行います。 port をインストールするには以下のようにしてください。

# 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) ===>>> 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 をアップグレードするかどうかの選択を対話的に行うことがでます。

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

# portmaster -af

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

# portmaster shells/bash

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

5.6.6. ports とディスク容量

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

# portsclean -C

時間が経つにつれ distfiles ディレクトリには、古くなったソースファイルがたまっていきます。 次のコマンドで、どの ports からも使われていない distfiles を削除できます。

# portsclean -D

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

# portsclean -DD

注記:

portsclean ユーティリティは ports-mgmt/portupgrade ツール群の一部です。

ports-mgmt/pkg_cutleaves port は、 必要なくなった ports を削除する作業を自動化します。

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

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

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。

a