ハンドブック:AMD64/ワーキング/USE

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:AMD64/Working/USE and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎українська • ‎中文(中国大陆)‎
AMD64 Handbook
Installation
About the installation
Choosing the media
Configuring the network
Preparing the disks
Installing stage3
Installing base system
Configuring the kernel
Configuring the system
Installing tools
Configuring the bootloader
Finalizing
Working with Gentoo
Portage introduction
USE flags
Portage features
Initscript system
Environment variables
Working with Portage
Files and directories
Variables
Mixing software branches
Additional tools
Custom package repository
Advanced features
Network configuration
Getting started
Advanced configuration
Modular networking
Wireless
Adding functionality
Dynamic management


USE フラグとは何ですか

USE フラグの 背景にある発想

Gentooをインストールするとき(あるいは他のディストリビューションや、この際もっと言えば他のOSでもかまいませんが)、ユーザーは自らが扱う環境に応じて選択を行います。サーバー向けのセットアップは、ワークステーション向けのセットアップとは異なります。ゲーミングワークステーションと、3Dレンダリングワークステーションは違います。

これはどのパッケージを選んでインストールするかということのみならず、あるパッケージがどのような機能をサポートするべきかについても言えることです。もしOpenGLが必要とされていないのなら、なぜわざわざOpenGLをインストールして管理し、ほとんどのパッケージでOpenGLサポートをビルドする必要があるでしょう? もしKDEを使いたくないなら、KDEなしで完璧に動作するパッケージを、どうしてわざわざKDEサポートつきでコンパイルする必要があるでしょうか?

ユーザーが何をインストール/有効化し、何をしないのか決定するのを助けるため、Gentooはユーザーに、環境を簡単なやり方で指定するよう求めます。これにより、ユーザーは自分が何を本当に欲しているのかを決定できるようになり、Portageが有益な判断をするためのプロセスが簡単になります。

USE フラグの定義

USEフラグを入力しましょう。このフラグは、あるコンセプトに対するサポートと依存の情報を表すキーワードです。あるUSEフラグが定義されると、Portageは選択されたキーワードに関するサポートが必要とされているのを知ることになります。当然、これによってパッケージへの依存の情報も変更されます。

具体例を見てみましょう: kde キーワード。もしこのキーワードが USE 変数に含まれていないならば、オプションでKDEをサポートしているすべてのパッケージは、KDEサポート"なし"でコンパイルされます。オプションでKDEに依存しているすべてのパッケージは、KDEのライブラリを(依存先として)インストール"せず"にインストールされます。もし kde キーワードが定義されているならば、これらのパッケージはKDEサポート"あり"でコンパイルされ、KDEのライブラリも依存先としてインストール"される"ことになります。

的確にキーワードを定義することで、システムはユーザーの具体的な必要に合わせて仕立てられることになります。

どんなUSEフラグが存在するのか

USE フラグには2種類あります。グローバル USE フラグと、ローカル USE フラグです。

  • "グローバル" USEフラグは、いくつかのパッケージに、システムワイドに使われるものです。ほとんどの人にとって、USEフラグといえばこれを指します。利用できるグローバルUSEフラグの一覧は、メインサイト あるいはローカルの /usr/portage/profiles/use.desc ファイルにあります。
  • "ローカル" USEフラグは、単一のパッケージに、パッケージ固有の選択のために使われるものです。利用できるローカルUSEフラグの一覧は、メインサイト あるいはローカルの /usr/portage/profiles/use.local.desc ファイルにあります。

USE フラグを使う

永続的なUSEフラグの宣言

前述の通り、すべてのUSEフラグは USE 変数の中で宣言されます。ユーザーがUSEフラグを探しやすく、また選びやすくするために、デフォルトのUSE設定が既に提供されています。この設定は、Gentooユーザーに一般的に用いられるだろうと考えられるUSEフラグを集めたものです。このデフォルト設定は、選択されたプロファイルの一部である make.defaults ファイルで宣言されています。

