Handbook:Parts/Portage/Advanced/ja

はじめに
多くのユーザーにとって、これまでに受け取った情報は Linux のすべての操作をするのに十分です. しかし、Portage にはより多くのことができます; その機能の多くは上級ユーザー向けであるか、またはあまり一般的でない特定のケースにのみ適用できるものです. それでも、このことはこれらの機能を文書化しない理由にはなりません.

もちろん、高い柔軟性により、膨大な数の潜在的な状況がありえます. それらすべてをここに文書化することは不可能でしょう. 代わりに、個人的なニーズに合わせて変えられるよう、いくつかの一般的な問題に焦点を当てたいと思います. より多くの微調整や豆知識は Gentoo Wiki のあちこちで見つけることができます.

これらの追加的機能の全てではないとしても大部分は、Portage が提供しているマニュアルページを探ることで簡単に見つけることができます.

最後に、これらは高度な機能であり、正しく動かない場合にデバッグやトラブルシューティングがとても難しくなるかもしれない、ということを知っておいてください. バグに遭遇してバグ報告を作成する際には、これらに言及することを忘れないようにしてください.

/etc/portage/env を使用する
デフォルトでは、パッケージのビルドでは CFLAGS 、 MAKEOPTS その他の で定義されている環境変数を使用します. しかしながら、ある場合には特定のパッケージに対して異なる変数を提供することが有益かもしれません. そうするために、Portage は と  の使用をサポートしています.

ファイルは環境変数の変更が必要なパッケージと Portage にどの変更をすべきか知らせるための特定の識別子のリストを含んでいます. 識別子の名前は自由書式で、Portage は変数を ファイルから探します.

例: 特定のパッケージでデバッグを使用する
例として、 パッケージでデバッグを有効化します.

まずはじめに、 というファイルでデバッグ用の変数をセットします. 名前は任意に選択できますが、もちろん、後でなぜ変更が加えられているのか明確にするために変更の理由を反映させましょう.

次に、 パッケージをこの内容を使用するようにタグ付けします:

/etc/portage/bashrc と関連ファイルを使用する
Portage が ebuild を扱う場合には、bash 環境を使用してその内部でさまざまなビルド関数( 、 、 など)を呼びます. しかし、Portage ではユーザーが特定の bash　環境を設定することもできます.

特定の bash 環境を使用する利点は、emerge で行われる各段階においてユーザーが emerge のプロセスにフックできることです. これはすべての emergeに対して( を通して)、またはパッケージごとの環境を使用して(前に説明したように を通して)行うことができます.

プロセスにフックするために、bash 環境では ebuild 開発の際に常に利用可能な( P 、 PF などのような)変数と同様に、 EBUILD_PHASE 、 CATEGORY 変数も取り上げることができます. これらの変数の値をもとに、追加の段階/関数を実行できます.

例: ファイルデータベースを更新する
この例では、 を使用していくつかのファイルデータベースアプリケーションを実行し、データベースがそのシステムで最新の状態になるようにします. この例で使用されているアプリケーションは (an intrusion detection tool) と( と共に使用される)  ですが、これらは例として意図されています. これをAIDEのためのガイドとは考えないでください ;-）

この場合に を使用するには、  (ファイルの削除後)と   (ファイルのインストール後)をフックする必要があります. なぜなら、これらがファイルシステム上のファイルが変更された時点だからです.

ロケーション /etc/portage/postsync.d を使用する
ここまで ebuild プロセスのフックについて話してきました. しかしながら、Portage はもう一つの重要な機能を備えています: Gentoo リポジトリの更新です. Gentoo リポジトリの更新後にタスクを実行するには、スクリプトを の中に置いて、それが実行可能になっていることを確認します.

例: eix-update を実行する
をツリーの更新に使用していない場合でも、 という名前の へのシンボリックリンクを  に置くことで、eix データベースを  (または )の後に更新することができます.

/etc/portage/profile を使用する
デフォルトでは、Gentoo は (正しいプロファイルディレクトリへのシンボリックリンク)が指すプロファイルに含まれている設定を使用します. これらのプロファイルは、(parent ファイルを通して)他のプロファイルから継承した設定と独自の設定両方を定義しています.

を使用することで、ユーザーはパッケージ(どのパッケージが system セットの一部として扱われるか)、強制される use フラグなどのプロファイル設定を上書きすることができます.

例: nfs-utils を system セットに追加する
NFS ベースのファイルシステムをかなり重要なファイルシステムに使用する場合、 をシステムパッケージとしてマークし、管理者がこれを unmerge しようと試みた際には Portage が厳重に警告を出すようにする必要があるでしょう.

これを実現するには、パッケージの先頭に  を付けて  に追加します:

epatch_user を使用する
いくつかの ebuild を同様に管理するために、ebuild の開発者はよく使われる関数を定義した eclass (これらはシェルライブラリーです)を使用します. これらの eclass の一つが  と呼ばれる便利な関数を提供する  です.

関数は、 の最初に見つかったディレクトリーにあるソースコードパッチを適用します. 残念なことにすべての ebuild が自動的にこの関数を呼ぶわけではないので、パッチをこの場所に置くだけでは動作しない場合があるでしょう.

幸運なことに、ユーザーはこの章で先に提供した情報を使って、例えば prepare フェーズにフックすることでこの関数を呼ぶことができます. この関数は必要な回数だけ呼ぶことができます - 関数はパッチを一回だけ適用します.

例: Firefox にパッチを適用する
パッケージは既に ebuild 内で  を呼んでいる多くのパッケージの一つなので、特に何かを上書きする必要はありません.

何らかの理由(たとえば、開発者がパッチを提供し、報告されたバグがこれによって解決されるか確認するよう頼まれた場合)で Firefox をパッチしたい場合、必要なのはパッチを (パッチが後のバージョンに干渉しないように、フルネームとバージョンを使用した方がおそらくよいでしょう) に置き、Firefox を再度ビルドすることだけです.