Gentoo Logo

1.  Portageの機能

PortageはあなたのGentoo環境をより良くしてくれるいくつかの追加の機能があります。 これらの機能の多くはパフォーマンス、信頼性、セキュリティなどを改良してくれるソフトウェアツールに頼っています。

Portageの機能を有効にしたり無効にするには、スペースで区切られた様々な機能のキーワードを含む/etc/make.confFEATURES変数を編集する必要があります。 いくつかのケースでは機能が依存している追加のツールをインストールする必要があります。

Portageがサポートしている機能が全てここで紹介されているわけではありません。 全てを知るには、make.confのmanページを調べてください。

コード表示 1.1: make.confのmanページを調べる

$ man make.conf

デフォルトでFEATURESに何が設定されているかを知るには、emerge --infoを実行してFEATURES変数を検索するかgrepを利用します。

コード表示 1.1: 既に設定されているFEATURESを知る

$ emerge --info | grep FEATURES

1.  分散コンパイル

distccを使う

distccはネットワーク上のそれぞれのマシン(同一である必要はない)にコンパイル作業を分散させるプログラムです。 distccクライアントは利用可能な(distccdが実行されている)distccサーバに必要な情報の全てを送信するので、 それらサーバはクライアントのためにソースコードの断片をコンパイルすることができます。 この結果、コンパイルの時間が高速化されます。

distccに関するより多くの情報(そしてどのようにしてGentooで動作するのか)についてはGentoo Distcc Documentation(日本語訳)を見てください。

distccのインストール

distccはコンピュータが送信したコンパイルタスクを監視するグラフィカルモニターを提供します。 もしGnomeを使っているのならUSEフラグに'gnome'を追加してください。 しかし、Gnomeを使っていないがモニターを利用したいときはUSEフラグに'gtk'を追加してください。

コード表示 1.1: distccのインストール

# emerge distcc

Portageのサポートを有効化する

/etc/make.conf内のFEATURES変数にdistccを追加してください。 次に、MAKEOPTS変数をあなたの好みに編集してください。 よく知られたガイドラインには"-jX"と埋めうるように指示されています。 Xはdistccdを実行している(現在のホストも含める)CPUの数+1ですが、他の数字の方が良い結果が得られるかもしれません。

ではdistcc-configを実行して利用可能なdistccサーバのリストを入力しましょう。 簡単な例ではdistccサーバが192.168.1.102(現在のホスト)、192.168.1.103、192.168.1.104(2つのリモートホスト)で利用可能であると仮定します。

コード表示 1.1: distccが3つのサーバを使うように設定

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

忘れずにdistccdデーモンを実行してください。

コード表示 1.1: distccdデーモンを起動

# rc-update add distccd default
# /etc/init.d/distccd start

1.  キャッシングコンパイル

ccacheについて

ccacheは高速なコンパイラーキャッシュです。 プログラムをコンパイルすると、中間結果をキャッシュするので、同じプログラムを再コンパイルしたときはいつでも、コンパイル時間は大いに減少します。 ccacheを初めて用いた場合は、通常のコンパイル時に比べて遥かに遅くなりますが、次回以降の再コンパイルは速やかに済みます。 ccacheは同一のアプリケーションを何度もコンパイルする際のみ役立つので、主にソフトウェア開発者に対してだけ有益となります。

ccacheに関する特徴に興味があるなら、ccacheのホームページを訪れてください。

警告: ccacheは数々のコンパイルの失敗を引き起こすことで知られています。ときにはstaleコードオブジェクト、または壊れたファイルを生成し、 その結果パッケージのemergeは失敗してしまいます。 もしこの問題が起こった場合(もし"File recognized: File truncated"といったエラーに遭遇したら)、 バグ報告のにccacheを無効にして(/etc/make.conf内でFEATURES="-ccache"と設定)、 アプリケーションを再度コンパイルしてみてください。もし開発をしていないのであれば、ccacheは有効にしないでください

ccacheのインストール

ccacheをインストールするには、emerge ccacheを実行してください。

コード表示 1.1: ccacheのインストール

# emerge ccache

Portageのサポートを有効化する

/etc/make.confを開いてFEATURES変数にccacheを追加します。 次にCCACHE_SIZEという変数を追加して"2G"と設定します。

コード表示 1.1: /etc/make.confのCCACHE_SIZEを編集

CCACHE_SIZE="2G"

ccacheが動作しているかを確認するには、ccacheに統計を提供するよう問い合わせてください。 Portageは異なったccacheホームディレクトリを使用しているので、CCACHE_DIRも設定する必要があります。

コード表示 1.1: ccacheの統計を見る

# CCACHE_DIR="/var/tmp/ccache" ccache -s

/var/tmp/ccacheはPortageのデフォルトのccacheホームディレクトリです。 設定を変更したいのなら、/etc/make.confCCACHE_DIR変数を設定することができます。

ですが、ccacheを実行すれば、それはデフォルトの位置である${HOME}/.ccacheを使用するでしょう。 そのため、Portageのccache統計を見るときにはCCACHE_DIR変数を設定する必要があったのです。

