Handbook:X86/Working/USE
Czym są flagi USE
Idea stojąca za flagami USE
Podczas instalacji Gentoo, użytkownicy dokonują wyborów zależnie od środowiska z jakim pracują. Konfiguracja serwera różni się od konfiguracji stacji roboczej. Gamingowa konfiguracja różni się od stacji roboczej do renderowania 3D.
Nie jest to tylko wybór jakie pakiety mają zostać zainstalowane, ale również funkcjonalności jakie mają wspierać poszczególne pakiety. Jeśli nie ma potrzeby posiadania wsparcia dla OpenGL, dlaczego ktoś miałby zajmować się instalacją i utrzymaniem OpenGL oraz budować wsparcie OpenGL w większości pakietów? Jeśli ktś nie chce używać KDE, dlaczego miałby zajmować się kompilowaniem pakietów ze wsparciem KDE, jeśli te pakiety mogą działać bezproblemowo bez niego?
By pomóc użytkownikom zdecydować co zainstalować/aktywować a co nie, Gentoo chciało, aby użytkownik mógł w prosty sposób określić swoje środowisko. To zmusza użytkownika do podjęcia decyzji, czego naprawdę chce, i ułatwia Portage podejmowanie użytecznych decyzji.
Definicja flagi USE
Wpisz USE flags. Taka flaga jest słowem kluczowym, które wprowadza wsparcie i zależności dla pewnego konceptu. Jeśli poszczególna flaga USE jest włączona, wtedy Portage będzie wiedział, że administrator systemu chce wsparcia dla wybranego słowa kluczowego. Oczywiście może to zmienić informacje o zależnościach pakietu. Zależnie od flagi USE, może to wymagać pobrania wielu dodatkowych zależności w celu spełnienia żądanych zmian.
Spójrzmy na przykład flagi USE kde
. Jeśli ta flaga nie jest ustawiona w zmiennej USE (lub jeśli jej wartość będzie z prefiksem minus: -kde
), wtedy wszystkie pakiety, które posiadają opcjonalne wsparcie KDE będą skompilowane bez wsparcia KDE. Wszystkie pakiety, które mają opcjonalną zależność KDE będą instalowane bez instalacji bibliotek KDE (jako zależność).
Kiedy flaga kde
jest włączona, wtedy pakiety będą skompilowane ze wsparciem KDE, i biblioteki KDE będą zainstalowane jako zależności.
Dzięki zdefiniowaniu flag USE, system będzie specjalnie dostosowany do potrzeb administratora systemu.
Używanie flag USE
Deklarowanie stałych flag USE
Wszystkie flagu USE są zadeklarowane w zmiennej USE. By łatwić użytkownikom wyszukiwanie i wybieranie flag USE, dostarczyliśmy domyślne ustawienia USE. Te ustawienie jest zbiorem flag USE, o którym sądzimy, że jest najczęściej używane przez użytkowników Gentoo. Domyślne ustawienie jest zadeklarowane w plikach make.defaults, które są częścią wybranego profilu.
Profil który zaczytuje system jest wkazywany przez link symboliczny /etc/portage/make.profile. Każdy profil działa na podstawie innych profili, a wynik końcowy jest sumą wszystkich profili. Najwyższy profil jest profilem bazowym (/var/db/repos/gentoo/profiles/base).
Aby wyświetlić aktualnie aktywne flagi USE (w całości), użyj emerge --info:
root #
emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."
Zmienna ta już zawiera sporo słów kluczowaych. Nie zmienaj żadnego pliku make.defaults w celu dostosowania zmiennych USE do osobistych potrzeb: zmiany w tych plikach będą cofnięte, kiedy repozytorium Gentoo zostanie zaktualizowane!
By zmienić te domyślne ustawienie, dodaj lub usuń słowa kluczowe w zmiennej USE. Można to zrobić globalnie przez zdefiniowanie zmiennej USE w /etc/portage/make.conf. W tej zmiennej można dodać nowe flagi USE, jeśli to potrzebne, lub je usunąć, jeśli nie są już potrzebne. Usuwanie wykonuje się przez dodanie prefiksu przed słowem kluczowym, w postaci znaku minus (-
).
Na przykład, by usunąć wsparcie dla KDE i Qt, ale dodać wsparcie dla LDAP, następujące flagi USE będą zdefiniowane w /etc/portage/make.conf:
USE="-kde -qt5 ldap"
Deklarowanie flag USE dla poszczególnych pakietów
Czasem użytkownik chce zadeklarować poszczególne flagi USE tylko dla jednego (lub kilku) aplikacji, zamiast całego system. By to osiągnąć edytuj /etc/portage/package.use. package.use jest zwykle jednym plikiem, jednak może być także katalogiem zawierającym pliki. Spójrz na przykład poniżej, a pózniej zerknij w man 5 portage po więcej informacji, jak używać tego sposobu. Poniższy przykład zakłada, że package.use jest pojedynczym plikiem.
Dla przykładu, aby mieć wsparcie dla Blu-ray tylko dla pakietu VLC media player:
media-video/vlc bluray
Jeśli package.use już istnieje jako katalog (w przeciwieństwie do zwykłego pliku), pakiety mogą mieć swoje modyfikacje flag USE, poprzez stworzenie plików w katalogu package.use/. Sposób nazywania plików jest dowolny, jednak warto zaimplementować spójny schemat ich nazewnictwa. Jednym ze sposobów jest nazywanie ich tak jak nazwy pakietów. Na przykład ustawienie flagi USE
bluray
dla pakietu media-video/vlc może być przeprowadzone w ten sposób: root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
Analogicznie, istnieje możliwość wyłączenia flag USE dla poszczególnych aplikacji. Na przykład, aby wyłączyć wsparcie ddla bzip2 dla pakietu PHP (ale mając je dla wszystkich innych pakietów przez zadeglarowanie go w USE w pliku make.conf):
dev-lang/php -bzip2
Deklaracja tymczasowych flag USE
Czasem użytkownik potrzebuje dodać flagę USE na krótką chwilę. Zamiast edytować /etc/portage/make.conf dwukrotnie (by dodać i cofnąć zmiany), wystarczy zadeklarować zmienną USE jako zmienną środowiskową.Pamiętej, że to ustawienie, będzie funkcjonować tylko dla wprowadzonej komenty; ponowne użycie emerge lub aktualizacja tej aplikacji (zarówno bezpośrednio jak i przez aktualizację systemu) cofnie zmiany wprowadzone przez tymczasowe użycie flagi USE.
Następujący przykład tymczasowo usuwa wartość pulseaudio
ze zmiennej USE podczas instalacji SeaMonkey:
root #
USE="-pulseaudio" emerge www-client/seamonkey
Pierwszeństwo
Oczywście istnieje reguła pierwszeństwa, jaka flaga USE jest używana z jakim priorytetem. Pierwszeństwo USE jest uporządkowane priorytetami (pierwszy ma najniższy priorytet):
- Domyślne ustawienia USE zadeklarowane w plikach make.defaults Twojego profilu
- Zdefiniowane przez użytkownika ustawiania USE w /etc/portage/make.conf
- Zdefiniowane przez użytkownika ustawiania USE w /etc/portage/package.use
- Zdefiniowane przez użytkownika ustawiania USE jako zmienne środowiskowe
By sprawdzić ostateczne ustawienie USE tak jak je widzi Portage, uruchom emerge --info. Wyświetli to wszystkie używane zmienne (włączając to USE variable) z obecnymi definicjami znanymi Portage.
root #
emerge --info
Dostosowywanie całego systemu do nowych flag USEE
Po zmiane flag USE, system powinien być zaktualizowany uwzględniając potrzebne zmiany. By to zrobić użyj opcji --newuse
z emerge:
root #
emerge --update --deep --newuse @world
Następnie uruchom opcję Portage depclean aby usunąć zależności warunkowe, które byly zainstalowane przez emerge w "starym" systemie. ale stały się przestarzałe w nowych flagach USE.
Sprawdź dwa razy wypisaną liste "przestarzałych" pakietów, by mieć pewność, że nie usunie to pakietów, które są potrzebne. W poniższym przykładzie dodaj opcję
--pretend
(-p
), żeby depclean tylko wyświetlił listę bez usuwania pakietów:
root #
emerge --pretend --depclean
Kiedy depclean się zakończy, emerge może poprosić o przebudowanie aplikacji, które są dynamicznie powiązane z obiektami współdzielonymi, dostarczonymi przez potencjalnie usunięte pakiety. Portage zachowa potrzebne biblioteki, dopóki akcja nie zostanie zakończona, by zapobiec uniemożliwieniu działania aplikacji. Przechowuje on informacje co jest potrzebne do przebudowania w konfiguracji preserved-rebuild
. By przebudować potrzebne pakiety uruchom:
root #
emerge @preserved-rebuild
Kiedy wszystko zostanie ukończone, system będzie używał nowego ustawienia flag USE.
Flagi USE dla konkretnych pakietów
Przeglądanie dostępnych flag USE
Spójrzmy na przykład seamonkey: jakie flagi USE są dla niego dostępne? By to sprawdzić użyj emerge z opcją --pretend
oraz --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
Nie tylko emerge jest narzędziem służącym do tego. Istnieje narzędzie przeznaczone do wyświetlania informacji o pakiecie, nazywa się ono equery i jest częścią pakietu app-portage/gentoolkit
root #
emerge --ask app-portage/gentoolkit
Uruchom teraz polecenie equery z argumentem uses
by wyświetlić flagi USE dla konkretnego pakietu. Na przykład dla pakietu 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
Spełnianie warunków REQUIRED_USE
Niektóre ebuildy wymagają lub zabraniają poszczególnych kombinacji flag USE w celu poprawnego działania. Jest to wyrażone w liście warunków REQUIRED_USE. Warunki te zapewniają pewność, że wszystkie funkcjonalności i zależności są spełnione i ta kompilacja zakończy się sukcesem i będzie przebiegała jak należy. Jeśli jakakikolwiek z nich nie zostanie spełniony, emerge wyświetli alert i poprosi o naprawienie problemu.
Przykład | Opis |
---|---|
REQUIRED_USE="foo? ( bar )"
|
Jeśli foo jest włączony, to bar też musi być włączony.
|
REQUIRED_USE="foo? ( !bar )"
|
Jeśli foo jest włączony, to bar nie może być włączony.
|
REQUIRED_USE="foo? ( || ( bar baz ) )"
|
Jeśli foo jest włączony, to bar lub baz musi być włączony.
|
REQUIRED_USE="^^ ( foo bar baz )"
|
Dokładnie jeden z foo bar lub baz musi być włączony.
|
REQUIRED_USE="|| ( foo bar baz )"
|
Przynajmniej jeden z foo bar lub baz musi być włączony.
|
REQUIRED_USE="?? ( foo bar baz )"
|
Nie więcej niż jeden z foo bar lub baz powinien być włączony.
|