---
title: 第4章 アプリケーションのインストール - packages と ports
part: パートI. 導入
prev: books/handbook/basics
next: books/handbook/x11
description: "FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、ソースコードをコンパイルしてインストールする Ports Collection と、コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。"
tags: ["ports", "collection", "pkg", "poudriere", "管理"]
showBookMenu: true
weight: 6
params:
  path: "/books/handbook/ports/"
---

[[ports]]
= アプリケーションのインストール - packages と ports
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 4
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ports-synopsis]]
== この章では

FreeBSD の基本システムには数多くのシステムツールが含まれています。 FreeBSD は、サードパーティ製のソフトウェアの導入を支援するために、 ソースコードをコンパイルしてインストールする Ports Collection と、 コンパイル済みのバイナリをインストールする packages という相補的な 2 つの技術を提供しています。 どちらのシステムを用いても、 ローカルメディアやネットワーク上からソフトウェアをインストールできます。

この章を読むと、以下のことがわかります。

* packages と ports の違い
* FreeBSD に移植されたサードパーティ製のソフトウェアの探し方
* pkg を用いてバイナリ package を管理する方法
* Ports Collection を用いてサードパーティ製のソフトウェアをソースコードから構築する方法
* インストール後の設定のために、 アプリケーションとともにインストールされたファイルを探す方法
* ソフトウェアのインストールに失敗した場合に、どうしたらよいか

[[ports-overview]]
== ソフトウェアのインストール

UNIX(R) システムでは、 サードパーティ製ソフトウェアの典型的なインストール手順は以下のようになります。

[.procedure]
====
. ソースコード、 またはバイナリ形式で配布されているソフトウェアを探し出し、 ダウンロードする。
. 配布時のフォーマットからソフトウェアを取り出す。 一般的には man:compress[1], man:gzip[1], man:bzip2[1] または、man:xz[1] といったプログラムで圧縮された tarball です。
. [.filename]#INSTALL# または [.filename]#README# ファイル、あるいは [.filename]#doc/# サブディレクトのファイルからドキュメントを探しだし、 ソフトウェアのインストール方法を調べる。
. ソース形式でソフトウェアが配布されている場合はコンパイルを行う。 ここでは、[.filename]#Makefile# の編集、 または、`configure` スクリプトの実行を伴うことがあります。 
. ソフトウェアの動作を確認し、インストールする。
====

FreeBSD _port_ は、 アプリケーションをソースコードからコンパイルする際の処理を自動化するように設計されたファイルの集まりです。 port を構成するファイルは、 自動的にアプリケーションをダウンロードし、展開、パッチ作業、 コンパイル、そしてインストールを行うために必要な情報を含んでいます。

ソフトウェアが、すでに FreeBSD に移植され、 FreeBSD 上で試験されていなければ、 適切にインストールが行われ、動作するように、 編集する必要があるかもしれません。

しかしながら、link:https://www.FreeBSD.org/ja/ports/[{numports}] を越えるサードパーティ製アプリケーションが FreeBSD に移植されています。 可能な場合は、これらのアプリケーションをコンパイル済みの _packages_ としてダウンロードできます。

package は、package 管理コマンドで扱うことができます。

packages と ports は依存関係を理解します。 package または port を用いてアプリケーションをインストールすると、 依存するライブラリがまだインストールされていない場合には、 最初にライブラリが自動的にインストールされます。

FreeBSD の package は、コンパイル済みのアプリケーションの全コマンド、 各種設定ファイルやドキュメントを含んでいます。 pkg コマンドでは、`pkg install` といったコマンドで、 package を扱うことができます。

2 つの技術は類似していますが、 packages と ports にはそれぞれ独自の特徴があります。 それぞれのアプリケーションのインストールに対する必要要件に応じてどちらかを選択してください。

.package の利点
* 一般的に、あるアプリケーションの package の tarball は、 ソースコードを含む tarball より小さなサイズとなります。
* packages はコンパイルの時間を必要としません。 このことは、遅いシステム上で Mozilla, KDE, または GNOME といった大きなアプリケーションを扱う場合に重要となります。
* packages を用いれば、 ソフトウェアのコンパイルに関する知識は必要ありません。

.port の利点
* packages は、通常最も多くのシステムで実行できるように、 非常に保守的な設定で構築されています。 port からコンパイルすることで、 コンパイルオプションを指定できます。 
* アプリケーションのなかには、 どの機能をインストールするかをコンパイル時に設定するものがあります。 たとえば、Apache は多種多様な ビルトインオプションを設定できます。
+
設定を区別するために、同じアプリケーションに対して 複数の packages が存在することがあります。 たとえば、Ghostscript は Xorg がインストールされているかどうかにより、 [.filename]#ghostscript# package と [.filename]#ghostscript-nox11# package が選択可能となっています。 アプリケーションのコンパイルオプションが 1 つもしくは 2 つ以上になると、 複数の packages を用意することは困難になります。
* ライセンス条項で、 バイナリでの配布を禁止しているソフトウェアがあります。 このようなソフトウェアはソースコードで配布される必要があり、 エンドユーザがコンパイルしなくてはなりません。
* バイナリ配布を信用していない人や、 潜在的な問題点を見つけ出すためにソースコードを読むことを好む人がいます。
* カスタマイズしたパッチを適用するためには、 ソースコードが必要になります。

ports の更新状況を把握するために、 {freebsd-ports} や {freebsd-ports-bugs} を購読するとよいでしょう。

[WARNING]
====

アプリケーションをインストールする前に、 そのアプリケーションに関連したセキュリティ上の問題がないことを https://vuxml.freebsd.org/[] で確認するか、`pkg audit -F` と入力して、 インストールされているアプリケーションに既知の脆弱性がないことを確認してください。
====

この章では、packages と ports を用いた FreeBSD 上での サードパーティ製ソフトウェアのインストール方法や管理方法について説明します。

[[ports-finding-applications]]
== ソフトウェアの探し方

FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。 インストールするソフトウェアを探す方法はたくさん用意されています。

