USE フラグ

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page USE flag and the translation is 100% complete.
Resources

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 フラグがこれらの場所のどこにも存在しなければ、デフォルトが使用されます。

関連
さらなる情報については amd64 ハンドブックの USE フラグを使うの節を参照してください。
メモ
USE フラグの設定はシステム全体で行うよりも、パッケージごとに行うほうが好ましい場合が多いです。USE フラグのデフォルトは通常は穏便なデフォルトに設定されています - make.conf でグローバルに設定するフラグは慎重に検討してください。
警告
理論上、USE フラグはコマンドライン上から環境変数で一時的に設定することができます (例: USE="<flags>" emerge -av <package>) が、 パッケージをインストールする目的ではこれを使用しないでください。この方法で設定された USE フラグは、パッケージをアップグレードまたは再 emerge するときに失われるでしょう。

便利なコマンド群

どのUSEフラグが現在有効になっているかを見るには、以下のコマンドを実行してください:

user $portageq envvar USE | xargs -n 1

デフォルトで有効化されている USE フラグを確認するには:

user $USE_ORDER="defaults:pkginternal:repo" emerge --info|grep USE
USE="X a52 aac acl acpi activities alsa amd64 bluetooth branding bzip2 cairo cdda cdr cet crypt cups dbus declarative dri dts dvd dvdr elogind encode exif flac gdbm gif gpm gtk gui iconv icu ipv6 jpeg kde kf6compat kwallet lcms libnotify libtirpc mad mng mp3 mp4 mpeg multilib ncurses networkmanager nls ogg opengl openmp pam pango pcre pdf pipewire plasma png policykit ppds pulseaudio qml qt5 qt6 readline screencast sdl seccomp semantic-desktop sound spell ssl startup-notification svg test-rust tiff truetype udev udisks unicode upower usb vorbis vulkan wayland widgets wxwidgets x264 xattr xcb xft xml xv xvid zlib" ABI_X86="64" ADA_TARGET="gcc_12" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_anon authn_dbm authn_file authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env expires ext_filter file_cache filter headers include info log_config logio mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isyncitrax navcom oceanserver oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 tsip tripmate tnt ublox" GUILE_SINGLE_TARGET="3-0" GUILE_TARGETS="3-0" INPUT_DEVICES="libinput" KERNEL="linux" LCD_DEVICES="bayrad cfontz glk hd44780 lb216 lcdm001 mtxorb text" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php8-2" POSTGRES_TARGETS="postgres16" PYTHON_SINGLE_TARGET="python3_12" PYTHON_TARGETS="python3_12" RUBY_TARGETS="ruby32" VIDEO_CARDS="amdgpu dummy fbdev intel nouveau radeon radeonsi vesa" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipp2p iface geoip fuzzy condition tarpit sysrq proto logmark ipmark dhcpmac delude chaos account"

ある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フラグに置き換えてください。

パッケージとその依存をマージするときに、どの USE フラグが有効化されるか確認する:

root #emerge --ask --verbose chromium
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
Dependency resolution took 5.95 s (backtrack: 0/20).
 
[ebuild  N     ] media-libs/openh264-2.4.1:0/7::gentoo  USE="plugin -test -utils" ABI_X86="(64) -32 (-x32)" CPU_FLAGS_X86="avx2" 58895 KiB
[ebuild   R    ] dev-lang/rust-bin-1.77.1:stable::gentoo  USE="profiler* (-big-endian) -clippy -doc (-prefix) -rust-analyzer -rust-src -rustfmt -verify-sig" ABI_X86="(64) -32 (-x32)" CPU_FLAGS_X86="sse2" 0 KiB
[ebuild   R    ] virtual/rust-1.77.1:0/llvm-17::gentoo  USE="profiler* -rustfmt" ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild  N     ] dev-build/gn-0.2157::gentoo  731 KiB
[ebuild   R    ] net-libs/nodejs-20.12.1:0/20::gentoo  USE="icu inspector* npm snapshot ssl system-icu system-ssl -corepack -debug -doc (-lto) -pax-kernel -test" CPU_FLAGS_X86="sse2" 0 KiB
[ebuild  N     ] www-client/chromium-124.0.6367.60:0/stable::gentoo  USE="X cups custom-cflags hangouts official proprietary-codecs pulseaudio qt5 screencast system-harfbuzz system-icu system-png system-toolchain system-zstd vaapi wayland widevine -bindist -debug -ffmpeg-chromium -gtk4 (-headless) -kerberos (-libcxx) (-lto) -pax-kernel (-pgo) -qt6 (-selinux)" L10N="af am ar bg bn ca cs da de el en-GB es es-419 et fa fi fil fr gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr sv sw ta te th tr uk ur vi zh-CN zh-TW" 3352285 KiB
 
Would you like to merge these packages? [Yes/No]

単一のパッケージに対して、その依存を計算せずに、どの USE フラグが有効化されるか確認する:

user $emerge --nodeps --pretend chromium
[ebuild  N     ] www-client/chromium-124.0.6367.60  USE="X cups custom-cflags hangouts official proprietary-codecs pulseaudio qt5 screencast system-harfbuzz system-icu system-png system-toolchain system-zstd vaapi wayland widevine -bindist -debug -ffmpeg-chromium -gtk4 (-headless) -kerberos (-libcxx) (-lto) -pax-kernel (-pgo) -qt6 (-selinux)" L10N="af am ar bg bn ca cs da de el en-GB es es-419 et fa fi fil fr gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr sv sw ta te th tr uk ur vi zh-CN zh-TW"

丸括弧 () 内の USE フラグは、強制されているか、マスクされているか、削除されているものです。この強制は、選択されているプロファイルまたはアーキテクチャに由来するかもしれません。理由を理解するためには、"profiles/base/package.use.stable.mask" などのプロファイルファイルを解析する必要があるかもしれません。プロファイルでのマスクが誤りであると思う場合は、"package.accept_keywords" ファイルに (フラグなしで) パッケージを追加することでマスクの解除を試すことができます。マスクが誤りでなかった場合は、おそらくビルドがうまくいかなくなるか、(その 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フラグを分析、管理するため、いくつかのツールが利用可能です:

関連項目

外部資料