Handbuch:SPARC/Arbeiten/USE
Was sind USE-Flags
Die Idee hinter USE-Flags
Bei der Installation von Gentoo treffen die Benutzer Entscheidungen, die von der Umgebung abhängen, in der Sie arbeiten. Ein Setup für einen Server unterscheidet sich von einem Setup für eine Workstation. Eine Gaming-Workstation unterscheidet sich von einer 3D-Rendering-Workstation.
Dis gilt nicht nur für die Auswahl der zu installierenden Pakete, sondern auch dafür, welche Funktionen ein bestimmtes Paket unterstützen sollte. Wenn es keinen Bedarf für OpenGL gibt, warum sollte sich jemand die Mühe machen, OpenGL zu installieren und zu pflegen und OpenGL-Unterstützung in die meisten Pakete einbauen? Wenn jemand KDE nicht benutzen will, warum sollte er sich die Mühe machen, Pakete mit KDE-Unterstützung zu kompilieren, wenn diese Pakete auch ohne einwandfrei funktionieren.
Um den Benutzer die Entscheidung zu erleichtern, was er installieren/aktivieren soll und was nicht, wollte Gentoo, dass der Benutzer seine Umgebung auf einfache Art und Weise spezifizieren kann. Dies zwingt den Benutzer zu entscheiden, was er wirklich will und erleichtert Portage den Prozess, sinnvolle Entscheidungen zu treffen.
Definition einer USE-Flag
Betreten Sie das Gebiet der USE-Flags. Ein solches Flag ist ein Schlüsselwort, das die Unterstützung und Abhängigkeitsinformationen für ein bestimmtes Konzept beinhaltet. Wenn ein bestimmtes USE-Flag auf aktiviert gesetzt ist, dann weiß Portage, dass der Systemadministrator Unterstützung für das gewählte Schlüsselwort wünscht. Natürlich kann dies die Abhängigkeitsinformationen für ein Paket verändern. Abhängig vom USE-Flag kann es erforderlich sein, dass viele weitere Abhängigkeiten hinzugezogen werden müssen, um die gewünschten Abhängigkeitsänderungen zu erfüllen.
Schauen Sie sich ein konkretes Beispiel an: das kde
USE-Flag. Wenn dieses Flag in der USE-Variable nicht gesetzt ist (oder wenn dem Wert ein Minuszeichen vorangestellt ist: -kde
), dann werden alle Pakete, die optionale KDE-Unterstützung haben ohne KDE-Unterstützung kompiliert. Alle Pakete, die eine optionale KDE-Abhängigkeit haben, werden ohne Installation der KDE-Bibliotheken (als Abhängigkeit) installiert.
Wenn das kde
Flag auf enabled gesetzt ist, dann werden diese Pakete mit KDE Unterstützung kompiliert und die KDE Bibliotheken werden als Abhängigkeit installiert.
Durch die korrekte Definition von USE-Flags wird das System speziell auf die Bedürfnisse des Systemadministrators zugeschnitten.
Verwendung von USE-Flags
Dauerhafte USE-Flags deklarieren
Alle USE-Flags werden innerhalb der Variable USE deklariert. Um es den Benutzern leicht zu machen, USE-Flags zu suchen und auszuwählen, bieten wir bereits eine Standard-USE-Einstellung an. Diese Einstellung ist eine Sammlung von USE-Flags, von denen wir glauben, dass sie von Gentoo-Benutzern häufig verwendet werden. Diese Standardeinstellung wird in den make.defaults Dateien deklariert die Teil des gewählten Profils sind.
Das Profil, auf das das System hört, wird durch den Symlink /etc/portage/make.profile angegeben. Jedes Profil arbeitet auf anderen Profilen aufbauend, und das Endergebnis ist daher die Summe aller Profile. Das oberste Profil ist das Basisprofil /var/db/repos/gentoo/profiles/base.
Um die derzeit aktiven USE-Flags (vollständig) anzuzeigen, verwenden Sie emerge --info:
root #
emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."
Diese Variable enthält bereits eine ganze Reihe von Schlüsselwörtern. Ändern Sie jedoch keine make.defaults-Datei, um die USE-Variable an Ihre persönlichen Bedürfnisse anzupassen: Änderungen in diesen Dateien werden rückgängig gemacht, wenn das Gentoo-Repositorium aktualisiert wird!
Um diese Standardeinstellung zu ändern fügen Sie der USE-Variable Schlüsselwörter hinzu oder entfernen sie daraus. Dies geschieht global durch Definition der USE-Variable in /etc/portage/make.conf. In dieser Variable können Sie die zusätzlich benötigten USE-Flags hinzufügen oder nicht mehr benötigte USE-Flags entfernen. Letzteres geschieht durch Voranstellen des Minuszeichens (-
) vor das Schlüsselwort.
Um zum Beispiel die Unterstützung für KDE und Qt zu entfernen, aber die Unterstützung für LDAP hinzufügen, kann die folgende USE in /etc/portage/make.conf definiert werden:
USE="-kde -qt5 ldap"
Deklaration von USE-Flags für einzelne Pakete
Manchmal wollen Benutzer ein bestimmtes USE-Flag für eine (oder mehrere) Anwendungen deklarieren, aber nicht systemweit. Um dies zu erreichen, bearbeiten Sie /etc/portage/package.use. package.use ist typischerweise eine einzelne Datei, kann aber auch eine Verzeichnis mit Unterdateien sein; siehe den Tipp unten und dann man 5 portage für weitere Informationen zur Verwendung dieser Konvention. Die folgenden Beispiele gehen davon aus, dass package.use eine einzelne Datei ist.
Zum Beispiel, um nur Blu-ray-Unterstützung für das VLC Media Player-Paket zu haben:
media-video/vlc bluray
Wenn package.use bereits als Verzeichnis existiert (im Gegensatz zu einer einzeln Datei), können Pakete ihre USE-Flags ändern, indem sie einfach Dateien unter dem Verzeichnis package.use/ erstellen. Jede Dateinamenskonvention kann funktionieren, es ist jedoch ratsam, ein kohärentes Namensschema zu implementieren. Eine Konvention ist es, einfach den Paketnamen als Titel für die untergeordnete Datei zu verwenden. Das Setzen des
bluray
USE-Flags für das Paket media-video/vlc kann zum Beispiel wie folgt durchgeführt werden:root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
In ähnlicher Weise ist es möglich, USE-Flags für eine bestimmte Anwendung explizit zu deaktivieren. Zum Beispiel, um die bzip2-Unterstützung in PHP zu deaktivieren (aber sie für alle anderen Pakete durch die USE-Flag-Deklaration in make.conf zu haben):
dev-lang/php -bzip2
Deklaration temporärer USE-Flags
Manchmal müssen Benutzer für einen kurzen Moment ein USE-Flag setzen. Anstatt /etc/portage/make.conf zweimal zu bearbeiten (um die USE-Änderungen vorzunehmen und rückgängig zu machen), deklarieren Sie einfach die USE-Variable als Umgebungsvariable. Denken Sie daran, dass diese Einstellung nur für den eingegebenen Befehl gilt; ein erneutes Aufrufen oder Aktualisieren dieser Anwendung (entweder explizit oder als Teil einer Systemaktualisierung) macht die Änderungen rückgängig, die durch die (temporäre) USE-Flag-Definition ausgelöst wurden.
Das folgende Beispiel entfernt, vorübergehend den Wert pulseaudio
aus der USE-Variable, während der Installation von SeaMonkey:
root #
USE="-pulseaudio" emerge www-client/seamonkey
Vorrang
Natürlich gibt es eine bestimmte Rangfolge, welche Einstellung Vorrang vor der USE-Einstellung hat. Der Vorrang für die USE-Einstellung ist, geordnet nach Priorität (die erste hat die niedrigste Priorität):
- Standard-USE-Einstellung, deklariert in den make.defaults-Dateien, die Teil Ihres Profils sind
- Benutzerdefinierte USE-Einstellungen in /etc/portage/make.conf
- Benutzerdefinierte USE-Einstellung als Umgebungsvariable
Um die endgültige USE-Einstellung. wie sie von Portage gesehen wird, zu sehen, führen Sie emerge --info aus. Dies listet alle relevanten Variablen (einschließlich der USE-Variable) mit ihrer aktuellen, Portage bekannten Definition auf.
root #
emerge --info
Anpassen des gesamten Systems an die neuen USE-Flags
Nachdem Sie die USE-Flags geändert haben, sollte das System aktualisiert werden, um die notwendigen Änderungen zu berücksichtigen. Verwenden Sie dazu die Option --newuse
mit emerge:
root #
emerge --update --deep --newuse @world
Als nächstes führen Sie Portage's depclean aus, um die bedingten Abhängigkeiten zu entfernen, die auf dem "alten" System entstanden sind, aber durch die neuen USE-Flags obsolet geworden sind.
Überprüfen Sie die mitgelieferte Liste der "veralteten" Pakete, um sicherzustellen, dass keine Pakete entfernt werden, die benötigt werden. Im folgenden Beispiel wird der Schalter
--pretend
(-p
) verwendet, damit depclean die Pakete nur auflistet, ohne sie zu entfernen:
root #
emerge --pretend --depclean
Wenn depclean beendet ist, kann emerge dazu auffordern die Anwendungen neu zu erstellen, die dynamisch gegen gemeinsam genutzte Objekte gelinkt sind, die von möglicherweise entfernten Paketen bereitgestellt werden. Portage bewahr notwendige Bibliotheken auf, bis diese Aktion durchgeführt wurde, um zu verhindern, dass Anwendungen zerstört werden. Es speichert, was neu erstellt werden muss, in der preserved-rebuild
Menge. Um die notwendigen Pakete neu zu erstellen, führen Sie aus:
root #
emerge @preserved-rebuild
Wenn dies alles erledigt ist, verwendet das System die neuen USE-Flag-Einstellungen.
Paketspezifische USE-Flags
Anzeige der verfügbaren USE-Flags
Nehmen wir das Beispiel von SeaMonkey: Auf welche USE-Flags hört es? Um das herauszufinden, verwenden wir emerge mit den Optionen --pretend
und --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 ist nicht das einzige Werkzeug für diese Aufgabe. Tatsächlich gibt es eine Werkzeug für Paketinformationen namens equery, das sich im Paket app-portage/gentoolkit befindet
root #
emerge --ask app-portage/gentoolkit
Führen Sie nun equery mit dem Argument uses
aus, um die USE-Flags eines bestimmten Pakets anzuzeigen. Zum Beispiel für das Paket 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
Erfüllung der REQUIRED_USE-Bedingungen
Einige Ebuilds erfordern oder verbieten bestimmte Kombinationen von USE-Flags, damit sie ordnungsgemäß funktionieren. Dies wird durch eine Reihe von Bedingungen ausgedrückt, die in einem REQUIRED_USE-Ausdruck enthalten sind. Diese Bedingungen stellen sicher, dass alle Funktionen und Abhängigkeiten vollständig sind und dass der Build erfolgreich ist und wie erwartet funktioniert. Wenn eine dieser Bedingungen nicht erfüllt ist, wird emerge Sie warnen und Sie auffordern, das Problem zu beheben.
Beispiel | Beschreibung |
---|---|
REQUIRED_USE="foo? ( bar )"
|
Wenn foo gesetzt ist, muss bar auch gesetzt sein.
|
REQUIRED_USE="foo? ( !bar )"
|
Wenn foo gesetzt ist, muss bar nicht gesetzt sein.
|
REQUIRED_USE="foo? ( || ( bar baz ) )"
|
Wenn foo gesetzt ist, muss bar oder baz gesetzt sein.
|
REQUIRED_USE="^^ ( foo bar baz )"
|
Genau eines von foo oder bar oder baz muss gesetzt sein.
|
REQUIRED_USE="|| ( foo bar baz )"
|
Mindestens eines von foo , bar oder baz muss gesetzt sein.
|
REQUIRED_USE="?? ( foo bar baz )"
|
Nicht mehr als eines von foo , bar oder baz darf gesetzt sein.
|
</noinclude>