このセクションでは、Ports Collection を利用してシステムにプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。
ports をインストールするためには、まず Ports Collection を用意しなくてはなりません。 Ports Collection とは、/usr/ports 以下に置かれる Makefile, 修正パッチ、 説明文などの一連のファイルのことです。
FreeBSD のシステムインストール時に、 sysinstall が Ports Collection をインストールするかどうかを尋ねてきたはずです。 No を選んだ場合、以下の作業をおこない Ports Collection をインストールしてください。
CVSup を利用する方法
ここでは、CVSup を利用して Ports Collection をインストールする方法や最新の状態に保つ方法を簡単に説明します。 CVSup についてもっと知りたいのであれば、 CVSup を使う をご覧ください。
まず net/cvsup-without-gui package をインストールしてください。
# pkg_add -r cvsup-without-gui
インストールについての詳細は、CVSup のインストール (Section A.5.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 サーバを指定することを省略したいと思う方もいるでしょう。
そのような場合には、 まず root ユーザ権限で、 /usr/share/examples/cvsup/ports-supfile を /root や、あなたのホームディレクトリなどへコピーしてください。
次に ports-supfile を編集します。
CHANGE_THIS.FreeBSD.org を最寄りの CVSup サーバに変更してください。 ミラーサイトの完全なリストは CVSup サイト (Section A.5.7) にあります。
その後、以下のように cvsup を実行してください。
# cvsup -L 2 /root/ports-supfile
cvsup(1) コマンドを時間をおいて実行すると、 最新の変更点がダウンロードされて、あなたの手元の Ports Collection に加えられます。 Ports Collection 全体が再度ダウンロードされることはありません。
Portsnap を利用する方法
portsnap(8) は Ports Collection を配布するための新しいシステムです。 FreeBSD 6.0 から追加されました。 もし、それより古いシステムをお使いでしたら、sysutils/portsnap port をインストールしてください。
# pkg_add -r portsnap
Portsnap の機能についての詳細は Portsnap を使う を参照してください。
もし /usr/ports ディレクトリが存在しなければ、 以下のように空のディレクトリを作成してください。
# mkdir /usr/ports
圧縮された Ports Collection のスナップショットを /var/db/portsnap にダウンロードしてください。 この作業が終われば、ネットワークへの接続を終了してもかまいません。
# portsnap fetch
初めて Portsnap を使う時は、 スナップショットをまず /usr/ports に展開してください。
# portsnap extract
すでに /usr/ports が用意されていて、 アップデートだけを行ないたいのであれば、 代わりに以下のコマンドを実行してください。
# portsnap update
sysinstall を利用する方法
ここでは、sysinstall を利用してインストールメディアから Ports Collection をインストールする方法について説明します。 この方法では、リリース時の古い Ports Collection がインストールされることに注意してください。 もし、インターネットへの接続が可能であれば、 これまでに説明した方法を使ってください。
root ユーザ権限で、以下のように sysinstall (5.2 より前の FreeBSD では /stand/sysinstall) を実行してください。
# sysinstall
スクロールダウンして Configure を選び、 Enter を押してください。
スクロールダウンして Distributions を選び、 Enter を押してください。
スクロールダウンして ports を選び、 Space キーを押してください。
Exit までスクロールアップして、 Enter を押してください。
CDROM や FTP といったインストールメディアを選択してください。
Exit までスクロールアップして、Enter を押してください。
X を押して、 sysinstall を終了してください。
一番最初に知らなければならないのは、 Ports Collection は “スケルトン” と呼ばれるもので構成されているという事実です。 port スケルトンは簡単に言うと、アプリケーションを FreeBSD 上で正しくコンパイルしインストールする方法を提供する最小限のファイルのセットのことです。 それぞれの port スケルトンには、次のファイルが含まれています。
Makefile。 Makefile にはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する、 さまざまな命令文が含まれています。
distinfo ファイル。 このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、 それらのファイルがダウンロードによって壊れていないかを (md5(1) を使って) 確認するためのチェックサム情報が含まれています。
files ディレクトリ。 このディレクトリには FreeBSD システム上でプログラムをコンパイルし、 インストールするための修正パッチが含まれています。 修正パッチ (patch) とは基本的に、 個々のファイルに対する変更点を表した小さなファイル群のことです。 ファイルはプレインテキスト形式で、 “10 行目を削除” や “26 行目を ... に変更” などと書かれています。 修正パッチは、“diff (差分)” とも呼ばれます。 これは、修正パッチが diff(1) プログラムで作成されるからです。
このディレクトリには、その port の構築に必要な その他のファイルが入る場合もあります。
pkg-descr ファイル。 これにはプログラムの、複数行にわたる詳しい説明文が含まれます。
pkg-plist ファイル。 これは、その port によってインストールされる全ファイルのリストです。 これにはプログラムを削除する際に、 どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。
これらの他に 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) のマニュアルページを参照してください。
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: make、make 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_SITES を ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ に変更しています。
Note: ports の中にはビルドオプションを指定できる (または要求してくる) ものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには www/mozilla, security/gpgme や mail/sylpheed-claws などがあります。 利用可能なオプションがある場合にはメッセージが表示されます。
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
とすれば両者を組み合わせることが可能です (省略せずに記述したらこのページに収めるには長すぎるのですが、 考え方は理解していただけたと思います)。
あるいは、これらを環境変数に設定する方法もあります。 どのようにすれば良いかについては、 あなたの使っているシェルのマニュアルページを参照してください。
(X Window System に含まれる) imake を使用する ports の場合は PREFIX が機能せず、 /usr/X11R6 にインストールしようとします。 また、Perl 関連の ports も同様に PREFIX を無視して Perl ツリーにインストールします。 これらの ports で PREFIX がきちんと参照されるように変更するのは、ほとんど不可能です。
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) を使ってください。
Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 このように ports ツリーのサイズは大きくなりがちなので、 ports からソフトウェアをビルドしてインストールした後に、 常に、作業用の work ディレクトリを make clean コマンドで削除するようにしましょう。 このコマンドは、ビルドやインストールされた port の work ディレクトリを削除します。 また、配布ソースファイルを distfiles ディレクトリから削除したり、 必要なくなればインストールした ports を削除してもよいでしょう。
refuse ファイルを使って、 利用できる port のカテゴリを制限することもできます。 CVSup は、 このファイルにエントリされたカテゴリに属するファイルを更新しません。 refuse ファイルに関するより詳しい説明は Section A.5.3.1 にあります。
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 オプションを使ってください。 このオプションを使うと、portupgrade は PKG_PATH
に登録されているローカルディレクトリを検索します。 ローカルに packages
が見つからなければ、 リモートサイトからダウンロードを試みます。 packages
をローカルに見つけることができず、 リモートサイトからもダウンロードできない場合には、 portupgrade は ports からインストールを行ないます。 ports
を使用したくなければ、-PP オプションを指定してください。
また、ビルドやインストールを行なわず、 distfiles (-P
が指定されている場合は packages) だけをダウンロードしたければ、 -F オプションを指定してください。 詳細は portupgrade(1)
を参照してください。
Note: 定期的に、もしくは portupgrade が要求してきたら、package データベースの整合性を保つために pkgdb -F を実行してください。 package データベースの更新中に portupgrade を中止しないでください。 整合性のないデータベースが作成されることがあります。
このようなユーティリティは他にも ports/sysutils ディレクトリにあるので、目的のものを探してください。