* FreeBSD ウェブサイトは、 利用可能なすべてのアプリケーションの最新の一覧を、検索できる形で link:https://www.FreeBSD.org/ja/ports/[https://www.FreeBSD.org/ja/ports/] において公開しています。 ports はアプリケーションの名前や、ソフトウェアのカテゴリで検索出来ます。
* Dan Langille は、包括的な検索ユーティリティや Ports Collection にあるアプリケーションの変更点を追跡する http://www.FreshPorts.org/[FreshPorts.org] を公開しています。 登録したユーザは、監視している ports がアップデートされた時に、 そのことを自動的にメールで知らせてくれるような、 カスタマイズ可能な監視リストを使うことができます。
* アプリケーションを見つけることが難しい場合には、link:http://www.sourceforge.net/[SourceForge.net] または http://www.github.com/[GitHub.com] のようなサイトで探してみてください。 その後、そのアプリケーションが ports で利用可能かどうかを link:https://www.FreeBSD.org/ja/ports/[FreeBSD サイト] で調べて下さい。
* バイナリ package リポジトリでアプリケーションを探すには、 以下のように実行してください。
+
[source,shell]
....
# pkg search subversion
git-subversion-1.9.2
java-subversion-1.8.8_2
p5-subversion-1.8.8_2
py27-hgsubversion-1.6
py27-subversion-1.8.8_2
ruby-subversion-1.8.8_2
subversion-1.8.8_2
subversion-book-4515
subversion-static-1.8.8_2
subversion16-1.6.23_4
subversion17-1.7.16_2
....
+
package 名にはバージョン番号が含まれます。 また、python ベースの ports では、 共に構築された python のバージョン番号も含まれます。 ports によっては、複数のバージョンを利用できるものがあります。 subversion では、 複数のバージョンを利用できますが、 異なるコンパイルオプションで構築されたものも利用できます。 インストールする package を指定する際には、 アプリケーションに、port ツリーのパスである、 port のオリジンを指定すると良いでしょう。 `pkg search` に `-o` オプションを付けて、実行してください。 各 package のオリジンの一覧が表示されます。
+
[source,shell]
....
# pkg search -o subversion
devel/git-subversion
java/java-subversion
devel/p5-subversion
devel/py-hgsubversion
devel/py-subversion
devel/ruby-subversion
devel/subversion16
devel/subversion17
devel/subversion
devel/subversion-book
devel/subversion-static
....
+
`pkg search` は、 リポジトリデータベースの説明やその他のフィールドにおいて、 シェルグロブ、正規表現、完全一致にも対応しています。 詳細については、package:ports-mgmt/pkg[] または package:ports-mgmt/pkg-devel[] のインストール後、 man:pkg-search[8] をご覧ください。
* Ports Collection がすでにインストールされていれば、 ports ツリーのローカルバージョンを調べることができます。 port がどのカテゴリに分類されているのかを知りたければ、 man:whereis[1] コマンドで調べることができます。 `whereis _ファイル_` と入力してください。_ファイル_ の部分にはインストールを考えているプログラム名を入れます。
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+
さらに、以下の例のように man:echo[1] を使って調べることもできます。
+
[source,shell]
....
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsof
....
+
この方法では [.filename]#/usr/ports/distfiles# 以下にダウンロードされたファイル名にもマッチします。
* また、Ports Collection に備わっている検索機能を利用して port を検索する方法もあります。 この検索機能を利用するには、 cd コマンドを用いて [.filename]#/usr/ports# ディレクトリに移動し、`make search name=プログラム名` と入力してください。 _プログラム名_ の部分には検索したいソフトウェアの名前を入れてください。 たとえば、`lsof` を探すには次のようにします。
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.88.d,8
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  ler@lerctr.org
Index:  sysutils
B-deps:
R-deps:
....
+
[TIP]
====

Ports Collection に用意されている検索のメカニズムでは、 インデックスファイルを利用して検索を行います。 もし [.filename]#INDEX# が必要であるというメッセージが表示されたら、 `make fetchindex` を実行して、 最新のインデックスファイルをダウンロードしてください。 [.filename]#INDEX# が用意されれば、 `make search` で検索を実行できるでしょう。
====
+
"Path:" という行は、 port がどこにあるかを示しています。
+
より絞られた情報を得るには、 `quicksearch` と呼ばれる機能を使ってください。
+
[source,shell]
....
# cd /usr/ports
# make quicksearch name=lsof
Port:   lsof-4.88.d,8
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
....
+
もっと詳しく検索するには、 `make search key=_string_` または `make quicksearch key=_string_` と入力してください。 _string_ の部分には検索したいテキストを入れます。 プログラムの名前がわからない場合でも、 ある目的に関連した ports の検索に利用できるよう、 テキストの部分には、コメント、 説明文および依存情報を入れることができます。
+ 
`search` および `quicksearch` を使う場合には、 検索文字列中の大文字と小文字を区別せずに検索が行われるので、 "LSOF" を検索した結果は、 "lsof" と同じ検索結果になります。

[[pkgng-intro]]
== pkg によるバイナリ package の管理

pkg は、FreeBSD における伝統的な package 管理ツールの置き換えとなる次世代の管理ツールで、 バイナリ packages をより早く、 より簡単に管理できるようにする数多くの機能を提供します。

FreeBSD のミラーサイトが提供する事前に構築されたバイナリ package のみを使いたいと考えているサイトでは、 pkg を使って package を管理するとよいでしょう。

しかしながら、 ソースまたは自分自身で用意したリポジトリから構築したサイトでは、<<ports-upgrading-tools,port 管理ツール>> が別に必要となります。

pkg はバイナリ package のみを扱うので、 そのような管理ツールの置き換えとはなりません。 これらのツールは、ソフトウェアをバイナリ packages と Ports Collection の両形式からインストールできますが、 pkg はバイナリ packages のみをインストールします。

[[pkgng-initial-setup]]
=== pkg 入門

FreeBSD には、 pkg およびマニュアルページをインストールするブートストラップユーティリティが用意されています。 このユーティリティは、FreeBSD 10._X_ 以降で動作するように設計されています。

[NOTE]
====
このブートストラッププロセスは、すべての FreeBSD バージョンおよびアーキテクチャに対応しているわけではありません。 現在対応している一覧は、 https://pkg.freebsd.org/[] で確認することができます。 対応していない場合には、 Ports Collection またはバイナリ package から pkg をインストールする必要があります。
====

システムをブートストラップするには、 以下を実行してください。

[source,shell]
....
# /usr/sbin/pkg
....

ブートストラッププロセスに成功するには、 インターネットへの接続が必要です。

port をインストールするには以下を実行してください。

[source,shell]
....
# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean
....

古い pkg_* ツールを用いたシステムをアップグレードする際には、 新しいツールがすでにインストールされている package を認識するよう、 データベースを新しいフォーマットへと変換する必要があります。 pkg をインストールしたら、 以下のコマンドを実行して、package データベースをこれまでの伝統的なフォーマットから新しいフォーマットへと変換してください。