ccacheをPortageのCのコンパイル以外に使用する

もしPortageでないコンパイルにccacheを使いたいのなら、PATH変数の最初(/usr/binより前)に/usr/lib/ccache/binを追加してください。 これは、ユーザのホームディレクトリの.bash_profileを編集することで完了します。 .bash_profileはPATH変数を定義する方法のひとつです。

コード表示 1.1: .bash_profileを編集

PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"

1.  バイナリパッケージのサポート

予めビルドされたパッケージを作成する

Portageは予めビルドされたパッケージのインストールをサポートしています。 Gentoo自体は(GRPスナップショットを除いて)ビルドされたパッケージを提供しませんが、Portageはビルドされたパッケージを完全に認識することができます。

パッケージが既にインストールされているならquickpkgを使うことができますし、そうでなければemerge--buildpkgもしくは--buildpkgonlyオプションを付けることでビルドされたパッケージを作成することができます。

Portageにインストールするパッケージごとにビルドされたパッケージを作成して欲しいのなら、FEATURES変数にbuildpkgを追加します。

ビルド済みのパッケージ集を作成するためのより拡張されたサポートが、catalystによって取得できます。 catalystについての詳しい説明はCatalyst Frequently Asked Questionsを見てください。

予めビルドされたパッケージのインストール

Gentooは提供してくれませんが、ビルドされたパッケージを置いておく中央レポジトリを作ることができます。 このレポジトリを使いたいのなら、Portageが認識できるようPORTAGE_BINHOST変数にその場所を指定しなければなりません。 例えば、ビルドされたパッケージがftp://buildhost/gentooにあるならこうします。

コード表示 1.1: /etc/make.confにPORTAGE_BINHOSTを設定

PORTAGE_BINHOST="ftp://buildhost/gentoo"

ビルドされたパッケージをインストールしたいときには、emergeコマンドに--getbinpkgオプションを--usepkgと並べて記述します。 前者が前もって定義したサーバからビルドされたパッケージをダウンロードするようにemergeに伝えているのに対し、 後者はソースをダウンロードしてコンパイルする前にビルドされたパッケージのインストールを試すように言っています。

例えば、gnumericをビルドされたパッケージからインストールするにはこうします。

コード表示 1.1: ビルドされたgnumericパッケージをインストール

# emerge --usepkg --getbinpkg gnumeric

emergeの予めビルドされたパッケージに関するより多くの情報はemergeのmanページにあります。

コード表示 1.1: emergeのmanページを読む

$ man emerge

1.  ファイルの取得

並行取得

複数のパッケージを連続してemergeするとき、Portageは、あるパッケージをコンパイルしている間に次のパッケージのソースファイルを取得してくることで、コンパイル時間を短縮することができます。 この機能を使うためには、FEATURESに"parallel-fetch"を追加してください。

Userfetch

Portageをrootで走らせるとき、FEATURES="userfetch"としておくと、パッケージのソースを取得しにいっている間、rootの権限を下げることができます。 これは小さなセキュリティの改善です。

1.  検証済みのPortageツリースナップショットを取得する

管理ポリシーとして暗号的に検証済みのPortageツリーのスナップショットのみから更新するようにすることができます。 こうすることで望ましくないコードがやパッケージがダウンロードするrsyncミラーに入ることを避けることができます。

Portageを設定するには、まずダウンロードに使用する証明書キーストアを作成し、 Portageツリースナップショットに署名しているGentooインフラストラクチャチームの鍵を登録します。 もちろん、お望みであれば、 適切なガイドラインに基づいてこのGPG鍵を検証することができます。 (鍵0x239C75C4の指紋がAE54 54F9 67B5 6AB0 9AE1 6064 0838 C26E 239C 75C4であるかを検証したり、 鍵0x96D8BF6Dの指紋がDCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6Dであるかを検証します。)

コード表示 1.1: Portage用の証明書キーストアを作成

# mkdir -p /etc/portage/gpg
# chmod 0700 /etc/portage/gpg
# gpg --homedir /etc/portage/gpg --keyserver subkeys.pgp.net --recv-keys 0x239C75C4 0x96D8BF6D
# gpg --homedir /etc/portage/gpg --edit-key 0x239C75C4 trust
# gpg --homedir /etc/portage/gpg --edit-key 0x96D8BF6D trust

次に/etc/make.confを編集し、署名されたPortageツリースナップショットを検証する機能を有効にします。(FEATURES="webrsync-gpg"を使います。) そして、通常のemerge --syncを使ったPortageツリーの更新を無効にします。

コード表示 1.1: 署名されたツリーを検証して更新する

FEATURES="webrsync-gpg"
PORTAGE_GPG_DIR="/etc/portage/gpg"
SYNC=""

これで終わりです。次からはemerge-webrsyncでは、有効な署名がなされたスナップショットだけがシステムに展開されます。

ページの更新日 2011年 11月 27日

このドキュメントのオリジナルバージョン の更新日は2012年 3月 28日

要約: Portageの持つ、分散コンパイルやccacheのサポートなど、より多くの機能を知ってください。

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.