システムが従うプロファイルは、 /etc/portage/make.profile symlinkが指し示す先にあります。それぞれのプロファイルは他のプロファイルの上で働くため、結果は全てのプロファイルの合計ということになります。トップのプロファイルはbaseプロファイルです(/usr/portage/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で定義できます:

FILE /etc/portage/make.confmake.conf 内の USE フラグを更新する
USE="-kde -qt4 ldap"

個別のパッケージに対して USE フラグを指定する

時に、あるUSEフラグを1つの(もしくは2つの)アプリケーションで有効にしたいが、システムワイドにはしたくないということがあるでしょう。これを行うためには、/etc/portage/package.useを編集してください。これは多くの場合に単一のファイルですが、ディレクトリであることもできます。詳しくは man portageを見てください。次の例では、package.useが単一のファイルだと仮定しています。

たとえば、mysqlでのみberkdbをサポートするには:

FILE /etc/portage/package.useMySQL の berkdb サポートを有効にする
dev-db/mysql berkdb
Tip
If package.use is pre-existing as a directory (opposed to a single file), packages can have their local USE flags modified by simply creating files under the package.use/ directory. Any file naming convention can work, however it is wise to implement a coherent naming scheme. One convention is to simply use the package name as the title for the child file. For example, to setting the bluray USE flag locally for the VLC package can be performed the following one-liner:

root #echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc

同様に、あるアプリケーションでのみ明示的にUSEフラグを無効にすることもできます。たとえば、PHPでjavaサポートを無効にする(が、他の全てのパッケージでは make.conf のUSEフラグ設定を通じて有効にする)には:

FILE /etc/portage/package.usePHP の java サポートを無効にする
dev-lang/php -java

USEフラグの一時的な宣言

時に、短い一時の間だけUSEフラグをセットすることが必要になるでしょう。/etc/portage/make.confを二度(USEの変更を行い、また無かったことにするために)編集するかわりに、単に USE 変数を環境変数として宣言しましょう。この設定はこの際入力したコマンドに対してのみ適用されるということは、ゆめゆめ忘れないでください。このアプリケーションを次にemergeすると(これは明示的にそうすることもあれば、システムアップデートの一部として行われることもあるでしょう)、この(一時的な)USEフラグの定義を通じて引き起こされた変更は失われることになります。

次の例では、seamonkeyのインストールの間、USE設定から一時的にjavaを取り除きます:

root #USE="-java" emerge seamonkey

優先順位

当然、どの設定がUSE設定に関して優先されるかには、れっきとした優先順位があります。USE設定の優先順位は、優先度順に(優先度が低いものから)並べると、次のようになっています:

  1. あなたのプロファイルの一部の make.defaults ファイルで宣言されたデフォルトのUSE設定
  2. /etc/portage/make.conf でのユーザー定義のUSE設定
  3. /etc/portage/package.use でのユーザー定義のUSE設定
  4. 環境変数としてのユーザー定義のUSE設定

Portageから見た最終的なUSE設定を見るには、emerge --info を実行してください。これによって、関係のある全ての変数(USE変数を含む)が、Portageが知っている現在の定義とともにリストされます。

root #emerge --info

システム全体を新たなUSEフラグに適合させる

USEフラグに変更を加えたあと、必要な変更を反映させるために、システムをアップデートする必要があります。そのためには、emerge--newuse オプションを与えてください:

root #emerge --update --deep --newuse @world

次に、Portageのdepcleanを実行し、"古い"システムでemergeされていたけれども、新しいUSEフラグでは不要になった条件付きの依存パッケージを削除しましょう。

警告
emerge --depclean の実行は危険な操作であり、注意して行われるべきです。提供される"不要になった"パッケージの一覧をダブルチェックし、必要なパッケージが削除されないことを確認してください。次の例では、-p スイッチを追加することで、depcleanがパッケージの一覧表示のみを行い、削除を行わないようにしています:
root #emerge -p --depclean

depcleanが完了したら、revdep-rebuild を実行し、削除されたかもしれないパッケージが提供していた共有オブジェクトに対して動的リンクされていたアプリケーションをリビルドしましょう。revdep-rebuildapp-portage/gentoolkit パッケージの一部です。これを最初にemergeしておくのを忘れないようにしてください。

root #revdep-rebuild

これらの全てを完遂したとき、システムは新たなUSEフラグ設定を用いることになります。

パッケージ固有の USE フラグ

利用可能な USE フラグを表示する

それでは、seamonkeyの例を見てみましょう: これはどんなUSEフラグに影響されるのでしょう? 確かめるために、emerge--pretend--verbose オプションつきで使います:

root #emerge --pretend --verbose seamonkey
These are the packages that I would merge, in order:
  
Calculating dependencies ...done!
[ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java -debug -ipv6
-ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
-moznoroaming -postgres -xinerama -xprint" 0 kB

これができるツールは emerge だけではありません。実際、パッケージの情報に特化した equery というツールが、app-portage/gentoolkit パッケージに含まれています。

root #emerge --ask app-portage/gentoolkit

では、equery を"uses"引数つきで実行し、あるパッケージのUSEフラグを見てみましょう。例えば、gnumeric パッケージの場合:

user $equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column  (U) - USE flags from make.conf              ]
[        : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
 U I
 - - debug  : Enable extra debug codepaths, like asserts and extra output.
              If you want to get meaningful backtraces see
              http://www.gentoo.org/proj/en/qa/backtraces.xml .
 + + gnome  : Adds GNOME support
 + + python : Adds support/bindings for the Python language
 - - 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 式の例を、いくつか下に示します:

説明
REQUIRED_USE="foo? ( bar )" もし foo がセットされているなら、 bar もセットされている必要がある
REQUIRED_USE="foo? ( !bar )" もし foo がセットされているなら、 bar がセットされていてはならない
REQUIRED_USE="foo? ( || ( bar baz ) )" もし foo がセットされているなら、 barbaz の少なくともどちらかはセットされている必要がある
REQUIRED_USE="^^ ( foo bar baz )" foobarbaz のうちいずれかただ一つのみがセットされている必要がある
REQUIRED_USE="|| ( foo bar baz )" foobarbaz のうち少なくとも一つがセットされている必要がある
REQUIRED_USE="?? ( foo bar baz )" foobarbaz のうち二つ以上がセットされていてはならない