[source,shell]
....
# pkg2ng
....

[NOTE]
====
このステップは、 サードパーティ製ソフトウェアがまだインストールされていないような、 新しくインストールされた直後のシステムでは必要ありません。
====

[IMPORTANT]
====
このステップは非可逆です。 一度 package データベースを pkg フォーマットへと変換したら、伝統的な pkg_* ツールを使うべきではありません。
====

[NOTE]
====
package データベースを変換する際には、 新しいバージョンへのデータ変換に伴ったエラーが出力されることがあります。 通常、これらのエラーは無視して構いませんが、 `pkg2ng` 終了後、 変換に失敗したソフトウェアの一覧が表示されます。 これらのソフトウェアを手動で再インストールする必要があります。
====

FreeBSD のバージョンが 10._X_ より前であれば、 以下の行を [.filename]#/etc/make.conf# に追加して、 Ports Collection がソフトウェアの登録に、伝統的な package のデータベースではなく、pkg を用いるように設定してください。

[.programlisting]
....
WITH_PKGNG=	yes
....

デフォルトでは、pkg は FreeBSD の package ミラー (_リポジトリ_) のバイナリ package を用います。 カスタム package リポジトリの構築については、 <<ports-poudriere>> をご覧ください。

その他の pkg の設定オプションは、man:pkg.conf[5] に記述されています。

pkg の利用情報は、 man:pkg[8] マニュアルページや、 `pkg` を引数なしに実行すると表示されます。

各 pkg コマンドの引数は、 コマンドに固有なマニュアルページに記述されています。 たとえば、`pkg install` のマニュアルページを読むには、 以下のコマンドのどちらかを実行してください。

[source,shell]
....
# pkg help install
....

[source,shell]
....
# man pkg-install
....

以下の節では、pkg を用いた通常のバイナリ package の管理について説明します。 各コマンドでは、カスタマイズのために、 多くのオプションが使われています。 詳細や、他の例については、 コマンドのヘルプやマニュアルページを参照してください。

[[quarterly-latest-branch]]
=== Quarterly および Latest Ports ブランチ

`Quarterly` ブランチを使うと、 ユーザは、port および package のインストールおよびアップグレードを、 より予測可能で安定して行うことができます。 基本的には、このブランチでは機能のアップデートは行われません。 Quarterly ブランチの目的は、セキュリティに関連する修正 (バージョンアップデートやコミットのバックポートなど)、 バグの修正および ports のコンプライアンスおよびフレームワークの変更の入手です。 Quarterly ブランチは、毎年の毎四半期 (1 月、4 月、7 月および 10 月) のはじめに HEAD から作成されます。 ブランチには、作成された年 (YYYY) をよび四半期 (Q1-4) により名前がつけられます。 たとえば、2016 年 1 月に作成された quarterly ブランチの名前は 2016Q1 となります。 `Latest` ブランチは、 最新バージョンの package をユーザに提供します。

quarterly から latest ブランチに移行するには、 以下のコマンドを実行してください。

[source,shell]
....
# cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf
....

[.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# ファイルを編集して、`url:` 行の _quarterly_ 文字列を _latest_ に変更してください。

編集後は、以下のようになります。

[.programlisting]
....
FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/shared/keys/pkg",
  enabled: yes
}
....

最後に、以下のコマンドを実行して (latest) リポジトリのメタデータからアップデートしてください。

[source,shell]
....
# pkg update -f
....

[[pkgng-pkg-info]]
=== インストールされている package の情報を入手する

オプションを使用しないで `pkg info` を実行すると、 システムにインストールされているすべての package もしくは、 ある特定の package の情報が得られます。

たとえば、インストールされている pkg の情報を調べるには、 以下のように実行してください。

[source,shell]
....
# pkg info pkg
pkg-1.1.4_1
....

[[pkgng-installing-deinstalling]]
=== package のインストールと削除

バイナリ package をインストールするには、 以下のコマンドを使ってください。 ここで _packagename_ は、インストールする package の名前です。

[source,shell]
....
# pkg install packagename
....

このコマンドは、リポジトリデータを使用して、 インストールすべきソフトウェアのバージョン、および、 インストールされていない依存ソフトウェアがあるかどうかを調べます。 たとえば、curl をインストールするには以下を実行してください。

[source,shell]
....
# pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

Updating repository catalogue
The following 2 packages will be installed:

        Installing ca_root_nss: 3.15.1_1
        Installing curl: 7.31.0_1

The installation will require 3 MB more space

0 B to be downloaded

Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.1_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done
....

新しい package と依存関係から追加された package は、 インストール済み package 一覧に表示されます。

[source,shell]
....
# pkg info
ca_root_nss-3.15.1_1	The root certificate bundle from the Mozilla Project
curl-7.31.0_1	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6	New generation package manager
....

必要のなくなった packages は、 `pkg delete` を使って削除できます。 たとえば、以下のようにして削除できます。

[source,shell]
....
# pkg delete curl
The following packages will be deleted:

	curl-7.31.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... done
....

[[pkgng-upgrading]]
=== インストールされている package のアップグレード

以下のコマンドを実行すると、 インストールされている packages が最新のバージョンにアップグレードされます。

[source,shell]
....
# pkg upgrade
....

このコマンドは、インストールされているソフトウェアのバージョンと、 リポジトリのカタログから利用できるバージョンとを比較し、 リポジトリからアップグレードします。

[[pkgng-auditing]]
=== インストールされている package の検証

サードウェア製アプリケーションに対する脆弱性は、 定期的に見つかります。脆弱性を調べるために、 pkg は、検証機能を持っています。 システムにインストールされているソフトウェアに既知の脆弱性がないかどうかを調べるには、 以下のように実行してください。

[source,shell]
....
# pkg audit -F
....

[[pkgng-autoremove]]
=== 使われていない package の自動削除

package を削除すると、不必要な依存 package が残されることがあります。 依存のためにインストールされたが、 現在は不必要になった package (リーフ package) は、 以下のコマンドで自動的に検出され、削除されます。

[source,shell]
....
# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.15.1_1

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... done
....

依存によりインストールされた packages は、 _automatic_ package と呼ばれます。 非 automatic packages、 すなわち他の package からの依存ではなく、 明示的にインストールした package の一覧は以下のようにして出力できます。

[source,shell]
....
# pkg prime-list
nginx
openvpn
sudo
....

