<?xml version="1.0" encoding="euc-jp"?>
<!--
The FreeBSD Documentation Project
The FreeBSD Japanese Documentation Project
Original revision: r42794
$FreeBSD$
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="ports">
<title>アプリケーションのインストール - packages と ports</title>
<sect1 xml:id="ports-synopsis">
<title>この章では</title>
<indexterm><primary>ports</primary></indexterm>
<indexterm><primary>packages</primary></indexterm>
<para>&os; の基本システムには数多くのシステムツールが含まれています。
&os; は、サードパーティ製のソフトウェアの導入を支援するために、
ソースコードをコンパイルしてインストールする Ports Collection と、
コンパイル済みのバイナリをインストールする packages
という相補的な 2 つの技術を提供しています。
どちらのシステムを用いても、
ローカルメディアやネットワーク上からソフトウェアをインストールできます。</para>
<para>この章を読むと、以下のことがわかります。</para>
<itemizedlist>
<listitem>
<para>packages と ports の違い</para>
</listitem>
<listitem>
<para>&os; に移植されたサードパーティ製のソフトウェアの探し方</para>
</listitem>
<listitem>
<para>伝統的な package システムによってバイナリ package
を管理する方法</para>
</listitem>
<listitem>
<para><application>pkgng</application> を用いてバイナリ
package を管理する方法</para>
</listitem>
<listitem>
<para>Ports Collection を用いてサードパーティ製のソフトウェアをソースコードから構築する方法</para>
</listitem>
<listitem>
<para>インストール後の設定のために、
アプリケーションとともにインストールされたファイルを探す方法</para>
</listitem>
<listitem>
<para>ソフトウェアのインストールに失敗した場合に、どうしたらよいか</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="ports-overview">
<title>ソフトウェアのインストール</title>
<para>&unix; システムでは、
サードパーティ製ソフトウェアの典型的なインストール手順は以下のようになります。</para>
<procedure>
<step>
<para>ソースコード、
またはバイナリ形式で配布されているソフトウェアをダウンロードする。</para>
</step>
<step>
<para>配布時のフォーマット (一般的には
&man.compress.1;, &man.gzip.1; または &man.bzip2.1;
で圧縮された tarball) からソフトウェアを取り出す。</para>
</step>
<step>
<para><filename>INSTALL</filename> または
<filename>README</filename> ファイル、あるいは
<filename>doc/</filename>
サブディレクトのファイルからドキュメントを探しだし、
ソフトウェアのインストール方法を調べる。</para>
</step>
<step>
<para>ソース形式でソフトウェアが配布されている場合はコンパイルを行う。
ここでは、<filename>Makefile</filename> の編集、
または、<command>configure</command> スクリプトの実行、
あるいは他の作業を伴うことがある。 </para>
</step>
<step>
<para>ソフトウェアの動作を確認し、インストールする。</para>
</step>
</procedure>
<para>インストールしているソフトウェアパッケージが、
&os; を意識して移植されたものでなければ、
適切に動くようコードを調べ、編集する必要があるかもしれません。</para>
<para>&os; は、あなたのかわりにこれらのインストールの手順を実行してくれる
2 つの技術を提供しています。
この文書を書いている時点では、&os.numports;
を越えるサードパーティ製アプリケーションが利用可能です。</para>
<para>&os; の package は、コンパイル済みのアプリケーションの全コマンド、
各種設定ファイルやドキュメントを含んでいます。
&os; に用意されている
&man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1;
といった package 管理コマンドで、package を扱うことができます。</para>
<para>&os; port は、
アプリケーションをソースコードからコンパイルする際の処理を自動化するように設計されたファイルの集まりです。
port を構成するファイルは、
自動的にアプリケーションをダウンロードし、展開、パッチ作業、
コンパイル、そしてインストールを行うために必要な情報を含んでいます。</para>
<para>さらに ports システムは、&os; の package
管理コマンドで扱うことのできる packages を生成できます。</para>
<para>packages と ports は<emphasis>依存関係</emphasis>を理解します。
&man.pkg.add.1; または Ports Collection
を用いてアプリケーションをインストールすると、
依存するライブラリがまだインストールされていない場合には、
最初にライブラリが自動的にインストールされます。</para>
<para>2 つの技術は非常に類似していますが、
packages と ports にはそれぞれ独自の特徴があります。
それぞれのアプリケーションのインストールに対する必要要件に応じてどちらかを選択してください。</para>
<itemizedlist>
<title>package の利点</title>
<listitem>
<para>一般的に、あるアプリケーションの package の tarball は、
ソースコードを含む tarball より小さなサイズとなります。</para>
</listitem>
<listitem>
<para>packages はコンパイルの時間を必要としません。
このことは、遅いシステム上で <application>Mozilla</application>,
<application>KDE</application>,
または <application>GNOME</application>
といった大きなアプリケーションを扱う場合に重要となります。</para>
</listitem>
<listitem>
<para>packages を用いれば、
ソフトウェアのコンパイルに関する知識は必要ありません。</para>
</listitem>
</itemizedlist>
<itemizedlist>
<title>ports の利点</title>
<listitem>
<para>packages は、通常最も多くのシステムで実行できるように、
非常に保守的な設定で構築されています。
port からコンパイルすることで、
コンパイルオプションを指定できます。 </para>
</listitem>
<listitem>
<para>アプリケーションのなかには、
どの機能をインストールするかをコンパイル時に設定するものがあります。
たとえば、<application>Apache</application> は多種多様な
ビルトインオプションを設定できます。</para>
<para>設定を区別するために、同じアプリケーションに対して
複数の packages が存在することがあります。
たとえば、<application>Ghostscript</application> は
<application>Xorg</application> がインストールされているかどうかにより、
<filename>ghostscript</filename> package と
<filename>ghostscript-nox11</filename> package
が選択可能となっています。
アプリケーションのコンパイルオプションが 1 つもしくは
2 つ以上になると、
複数の packages を用意することは困難になります。</para>
</listitem>
<listitem>
<para>ライセンス条項で、
バイナリでの配布を禁止しているソフトウェアがあります。
それらはソースコードで配布される必要があり、
エンドユーザがコンパイルしなくてはなりません。</para>
</listitem>
<listitem>
<para>バイナリ配布を信用していない人や、
潜在的な問題点を見つけ出すためにソースコードを読むことを好む人がいます。</para>
</listitem>
<listitem>
<para>ローカルなパッチがある場合、
それを適用するためにソースコードが必要になります。</para>
</listitem>
</itemizedlist>
<para>ports の更新状況を把握するために、
&a.ports; や &a.ports-bugs; を購読するとよいでしょう。</para>
<warning>
<para>アプリケーションをインストールする前に、
そのアプリケーションに関連したセキュリティ上の問題がないことを
<uri xlink:href="http://vuxml.freebsd.org/">http://vuxml.freebsd.org/</uri>
で確認するか、<package>ports-mgmt/portaudit</package>
をインストールしてください。インストールしたら、
<command>portaudit -F -a</command> と入力して、
インストールされているアプリケーションに既知の脆弱性がないことを確認してください。</para>
</warning>
<para>この章では、packages と ports を用いた &os; 上での
サードパーティ製ソフトウェアのインストール方法や管理方法について説明します。</para>
</sect1>
<sect1 xml:id="ports-finding-applications">
<title>ソフトウェアの探し方</title>
<para>&os; 上で利用可能なアプリケーションのリストは常に増えています。
インストールするソフトウェアを探す方法はたくさん用意されています。</para>
<itemizedlist>
<listitem>
<para>&os; ウェブサイトは、
利用可能なすべてのアプリケーションの最新の一覧を、検索できる形で
<link xlink:href="&url.base;/ja/ports/index.html">http://www.FreeBSD.org/ja/ports/</link>
において公開しています。
ports はアプリケーションの名前や、ソフトウェアのカテゴリで検索出来ます。</para>
</listitem>
<listitem>
<indexterm><primary>FreshPorts</primary></indexterm>
<para>Dan Langille は、包括的な検索ユーティリティや
Ports Collection にあるアプリケーションの変更点を追跡する
<link xlink:href="http://www.FreshPorts.org/">FreshPorts</link>
を公開しています。
登録したユーザは、監視している ports がアップデートされた時に、
そのことを自動的にメールで知らせてくれるような、
カスタマイズ可能な監視リストを使うことができます。</para>
</listitem>
<listitem>
<indexterm><primary>Freecode</primary></indexterm>
<para>ご希望のアプリケーションの名前がわからなければ、
Freecode (<uri xlink:href="http://www.freecode.com/">http://www.freecode.com/</uri>)
のようなサイトでアプリケーションを探して下さい。
その後、そのアプリケーションが ports で利用可能かどうかを
&os; サイトで調べて下さい。</para>
</listitem>
<listitem>
<para>port がどのカテゴリに分類されているのかを知りたいのであれば、
&man.whereis.1; コマンドで調べることができます。
<command>whereis ファイル</command>
と入力してください。<replaceable>ファイル</replaceable>
の部分にはインストールを考えているプログラム名を入れます。</para>
<screen>&prompt.root; <userinput>whereis lsof</userinput>
lsof: /usr/ports/sysutils/lsof</screen>
<para>さらに、以下の例のように &man.echo.1;
を使って調べることもできます。</para>
<screen>&prompt.root; <userinput>echo /usr/ports/*/*lsof*</userinput>
/usr/ports/sysutils/lsof</screen>
<para>この方法では <filename>/usr/ports/distfiles</filename>
以下にダウンロードされたファイル名にもマッチします。</para>
</listitem>
<listitem>
<para>また、Ports Collection に備わっている検索機能を利用して
port を検索する方法もあります。
この検索機能を利用するには、
<application>cd</application> コマンドを用いて
<filename>/usr/ports</filename> ディレクトリに移動し、<command>make
search
name=ログラム名</command>
と入力してください。
<replaceable>プログラム名</replaceable>
の部分には検索したいソフトウェアの名前を入れてください。
たとえば、<command>lsof</command> を探すには次のようにします。</para>
<screen>&prompt.root; <userinput>cd /usr/ports</userinput>
&prompt.root; <userinput>make search name=lsof</userinput>
Port: lsof-4.56.4
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))
Maint: obrien@FreeBSD.org
Index: sysutils
B-deps:
R-deps: </screen>
<tip>
<para><command>make search</command>
は、インデックスファイルを利用して検索を行います。
もし <filename>INDEX</filename>
が必要であるというメッセージが表示されたら、
<command>make fetchindex</command> を実行して、
最新のインデックスファイルをダウンロードしてください。
<filename>INDEX</filename> が用意されれば、
<command>make search</command>
で検索を実行できるでしょう。</para>
</tip>
<para><quote>Path:</quote> という行は、
port がどこにあるかを示しています。</para>
<para>より絞られた情報を得るには、
<command>quicksearch</command> と呼ばれる機能を使ってください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports</userinput>
&prompt.root; <userinput>make quicksearch name=lsof</userinput>
Port: lsof-4.87.a,7
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))</screen>
<para>もっと詳しく検索するには、
<command>make search
key=string</command> または
<command>make quicksearch
key=string</command>
と入力してください。
<replaceable>string</replaceable>
の部分には検索したいテキストを入れます。
プログラムの名前がわからない場合でも、
ある目的に関連した ports の検索に利用できるよう、
テキストの部分には、コメント、説明文および依存情報を入れることができます。</para>
<para><buildtarget>search</buildtarget>
および <buildtarget>quicksearch</buildtarget> を使う場合には、
検索文字列中の大文字と小文字を区別せずに検索が行われるので、
<quote>LSOF</quote> を検索した結果は、
<quote>lsof</quote> と同じ検索結果になります。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="packages-using">
<info><title>バイナリ packages の利用</title>
<authorgroup>
<author><personname><firstname>Chern</firstname><surname>Lee</surname></personname><contrib>寄稿: </contrib></author>
</authorgroup>
</info>
<para>現在 &os; は、新しい packages 管理ツールへと移行中です。
最新リリースのユーザは、
<link linkend="pkgng-intro">PKGng</link> による &os;
のサードパーティ製ソフトウェア管理の利用を検討してください。
<application>pkgng</application> ツールに移行していないユーザは、
この節で説明するツールを用いて package のデータベースを管理してください。
<command>sysinstall</command> ユーティリティを用いると、
インストール後の package 管理を簡単にできます。
</para>
<para>すべての package のインストールファイルは、
package のデータベース用のディレクトリである
<filename>/var/db/pkg</filename>
に保存されます。</para>
<sect2>
<title>package のインストール</title>
<indexterm>
<primary>packages</primary>
<secondary>インストール</secondary>
</indexterm>
<indexterm>
<primary><command>pkg_add</command></primary>
</indexterm>
<para>&man.pkg.add.1; は、ローカルファイルやネットワーク上のサーバから
&os; バイナリ package をインストールするためのユーティリティです。</para>
<example>
<title>手動で package をダウンロードしてローカルからインストールする</title>
<screen>&prompt.root; <userinput>ftp -a ftp2.FreeBSD.org</userinput>
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230- This machine is in Vienna, VA, USA, hosted by Verio.
230- Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
<prompt>ftp></prompt> <userinput>cd /pub/FreeBSD/ports/packages/sysutils/</userinput>
250 CWD command successful.
<prompt>ftp></prompt> <userinput>get lsof-4.56.4.tgz</userinput>
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375 00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
<prompt>ftp></prompt> <userinput>exit</userinput>
&prompt.root; <userinput>pkg_add lsof-4.56.4.tgz</userinput></screen>
</example>
<para>&os; CD-ROM セットのような、ローカルな packages がない場合は、
&man.pkg.add.1; に <option>-r</option> オプションを付け加えてください。
このオプションを指定して実行すると、
自動的に適切なオブジェクトの形式とリリースを判断し、
package を FTP サイトからダウンロードしてインストールします。
ユーザはこのほかに何もする必要はありません。</para>
<indexterm>
<primary><command>pkg_add</command></primary></indexterm>
<screen>&prompt.root; <userinput>pkg_add -r lsof</userinput></screen>
<para>別の &os; FTP ミラーサイトを使うには、
<envar>PACKAGESITE</envar> 環境変数に利用したいサイトを設定してください。
&man.pkg.add.1; は、<envar>FTP_PASSIVE_MODE</envar>,
<envar>FTP_PROXY</envar>, <envar>FTP_PASSWORD</envar>
といった環境変数を使う &man.fetch.3;
を用いてファイルをダウンロードします。
ファイアウォールの内側であったり、
FTP/HTTP プロキシを使う場合には、
これらの環境変数を設定することになります。
環境変数の一覧については &man.fetch.3; をご覧ください。
また、上の例で <literal>lsof-4.56.4</literal> の代わりに
<literal>lsof</literal> を使っていることに注意してください。
リモートフェッチ機能を使用する場合には、
package のバージョン番号を取り除かなければなりません。</para>
<note>
<para>&os.current; または、&os.stable; を使用している場合、
&man.pkg.add.1; は自動的に最新版のアプリケーションをダウンロードします。
-RELEASE を使用している場合には、
そのバージョンのリリース時にビルドされた package をダウンロードします。
この設定は <envar>PACKAGESITE</envar> を上書きすることで変更できます。
たとえば、&os; 8.1-RELEASE を使用している場合には、
&man.pkg.add.1; を実行するとデフォルトで
<literal>ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/</literal>
から packages をダウンロードします。
&man.pkg.add.1; を使って &os; 8-STABLE の packages
をダウンロードするには、
<envar>PACKAGESITE</envar> 環境変数を
<literal>ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/</literal>
に設定してください。</para>
</note>
<para>package は <filename>.tgz</filename> や <filename>.tbz</filename>
という拡張子を持つファイルとして配布されており、
<uri xlink:href="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/">ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/</uri>
や &os; DVD の <filename>/packages</filename> ディレクトリにあります。
packages ディレクトリのレイアウトは、
<filename>/usr/ports</filename> ツリーのものと同様です。
カテゴリごとにディレクトリがあり、
<filename>All</filename> ディレクトリにはすべての package
があります。</para>
<para>package システムのディレクトリ構造は ports のレイアウトと同一です。
両者が組み合わさって package/port システムが構成されます。
</para>
</sect2>
<sect2>
<title>packages の管理</title>
<indexterm>
<primary>packages</primary>
<secondary>管理</secondary>
</indexterm>
<para>&man.pkg.info.1; は、インストールされている
packages の一覧と説明を表示します。</para>
<indexterm>
<primary><command>pkg_info</command></primary>
</indexterm>
<screen>&prompt.root; <userinput>pkg_info</userinput>
colordiff-1.0.13 A tool to colorize diff output
docbook-1.2 Meta-port for the different versions of the DocBook DTD
...</screen>
<para>&man.pkg.version.1; は、インストールされている
packages のバージョンを要約して表示します。
また、package のバージョンを、
現在の ports ツリーのバージョンと比較します。</para>
<indexterm>
<primary><command>pkg_version</command></primary>
</indexterm>
<screen>&prompt.root; <userinput>pkg_version</userinput>
colordiff =
docbook =
...</screen>
<para>2 列目の記号は、インストールされているバージョンの
ローカル ports ツリーのバージョンに対する
新旧を表します。</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>記号</entry>
<entry>意味</entry>
</row>
</thead>
<tbody>
<row>
<entry>=</entry>
<entry>インストールされている
package のバージョンは、
ローカル ports ツリーのものと一致しています。</entry>
</row>
<row>
<entry><</entry>
<entry>インストールされている package のバージョンは、
ローカルにある ports ツリーのものより古いです。</entry>
</row>
<row>
<entry>></entry>
<entry>インストールされている package のバージョンは、
ローカルにある ports ツリーのものより新しいです。
すなわち、ローカルの ports ツリーはおそらく古くなっています。</entry></row>
<row><entry>?</entry><entry>インストールされた package を
ports インデックスの中に見つけることができません。
インストールされた port が Ports Collection から削除されたり、
名前が変更された場合などに起こります。</entry></row>
<row><entry>*</entry><entry>複数のバージョンの
package が存在します。</entry></row>
<row><entry>!</entry><entry>インストールされた package
はインデックス中に存在しますが、何らかの理由で、
インストールされた package
のバージョン番号をインデックス中のエントリと比較できません。</entry></row>
</tbody>
</tgroup>
</informaltable>
</sect2>
<sect2>
<title>package の削除</title>
<indexterm>
<primary><command>pkg_delete</command></primary>
</indexterm>
<indexterm>
<primary>packages</primary>
<secondary>削除</secondary>
</indexterm>
<para>インストールされている package を削除するには、
&man.pkg.delete.1; を使ってください。
</para>
<screen>&prompt.root; <userinput>pkg_delete xchat-1.7.1</userinput></screen>
<para>&man.pkg.delete.1; は package 名とバージョン番号の両方を必要とします。
すなわち、先ほどの例において
<replaceable>xchat-1.7.1</replaceable> を
<replaceable>xchat</replaceable> とした場合には動作しません。
&man.pkg.version.1; を使ってインストールされている package
のバージョンを調べるか、ワイルドカードを使ってください。</para>
<screen>&prompt.root; <userinput>pkg_delete xchat\*</userinput></screen>
<para>上の例では、名前が <literal>xchat</literal> で始まるすべての packages が削除されます。</para>
</sect2>
</sect1>
<sect1 xml:id="pkgng-intro">
<title><application>pkgng</application> によるバイナリ
package の管理</title>
<para><application>pkgng</application> は、&os; における伝統的な
package 管理ツールの置き換えであり、バイナリ packages をより早く、
より簡単に管理できるようにする数多くの機能を提供します。
<application>pkgng</application> の最初のリリースは
2012 年 8 月に行われました。</para>
<para><application>pkgng</application> は <package>ports-mgmt/portmaster</package> や <package>ports-mgmt/portupgrade</package> などの
port 管理ツールの置き換えではありません。
<package>ports-mgmt/portmaster</package> および
<package>ports-mgmt/portupgrade</package> は、
サードパーティ製ソフトウェアをバイナリ packages と
Ports Collection の両形式からインストールできますが、
<application>pkgng</application> はバイナリ packages
のみをインストールします。</para>
<sect2 xml:id="pkgng-initial-setup">
<title><application>pkgng</application> 入門</title>
<para>&os; 9.1 以降では、
<application>pkgng</application> のための "ブートストラップ"
ユーティリティが用意されています。
ブートストラップユーティリティは <application>pkgng</application>
をダウンロードし、インストールします。</para>
<para>システムをブートストラップするためには、
以下を実行してください。</para>
<screen>&prompt.root; <userinput>/usr/sbin/pkg</userinput></screen>
<para>これより前のバージョンの &os; では、Ports Collection
または packages を用いてインストールする必要があります。</para>
<para><application>pkgng</application> port
をインストールするには以下を実行してください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/ports-mgmt/pkg</userinput>
&prompt.root; <userinput>make</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para>package からインストールするには以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg_add -r pkg</userinput></screen>
<para>&os; のインストールがすでに行われているようなシステムでは、
<application>pkg_install</application> package
データベースを新しいフォーマットへ変換する必要があります。
変換を行うには以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg2ng</userinput></screen>
<para>このステップは、
サードパーティ製ソフトウェアがまだインストールされていないような、
新しくインストールされた直後のシステムでは必要ありません。</para>
<important>
<para>このステップは非可逆です。
一度 package データベースを <application>pkgng</application>
フォーマットへと変換したら、<application>pkg_install</application>
ツールを使うべきではありません。</para>
</important>
<note>
<para>package データベースを変換する際には、
新しいバージョンへのデータ変換に伴ったエラーが出力されることがあります。
通常、これらのエラーは無視して構いませんが、
<command>pkg2ng</command> 終了後に表示される、
変換に失敗したサードパーティ製ソフトウェアの一覧については、
これらのソフトウェアを手動で修正する必要があります。</para>
</note>
<para>&os; のバージョンが
10.<replaceable>X</replaceable> より前であれば、
以下の行を <filename>/etc/make.conf</filename> に追加して、
&os; Ports Collection がソフトウェアの登録に、
<application>pkg_install</application>
ではなく <application>pkgng</application>
を用いるように設定してください。</para>
<programlisting>WITH_PKGNG= yes</programlisting>
</sect2>
<sect2 xml:id="pkgng-pkg-conf">
<title><application>pkgng</application> 環境の設定</title>
<para><application>pkgng</application> package 管理システムでは、
ほとんどのコマンドに対して package リポジトリを使います。
デフォルトの package リポジトリは
<filename>/usr/local/etc/pkg.conf</filename> または
<envar>PACKAGESITE</envar> 環境変数で定義されます。
この環境変数は、設定ファイルを上書きします。</para>
<para>その他の <application>pkgng</application>
の設定オプションは、pkg.conf(5) に記述されています。</para>
</sect2>
<sect2 xml:id="pkgng-basic-usage">
<title>基本的な <application>pkgng</application> の操作</title>
<para><application>pkgng</application> の利用情報は、
man.pkg(8) のマニュアルページや、
<command>pkg</command> を引数なしに実行すると表示されます。</para>
<para>各 <application>pkgng</application> コマンドの引数は、
コマンドに固有なマニュアルページに記述されています。
たとえば、<command>pkg install</command> のマニュアルページを読むには、
以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg help install</userinput></screen>
<screen>&prompt.root; <userinput>man pkg-install</userinput></screen>
<sect3 xml:id="pkgng-pkg-info">
<title><application>pkgng</application> を使ってインストールされた
package の情報を得るには</title>
<para><command>pkg info</command> を実行すると、
システムにインストールされている package 情報が得られます。
&man.pkg.info.1; 同様、すべての package のバージョン、
および説明の一覧が表示されます。</para>
<para>ある特定の package の情報が必要であれば、
以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg info packagename</userinput></screen>
<para>たとえば、システムにインストールされている
<application>pkgng</application> の情報を調べるには、
以下のように実行してください。</para>
<screen>&prompt.root; <userinput>pkg info pkg</userinput>
pkg-1.0.2 New generation package manager</screen>
</sect3>
<sect3 xml:id="pkgng-installing-deinstalling">
<title><application>pkgng</application>
を用いた packages のインストールと削除</title>
<para>通常、ほとんどの &os; ユーザは、バイナリパッケージを
<command>pkg install
packagename</command>
でインストールすることでしょう。</para>
<screen>&prompt.root; <userinput>pkg install packagename</userinput></screen>
<para><xref linkend="pkgng-pkg-conf"/> で説明した通り、
<command>pkg install</command> はリポジトリデータを使用します。
これとは反対に、pkg-add(8) はリポジトリデータを用いなければ、
定義されている <envar>PACKAGESITE</envar> も使いません。
そのため、依存関係は適切には追跡されず、
足りない依存についてもリモートホストからダウンロードされません。
この節では <command>pkg install</command> の使用方法について説明します。
<command>pkg add</command> の使用方法については pkg-add(8)
をご覧ください。</para>
<para>追加のバイナリ package は、
<command>pkg install</command> によりインストールされます。
たとえば、
<application>curl</application> をインストールするには以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg install curl</userinput>
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:
Installing ca_root_nss: 3.13.5
Installing curl: 7.24.0
The installation will require 4 MB more space
1 MB to be downloaded
Proceed with installing packages [y/N]: <userinput>y</userinput>
ca_root_nss-3.13.5.txz 100% 255KB 255.1KB/s 255.1KB/s 00:00
curl-7.24.0.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00
Checking integrity... done
Installing ca_root_nss-3.13.5... done
Installing curl-7.24.0... done</screen>
<para>新しい package と依存関係から追加された package は、
インストール済み package 一覧に表示されます。</para>
<screen>&prompt.root; <userinput>pkg info</userinput>
ca_root_nss-3.13.5 The root certificate bundle from the Mozilla Project
curl-7.24.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.0.2 New generation package manager</screen>
<para>必要のなくなった packages は、
<command>pkg delete</command> を使って削除できます。
たとえば、<application>curl</application> が必要なくなったら、
以下のようにして削除できます。</para>
<screen>&prompt.root; <userinput>pkg delete curl</userinput>
The following packages will be deleted:
curl-7.24.0_1
The deletion will free 3 MB
Proceed with deleting packages [y/N]: <userinput>y</userinput>
Deleting curl-7.24.0_1... done</screen>
</sect3>
<sect3 xml:id="pkgng-upgrading">
<title><application>pkgng</application> による package
のアップグレード</title>
<para><command>pkg version</command>
を用いて古くなった packages を見つけることができます。
ローカルに ports ツリーがない場合には、
pkg-version(8) は、リモートリポジトリのカタログを利用します。
そうでなければ、ローカルの ports ツリーを使って
package のバージョンを同定します。</para>
<para><application>pkgng</application> を用いて
package を新しいバージョンにアップグレードできます。
<application>curl</application>
の新しいバージョンがリリースされた場合には、ローカル package
を以下のようにして新しいバージョンにアップグレードできます。</para>
<screen>&prompt.root; <userinput>pkg upgrade</userinput>
Updating repository catalogue
repo.txz 100% 297KB 296.5KB/s 296.5KB/s 00:00
The following packages will be upgraded:
Upgrading curl: 7.24.0 -> 7.24.0_1
1 MB to be downloaded
Proceed with upgrading packages [y/N]: <userinput>y</userinput>
curl-7.24.0_1.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00
Checking integrity... done
Upgrading curl from 7.24.0 to 7.24.0_1... done</screen>
</sect3>
<sect3 xml:id="pkgng-auditing">
<title><application>pkgng</application> による package
の検証</title>
<para>時折、Ports Collection
に含まれているソフトウェアに脆弱性が見つかることがあります。
<application>pkgng</application> は、<package>ports-mgmt/portaudit</package> package
同様の検証機能を持っています。
システムにインストールされているソフトウェアを検証するには、
以下のように実行してください。</para>
<screen>&prompt.root; <userinput>pkg audit -F</userinput></screen>
</sect3>
</sect2>
<sect2 xml:id="pkgng-advanced-usage">
<title>高度な <application>pkgng</application> の利用</title>
<sect3 xml:id="pkgng-autoremove">
<title> <application>pkgng</application> によるリーフ依存 ports
の自動削除</title>
<para>package を削除すると、不必要な依存 ports、たとえば上の例では
<package>security/ca_root_nss</package>
が残されることがあります。
これらの packages は、
インストールされたままでどこからも依存されていません。
依存のために導入され、現在は不必要になった package は、
以下のようにすると自動的に検出され、削除されます。</para>
<screen>&prompt.root; <userinput>pkg autoremove</userinput>
Packages to be autoremoved:
ca_root_nss-3.13.5
The autoremoval will free 723 kB
Proceed with autoremoval of packages [y/N]: <userinput>y</userinput>
Deinstalling ca_root_nss-3.13.5... done</screen>
</sect3>
<sect3 xml:id="pkgng-backup">
<title><application>pkgng</application> package
データベースのバックアップ</title>
<para>伝統的な package 管理システムとは異なり、
<application>pkgng</application> には package
データベースをバックアップするメカニズムがあります。
package データベースの内容を手動でバックアップするには、
以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg backup -d pkgng.db</userinput></screen>
<note>
<para>ファイル名の <replaceable>pkgng.db</replaceable>
を適切なファイル名に置き換えてください。</para>
</note>
<para>さらに、<application>pkgng</application> は
package データベースを毎日自動的にバックアップする
&man.periodic.8; スクリプトを含んでいます。
&man.periodic.conf.5; の中で、
<literal>daily_backup_pkgng_enable</literal> を
<literal>YES</literal> に設定するとバックアップされます。</para>
<tip>
<para><application>pkg_install</application>
の定期的なスクリプトが、
package データベースを同様にバックアップすることを避けるためには、
&man.periodic.conf.5; の中で、
<literal>daily_backup_pkgdb_enable</literal> を
<literal>NO</literal> に設定してください。</para>
</tip>
<para>過去にバックアップした package
データベースの中身をリストアするには、以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg backup -r /path/to/pkgng.db</userinput></screen>
</sect3>
<sect3 xml:id="pkgng-clean">
<title>古くなった <application>pkgng</application> package
の削除</title>
<para>デフォルトでは、<application>pkgng</application>
はキャッシュディレクトリにバイナリ packages を保存します。
このディレクトリは、pkg.conf(5) の
<envar>PKG_CACHEDIR</envar> 変数で定義されます。
<command>pkg upgrade</command> を使って packages
をアップグレードする際には、
アップグレードされた package
の古いバージョンは自動的には削除されません。</para>
<para>システムから古いバイナリ package を削除するには、
以下を実行してください。</para>
<screen>&prompt.root; <userinput>pkg clean</userinput></screen>
</sect3>
<sect3 xml:id="pkgng-set">
<title><application>pkgng</application> package
メタデータの変更</title>
<para>歴史的に &os; Ports Collection
は、メジャーバージョン番号の変更に対応できます。
<application>pkg_install</application> とは異なり、
<application>pkgng</application> には、
package の情報をアップデートするコマンドが組み込まれています。
たとえば、<package>lang/php5</package> のバージョンが、もともとは
<literal>5.3</literal> で、<literal>5.4</literal>
がリリースされたことに伴い
<package>lang/php53</package>
へと名前が変更される場合、
<application>pkg_install</application> では、
package のデータベースを、
どの port がインストール元であったかという情報を変更するために
<package>ports-mgmt/portmaster</package>
のような別のソフトウェアを必要とします。</para>
<para><package>ports-mgmt/portmaster</package> および
<package>ports-mgmt/portupgrade</package>
ports とは異なり、引数に与えるバージョンの新、旧の順番は異なります。
<application>pkgng</application> での構文は、<command>pkg set -o
category/oldport:category/newport</command> となります。</para>
<para>たとえば、上記の例の package の情報を変更するには、
以下のように実行してください。</para>
<screen>&prompt.root; <userinput>pkg set -o lang/php5:lang/php53</userinput></screen>
<para>別の例として、<package>lang/ruby18</package> を <package>lang/ruby19</package> にアップデートするには、
以下のようにしてください。</para>
<screen>&prompt.root; <userinput>pkg set -o lang/ruby18:lang/ruby19</userinput></screen>
<para>最後の例として、
<filename>libglut</filename> 共有ライブラリの情報を <package>graphics/libglut</package> から <package>graphics/freeglut</package> へと変更するには、
以下のように実行してください。</para>
<screen>&prompt.root; <userinput>pkg set -o graphics/libglut:graphics/freeglut</userinput></screen>
<note>
<para>package の情報を変更したら、多くの場合、
情報が変更された package に依存している
packages を再インストールすることが重要となります。
依存 packages を再インストールするには、
以下のように実行してください。</para>
<screen>&prompt.root; <userinput>pkg install -Rf graphics/freeglut</userinput></screen>
</note>
</sect3>
</sect2>
</sect1>
<sect1 xml:id="ports-using">
<title>Ports Collection の利用</title>
<para>このセクションでは、Ports Collection
を利用してプログラムをインストールしたり、
システムから削除したりする基本的な手順について説明します。
利用可能な <command>make</command> のターゲットや環境変数についての詳細は
&man.ports.7; をご覧ください。</para>
<warning>
<para>&os; Ports プロジェクトは、2012 年にバージョン管理システムを
CVS から Subversion へと移行しました。
一般的な ports の利用において推奨される方法は
<application>Portsnap</application> です。
ローカルで ports をカスタマイズしたい
(すなわち、ローカルで追加のパッチをメンテナンスしたい)
と考えているユーザは、直接 Subversion を使うとよいでしょう。
<application>CVSup</application> のサービスは、
2013 年 2 月 28 日に廃止されました。</para>
</warning>
<sect2 xml:id="ports-tree">
<title>Ports Collection の準備</title>
<para>Ports Collection とは、<filename>/usr/ports</filename>
以下に置かれる <filename>Makefile</filename>, 修正パッチ、
説明文などの一連のファイルのことです。このファイルのセットは、
アプリケーションをコンパイルして &os; にインストールするのに用いられます。
以下では、&os; のセットアップ時に Ports Collection をインストールしなかった場合に、
Ports Collection を準備する方法について示します。</para>
<procedure>
<title>Portsnap を利用する方法</title>
<para><application>Portsnap</application> は Ports Collection
を取得するための速くて使いやすく、
多くのユーザに推奨されるツールです。
<application>Portsnap</application> の機能についての詳細は
<link linkend="updating-upgrading-portsnap">Portsnap を使う</link>
の節を参照してください。</para>
<step>
<para>圧縮された Ports Collection のスナップショットを
<filename>/var/db/portsnap</filename>
にダウンロードしてください。</para>
<screen>&prompt.root; <userinput>portsnap fetch</userinput></screen>
</step>
<step>
<para>初めて <application>Portsnap</application> を使う時は、
スナップショットをまず <filename>/usr/ports</filename> に展開してください。</para>
<screen>&prompt.root; <userinput>portsnap extract</userinput></screen>
</step>
<step>
<para>上で示した <application>Portsnap</application>
を初めて利用する際に行うコマンドを実行した後は、
以下のコマンドで
<filename>/usr/ports</filename>
をアップデートできます。</para>
<screen>&prompt.root; <userinput>portsnap fetch</userinput>
&prompt.root; <userinput>portsnap update</userinput></screen>
</step>
</procedure>
<procedure>
<title>Subversion を用いる方法</title>
<para>たとえば、ローカルで変更点をメンテナンスする状況のように、
ports ツリーの管理が必要な場合には、
<application>Subversion</application> を使って
Ports Collection を取得する方法があります。
<application>Subversion</application> のより詳細な説明については、
<link xlink:href="&url.articles.committers-guide.en;/subversion-primer.html">
Subversion Primer</link> を参照してください。</para>
<step>
<para><application>Subversion</application>
を使って ports ツリーをチェックアウトする前に、
<application>Subversion</application>
をインストールしておく必要があります。
ports ツリーがすでにインストールされていれば、
以下のようにして <application>Subversion</application>
をインストールできます。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/devel/subversion</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para>ports ツリーがなければ、package から
<application>Subversion</application> をインストールできます。</para>
<screen>&prompt.root; <userinput>pkg_add -r subversion</userinput></screen>
<para>package の管理に <application>pkgng</application>
を使っているのであれば、代わりに以下のようにして
<application>Subversion</application> をインストールできます。</para>
<screen>&prompt.root; <userinput>pkg install subversion</userinput></screen>
</step>
<step>
<para>ports ツリーをチェックアウトしてください。
パフォーマンスを良くするため、以下のコマンドにおいて、
<replaceable>svn0.us-east.FreeBSD.org</replaceable> を <link xlink:href="&url.books.handbook;/svn-mirrors.html">Subversion
ミラー</link>
の中から地理的に近い場所にあるミラーに置き換えてください。
コミッタの方々は、最初に <link xlink:href="&url.articles.committers-guide.en;/subversion-primer.html">Subversion
Primer</link> を読んで、適切なプロトコルを選択してください。</para>
<screen>&prompt.root; <userinput>svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports</userinput></screen>
</step>
<step>
<para><application>Subversion</application>
でチェックアウトした後、
<filename>/usr/ports</filename>
をアップデートするには、以下を実行してください。</para>
<screen>&prompt.root; <userinput>svn update /usr/ports</userinput></screen>
</step>
</procedure>
<procedure>
<title>sysinstall を利用する方法</title>
<para>ここでは、<application>sysinstall</application>
を利用してインストールメディアから Ports Collection
をインストールする方法について説明します。
この方法では、リリース時の古い Ports Collection
がインストールされることに注意してください。
もし、インターネットへの接続が可能であれば、
これまでに説明した方法を使ってください。</para>
<step>
<para><systemitem class="username">root</systemitem> ユーザ権限で、以下のように
<command>sysinstall</command> を実行してください。</para>
<screen>&prompt.root; <userinput>sysinstall</userinput></screen>
</step>
<step>
<para>スクロールダウンして <guimenuitem>Configure</guimenuitem> を選び、
<keycap>Enter</keycap> を押してください。</para>
</step>
<step>
<para>スクロールダウンして <guimenuitem>Distributions</guimenuitem> を選び、
<keycap>Enter</keycap> を押してください。</para>
</step>
<step>
<para>スクロールダウンして <guimenuitem>ports</guimenuitem> を選び、
<keycap>Space</keycap> キーを押してください。</para>
</step>
<step>
<para><guimenuitem>Exit</guimenuitem> までスクロールアップして、
<keycap>Enter</keycap> を押してください。</para>
</step>
<step>
<para>CDROM や FTP といったインストールメディアを選択してください。</para>
</step>
<step>
<para><guimenuitem>Exit</guimenuitem> までスクロールアップして、<keycap>Enter</keycap>
を押してください。</para>
</step>
<step>
<para><keycap>X</keycap> を押して、
<application>sysinstall</application> を終了してください。</para>
</step>
</procedure>
</sect2>
<sect2 xml:id="cvsup-migration">
<title><application>CVSup</application>/<application>csup</application>
から <application>portsnap</application> への移行</title>
<warning>
<para>2013 年 2 月 28 日までに
ports ツリーの <application>CVS</application>
へのエクスポートは終了します。
そのため、<application>CVSup</application> および
<application>csup</application> を用いて ports
ツリーをアップデートすることはできなくなります。</para>
</warning>
<procedure>
<title>Portsnap への移行</title>
<para>移行に際しては、
<filename>/usr</filename> に約
1 GB のディスク容量と、
さらに <application>Portsnap</application>
は約 150 MB のディスク容量を <filename>/var</filename> に必要とします。</para>
<step>
<para>もし &man.cron.8; を使って
<application>CVSup</application>
<application>csup</application> を実行するなど、
自動的な ports のアップデートを行なっているのであれば、
停止してください。</para>
</step>
<step>
<para>現在の ports ツリーを一時的に別の場所に移動します。</para>
<screen>&prompt.root; <userinput>mv /usr/ports /usr/ports.old</userinput></screen>
</step>
<step>
<para>新しい ports ツリーを
<application>Portsnap</application> を使ってダウンロードして、
<filename>/usr/ports</filename>
に展開してください。</para>
<screen>&prompt.root; <userinput>portsnap fetch extract</userinput></screen>
</step>
<step>
<para>distfiles および保存されている packages を新しい
port ツリーに移動してください。</para>
<screen>&prompt.root; <userinput>mv /usr/ports.old/distfiles /usr/ports</userinput>
&prompt.root; <userinput>mv /usr/ports.old/packages /usr/ports</userinput></screen>
</step>
<step>
<para>古い ports ツリーを削除してください。</para>
<screen>&prompt.root; <userinput>rm -rf /usr/ports.old</userinput></screen>
</step>
<step>
<para>もし <application>CVSup</application>
を使用していたのであれば、アンインストールできます。</para>
<screen>&prompt.root; <userinput>pkg_delete -r -v cvsup-without-gui-\*</userinput></screen>
<para><application>pkgng</application> のユーザは、
以下のコマンドを使って削除できます。</para>
<screen>&prompt.root; <userinput>pkg delete cvsup-without-gui</userinput></screen>
</step>
</procedure>
<para><application>Portsnap</application> の詳細と、
<application>Portsnap</application> を用いた
ports ツリーのアップデート方法については、
<link linkend="updating-upgrading-portsnap">Portsnap
を使う</link> の節を読んでください。</para>
</sect2>
<sect2 xml:id="ports-skeleton">
<title>ports のインストール</title>
<indexterm>
<primary>ports</primary>
<secondary>インストール</secondary>
</indexterm>
<para>port スケルトンは、アプリケーションを &os;
上で正しくコンパイルしインストールする方法を提供するファイルのセットのことです。
それぞれの port スケルトンには、次のファイルが含まれています。</para>
<itemizedlist>
<listitem>
<para><filename>Makefile</filename>。
<filename>Makefile</filename>
にはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する命令文が含まれています。</para>
</listitem>
<listitem>
<para><filename>distinfo</filename>。
このファイルには、その port
を構築するためにダウンロードする必要があるファイルのファイル名と、
それらのファイルがダウンロードによって壊れていないかを
(&man.sha256.1; を使って)
確認するためのチェックサム情報が含まれています。</para>
</listitem>
<listitem>
<para><filename>files</filename>。
このディレクトリには &os; 上でプログラムをコンパイルし、
インストールするための修正パッチが含まれています。
このディレクトリには、その port
の構築に必要なその他のファイルが入る場合もあります。</para>
</listitem>
<listitem>
<para><filename>pkg-descr</filename>。
このファイルにはプログラムに関する、より詳しい説明文が含まれます。</para>
</listitem>
<listitem>
<para><filename>pkg-plist</filename>。
これは、その port によってインストールされる全ファイルのリストです。
これにはプログラムを削除する際に、
どのファイルを削除すれば良いのかを ports
システムに伝える役割もあります。</para>
</listitem>
</itemizedlist>
<para>これらの他に <filename>pkg-message</filename>
といったファイルを含む ports もあります。
ports システムは、
このようなファイルを用いて特殊な状況にも対応しています。
これらのファイルについての詳細および
ports の一般的な説明については、<link xlink:href="&url.books.porters-handbook;/index.html">port
作成者のためのハンドブック</link> をご覧下さい。</para>
<para>port は実際のソースコード (<quote>distfile</quote> とも呼ばれます)
を含んではいません。
ソースコードはソフトウェアの作者が好む形式で配布されます。
以下では port をインストールする 2 つの方法について説明します。</para>
<note>
<para>ports をインストールするには、
<systemitem class="username">root</systemitem> としてログインする必要があります。</para>
</note>
<warning>
<para>port をコンパイルする前に、
Ports Collection が最新であることを確認してください。
また、その port に関連したセキュリティ上の問題がないことを
<uri xlink:href="http://vuxml.freebsd.org/">http://vuxml.freebsd.org/</uri>
で確認してください。<package>ports-mgmt/portaudit</package>
をインストールしているのであれば、
新しく port をインストールする前に、
<command>portaudit -F</command> コマンドを実行して、
最新の脆弱性に関するデータベースをダウンロードしてください。
セキュリティの検査およびデータベースの更新は、
日々のセキュリティチェックで行なわれます。
詳しくは、&man.portaudit.1; および &man.periodic.8;
のマニュアルページを参照してください。</para>
</warning>
<para>Ports Collection は、ネットワークに接続できることを想定しています。
もし接続できなければ、distfile のコピーを
<filename>/usr/ports/distfiles</filename>
に手動で置いてください。</para>
<para>まず、インストールしたい port のディレクトリに移動してください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/sysutils/lsof</userinput></screen>
<para>port をコンパイルまたは
<quote>ビルド (build)</quote> するには、プロンプトから
<command>make</command> と入力してください。
そうすると、次のような出力が現われるはずです。</para>
<screen>&prompt.root; <userinput>make</userinput>
>> 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]
...
&prompt.root;</screen>
<para>コンパイルが終了すると、プロンプトに戻ります。
次に <command>make install</command>
を使って、port のインストールを行ないます。</para>
<screen>&prompt.root; <userinput>make install</userinput>
===> 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.
&prompt.root;</screen>
<para>プロンプトに戻ったら、
インストールしたプログラムは実行できるようになっています。
<command>lsof</command> は高い権限で動作するプログラムなので、
セキュリティに関する警告が表示されます。ports
のコンパイルやインストール中に表示されるこれらの警告に注意してください。</para>
<para>コンパイル時に作成される作業用ディレクトリを削除すると良いでしょう。
このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。
このディレクトリを削除することで、ディスク容量を節約でき、また port
を新しいバージョンへアップデートする際に問題が起こる可能性を小さくします。</para>
<screen>&prompt.root; <userinput>make clean</userinput>
===> Cleaning for lsof-4.57
&prompt.root;</screen>
<note>
<para><command>make</command>、<command>make install</command>
および <command>make clean</command>
と三つに分けられた手順の代わりに、
最初から <command>make install clean</command> と実行することで、
余分な手順を二つ省くことができます。</para>
</note>
<note>
<para>デフォルトでは、ユーザに port
のオプションを選択させる設定のため、
<command>make install</command>
だけの実行では、ユーザとの対話が起こり長時間待たされることがあります。
依存する port の数が多い場合に、これを避けるには、まず最初に <command>make
config-recursive</command>
を実行して設定を一括で行い、その後
<command>make install
[clean]</command> を実行してください。</para>
</note>
<tip>
<para><buildtarget>config-recursive</buildtarget> を実行する際、
&man.make.1; のターゲットである
<buildtarget>all-depends-list</buildtarget>
を実行すると、設定すべき ports の一覧を得ることができます。
多くの場合は、すべての依存 ports のオプションが定義され、
ports オプションの &man.dialog.1; 画面が表示されなくなり、
すべてのオプションが意図通りに設定されたことを確認できるまで
<command>make
config-recursive</command>
を実行すると良いでしょう。</para>
</tip>
<note>
<para>シェルによってはコマンドの実行ファイルを探す時間を短縮するために、
環境変数 <envar>PATH</envar> に登録されている
ディレクトリのコマンド一覧をキャッシュするものがあります。
<command>tcsh</command> を使っているのであれば、
フルパスを指定することなく新しくインストールしたコマンドを利用できるように、
<command>rehash</command> を実行してください。
<command>sh</command> シェルを使っているのであれば
かわりに <command>hash -r</command> を実行してください。
詳細については、
あなたの使っているシェルのドキュメントをご覧ください。</para>
</note>
<para><link xlink:href="http://www.freebsdmall.com/">&os;
Mall</link> の &os; Toolkit のようなサードパーティ製の DVD-ROM
製品の中には distfiles を収録しているものがあります。
これらを Ports Collection で使うことができます。
DVD-ROM を <filename>/cdrom</filename> にマウントしてください。
ほかのマウントポイントを使用したければ、
<varname>CD_MOUNTPTS</varname> 変数を設定してください。
ディスク上に必要な distfiles が存在すると、
自動的に利用されます。</para>
<note>
<para>port には DVD
への収録を許可しないライセンス条項を持つものがあります。
これにはダウンロード前に登録を必要としたり、
再配布が禁止されているという理由があります。
DVD に含まれていない port をインストールしたい場合には、
ネットワークに接続する必要があります。</para>
</note>
<para>ports は、<envar>FTP_PASSIVE_MODE</envar>,
<envar>FTP_PROXY</envar>, <envar>FTP_PASSWORD</envar>
といった環境変数を参照する &man.fetch.1;
を用いてファイルをダウンロードします。
ファイアウォールの内側であったり、
FTP/HTTP プロキシを使う場合には、
これらの環境変数を設定することなります。
環境変数の一覧については &man.fetch.3; をご覧ください。</para>
<para>ネットワークに常時接続できないユーザのために
<command>make fetch</command>
コマンドが用意されています。
(ネットワークに接続している時に) このコマンドを
<filename>/usr/ports</filename> で実行してください。
必要なファイルがダウンロードされます。
このコマンドは <filename>/usr/ports/net</filename>
といった、より下の階層のカテゴリにおいても使うことができます。
ある port がライブラリやその他の ports に依存している場合には、
別のカテゴリの ports の distfiles
はダウンロードされ<emphasis>ない</emphasis>ことに注意してください。
port が依存しているすべてをダウンロードしたければ、
<command>make
fetch-recursive</command>
を使ってください。</para>
<note>
<para>トップディレクトリで <command>make</command>
を実行するとすべての port がビルドされます。
しかしながら ports の中には同時に存在できないものがあったり、
異なる ports の別のファイルが同じ名前で
インストールされる場合があることに注意してください。</para>
</note>
<para>めったにないことかもしれませんが、
デフォルトの <varname>MASTER_SITES</varname>
に書かれているサイト以外から tarball
を持ってくることが必要になる場合があります。
そのような場合には以下のように
<varname>MASTER_SITES</varname> を変更してください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/directory</userinput>
&prompt.root; <userinput>make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen>
<para>上の例では <varname>MASTER_SITES</varname> を
<systemitem class="fqdomainname">ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/</systemitem>
に変更しています。</para>
<note>
<para>ports の中にはビルドオプションを指定できるものがあります。
このオプションを指定することで、
アプリケーションの機能の一部を有効もしくは無効にできます。
また、セキュリティオプションを設定したり、
その他のカスタマイズを行うことができます。
このようなアプリケーションには
<package>www/firefox</package>,
<package>security/gpgme</package> や
<package>mail/sylpheed-claws</package>
などがあります。
利用可能なオプションがある場合には、
port をコンパイルする前にメニューが表示されます。</para>
</note>
<sect3>
<title>ports ディレクトリの変更</title>
<para><varname>WRKDIRPREFIX</varname> 変数と
<varname>PREFIX</varname> 変数を変更することで、
作業ディレクトリやターゲットディレクトリをデフォルトのものから変更できます。</para>
<screen>&prompt.root; <userinput>make WRKDIRPREFIX=/usr/home/example/ports install</userinput></screen>
<para>とすると、ports は <filename>/usr/home/example/ports</filename>
でコンパイルされ、すべて <filename>/usr/local</filename>
以下にインストールされます。</para>
<screen>&prompt.root; <userinput>make PREFIX=/usr/home/example/local install</userinput></screen>
<para>この場合、port のコンパイルは <filename>/usr/ports</filename>
でおこない、
<filename>/usr/home/example/local</filename>
にインストールします。</para>
<para>そして、</para>
<screen>&prompt.root; <userinput>make WRKDIRPREFIX=../ports PREFIX=../local install</userinput></screen>
<para>とすれば両者を組み合わせることが可能です。</para>
<para>あるいは、これらを環境変数に設定する方法もあります。
どのように環境変数を設定するかについては、
あなたの使っているシェルのマニュアルページを参照してください。</para>
</sect3>
<sect3>
<title>ports の再構築</title>
<para>ports をコンパイルする際、ビルドオプションを設定するために
ncurses ベースのメニューが表示されることがあります。
port の構築後、再びこのメニューを表示させてオプションの追加や削除、
設定の変更を行う方法はたくさんあります。
一つ目は port のディレクトリに <command>cd</command> で移動し、
<command>make config</command> と入力する方法です。
別の方法は <command>make showconfig</command>
を使う方法です。
他の方法は <command>make rmconfig</command>
の実行です。
このコマンドを実行すると選択されているすべてのオプションが削除され、
設定をもう一度やり直すことができます。
これらの方法や他の方法についての詳細は、
&man.ports.7; マニュアルで説明されています。</para>
</sect3>
</sect2>
<sect2 xml:id="ports-removing">
<title>インストールした ports の削除</title>
<indexterm>
<primary>ports</primary>
<secondary>削除</secondary>
</indexterm>
<para>インストールされた ports および packages は、
&man.pkg.delete.1; コマンドで削除できます。</para>
<screen>&prompt.root; <userinput>pkg_delete lsof-4.57</userinput></screen>
</sect2>
<sect2 xml:id="ports-upgrading">
<title>ports のアップグレード</title>
<indexterm>
<primary>ports</primary>
<secondary>アップグレード</secondary>
</indexterm>
<para>まず最初に &man.pkg.version.1; コマンドを使って、
古くなってしまった ports
の中で新しいバージョンにアップデート可能なものを
Ports Collection からリストアップしてください。</para>
<screen>&prompt.root; <userinput>pkg_version -v</userinput></screen>
<sect3 xml:id="ports-file-updating">
<title><filename>/usr/ports/UPDATING</filename> を読む</title>
<para>Ports Collection を更新したら、port をアップグレードする前に
<filename>/usr/ports/UPDATING</filename>
ファイルに目を通してください。
このファイルには
port をアップグレードする際にユーザが遭遇するであろう問題や、
追加で必要な作業などが記述されています。
例えば、ファイル形式の変更や設定ファイルの場所の変更、
前のバージョンと互換性がなくなったことなどが書かれています。 </para>
<para>もし、この節に書いてあることと
<filename>UPDATING</filename> に書かれていることが矛盾している場合には、
<filename>UPDATING</filename> を優先してください。</para>
</sect3>
<sect3 xml:id="portupgrade">
<title>portupgrade を用いた ports のアップグレード</title>
<indexterm>
<primary>portupgrade</primary>
</indexterm>
<para><application>portupgrade</application> は、
インストールした ports
のアップグレードを簡単に行なうためのユーティリティです。
<package>ports-mgmt/portupgrade</package>
port から利用できます。
他の port と同じように <command>make install
clean</command> でインストールしてください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/ports-mgmt/portupgrade</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para><command>pkgdb -F</command> を使って、
インストールされている ports を調べてください。
矛盾が検出された場合には修復してください。
アプリケーションをアップデートする前には、
この作業を定期的に行なうとよいでしょう。</para>
<para>システムにインストールされている port
の中で古くなったものをすべてアップデートするには
<command>portupgrade -a</command> を実行してください。
もし、すべての ports
に対して個別にアップグレードするかどうかを確認したいのであれば、
<option>-i</option> を追加してください。</para>
<screen>&prompt.root; <userinput>portupgrade -ai</userinput></screen>
<para>ports で利用可能なすべてのアプリケーションではなく、
ある特定のアプリケーションだけを更新したいのであれば、
<command>portupgrade pkgname</command>
を実行してください。
アップグレードするアプリケーションが依存しているすべての
ports をまず先に更新したい場合には、
<option>-R</option> を使ってください。</para>
<screen>&prompt.root; <userinput>portupgrade -R firefox</userinput></screen>
<para>ports ではなく packages を用いてインストールを行ないたい場合には、
<option>-P</option> オプションを使ってください。
このオプションを使うと、<application>portupgrade</application> は
<envar>PKG_PATH</envar> に登録されているローカルディレクトリを検索し、
ローカルに packages が見つからなければ、
リモートサイトからダウンロードを試みます。
packages をローカルに見つけることができず、
リモートサイトからもダウンロードできない場合には、
<application>portupgrade</application>
は ports からインストールを行ないます。
ports を使用したくなければ、<option>-PP</option>
オプションを指定してください。</para>
<screen>&prompt.root; <userinput>portupgrade -PP gnome2</userinput></screen>
<para>また、ビルドやインストールを行なわず、
distfiles (<option>-P</option> が指定されている場合は packages)
だけをダウンロードしたければ、
<option>-F</option> オプションを指定してください。
詳細は &man.portupgrade.1; を参照してください。</para>
</sect3>
<sect3 xml:id="portmaster">
<title><application>portmaster</application>
を用いた ports のアップグレード</title>
<indexterm>
<primary>portmaster</primary>
</indexterm>
<para>インストールした ports
のアップグレードを行うためのもう一つのユーティリティが <package>ports-mgmt/portmaster</package> です。
<application>portmaster</application> は、
他の ports に依存せずに、<quote>base</quote>
システムのツールのみを使うように設計されています。
このアプリケーションは、
どの ports をアップグレードすべきかの判断を、
<filename>/var/db/pkg/</filename>
の情報を使って行います。
port をインストールするには以下のようにしてください。</para>
<screen>&prompt.root; <userinput>cd /usr/ports/ports-mgmt/portmaster</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para><application>Portmaster</application> は、ports を 4 つのカテゴリに分類します。</para>
<itemizedlist>
<listitem>
<para>Root ports: 他の port に依存せず、他の port からも依存されません。</para>
</listitem>
<listitem>
<para>Trunk ports: 他の port に依存しませんが、他の port から依存されています。</para>
</listitem>
<listitem>
<para>Branch ports: 他の port に依存し、他の port からも依存されています。</para>
</listitem>
<listitem>
<para>Leaf ports: 他の port に依存しますが、他の port からは依存されません。</para>
</listitem>
</itemizedlist>
<para><option>-L</option> オプションを使うと、
インストールした ports やアップデート可能な port の一覧が表示されます。</para>
<screen>&prompt.root; <userinput>portmaster -L</userinput>
===>>> 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
</screen>
<para>以下のコマンドを使って、
インストールされているすべての ports をアップデートできます。</para>
<screen>&prompt.root; <userinput>portmaster -a</userinput></screen>
<note>
<para><application>portmaster</application> のデフォルトの設定では、
インストールされている port を削除する前にバックアップ用の package が作成されます。
このバックアップは、新しいバージョンのインストールに成功すると削除されます。
<option>-b</option> を使うと、
<application>portmaster</application> はバックアップを自動的に削除しません。
<option>-i</option> を追加すると、
<application>portmaster</application> をインタラクティブモードで使用できます。
このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。</para></note>
<para>アップグレードの過程でエラーに遭遇した場合には、
<option>-f</option> を使ってすべての ports のアップグレードや再構築を行なってください。</para>
<screen>&prompt.root; <userinput>portmaster -af</userinput></screen>
<para><application>portmaster</application> を使ってシステムに新しい ports
をインストールしたり、新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。</para>
<screen>&prompt.root; <userinput>portmaster shells/bash</userinput></screen>
<para>詳細については &man.portmaster.8; を参照してください。</para>
</sect3>
</sect2>
<sect2 xml:id="ports-disk-space">
<title>ports とディスク容量</title>
<indexterm>
<primary>ports</primary>
<secondary>ディスク容量</secondary>
</indexterm>
<para>Ports Collection を使い続けていると、
そのうちディスクを食いつぶしてしまうでしょう。
ports をビルドしてインストールした後、
<command>make clean</command>
は作業用の <filename>work</filename>
ディレクトリを削除します。
以下のコマンドで Ports Collection を掃除することができます。</para>
<screen>&prompt.root; <userinput>portsclean -C</userinput></screen>
<para>時間が経つにつれ <filename>distfiles</filename>
ディレクトリには、古くなったソースファイルがたまっていきます。
次のコマンドで、どの ports からも使われていない
distfiles を削除できます。</para>
<screen>&prompt.root; <userinput>portsclean -D</userinput></screen>
<para>システムにインストールされている port から使われていない
distfiles をすべて削除するには、以下のコマンドを使ってください。</para>
<screen>&prompt.root; <userinput>portsclean -DD</userinput></screen>
<note>
<para><command>portsclean</command> ユーティリティは
<package>ports-mgmt/portupgrade</package>
ツール群の一部です。</para>
</note>
<para><package>ports-mgmt/pkg_cutleaves</package> port は、
必要なくなった ports を削除する作業を自動化します。</para>
</sect2>
</sect1>
<sect1 xml:id="ports-nextsteps">
<title>インストール後の作業</title>
<para>バイナリ package もしくは port
のどちらを用いてソフトウェアをインストールするかに関わらず、
サードパーティ製のアプリケーションの多くは、
インストール後にある程度の設定を必要とします。
以下のコマンドや場所の情報は、
アプリケーションとともに何がインストールされたかを知るための助けとなるでしょう。</para>
<itemizedlist>
<listitem>
<para>多くのアプリケーションでは、
デフォルトの設定ファイルが、少なくとも一つは
<filename>/usr/local/etc</filename> にインストールされます。
この設定ファイルを確認し、
必要に応じてシステムの要求に合うように編集してください。</para>
</listitem>
<listitem>
<para>ドキュメントが付属しているアプリケーションは、
ドキュメントを <filename>/usr/local/share/doc</filename>
にインストールします。また、
多くのアプリケーションは、マニュアルページもインストールします。
これらのドキュメントは、
アプリケーションを使い続ける前に見ておくべきものです。</para>
</listitem>
<listitem>
<para>ある種のアプリケーションでは、
サービスを実行するためには、
アプリケーションの起動前に、
<filename class="directory">/etc/rc.conf</filename>
に追加する必要があります。
これらのアプリケーションでは、通常、
スタートアップスクリプトが
<filename>/usr/local/etc/rc.d</filename>
にインストールされます。詳細は、
<link
linkend="configtuning-starting-services">サービスの起動</link>
をご覧ください。</para>
</listitem>
<listitem>
<para>&man.csh.1; のユーザは、
<command>rehash</command> を実行して、
シェルの <envar>PATH</envar> のバイナリリストを再構築してください。</para>
</listitem>
<listitem>
<para>伝統的な package システムを使用しているシステムでは、
&man.pkg.info.1; を使って、インストールされたファイル、
マニュアルページ、およびバイナリを調べることができます。
<application>pkgng</application> を使用しているシステムでは、
かわりに <command>pkg info</command> を使ってください。</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="ports-broken">
<title>うまく動作しない ports に遭遇した場合には</title>
<para>うまくコンパイルできなかったりインストールできない
port に遭遇したら、
あなたにできることは次のようなことしかありません。</para>
<orderedlist>
<listitem>
<para>その port に対する修正案が提出されていないかどうかを
<link xlink:href="&url.base;/ja/support.html#gnats">障害報告
(Problem Report) データベース</link> で調べてください。
もし提案されていれば、
その修正によって問題を解決できるかもしれません。</para>
</listitem>
<listitem>
<para>port の保守担当者に対応してもらいましょう。
<command>make maintainer</command> と入力するか、
<filename>Makefile</filename> を直接読み、
保守担当者の電子メールアドレスを調べます。
メールを送る際には、port 名とバージョン番号
(<filename>Makefile</filename> の
<literal>$FreeBSD:</literal> 行)、
そしてエラーが出力されるまでの出力ログを忘れずに添付してください。</para>
<note>
<para>特定の保守担当者が存在せず、かわりに <link xlink:href="&url.articles.mailing-list-faq.en;/article.html">メーリングリスト
</link> が保守している ports があります。
そのような場合には、メールアドレスは
<email role="nolink">freebsd-listname@FreeBSD.org</email>
のようになります。
質問する際には、このことに気をつけてください。</para>
<para>特に <email role="nolink">ports@FreeBSD.org</email>
が保守している ports には、保守担当者が本当にいません。
そのメーリングリストを購読する人々からなるコミュニティが、
修正や対応をおこなっています。
もっとボランティアが必要です!</para>
</note>
<para>保守担当者から返信がなければ、&man.send-pr.1;
を使ってバグレポートを提出してください (<link xlink:href="&url.articles.problem-reports;/article.html">
&os; 障害報告の書き方</link> をご覧ください)。</para>
</listitem>
<listitem>
<para>自分で直しましょう!
<quote>Ports</quote> システムに関する詳細な情報は <link xlink:href="&url.books.porters-handbook;/index.html">
port 作成者のためのハンドブック</link> にあります。
このセクションを読むと、壊れてしまった port を直したり、
自分で作った port を提出したりできるようになります!</para>
</listitem>
<listitem>
<para>かわりに &man.pkg.add.1; を使って package
をインストールしてください。</para>
</listitem>
</orderedlist>
</sect1>
</chapter>