4.6. Poudriere を用いた package の構築

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

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

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

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

4.6.1. Jails および Port ツリーの初期化

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

# poudriere jail -c -j 10amd64 -v 10.0-RELEASE
====>> Creating 10amd64 fs... done
====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/base.txz      100% of   59 MB 1470 kBps 00m42s
====>> Extracting base.txz... done
====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/src.txz       100% of  107 MB 1476 kBps 01m14s
====>> Extracting src.txz... done
====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/games.txz     100% of  865 kB  734 kBps 00m01s
====>> Extracting games.txz... done
====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
/poudriere/jails/10amd64/fromftp/lib32.txz     100% of   14 MB 1316 kBps 00m12s
====>> Extracting lib32.txz... done
====>> Cleaning up... done
====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used
# poudriere ports -c -p local
====>> Creating local fs... done
====>> Extracting portstree "local"...
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of   69 MB 1246 kBps 00m57s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 48 patches.
(48/48) 100.00%  done.
done.
Applying patches...
done.
Fetching 1 new ports or files... done.
/poudriere/ports/tester/CHANGES
/poudriere/ports/tester/COPYRIGHT

[...]

Building new INDEX files... done.

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

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

ビルドする package を 10amd64-local-workstation-pkglist に記載してください。

editors/emacs
devel/git
ports-mgmt/pkg
...

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

# poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

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

# poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

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

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

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

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

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

FreeBSD: {
	enabled: no
}

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

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

custom: {
	url: "http://pkg.example.com/10amd64",
	enabled: yes,
}

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

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

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