`pkg prime-list` は、 [.filename]#/usr/local/etc/pkg.conf# で設定されているエイリアスコマンドです。 他にもシステムの package データベースの問い合わせに用いることができる多くのコマンドが用意されています。 たとえば、`pkg prime-origins` コマンドを使うと、 上記で得られた port 一覧のオリジナルの port ディレクトリを知ることができます。

[source,shell]
....
# pkg prime-origins
www/nginx
security/openvpn
security/sudo
....

この一覧と package:ports-mgmt/poudriere[] または package:ports-mgmt/synth[] といったツールを使うと、 システムにインストールされているすべての package を再構築できます。

インストールされた package に automatic のマーク付けをするには、 以下のように実行してください。

[source,shell]
....
# pkg set -A 1 devel/cmake
....

リーフ package や automatic としてマークされた package は、 `pkg autoremove` で選択されます。

インストールされた package を _非_ automatic とマークするには、以下のように実行してください。

[source,shell]
....
# pkg set -A 0 devel/cmake
....

[[pkgng-backup]]
=== package データベースのリストア

伝統的な package 管理システムとは異なり、 pkg には package データベースをバックアップするメカニズムがあります。 この機能はデフォルトで有効に設定されています。

[TIP]
====

スクリプトによる定期的な package データベースのバックアップを無効にするには、 man:periodic.conf[5] の中で、 `daily_backup_pkgdb_enable="NO"` と設定してください。
====

過去にバックアップした package データベースの中身をリストアするには、 以下のコマンドを実行してください。 以下のコマンドの _/path/to/pkg.sql_ については、バックアップのある場所に置き換えて実行してください。

[source,shell]
....
# pkg backup -r /path/to/pkg.sql
....

[NOTE]
====
システムの定期的なスクリプトによって取得されたバックアップをリストアする場合には、 リストアの前に展開しておく必要があります。
====

手動で pkg データベースをバックアップするには、以下のコマンドを実行してください。 以下のコマンドの _/path/to/pkg.sql_ については、適切なファイル名と場所に置き換えて下さい。

[source,shell]
....
# pkg backup -d /path/to/pkg.sql
....

[[pkgng-clean]]
=== 古くなった package の削除

デフォルトでは、pkg は、man:pkg.conf[5] の `PKG_CACHEDIR` 変数で定義されるキャッシュディレクトリにバイナリ packages を保存します。 インストールされている package の最新のコピーのみが保存されます。 古いバージョンの pkg では、 過去にインストールされたすべての package が保存されていました。 これらの古くなったバイナリ package を削除するには、 以下を実行してください。

[source,shell]
....
# pkg clean
....

キャッシュ全体を削除するには以下を実行してください。

[source,shell]
....
# pkg clean -a
....

[[pkgng-set]]
=== package メタデータの変更

FreeBSD Ports Collection では、メジャーバージョン番号が変更になることがあります。 これに対応するために、pkg には、 package の情報をアップデートするコマンドが組み込まれています。 たとえば、[.filename]#lang/php5# が、 バージョン `5.4` を表すようになり、 [.filename]#lang/php5# を [.filename]#lang/php53# と名前を変更する必要があるような場合に、有用です。

上記の例の package の情報を変更するには、 以下のように実行してください。

[source,shell]
....
# pkg set -o lang/php5:lang/php53
....

別の例として、package:lang/ruby18[] を package:lang/ruby19[] にアップデートするには、 以下のようにしてください。

[source,shell]
....
# pkg set -o lang/ruby18:lang/ruby19
....

最後の例として、 [.filename]#libglut# 共有ライブラリの情報を package:graphics/libglut[] から package:graphics/freeglut[] へと変更するには、 以下のように実行してください。

[source,shell]
....
# pkg set -o graphics/libglut:graphics/freeglut
....

[NOTE]
====
package の情報を変更したら、 情報が変更された package に依存している packages を再インストールすることが重要となります。 依存 packages を再インストールするには、 以下のように実行してください。

[source,shell]
....
# pkg install -Rf graphics/freeglut
....

====

[[ports-using]]
== Ports Collection の利用

Ports Collection は、[.filename]#Makefile#, 修正パッチ、 説明文などの一連のファイルのことです。 これらのファイルの各セットは、 個々のアプリケーションをコンパイルして FreeBSD にインストールするために用いられ、_port_ と呼ばれています。

デフォルトでは、Ports Collection は、[.filename]#/usr/ports# 以下のサブディレクトリに置かれます。

[WARNING]
====

Ports Collection をインストールして使用する前に、一般的には、
ソフトウェアのインストールに、pkg でダウンロードしたバイナリパッケージと Ports Collection を組み合わせて使うことはあまり良いことではないことを知っておいてください。
pkg は、デフォルトでは ports ツリーの  (HEAD ではなく) quarterly ブランチリリースを追いかけます。
HEAD の port と対応する quarterly ブランチの port の依存関係は異なる可能性があり、そのため pkg でインストールされた依存関係と Ports Collection の依存関係の間で競合が起きることがあります。
もし、Ports Collection と pkg を組み合わせて使用しなければならないのであれば、Ports Collection と pkg が同じ ports ツリーのブランチを使用していることを必ず確認してください。
====

Ports Collection は、ソフトウェアのカテゴリを表すディレクトリを持ちます。
各カテゴリには、各アプリケーションのサブディレクトリがあります。
各アプリケーションのサブディレクトリには、プログラムを FreeBSD 上で正しくコンパイルしてインストールする方法を提供する、 _ports スケルトン_ と呼ばれるファイルのセットが含まれています。
それぞれの port スケルトンには、次のファイルおよびディレクトリが含まれています。

* [.filename]#Makefile#: このファイルにはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する命令文が含まれています。
* [.filename]#distinfo#: このファイルには、その port を構築するためにダウンロードする必要があるファイルのファイル名と、チェックサム情報が含まれています。
* [.filename]#files#: このディレクトリには FreeBSD 上でプログラムをコンパイルし、インストールするための修正パッチが含まれています。このディレクトリには、その port の構築に必要なその他のファイルが入る場合もあります。
* [.filename]#pkg-descr#: このファイルにはプログラムに関する、より詳しい説明文が含まれます。
* [.filename]#pkg-plist#: これは、その port によってインストールされる全ファイルのリストです。これにはプログラムを削除する際に、どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。

これらの他に [.filename]#pkg-message# や特殊な状況に対応するためのファイルを含む ports もあります。
これらのファイルについての詳細および ports の一般的な説明については、extref:{porters-handbook}[port 作成者のためのハンドブック] をご覧下さい。

