USE-Flag
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-Flags sind Schlüsselwörter, die Unterstützung und Abhängigkeitsinformationen für ein bestimmtes Konzept beinhalten. Sie sind ein Kernmerkmal von Gentoo und ein gutes Verständnis, wie man mit ihnen umgeht, ist notwendig, um ein Gentoo-System zu administrieren.
USE flags existieren um Portage zu konfigurieren um zu bestimmen wie jedes Paket bei Installation oder Updates konfiguriert werden soll. USE Flags können mehrere Aspekte eines Pakets konfigurieren, und die verfügbaren USE Flags und entsprechenden optionalen Funktionalitäten basieren auf jede individuelle Software.
USE Flags können mehrere Sachen am Paket verhalten ändern. Oft setzen sie Compile-Time Optionen, jedoch werden diese Einstellungsoptionen nicht systematisch durch die USE flags ausgesetzt - es liegt an den Paket Maintainern zu Entscheiden welche Optionen nützlich als USE Flags sind. USE Flags können spezifizieren welche optionalen Libraries oder Utilities mit dem Paket verbunden werden, oft bestimmen diese Abhängigkeiten. Ein anderes Beispiel zu was USE Flags ändern können ist welche Dateien der Installation beigesetzt werden, wie ob Dokumentation bereitgestellt werden sollen oder nicht.
Diese Möglichkeit, Optionen zu wählen, die nur bei der Installation eines Pakets verfügbar sind, ist einer der großen Vorteile von Gentoo, da es auf dem Quellcode basiert.
Die gesamte Distribution wird standardmäßig mit vernünftigen USE-Flags ausgeliefert, die durch die Auswahl eines Profils weiter verfeinert werden können, um der geplanten Systemnutzung zu entsprechen. Jedes Paket hat seinen eigenen Satz an verfügbaren USE-Flags, abhängig davon, was für das Paket konfiguriert werden kann, und diese sind ebenfalls auf vernünftige Standardwerte gesetzt. Die Reihenfolge in der USE Flags angewendet werden spezifiziert die USE_ORDER Variable.
Grundlegende Konzepte, wie man mit USE-Flags arbeitet, finden Sie im Handbuch. Siehe auch /etc/portage/package.use zum Setzen eines Flags für ein Paket, und /etc/portage/make.conf für Flags, die global gesetzt werden sollen.
Deklaration von USE-Flags
Genau genommen, kommt das Gentoo ebuild repository mit einem kleinen Set an Standard USE flags. Standard USE Flags sind weiters definiert von dem ausgewähltem Profil. Jedes Paket kommt mit einem Set von verfügbaren USE Flags, und diese können eine Standardauswahl haben, wenn diese im Kontext des Pakets gerechtfertigt sind. Jede Schicht überschreibt die vorherige beim Einstellen von Portage fürs installieren von jedem Paket.
Ein USE-Flag kann drei Zustände haben: gesetzt, nicht gesetzt oder Standard. USE-Flags können global in der /etc/portage/make.conf oder für bestimmte Pakete in /etc/portage/package.use gesetzt oder nicht gesetzt werden.
Das Vorhandensein eines USE-Flags in einer dieser Dateien setzt dieses USE-Flag. Das Einfügen eines USE-Flag, dem ein Minuszeichen ("-") vorangestellt ist, hebt das USE-Flag auf. Wenn an einer dieser Stellen kein USE-Flag vorhanden ist, wird der Standard verwendet.
Weitere Informationen finden Sie im Abschnitt Verwendung von USE-Flags des amd64 Handbuchs.
Es ist oft besser, USE-Flags pro Paket zu setzen als systemweit. USE-Flags werden normalerweise auf einen vernünftigen Standard gesetzt - überlegen Sie sorgfältig, welche Flags Sie global in make.conf setzen wollen.
Ein USE-Flag kann zwar theoretisch auf der Kommandozeile in einer Umgebungsvariable temporär gesetzt werden (z.B. USE="<flags>" emerge -av <Paket>), verwenden Sie dies nicht, um Pakete zu installieren. Jede auf diese Weise gesetzte USE-Flag geht verloren, wenn einUpgrade ausgeführt oder das Paket erneut emergt wird.
Nützliche Befehle
Um zu sehen, welche USE-Flags gegenwärtig aktiviert sind:
user $
portageq envvar USE | xargs -n 1
Um Standard aktivierte USE Flags zu sehen:
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"
Um zu überprüfen, ob ein bestimmtes USE-Flag aktiviert ist und welche Pakete es verwenden, führen folgendes aus:
user $
euse -I <use_flag> # enthalten in app-portage/gentoolkit
user $
quse <use_flag> # enthalten in app-portage/portage-utils
user $
eix --installed-with-use <use_flag> # enthalten in app-portage/eix
Ersetzen Sie <use_flag>
durch das zu prüfende USE-Flag:
Überprüfe welche USE Flags aktiviert sind beim merging eines Pakets und ihrer Abhängigkeiten.
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]
Überprüfe welche USE Flags für ein einziges Paket, ohne Abhängigkeiten, aktiviert sind.
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 Flags in () Klammern sind gezwungen, maskiert oder entfernt. Das zwingen kommt möglicherweise von dem ausgewählten Profil oder Architektur. Um zu verstehen warum muss man möglicherweise Profildateien wie "profiles/base/package.use.stable.mask" analysieren. Wenn du denkst das das maskieren in dem Profil ein Fehler ist, kannst du versuchen es durch das hinzufügen des Pakets (ohne Flaggen) zu der "package.accept_keywords" Datei zu demaskieren. Wenn die Maskierung kein Fehler war, wirst du wahrscheinlich mit einem kaputten Build oder ohne Veränderung (Weil die USE Flag nicht funktioniert) enden.
Optionen für den Emerge-Befehl
Der Befehl emerge hat einige USE-Flag-bezogene Optionen wie:
--changed-use
(-U
)--complete-graph-if-new-use < y | n >
--newuse
(-N
)
Für Einzelheiten siehe man 1 emerge.
"Lokale" vs. "globale" USE-Flags
Der technische Unterschied zwischen "lokal" und "globalen" Flaggen ist nur der Unterschied wo ihre Beschreibungen im ebuild repository gelagert werden. "Globale" USE Flags werden für ein ganzes Profil in den use.desc Dateien beschrieben. (example), während "lokale" USE Flags in den metadata.xml Dateien für ein einzelnes Paket beschrieben werden (example). Beim entscheiden wo sie definiert werden, entscheiden Entwickler ob eine USE Flag eine Generelle Funktion gemeinsam mit mehreren Paketen, oder eine spezifische Funktion für ein einzelnes Paket hat.
Für den Endbenutzer hat, ob eine USE Flag "global" oder "lokal" ist, wenig Bedeutung. "Globale" Flaggen sind möglicherweise manchmal passender in der USE Variable in make.conf gesetzt zu werden, aber hier existiert keine feste Regel. Auf jedem Fall, so viel wie möglich, sollten keine USE Flags in make.conf gesetzt werden ausser es ist notwending, und /etc/portage/package.use sollte für das setzen von USE Flags für einzelne Pakete bevorzugt werden. Dieser Empfehlung zu folgen sollte Systemadministration auf Dauer vereinfachen.
Werkzeuge
Für die Analyse und Verwaltung von USE-Flags stehen einige Werkzeuge zur Verfügung:
- euse
- quse - for details see man 1 quse
- equery hasuse (USE flag)
- equery uses (package name)
- ufed
- app-portage/euses
- eix - Siehe
--use
,--installed-with-use
und--installed-without-use
Optionen
Siehe auch
- /etc/portage/package.use — stellt eine feinere, paketspezifische Kontrolle von USE-Flags zur Verfügung, als die USE-Variable in /etc/portage/make.conf
- Complete Handbook/Finishing off
- Gentoo Handbook documentation on USE flags
- Gentoo Java USE flags
- Toolkit USE Flags — summarizes main points from discussions about toolkit (GTK, Qt) USE flags (gtk2, gtk3, qt4, qt5, etc.).
Externe Ressourcen
- https://packages.gentoo.org/useflags - USE flags in der Gentoo Packet Datenbank.
- cat /var/db/repos/gentoo/profiles/use.desc - Die häufig vorkommenden USE Flag Beschreibungsliste kann auf Systemen mit Portage installiert lokal gesehen werden.
- https://devmanual.gentoo.org/general-concepts/use-flags/ - USE Flags begrifflich erklärt im Gentoo Entwickler Handbuch.