ハンドブック:HPPA/ワーキング/USE
USE フラグとは何ですか
USE フラグの 背景にある発想
Gentoo をインストールするとき、ユーザーは自らが扱う環境に応じて選択を行います。サーバー向けのセットアップは、ワークステーション向けのセットアップとは異なります。ゲーミングワークステーションと、3D レンダリングワークステーションは違います。
これはどのパッケージを選んでインストールするかということのみならず、あるパッケージがどのような機能をサポートするべきかについても言えることです。もしOpenGLが必要とされていないのなら、なぜわざわざOpenGLをインストールして管理し、ほとんどのパッケージでOpenGLサポートをビルドする必要があるでしょう? もしKDEを使いたくないなら、KDEなしで完璧に動作するパッケージを、どうしてわざわざKDEサポートつきでコンパイルする必要があるでしょうか?
ユーザーが何をインストール/有効化し、何をしないのか決定するのを助けるため、Gentooはユーザーに、環境を簡単なやり方で指定するよう求めます。これにより、ユーザーは自分が何を本当に欲しているのかを決定できるようになり、Portageが有益な判断をするためのプロセスが簡単になります。
USE フラグの定義
USE フラグを入力しましょう。このフラグは、あるコンセプトに対するサポートと依存の情報を表すキーワードです。ある USE フラグが有効として設定されると、Portage はシステム管理者が選択されたキーワードに関するサポートを求めていることを知ることになります。当然、これによってパッケージへの依存の情報も変更される場合があります。USE フラグに応じて、要求された依存関係の変更を満たすために、より多くの依存パッケージを入れる必要があるかもしれません。
具体例を見てみましょう: kde
USE フラグ。このフラグが USE 変数に設定されていない (または -kde
と値の前にマイナス記号が付いている) とき、オプションで KDE をサポートしているすべてのパッケージは、KDE サポートなしでコンパイルされます。オプションで KDE に依存しているすべてのパッケージは、KDE のライブラリを(依存先として)インストールせずにインストールされます。
もし kde
フラグが有効化されているならば、これらのパッケージはKDE サポートありでコンパイルされ、KDE のライブラリも依存先としてインストールされることになります。
的確に USE フラグを定義することで、システムはシステム管理者の具体的な必要に合わせて仕立てられることになります。
USE フラグを使う
永続的な USE フラグの宣言
すべての USE フラグは USE 変数の中で宣言されます。ユーザーが USE フラグを探しやすく、また選びやすくするために、デフォルトの USE 設定が既に提供されています。この設定は、Gentoo ユーザーに一般的に用いられるだろうと考えられる USE フラグを集めたものです。このデフォルト設定は、選択されたプロファイルの一部である make.defaults ファイルで宣言されています。
システムが従うプロファイルは、 /etc/portage/make.profile symlinkが指し示す先にあります。それぞれのプロファイルは他のプロファイルの上で働くため、結果は全てのプロファイルの合計ということになります。トップのプロファイルはbaseプロファイルです(/var/db/repos/gentoo/profiles/base)。
現在アクティブなUSEフラグを全て見るのには、emerge --infoを使います:
root #
emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."
この変数には既にかなり多くのキーワードが含まれています。しかし、make.defaults のいかなるファイルも、個人的な必要に合わせて USE 変数を仕立てるために変更してはいけません。これらのファイルへの変更は、Gentoo リポジトリを更新すると元通りになってしまいます!
このデフォルト設定を変更するには、USE 変数のキーワードを追加または削除してください。/etc/portage/make.confの中の USE 変数定義によって、この変更をグローバルに行うことができます。この変数には必要になった追加のUSEフラグを増やすことも、もはや不要になったUSEフラグを取り去ることもできます。後者は、キーワードの先頭にマイナス記号(-
)をつけることで行います。
例えば、KDEとQtのサポートを削除し、LDAPのサポートを追加したいのなら、次のUSEを /etc/portage/make.confで定義できます:
USE="-kde -qt5 ldap"
個別のパッケージに対して USE フラグを指定する
時に、あるUSEフラグを1つの(もしくは2つの)アプリケーションで有効にしたいが、システムワイドにはしたくないということがあるでしょう。これを行うためには、/etc/portage/package.useを編集してください。package.use は一般的に単一のファイルですが、ファイルを含むディレクトリであることもできます。この記法を使う方法についての詳細は下の Tip や man 5 portageを見てください。次の例では、package.useが単一のファイルだと仮定しています。
たとえば、VLC media player パッケージでのみ Blu-ray をサポートするには:
media-video/vlc bluray
package.use が(単一のファイルではなく)ディレクトリとして既に存在している場合、単に package.use/ ディレクトリの下にファイルを作成することでパッケージの USE フラグを変更できます。どのようなファイル命名法でも動作はしますが、一貫した命名スキームを採用するのが賢明でしょう。命名法の一例として、単にパッケージ名をファイル名として使うというものがあります。たとえば、media-video/vlc について
bluray
USE フラグをセットするには以下のようにできます:root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
同様に、あるアプリケーションでのみ明示的にUSEフラグを無効にすることもできます。たとえば、PHPでbzip2サポートを無効にする(が、他の全てのパッケージでは make.conf のUSEフラグ設定を通じて有効にする)には:
dev-lang/php -bzip2
USE フラグの一時的な宣言
時に、短い一時の間だけUSEフラグをセットすることが必要になるでしょう。/etc/portage/make.confを二度(USEの変更を行い、また無かったことにするために)編集するかわりに、単に USE 変数を環境変数として宣言しましょう。この設定はこの際入力したコマンドに対してのみ適用されるということは、ゆめゆめ忘れないでください。このアプリケーションを次にemergeすると(これは明示的にそうすることもあれば、システムアップデートの一部として行われることもあるでしょう)、この(一時的な)USEフラグの定義を通じて引き起こされた変更は失われることになります。
次の例では、Seamonkeyのインストールの間、USE変数から一時的に pulseaudio
を取り除きます:
root #
USE="-pulseaudio" emerge www-client/seamonkey
優先順位
当然、どの設定がUSE設定に関して優先されるかには、れっきとした優先順位があります。USE設定の優先順位は、優先度順に(優先度が低いものから)並べると、次のようになっています:
- あなたのプロファイルの一部の make.defaults ファイルで宣言されたデフォルトのUSE設定
- /etc/portage/make.conf でのユーザー定義のUSE設定
- /etc/portage/package.use でのユーザー定義のUSE設定
- 環境変数としてのユーザー定義のUSE設定
Portageから見た最終的なUSE設定を見るには、emerge --info を実行してください。これによって、関係のある全ての変数(USE変数を含む)が、Portageが知っている現在の定義とともにリストされます。
root #
emerge --info
システム全体を新たな USE フラグに適合させる
USEフラグに変更を加えたあと、必要な変更を反映させるために、システムをアップデートする必要があります。そのためには、emerge に --newuse
オプションを与えてください:
root #
emerge --update --deep --newuse @world
次に、Portageのdepcleanを実行し、"古い"システムでemergeされていたけれども、新しいUSEフラグでは不要になった条件付きの依存パッケージを削除しましょう。
提供される"不要になった"パッケージの一覧をダブルチェックし、必要なパッケージが削除されないことを確認してください。次の例では、
--pretend
(-p
) スイッチを追加して、depclean がパッケージの一覧表示のみを行い、削除を行わないようにしています:
root #
emerge --pretend --depclean
depcleanが完了したらemerge は、削除されたかもしれないパッケージが提供していた共有オブジェクトに対して動的リンクされていたアプリケーションをリビルドするよう促すかもしれません。Portageはアプリケーションを破壊するのを防ぐため、このアクションが取られるまで必要なライブラリを保存します。Portageはリビルドが必要なものをpreserved-rebuild
セットに登録します。必要なパッケージをリビルドするためには、次のコマンドを実行してください:
root #
emerge @preserved-rebuild
これらの全てを完遂したとき、システムは新たなUSEフラグ設定を用いることになります。
パッケージ固有の USE フラグ
利用可能な USE フラグを表示する
それでは、seamonkeyの例を見てみましょう: これはどんなUSEフラグに影響されるのでしょう? 確かめるために、emergeを --pretend
と --verbose
オプションつきで使います:
root #
emerge --pretend --verbose www-client/seamonkey
These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild N ] www-client/seamonkey-2.48_beta1::gentoo USE="calendar chatzilla crypt dbus gmp-autoupdate ipc jemalloc pulseaudio roaming skia startup-notification -custom-cflags -custom-optimization -debug -gtk3 -jack -minimal (-neon) (-selinux) (-system-cairo) -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite {-test} -wifi" L10N="-ca -cs -de -en-GB -es-AR -es-ES -fi -fr -gl -hu -it -ja -lt -nb -nl -pl -pt-PT -ru -sk -sv -tr -uk -zh-CN -zh-TW" 216,860 KiB Total: 1 package (1 new), Size of downloads: 216,860 KiB
これができるツールは emerge だけではありません。実際、パッケージの情報に特化した equery というツールが、app-portage/gentoolkit パッケージに含まれています。
root #
emerge --ask app-portage/gentoolkit
では、equery を uses
引数つきで実行し、あるパッケージの USE フラグを見てみましょう。例えば、app-portage/portage-utils パッケージの場合:
user $
equery --nocolor uses =app-portage/portage-utils-0.93.3
[ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for app-portage/portage-utils-0.93.3: U I + + nls : Add Native Language Support (using gettext - GNU locale utilities) + + openmp : Build support for the OpenMP (support parallel computing), requires >=sys-devel/gcc-4.2 built with USE="openmp" + + qmanifest : Build qmanifest applet, this adds additional dependencies for GPG, OpenSSL and BLAKE2B hashing + + qtegrity : Build qtegrity applet, this adds additional dependencies for OpenSSL - - static : !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically
REQUIRED_USE 条件を満足させる
いくつかのebuildは、正常に動作するために、特定のUSEフラグの組み合わせを要求あるいは禁止します。これは、REQUIRED_USE 式に書かれた条件の組み合わせによって表現されます。この条件によって、全ての機能と依存関係が充足していることと、ビルドが成功し、期待通りに動作することが保証されます。これらの一つでも満たしていない場合には、emergeはあなたに警告を出し、問題の解決を求めます。
例 | 説明 |
---|---|
REQUIRED_USE="foo? ( bar )"
|
もし foo がセットされているなら、 bar もセットされている必要がある
|
REQUIRED_USE="foo? ( !bar )"
|
もし foo がセットされているなら、 bar がセットされていてはならない
|
REQUIRED_USE="foo? ( || ( bar baz ) )"
|
もし foo がセットされているなら、 bar か baz の少なくともどちらかはセットされている必要がある
|
REQUIRED_USE="^^ ( foo bar baz )"
|
foo 、bar 、baz のうちいずれかただ一つのみがセットされている必要がある
|
REQUIRED_USE="|| ( foo bar baz )"
|
foo 、bar 、baz のうち少なくとも一つがセットされている必要がある
|
REQUIRED_USE="?? ( foo bar baz )"
|
foo 、bar 、baz のうち二つ以上がセットされていてはならない
|