port は実際のソースコード ([.filename]#distfile# とも呼ばれます) を含んではいません。
port の構築の展開部で、ダウンロードされたソースは自動的に [.filename]#/usr/ports/distfiles# に保存されます。

[[ports-using-installation-methods]]
=== Ports Collection のインストール

port を用いてアプリケーションをコンパイルできるようにするには、 まず最初に Ports Collection をインストールする必要があります。 FreeBSD のインストール時に Ports Collection をインストールしていない場合には、 以下の方法のどれかを用いてインストールしてください。

[[ports-using-git-method]]
[.procedure]
====
*Procedure: Git を用いる方法*

ports ツリーの管理が必要な場合や、 ローカルで変更点をメンテナンスする必要がある場合、 および FreeBSD-CURRENT を使用している場合には、 Git を使って Ports Collection を取得する方法があります。
Git のより詳細な説明については、extref:{committers-guide}[Git Primer, git-primer] を参照してください。

. Git を使って ports ツリーをチェックアウトする前に、Git をインストールしておく必要があります。
ports ツリーがすでにインストールされていれば、 以下のようにして Git をインストールできます。
+
[source,shell]
....
# cd /usr/ports/devel/git
# make install clean
....
+
ports ツリーが利用できない場合や、 package の管理に pkg を使っているのであれば、package から Git をインストールできます。
+
[source,shell]
....
# pkg install git
....
+
. HEAD ブランチの ports ツリーをチェックアウトしてください。
+
[source,shell]
....
# git clone https://git.FreeBSD.org/ports.git /usr/ports
....
+
. または、quarterly ブランチをチェックアウトしてください。
+
[source,shell]
....
# git clone https://git.FreeBSD.org/ports.git -b 2020Q3 /usr/ports
....
+
. Git で最初のチェックアウトをした後は、必要に応じて [.filename]#/usr/ports# をアップデートしてください。
+
[source,shell]
....
# git -C /usr/ports pull
....
+
. 必要に応じて [.filename]#/usr/ports# を別の quarterly ブランチにスイッチしてください。
+
[source,shell]
....
# git -C /usr/ports switch 2020Q4
....
====

=== ports のインストール

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

[WARNING]
====

いかなる port でも、構築する前には、 前節に書かれているように、Ports Collection をアップデートしてください。 サードパーティ製のソフトウェアをインストールすると、 セキュリティの脆弱性を引き起こす可能性があります。 その port に関連したセキュリティ上の問題がないことを、まずは https://vuxml.freebsd.org/[] で確認してください。または、 新しい port をインストールする前に、 `pkg audit -F` を実行してください。 毎日のシステムのセキュリティ確認時に、 自動的にセキュリティの検査およびデータベースの更新を行うようにこのコマンドを設定できます。 詳しくは、man:pkg-audit[8] および man:periodic[8] を参照してください。
====

Ports Collection は、ネットワークに接続できることを想定しています。 また、superuser の権限も必要となります。

port をコンパイルしてインストールするには、 インストールしたい port のディレクトリに移動してください。 その後、プロンプトから `make install` と入力してください。 すると、次のような出力が現われるはずです。

[source,shell]
....
# cd /usr/ports/sysutils/lsof
# make install
>> lsof_4.88D.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.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===>  Patching for lsof-4.88.d,8
===>  Applying FreeBSD patches for lsof-4.88.d,8
===>  Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===>  Building for lsof-4.88.d,8
...
[compilation output snipped]
...
===>  Installing for lsof-4.88.d,8

===>  Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.88.d,8
===>   Registering installation for lsof-4.88.d,8
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/lsof
#
....

`lsof` は高い権限で動作するプログラムなので、 インストールする時にセキュリティに関する警告が表示されます。 インストールが終わったら、プロンプトが戻ります。

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

インストールの間に、作業用ディレクトリが作成されます。 このディレクトリにはコンパイル時に使用されるすべての一時ファイルが含まれています。 このディレクトリを削除することで、ディスク容量を節約でき、また port を新しいバージョンへアップデートする際に問題が起こる可能性を小さくします。

[source,shell]
....
# make clean
===>  Cleaning for lsof-88.d,8
#
....

[NOTE]
====
port を構築する際に、 `make install clean` と実行することで、 これらの余分な手順を省くことができます。
====

==== ports のインストールのカスタマイズ

ports の中にはビルドオプションを指定できるものがあります。 このオプションを指定することで、 アプリケーションの機能の一部を有効もしくは無効にできます。 また、セキュリティオプションを設定したり、 その他のカスタマイズを行うことができます。 このようなアプリケーションには [.filename]#www/firefox#, [.filename]#security/gpgme# や [.filename]#mail/sylpheed-claws# などがあります。 port が他のカスタマイズ可能なオプションを持つ ports に依存する場合には、デフォルトでは、ユーザに port のオプションをメニューから選択させる設定のため、 何度もユーザとの対話が起こり待たされることがあります。 これを避けるには、まず最初に port スケルトンで `make config-recursive` を実行して設定を一括で行い、その後 `make install [clean]` を実行して port を構築してインストールしてください。

[TIP]
====

`config-recursive` を実行する際、 `all-depends-list` を実行すると、設定すべき ports の一覧を得ることができます。 多くの場合は、すべての依存 ports のオプションが定義され、 ports オプションの画面が表示されなくなり、 すべてのオプションが設定されたことを確認できるまで `make config-recursive` を実行すると良いでしょう。
====

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

ports は、いくつかの環境変数を参照する man:fetch[1] を用いてソースファイルをダウンロードします。 FreeBSD システムがファイアウォールの内側であったり、 FTP/HTTP プロキシを使う場合には、 `FTP_PASSIVE_MODE`, `FTP_PROXY`, `FTP_PASSWORD` の環境変数を設定することなります。 対応している環境変数の一覧については man:fetch[3] をご覧ください。

インターネットに常時接続できないユーザのために `make fetch` コマンドが用意されています。 このコマンドを [.filename]#/usr/ports# で実行してすべての distfiles をダウンロードするか、 [.filename]#/usr/ports/net# といったカテゴリや、あるスケルトンにおいても実行できます。 ある port がライブラリやその他の ports に依存している場合には、 別のカテゴリの ports の distfiles はダウンロードされ__ない__ことに注意してください。 port が依存しているすべての distfiles をダウンロードしたければ、 `make fetch-recursive` を使ってください。

めったにないことかもしれませんが、 ローカルに distfiles のリポジトリがあるような場合に、 `MASTER_SITES` 変数を変更することで [.filename]#Makefile# で指定されているダウンロードの場所を 変更することができます。 設定する場合には、変更先を以下のようにして指定してください。

[source,shell]
....
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch
....

`WRKDIRPREFIX` 変数と `PREFIX` 変数を変更することで、 作業ディレクトリやターゲットディレクトリをデフォルトのものから変更できます。

[source,shell]
....
# make WRKDIRPREFIX=/usr/home/example/ports install
....

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

[source,shell]
....
# make PREFIX=/usr/home/example/local install
....

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

[source,shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....

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

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

[[ports-removing]]
=== インストールした ports の削除

インストールされた ports は、 `pkg delete` コマンドで削除できます。 このコマンドの使用例は、man:pkg-delete[8] マニュアルページにあります。

あるいは、port のディレクトリにて `make deinstall` を実行することでも削除できます。

[source,shell]
....
# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for sysutils/lsof
===>   Deinstalling
Deinstallation has been requested for the following 1 packages:

	lsof-4.88.d,8

The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... done
....

port が削除されるときに表示されるメッセージを読むことをお勧めします。 もし削除した port に依存するアプリケーションがあった場合には、 その情報が表示されますが、port の削除は行われます。 そのようなケースでは、依存を直すためにアプリケーションを再インストールするとよいでしょう。

[[ports-upgrading]]
=== ports のアップグレード

ports のインストール後、時間が経過すると、Ports Collection で新しいバージョンのソフトウェアを利用できるようになります。 この章では、 どのようにしてアップグレードする必要のあるソフトウェアを判断するか、 そしてアップグレードの方法について説明します。

インストールされている ports の新しいバージョンを利用できるかどうかを知るには、まず、 最新の ports ツリーがインストールされていることを確認してください。 これには、<<ports-using-git-method,「Git を用いる方法」>> で書かれているアップデートのコマンドを使ってください。
FreeBSD 10 以降のシステム、または、pkg に変換されたシステムでは、 以下のコマンドを実行すると、現在利用可能なバージョンよりも古い ports の一覧が表示されます。

[source,shell]
....
# pkg version -l "<"
....

FreeBSD 9._X_ より前のシステムでは、 現在利用可能なバージョンよりも古い ports の一覧を表示されるには、以下のコマンドを実行してください。

[source,shell]
....
# pkg_version -l "<"
....

[IMPORTANT]
====
アップグレードする前に [.filename]#/usr/ports/UPDATING# を、ファイルの頭から、ports を最後にアップデートした日、 もしくはシステムをインストールをした日に最も近い日まで目を通してください このファイルには port をアップグレードする際にユーザが遭遇するであろう問題や、 追加で必要な作業などが記述されています。 例えば、ファイル形式の変更や設定ファイルの場所の変更、 前のバージョンと互換性がなくなったことなどが書かれています。 アップグレードする必要のある ports に関連した手順に注意し、 アップグレードする際にはこれらの手順に従ってください。
====

[[ports-upgrading-tools]]
==== ports のアップグレードおよび管理ツール

Ports Collection には、 実際にアップグレードを行うためのユーティリティがいくつか用意されています。 それぞれのユーティリティは長所と短所を持っています。

歴史的に、最もインストールされ使われているのは、 Portmaster または Portupgrade です。 Synth は新しいユーティリティです。

[NOTE]
====
特定のシステムにおいて、 どのツールを選択するとベストかについては、 システム管理者によります。 これらのどのツールでも、使う前には、 データのバックアップをとることが推奨されます。
====

[[portmaster]]
==== portmaster を用いた ports のアップグレード

package:ports-mgmt/portmaster[] は、 インストールされている ports のアップグレードをおこなう、 とても小さなユーティリティです。 FreeBSD のベースシステムとしてインストールされているツールだけを使い、 他の ports やデータベースに依存しないように設計されています。 port からこのユーティリティをインストールするには以下のようにしてください。

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....

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

* Root ports: 他の port に依存せず、 他の port からも依存されない ports。
* Trunk ports: 他の port には依存しないが、 他の port から依存されている ports。
* Branch ports: 他の port に依存し、 他の port からも依存されている ports。
* Leaf ports: 他の port に依存するが、 他の port からは依存されない ports。

これらのカテゴリの一覧や、アップデート可能な port の一覧を表示するには以下のようにしてください。

[source,shell]
....
# 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 をすべてアップデートします。

[source,shell]
....
# portmaster -a
....

[NOTE]
====
Portmaster のデフォルトの設定では、 インストールされている port を削除する前に、 バックアップ用の package が作成されます。 このバックアップは、 新しいバージョンのインストールに成功すると削除されます。 `-b` を使うと、 Portmaster の自動的なバックアップの削除は行いません。 `-i` を追加すると、 Portmaster をインタラクティブモードで使用できます。 このモードでは、各 port をアップグレードするかどうかの選択を対話的に行うことがでます。 多くのオプションが利用可能です。 man:portmaster[8] マニュアルページから、 それらの使用方法に関する詳細な説明を読んでください。
====

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

[source,shell]
....
# portmaster -af
....

Portmaster を使ってシステムに新しい ports をインストールしたり、 新しい port のコンパイルやインストール前に依存するすべての port をアップグレードできます。この機能を使う時には、 Ports Collection の場所を指定してください。

[source,shell]
....
# portmaster shells/bash
....

package:ports-mgmt/portmaster[] に関するより多くの情報は、[.filename]#pkg-descr# にあります。

[[portupgrade]]
==== Portupgrade を用いた ports のアップグレード

package:ports-mgmt/portupgrade[] は、 インストールした ports のアップグレードを行なうためのもう一つのユーティリティです。 このユーティリティは ports を管理するために用いられるアプリケーションのセットをインストールします。 Ruby に依存します。 port をインストールするには、以下を実行してください。

[source,shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....

このユーティリティを使ってアップグレードを行う前に、 `pkgdb -F` を使って、 インストールされている ports の一覧を調べてください。 矛盾が検出された場合には修復してください。

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

[source,shell]
....
# portupgrade -ai
....

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

[source,shell]
....
# portupgrade -R firefox
....

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

[source,shell]
....
# portupgrade -PP gnome3
....

また、ビルドやインストールを行なわず、 distfiles または packages だけをダウンロードしたければ、 `-F` オプションを指定してください。 利用可能なすべてのオプションについては、 man:portupgrade[1] のマニュアルを参照してください。

package:ports-mgmt/portupgrade[] に関するより多くの情報は、[.filename]#pkg-descr# にあります。

[[ports-disk-space]]
=== ports とディスク容量

Ports Collection を使い続けていると、 そのうちディスクを食いつぶしてしまうでしょう。 ports をビルドしてインストールした後、 ports スケルトンで `make clean` を実行すると、作業用の [.filename]#work# ディレクトリを削除します。 Portmaster を使って port をインストールする場合には、`-K` を使わなければこのディレクトリは自動的に削除されます。 Portupgrade がインストールされている場合には、 以下のコマンドはローカルの Ports Collection に見つかったすべての [.filename]#work# ディレクトリを削除します。

[source,shell]
....
# portsclean -C
....

さらに、時間が経つにつれ [.filename]#/usr/ports/distfiles# には、古くなったソースファイルがたまっていきます。 Portupgrade を使って、どの ports からも使われていないすべての distfiles を削除するには次のように実行してください。

[source,shell]
....
# portsclean -D
....

Portupgrade を使って、システムにインストールされている port から使われていない distfiles をすべて削除することができます。

[source,shell]
....
# portsclean -DD
....

もし Portmaster がインストールされているのであれば、以下を実行してください。

[source,shell]
....
# portmaster --clean-distfiles
....

デフォルトでは、このコマンドはインタラクティブに設定されているため、 ユーザに対して distfile を削除すべきかどうかを確認するプロンプトが表示されます。

これらのコマンドに加え、[.filename]#ports-mgmt/pkg_cutleaves# は、 必要なくなった ports を削除する作業を自動化します。

[[ports-poudriere]]
== Poudriere を用いた package の構築

poudriere は、FreeBSD package を作成したり、試験に用いられる BSD ライセンスのユーティリティです。 このユーティリティは、FreeBSD jails を用いて、 独立したコンパイル環境を構築します。 これらの jail を使って、 インストールされている FreeBSD のバージョンとは異なるバージョンの package を作成したり、ホストが amd64 のシステムでは、 i386 用の package を構築することもできます。 構築された package のレイアウトは公式のミラーと同じです。 これらの package は、man:pkg[8] や他の package 管理ツールで利用できます。

package:ports-mgmt/poudriere[] package または port から poudriere をインストールしてください。 アプリケーションをインストールすると、サンプルの設定ファイルである [.filename]#/usr/local/etc/poudriere.conf.sample# もインストールされます。 このファイルを [.filename]#/usr/local/etc/poudriere.conf# にコピーして、 ローカルの環境に合わせて編集してください。

poudriere を実行するシステムで、 必ずしも ZFS を使う必要はありませんが、 有用です。ZFS を使う際には、 [.filename]#/usr/local/etc/poudriere.conf# の中で `ZPOOL` を指定する必要があります。 そして、`FREEBSD_HOST` を最も近いミラーに設定してください。 `CCACHE_DIR` を定義することで、 package:devel/ccache[] を使ったコンパイルのキャッシュが可能となり、 コンパイルで頻繁に使われるコードの構築時間を短縮できます。 poudriere データセットを [.filename]#/poudriere# にマウントされた独立したツリーに置くと良いでしょう。 他の値はデフォルトの値で十分です。

同時に走らせるコンパイル数の定義には、 認識されたコアプロセッサの数が用いられます。 RAM もしくはスワップ空間のどちらかの仮想メモリを十分用意してください。 もし、仮想メモリを使い切ってしまったら、jail の構築は中断し、 異常なメッセージが表示されることでしょう。

[[poudriere-initialization]]
=== Jails および Port ツリーの初期化

設定が終わったら、poudriere を初期化して、必要とする FreeBSD ツリーおよび jail、 そして ports ツリーをインストールしてください。 jail の名前を `-j`、 FreeBSD のバージョンを `-v` で指定してください。 FreeBSD/amd64 システムでは、 `-a` を使ってアーキテクチャに `i386` または `amd64` を設定できます。 デフォルトでは、`uname` で表示されるアーキテクチャに設定されます。

[source,shell]
....
# poudriere jail -c -j 13amd64 -v 13.1-RELEASE
[00:00:00] Creating 13amd64 fs at /poudriere/jails/13amd64... done
[00:00:00] Using pre-distributed MANIFEST for FreeBSD 13.1-RELEASE amd64
[00:00:00] Fetching base for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/base.txz              125 MB 4110 kBps    31s
[00:00:33] Extracting base... done
[00:00:54] Fetching src for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/src.txz               154 MB 4178 kBps    38s
[00:01:33] Extracting src... done
[00:02:31] Fetching lib32 for FreeBSD 13.1-RELEASE amd64
/poudriere/jails/13amd64/fromftp/lib32.txz              24 MB 3969 kBps    06s
[00:02:38] Extracting lib32... done
[00:02:42] Cleaning up... done
[00:02:42] Recording filesystem state for clean... done
[00:02:42] Upgrading using ftp
/etc/resolv.conf -> /poudriere/jails/13amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
Fetching metadata signature for 13.1-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done.
Applying patches... done.
Fetching 6 files... done.
The following files will be added as part of updating to
13.1-RELEASE-p1:
/usr/src/contrib/unbound/.github
/usr/src/contrib/unbound/.github/FUNDING.yml
/usr/src/contrib/unbound/contrib/drop2rpz
/usr/src/contrib/unbound/contrib/unbound_portable.service.in
/usr/src/contrib/unbound/services/rpz.c
/usr/src/contrib/unbound/services/rpz.h
/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
The following files will be updated as part of updating to
13.1-RELEASE-p1:
[…]
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
 done.
13.1-RELEASE-p1:
[00:04:06] Recording filesystem state for clean... done
[00:04:07] Jail 13amd64 13.1-RELEASE-p1 amd64 is ready to be used
....

[source,shell]
....
# poudriere ports -c -p local -m git+https
[00:00:00] Creating local fs at /poudriere/ports/local... done
[00:00:00] Checking out the ports tree... done
....

一つのコンピュータ上で、 複数の設定、複数の jails、異なる port ツリーから poudriere は port をビルドできます。 これらのコンビネーションのカスタム設定は _セット_ と呼ばれます。 詳細については、package:ports-mgmt/poudriere[] もしくは package:ports-mgmt/poudriere-devel[] をインストール後、 man:poudriere[8] の CUSTOMIZATION の章をご覧下さい。

ここで示される基本設定では、jail, ports そしてセット固有の [.filename]#make.conf# を [.filename]#/usr/local/etc/poudriere.d# に置いてください。
この例でのファイル名 [.filename]#13amd64-local-workstation-make.conf# は、jail 名、port 名そして、セット名の組み合わせで付けられています。
システムの [.filename]#make.conf# と、この新しいファイルは、ビルド時に結合され、構築した jail で用いられる [.filename]#make.conf# を作成します。

ビルドする package を [.filename]#13amd64-local-workstation-pkglist# に記載してください。

[.programlisting]
....
editors/emacs
devel/git
ports-mgmt/pkg
...
....

特定の ports に対し、 オプションや依存を設定してください。

[source,shell]
....
# poudriere options -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....

最後に packages を構築し、 package リポジトリを生成してください。

[source,shell]
....
# poudriere bulk -j 13amd64 -p local -z workstation -f 13amd64-local-workstation-pkglist
....

このコマンドの実行中に kbd:[Ctrl+t] を押すと、現在のビルド状況が表示されます。 Poudriere は [.filename]#/poudriere/logs/bulk/jailname# にあるファイルも構築します。 このファイルをウェブサーバと共に使うことで、 ビルド情報を表示できます。

これが終わると、poudriere リポジトリを package のインストールに利用できるようになります。

poudriere を利用する上でのより多くの情報については、 man:poudriere[8] およびメインのウェブサイトである https://github.com/freebsd/poudriere/wiki[] を参照してください。

=== Poudriere リポジトリを使うための pkg クライアントの設定

カスタムリポジトリと公式のリポジトリの両方を並行して使用することは可能ですが、 公式リポジトリを無効にすると有用な場合があります。 このように設定するには、設定ファイルを作成し、 設定ファイルの中で公式リポジトリを無効にしてください。 [.filename]#/usr/local/etc/pkg/repos/FreeBSD.conf# を作成して、以下を含めてください。

[.programlisting]
....
FreeBSD: {
	enabled: no
}
....

通常は、HTTP 経由で poudriere リポジトリをクライアントコンピュータに公開すると簡単です。
package ディレクトリ (たとえば、 [.filename]#/usr/local/poudriere/data/packages/13amd64# ) を公開するようにウェブサーバを設定してください。
この例で [.filename]#13amd64# は構築名です。

もし、package リポジトリの URL が `http://pkg.example.com/13amd64` であれば、 リポジトリの設定ファイルである [.filename]#/usr/local/etc/pkg/repos/custom.conf# は、 以下のようになります。

[.programlisting]
....
custom: {
	url: "http://pkg.example.com/13amd64",
	enabled: yes,
}
....

[[ports-nextsteps]]
== インストール後の作業

バイナリ package もしくは port のどちらを用いてソフトウェアをインストールするかに関わらず、 サードパーティ製のアプリケーションの多くは、 インストール後にある程度の設定を必要とします。 以下のコマンドや場所の情報は、 アプリケーションとともに何がインストールされたかを知るための助けとなるでしょう。

* 多くのアプリケーションでは、 デフォルトの設定ファイルが、少なくとも一つは [.filename]#/usr/local/etc# にインストールされます。 数多くの設定ファイルを持つようなアプリケーションでは、 それらのファイルを格納するためにサブディレクトリを作成するものもあります。 サンプルの設定ファイルは、しばしば [.filename]#.sample# といった拡張子がついた名前でインストールされます。 設定ファイルを確認し、 必要に応じてシステムの要求に合うように編集してください。 最初にサンプルファイルを [.filename]#.sample# を外した名前のファイルにコピーしてから、編集してください。
* ドキュメントが付属しているアプリケーションは、ドキュメントを [.filename]#/usr/local/share/doc# にインストールします。
また、多くのアプリケーションは、マニュアルページもインストールします。
これらのドキュメントは、アプリケーションを使い続ける前に見ておくべきものです。
* ある種のアプリケーションでは、 サービスを実行するためには、 アプリケーションの起動前に、 [.filename]#/etc/rc.conf# に追加する必要があります。 これらのアプリケーションでは、通常、 スタートアップスクリプトが [.filename]#/usr/local/etc/rc.d# にインストールされます。詳細は、 crossref:config[configtuning-starting-services,サービスの起動] をご覧ください。
+
[NOTE]
====
設計上、インストールの際に、アプリケーションは、 スタートアップスクリプトを実行しませんし、 アンインストールやアップグレードの際には、 停止のためのスクリプトは実行されません。 起動や停止の決定は、各システム管理者に任されています。
====

* man:csh[1] のユーザは、 `rehash` を実行して、 シェルの `PATH` のバイナリリストを再構築してください。
* `pkg info` を使って、アプリケーションと共にインストールされたファイル、 マニュアルページ、およびバイナリを調べることができます。

[[ports-broken]]
== うまく動作しない ports に遭遇した場合には

port をうまくコンパイルできなかったりインストールできない場合には、 以下を試してください。

. その port に対する修正案が提出されていないかどうかを link:https://www.FreeBSD.org/ja/support/[障害報告 (Problem Report) データベース] で調べてください。 もし提案されていれば、 その提案されている修正によって問題を解決できるかもしれません。
. port の保守担当者に対応してもらいましょう。
port スケルトンで `make maintainer` と入力するか、port の [.filename]#Makefile# を読み、保守担当者の電子メールアドレスを調べてください。
保守担当者にメールを送る際には、エラーが出力されるまでの出力ログを忘れずに添付してください。
+
[NOTE]
====
特定の保守担当者が存在せず、かわりに extref:{mailing-list-faq}[メーリングリスト ] によるグループの管理者が保守している ports があります。 そのような場合には、メールアドレスは mailto:freebsd-listname@FreeBSD.org[freebsd-listname@FreeBSD.org] のようになります。 メールを送る際には、このことに気をつけてください。

特に mailto:ports@FreeBSD.org[ports@FreeBSD.org] が保守している ports には、保守担当者がいません。 そのかわり、 そのメーリングリストを購読する人々からなるコミュニティが、 修正や対応をおこなっています。 もっとボランティアが必要です!
====
+
メールに対して返信がなければ、extref:{problem-reports}[FreeBSD 障害報告の書き方] に書かれている手順にしたがい、 Bugzilla を使ってバグレポートを提出してください。
. 自分で直しましょう! ports システムに関する詳細な情報は extref:{porters-handbook}[port 作成者のためのハンドブック] にあります。 このセクションを読むと、壊れてしまった port を直したり、 自分で作った port を提出したりできるようになります!
. <<pkgng-intro>> に書かれている手順にしたがって、 package をインストールしてください。
