USE フラグ
emerge — configuration — ebuild repository — dispatch-conf
world file — USE flags — ebuilds — profiles
upgrades — using testing packages — binary packages
tools — gentoolkit — eselect
Portage FAQ — cheat sheet — FAQ
all articles
USE フラグは、ある項目のためのサポートや依存情報を具現化するキーワード群です。これは Gentoo の核となる機能であり、どのように USE フラグを扱うかという事をよく理解することは、Gentoo システムを管理するために必要です。
USE フラグは、各パッケージのインストールまたは更新時にパッケージがどう設定されるかを決定するために、Portage を設定する役割を持ちます。USE フラグはパッケージの様々な側面を設定することができ、利用可能な USE フラグとそれに対応するオプション機能は、各ソフトウェアごとに異なります。
USE フラグは、パッケージのさまざまな挙動を変更することができます。USE フラグはよくコンパイル時オプションを設定することがありますが、これらの構成オプションは USE フラグを通じて体系的に公開されることはありません - どのオプションを USE フラグとして提供すると有用なのかという判断は、パッケージメンテナ次第です。また USE フラグは、パッケージとリンクされるオプションのライブラリやユーティリティを指定することもでき、これにより依存関係を決定することもよくあります。さらに別の例としては、ドキュメントを提供するかどうかなど、どのファイルをインストールに含めるのかも USE フラグで変更することができます。
パッケージのインストール時にのみ利用できるオプションを選択できるということは、ソースベースであることから得られる Gentoo の大きな強みのひとつです。
ディストリビューションは合理的なデフォルトの USE フラグを備えていますが、システムの想定利用法に合わせてプロファイルを選択することで、これらはより洗練されます。各パッケージはパッケージに対して設定できることに応じて利用可能な USE フラグの集合をそれぞれ持ち、これらにも合理的なデフォルトが設定されています。USE フラグが適用される順序は USE_ORDER 変数によって指定されます。
USE フラグをどう扱うかということに関する基本的な概念は、ハンドブック中に記述されています。パッケージに対してフラグを設定することについては /etc/portage/package.use を、そしてグローバルに設定することについては /etc/portage/make.conf を参照してください。
USE フラグの宣言
厳密には、Gentoo ebuild リポジトリにはデフォルト USE フラグの小さな集合が付属しています。デフォルトの USE フラグは選択されたプロファイルによってさらに定義が追加されます。それぞれのパッケージには利用可能な USE フラグの集合があり、パッケージの文脈で正当化されるのであればこれらもデフォルトの状態を持つことができます。Portage が各パッケージのインストールを構成するために、各レイヤは前のレイヤの設定を上書きします。
USE フラグは 3 つの状態を持つことができます: 設定されている (set)、設定解除されている (unset)、またはデフォルト (default) です。USE フラグは make.conf の USE 変数でグローバルに、あるいは /etc/portage/package.use で特定のパッケージに対して、設定または設定解除することができます。
これらのファイルのどれかに USE フラグが存在していれば、その USE フラグは設定されます。USE フラグの前にマイナス記号 ("-") があれば、その USE フラグは設定解除されます。USE フラグがこれらの場所のどこにも存在しなければ、デフォルトが使用されます。
USE フラグの設定はシステム全体で行うよりも、パッケージごとに行うほうが好ましい場合が多いです。USE フラグのデフォルトは通常は穏便なデフォルトに設定されています - make.conf でグローバルに設定するフラグは慎重に検討してください。
理論上、USE フラグはコマンドライン上から環境変数で一時的に設定することができます (例: USE="<flags>" emerge -av <package>) が、 パッケージをインストールする目的ではこれを使用しないでください。この方法で設定された USE フラグは、パッケージをアップグレードまたは再 emerge するときに失われるでしょう。
便利なコマンド群
どのUSEフラグが現在有効になっているかを見るには、以下のコマンドを実行してください:
user $
portageq envvar USE | xargs -n 1
あるUSEフラグが有効になっているか、そしてどのパッケージがそのUSEフラグを使用しているかを確かめるには、次のコマンドを実行してください:
user $
euse -I <use_flag> # app-portage/gentoolkit に含まれます
user $
quse <use_flag> # app-portage/portage-utils に含まれます
user $
eix --installed-with-use <use_flag> # app-portage/eix に含まれます
<use_flag>
を、チェックするUSEフラグに置き換えてください。
Emerge コマンドオプション
emerge コマンドには、いくつか USE フラグに関する次のようなオプションが備わっています:
--changed-use
(-U
)--complete-graph-if-new-use < y | n >
--newuse
(-N
)
詳細については、man 1 emergeを参照してください。
「ローカル」な USE フラグと「グローバル」な USE フラグ
「ローカル」なフラグと「グローバル」なフラグの厳密な違いは、単にフラグの説明が ebuild リポジトリに保存されているかどうかの違いです。「グローバル」な USE フラグはプロファイル全体に対して use.desc ファイル (例) に説明が記載されていますが、 一方で「ローカル」な USE フラグは単一のパッケージに対して metadata.xml ファイル (例) に説明が記載されています。開発者がフラグをどこで定義するかを決定するときには、USE フラグが複数のパッケージに共通する汎用的な機能を持っているのか、それとも単一のパッケージのために特定の機能を持っているのかを判断します。
エンドユーザにとっては、USE フラグが「グローバル」なのか「ローカル」なのかはあまり重要ではありません。「グローバル」なフラグは make.conf 内の USE 変数で設定するほうがより適しているかもしれませんが、厳密なルールはありません。いずれにせよ、必要でなければ、USE フラグは可能な限り make.conf で設定すべきではなく、/etc/portage/package.use でパッケージ単位で USE フラグを設定するほうが好ましいでしょう。このアドバイスに従っていれば長期的にシステム管理が楽になるはずです。
ツール
USEフラグを分析、管理するため、いくつかのツールが利用可能です:
- euse
- quse - 詳細については、man 1 quse を参照してください。
- equery hasuse (USE flag)
- equery uses (package name)
- ufed
- app-portage/euses
- eix -
--use
、--installed-with-use
そして--installed-without-use
オプションを参照してください。
関連項目
- /etc/portage/package.use — /etc/portage/make.conf 内の USE 変数よりもきめ細かい、USE フラグのパッケージごとの制御を提供します
- Complete Handbook/Finishing off
- USE フラグに関する Gentoo ハンドブックのドキュメント
- Gentoo Java USE flags
- Toolkit USE Flags — summarizes main points from discussions about toolkit (GTK, Qt) USE flags (gtk2, gtk3, qt4, qt5, etc.).
外部資料
- https://packages.gentoo.org/useflags - USEフラグに関するGentooパッケージデータベース。
- cat /var/db/repos/gentoo/profiles/use.desc - 一般的なUSEフラグの説明一覧は、Portageがインストールされたシステムでローカルに見ることができます。
- https://devmanual.gentoo.org/general-concepts/use-flags/ - USEフラグについて、Gentoo開発者ハンドブック内で概念的に説明されています。