ハンドブック:AMD64/ワーキング/機能
Portage の機能
Portageは、Gentooでの体験を更により良くする追加の機能をいくつか備えています。これらの機能の多くは、パフォーマンス、信頼性、セキュリティなどを向上させる、あるソフトウェアツールに依存しています。
Portageのある特定の機能を有効あるいは無効にするには、/etc/portage/make.confを編集し、様々な、機能に関するキーワードをスペース区切りで格納するFEATURES変数に値を設定、あるいは値を更新してください。一部の場合では、その機能が依存する追加のツールもインストールする必要があります。
Portageがサポートするすべての機能がここに一覧として表示されているわけではありません。全体を概観するには、make.confのmanページを参照してください。
user $
man make.conf
デフォルトでFEATURES変数に何が設定されているかを確認するには、emerge --infoを実行し、FEATURESの項を探すかgrepしてください。
user $
emerge --info | grep ^FEATURES=
分散コンパイル
distcc を使う
distccは、ネットワーク上のいくつかの(必ずしも同一ではない)マシンにコンパイルを分散させるプログラムです。distccのクライアントはすべての必要な情報を、利用可能な(distccdが稼働している)distccサーバに送ります。これによってクライアントのためにソースコードの一部分をコンパイルできます。最終的に、より早くコンパイルすることが出来ます。
distcc について (そしてそれをどのように Gentoo で機能させるかについて) のさらなる情報は、Distcc のページにあります。
distcc のインストール
distcc には、コンパイルのためにコンピュータが送信しているタスクを監視するグラフィカルモニタが付属しています。このツールは USE="gtk"
が設定されていると自動的にインストールされます。
root #
emerge --ask sys-devel/distcc
Portage の distcc サポートを有効にする
distcc
を/etc/portage/make.conf内のFEATURES変数に追加してください。次に、MAKEOPTS変数を編集し、システムが許可する並行ビルドジョブの数を増やしてください。知られているガイドラインとして、N
を、distccdが稼働しているCPUの数(現在のホストも含む)に1を加えたものとして、-jN
を指定することです。ただし、これはあくまでガイドラインです。
それではdistcc-configを実行し、利用できるdistccのサーバを入力してください。単純な例として、利用可能なdistccのサーバが、192.168.1.102(現在のホスト)、192.168.1.103そして192.168.1.104(2つの"リモートの"ホスト)であるとします:
root #
distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
distccdデーモンを実行するのも忘れないでください:
root #
rc-update add distccd default
root #
/etc/init.d/distccd start
中間生成物のキャッシュ
ccache とは
ccacheは高速なコンパイラキャッシュです。アプリケーションがコンパイルされると、毎回ccacheは中間生成物をキャッシュします。これによって、同じプログラムの同じバージョンが再コンパイルされるといつでも、コンパイル時間は大幅に減少します。最初にccacheが実行される時、コンパイル速度は通常より遅くなるでしょう。しかし、次からの再コンパイルは早くなるはずです。ccacheは同じアプリケーションの同じバージョンが何回も再コンパイルされる時にのみ便利なもので、それゆえこれはほとんどの場合、ソフトウェア開発者にのみ便利なものです。
ccacheに関するさらなる情報については、ホームページを訪れてください。
ccache は様々なコンパイル時の問題を引き起こすことが知られています。ccache は時々古いコードオブジェクトや壊れたファイルを保持していることがあり、これはパッケージの emerge 失敗につながります。もしこれが起きた場合 ("File not recognized: File truncated" などのエラーがビルドログに現れます) は、バグ報告をする前に ccache を無効にして (/etc/portage/make.conf に
FEATURES="-ccache"
を書くか、次のコマンドラインを単発で実行して) 再コンパイルしてみてください:
root #
FEATURES="-ccache" emerge --oneshot <category/package>
ccache のインストール
ccacheをインストールするには、次のコマンドを実行してください:
root #
emerge --ask dev-util/ccache
Portage の ccache サポートを有効にする
/etc/portage/make.confを開き、ccache
をFEATURES変数に追加してください。もしFEATURESが存在しなければ新たに定義してください。次に、CCACHE_SIZEと呼ばれる新しい変数を追加し、2G
と設定します:
FEATURES="ccache"
CCACHE_SIZE="2G"
ccacheが機能しているか確認するには、ccacheの統計を出すようにしてください。Portageは異なったccacheのホームディレクトリを使用しているため、一時的にCCACHE_DIR変数に値を格納する必要があります:
root #
CCACHE_DIR="/var/tmp/ccache" ccache -s
/var/tmp/ccache/はPortageのデフォルトのccacheホームディレクトリですが、/etc/portage/make.conf内でCCACHE_DIR変数を変更することで場所を変えることができます。
ccacheが単独で機能している時、ccacheは${HOME}/.ccache/を既定の場所として使用するでしょう。これが、(Portageの)ccacheの統計を取得する時に、CCACHE_DIR変数が設定されている必要がある理由です。
ccache を Portage の外で使う
ccacheをPortage以外のコンパイルの時に使用するには、/usr/lib/ccache/bin/をPATH変数のはじめ(/usr/binの前)に追加してください。これはユーザのホームディレクトリにある~/.bash_profileを編集することでできます。~/.bash_profileを使用することは、PATH変数を定義する方法の1つです。
PATH="/usr/lib/ccache/bin:${PATH}"
バイナリパッケージのサポート
ビルド済みパッケージを作る
Portage はビルド済みパッケージのインストールに対応しています。
ビルド済みパッケージを作成するには、もしパッケージが既にシステムにインストールされているならばquickpkgコマンドを使用してください。あるいは--buildpkg
または--buildpkgonly
オプションを使用してemergeしてください。
Portageに、インストールするすべての単一のパッケージの、ビルド済みバージョンを作成させるには、FEATURES</var.変数にbuildpkg
を追加してください。
ビルド済みパッケージの作成に対する拡張サポートは、catalyst を使用して受けることが出来ます。catalyst についての詳細は Catalyst FAQ を読んでください。
ビルド済みパッケージのインストール
Gentooは対応していませんが、ビルド済みパッケージが保存される中央リポジトリを作成することが可能です。このリポジトリを使用するために、PORTAGE_BINHOSTにそのリポジトリを指定することでPortageに認識させることが必要です。例えば、ビルド済みパッケージがftp://buildhost/gentooにある場合:
PORTAGE_BINHOST="ftp://buildhost/gentoo"
ビルド済みパッケージをインストールする時は、emergeコマンドに--getbinpkg
オプションを、--usepkg
オプションと一緒に追加してください。前者はemergeに、予め定義されたサーバからビルド済みパッケージをダウンロードすることを伝え、後者はemergeに、ソースコードを取ってきてコンパイルする前に、先にビルド済みパッケージのインストールを試みるようemergeに要請します。
例えば、gnumericをビルド済みパッケージを用いてインストールする場合:
root #
emerge --usepkg --getbinpkg gnumeric
emergeのビルド済みパッケージのオプションに関するさらなる情報については、emergeのmanページで見ることができます:
user $
man emerge
ビルド済みパッケージを配布する
もしビルド済みパッケージを他人に配布する場合、それが許可されている事を確認してください。上流のパッケージ配布条件を確認してください。例えば、GNU GPLライセンスの下でリリースされているパッケージは、バイナリと一緒にソースコードも利用可能にしなければなりません。
もしビルド済みバイナリが配布不可能な場合、ebuildがRESTRICT変数内でbindist
制限を定義しているかもしれません。この制限は、時々1つまたは複数のUSEフラグの条件付きとなっています。
既定では、Portageはこの制限によっていかなるパッケージもマスクすることはありません。これは/etc/portage/make.conf内のACCEPT_RESTRICT変数を設定することで、システム全体で変更することが出来ます。例えば、bindist
制限のあるパッケージをマスクする場合、以下の行をmake.confに追加してください:
ACCEPT_RESTRICT="* -bindist"
emergeコマンドに--accept-restrict
オプションを渡すことで、ACCEPT_RESTRICT変数を上書きすることも可能です。例えば、--accept-restrict=-bindist
では、一時的にbindist
制限のあるパッケージをマスクします。
また、パッケージを配布する時に ACCEPT_LICENSE 変数を設定することも検討してください。これに関しては、ライセンスの節を確認してください。
パッケージのライセンスとそれぞれの国の法律に従うことは、あくまで各 "ユーザー" の責任です。ebuildに書かれたメタデータ変数 (RESTRICT や LICENSE) はバイナリ配布の制限などの案内を提供しますが、Portageの出力やGentoo開発者による回答は法的な意味を持つものではなく、これをあてにするべきではありません。お住いの地域の法律に反しないよう、十分に注意してください。
ファイルのフェッチ
distfiles を検証する
整合性を再認証し、場合によっては現在インストールされているすべてのパッケージに関する、過去に削除されたあるいは破損したdistfilesを再ダウンロードするには、次のコマンドを実行してください:
root #
emerge --ask --fetchonly --emptytree @world