Gentoo Logo

1.  Czym są flagi USE?

Idea flag USE

Kiedy instalujemy Gentoo (lub dowolną inną dystrybucję albo nawet inny system operacyjny) zwykle dokonujemy wyborów zależnych od środowiska, w którym przychodzi nam pracować. Instalacja dla serwera różni się od instalacji dla stacji roboczej. Konfiguracja komputera dla gracza różni się od tej dla komputera przeznaczonego do obróbki grafiki 3D.

Nie jest tak tylko w przypadku pakietów, które wybieramy przy instalacji, ale także w przypadku cech, które dany pakiet powinien posiadać. Jeżeli nie potrzebujemy obsługi OpenGL, dlaczego mielibyśmy instalować OpenGL oraz jego obsługę w większości pakietów? Jeżeli nie chcemy używać KDE, dlaczego mamy budować pakiety ze wsparciem dla KDE, podczas gdy bez problemów mogą pracować bez niego?

Aby ułatwić użytkownikom decydowanie o tym czego potrzebują, a czego nie chcą instalować i aktywować, stworzyliśmy dla nich specjalne środowisko. Dzięki niemu użytkownik może wybrać to co jest mu potrzebne, a Portage znacznie ułatwi mu cały proces wybierania najlepszych ustawień.

Definicja flag USE

Każda flaga jest słowem kluczowym, które reprezentuje wspierane funkcje oraz informacje o zależnościach dla wybranego wątku. Jeżeli zdefiniujemy jakąś flagę USE, Portage będzie wiedziało, że jest nam potrzebne wsparcie funkcji przypisanej temu słowu kluczowemu. Oczywiście uwzględnione zostaną także pakiety zależne.

Przyjrzyjmy się zatem przykładowi: słowu kluczowemu kde. Jeżeli nie posiadamy go wśród zmiennych USE, wszystkie pakiety, które posiadają opcjonalną obsługę KDE zostaną skompilowane bez obsługi KDE. Wszystkie pakiety, które będą opcjonalnie zależne od KDE, zostaną zainstalowane bez bibliotek KDE jako zależności. Jeżeli zdefiniujemy słowo kluczowe kde, to te pakiety zostaną skompilowane z obsługą KDE a biblioteki KDE zostaną zainstalowane jako pakiety zależne.

Dzięki dobremu doborowi słów kluczowych otrzymamy system dokładnie dostosowany do naszych potrzeb.

Jakie wyróżniamy flagi USE?

Wyróżniamy dwa typy flag USE: globalne oraz lokalne.

  • Globalne flagi USE są używane dla większej ilości pakietów, są ogólnosystemowe. Większość ludzi postrzega je właśnie jako flagi USE.
  • Lokalne flagi USE są używane przez pojedynczy pakiet w celu podjęcia decyzji specyficznych dla danego pakietu.

Lista dostępnych globalnych flag USE jest dostępna w Internecie lub też lokalnie w pliku /usr/portage/profiles/use.desc.

Lista dostępnych lokalnych flag USE znajduje się w pliku /usr/portage/profiles/use.local.desc.

1.  Używanie flag USE

Deklarowanie stałych flag USE

Kiedy już odkryliśmy jak ważny jest właściwy dobór flag USE możemy przystąpić do omawiania tego jak się je deklaruje.

Jak już wcześniej wspominaliśmy, wszystkie flagi USE są deklarowane wewnątrz zmiennej USE. Aby ułatwić użytkownikom szukanie oraz wybór flag USE, dostarczamy dobrany przez nas domyślny zestaw. Zestaw ten jest kolekcją flag, które według nas są najczęściej wybierane przez użytkowników Gentoo. Domyślny zestaw jest zadeklarowany w pliku make.defaults i jest częścią wybranego profilu.

Profil, którego system używa jest wskazywany przez dowiązanie symboliczne /etc/make.profile. Każdy profil działa ponad innym, większym profilem, końcowy wynik jest więc sumą wszystkich profili. Górny profil to base (/usr/portage/profiles/base).

Rzućmy okiem na domyślne ustawienia dla profilu 10.0:

Listing 1.1: Skumulowana zmienna USE dla profilu 10.0

(Ten przykład to suma ustawień w plikach base, default-linux,
default/linux/x86 i default/linux/x86/10.0)
USE="a52 aac acpi alsa branding cairo cdr dbus dts dvd dvdr emboss encode exif
fam firefox flac gif gpm gtk hal jpeg lcms ldap libnotify mad mikmod mng mp3
mp4 mpeg ogg opengl pango pdf png ppds qt3support qt4 sdl spell
startup-notification svg tiff truetype vorbis unicode usb X xcb x264 xml
xulrunner xv xvid"

Jak łatwo zauważyć, domyślny zestaw zawiera dość dużo słów kluczowych. Pamiętajmy, aby nie dokonywać zmian w pliku make.defaults, w celu dostosowywania zmiennej USE do swoich potrzeb. Zmiany te zostaną usunięte przy najbliższej aktualizacji drzewa Portage!

Aby zmienić domyślne ustawienia, musimy dodać (lub usunąć) słowa kluczowe w zmiennej USE. Dokonuje się tego definiując globalnie zmienną USE w pliku /etc/make.conf. Do tej zmiennej możemy dodać flagi, które są nam potrzebne lub też usunąć te, których nie potrzebujemy. Usunięcia flagi dokonuje się poprzez wstawienie znaku minus (-) przed wybraną flagą.

Na przykład, aby usunąć obsługę KDE i QT oraz dodać obsługę ldap, zmienna USE w pliku /etc/make.conf powinna wyglądać następująco:

Listing 1.1: Przykładowe ustawienia zmiennej USE w pliku /etc/make.conf

USE="-kde -qt4 ldap"

Deklarowanie flag USE tylko dla wybranego pakietu

Czasami mamy zamiar zadeklarować wybraną flagę USE dla jednej (czasem kilku) aplikacji, ale nie dla całego systemu. Aby tego dokonać, będziemy zmuszeni do utworzenia katalogu /etc/portage (jeżeli nie istnieje) i wyedytowania pliku /etc/portage/package.use. W większości przypadków jest to pojedynczy plik, jednak może to być również nazwa katalogu. Aby uzyskać więcej informacji należy przeczytać strone manuala dostępną po wydaniu polecenia man portage. W poniższych przykładach założono, że package.use jest plikiem.

Na przykład, jeżeli nie chcemy globalnego wsparcia dla berkdb, ale chcielibyśmy mieć jego wsparcie dla mysql, powinniśmy dodać:

Listing 1.1: Przykład /etc/portage/package.use

dev-db/mysql berkdb

Oczywiście możemy też wyłączyć flagi USE dla wybranej aplikacji. Na przykład, jeżeli nie chcemy obsługi javy w PHP:

Listing 1.1: 2 przykład /etc/portage/package.use

dev-php/php -java

Deklarowanie tymczasowych flag USE

Czasami zachodzi potrzeba użycia flagi USE tylko jeden raz. Zamiast dwukrotnego edytowania pliku /etc/make.conf (aby wprowadzić, a potem cofnąć zmiany w USE) możemy po prostu zadeklarować tą flagę jako zmienną środowiskową. Pamiętajmy jednak, że jeżeli ponownie zainstalujemy lub zaktualizujemy daną aplikację (przypadkowo lub przy aktualizacji systemu) to takie zmiany nie zostaną ponownie wprowadzone.

Dla przykładu usuniemy obsługę javy na czas instalacji seamonkey.

Listing 1.1: Używanie USE jako zmiennej środowiskowej

# USE="-java" emerge seamonkey

Pierwszeństwo

Oczywiście istnieje pierwszeństwo w przydzielaniu priorytetów konkretnym flagom USE. Nie ma sensu deklarować zmiennej USE="-java" tylko po to, aby zobaczyć, że java i tak zostanie użyta w związku z zadeklarowaniem na wyższym poziomie. Hierarchia flag USE prezentuje się następująco (pierwsze pozycje mają najniższy priorytet):

  1. Domyślne ustawienia zmiennej USE znajdujące się w pliku make.defaults będącym częścią wybranego profilu
  2. Zdefiniowana przez użytkownika zmienna USE znajdująca się w pliku /etc/make.conf
  3. Zdefiniowana przez użytkownika zmienna USE w pliku /etc/portage/package.use
  4. Zmienna USE zdefiniowana przez użytkownika jako zmienna środowiskowa.

Aby sprawdzić ostateczne ustawienia zmiennej USE widziane przez Portage wpisujemy polecenie emerge --info. Polecenie to wskaże wszystkie istotne zmienne (włączając zmienną USE) z wartościami używanymi aktualnie przez Portage.

Listing 1.1: Wykonywanie polecenia emerge --info

# emerge --info

Adaptacja systemu do nowych flag USE

Jeżeli zmodyfikowaliśmy flagi USE i chcemy uaktualnić system tak, aby pakiety używały nowych flag USE musimy uruchomić emerge z opcją --newuse.

Listing 1.1: Rekompilacja systemu

# emerge --update --deep --newuse world

Następnie uruchamiamy depclean, który usunie niepotrzebne zależności, które zostały zainstalowane na "starym" systemie, ale są nieaktualne z nowymi flagami USE.

Ostrzeżenie: Uruchomienie emerge --depclean jest niebezpieczną operacją i powinno być wykonywane z zachowaniem pełnej ostrożności. Należy dwukrotnie sprawdzić listę "nieaktualnych" pakietów i upewnić się, że Portage nie chce usunąć czegoś ważnego. W poniższym przykładzie dodajemy opcję -p, która wyświetli listę pakietów do usunięcia, bez ich usuwania.

Listing 1.1: Usuwanie niepotrzebnych pakietów

# emerge -p --depclean

Po zakończeniu polecenia depclean uruchamiamy revdep-rebuild, aby przebudować aplikacje, które mogą być połączone dynamicznie z usuniętymi bibliotekami. revdep-rebuild jest częścią pakietu gentoolkit.

Listing 1.1: Uruchomienie revdep-rebuild

 # revdep-rebuild

Po zakończeniu tych wszystkich czynności system będzie używał nowych ustawień flag USE.

1.  Zmienne USE specyficzne dla pakietów

Przeglądanie dostępnych flag USE

Weźmy na przykład seamonkey i dowiedzmy się których flag USE używa. Użyjemy do tego polecenia emerge z parametrami --pretend oraz --verbose:

Listing 1.1: Przeglądanie używanych flag USE:

# 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 nie jest jedynym narzędziem wykorzystywanym w celu przeglądania informacji o pakietach. Do dyspozycji mamy jeszcze program equery, znajdujący się w pakiecie gentoolkit. Zacznijmy od zainstalowania gentoolkit:

Listing 1.1: Instalacja gentoolkit

# emerge gentoolkit

Następnie uruchamiamy equery z argumentem uses aby przejrzeć flagi USE dla konkretnego pakietu. Dla przykładu sprawdźmy pakiet gnumeric:

Listing 1.1: Użycie equery do przeglądania użytych flag USE:

# 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

Zaktualizowano 7 czerwca 2010

Podsumowanie: Flagi USE są bardzo ważnym aspektem pracy z Gentoo. W tym rozdziale omawiamy pracę z nimi oraz tłumaczymy to jak wpływają one na pracę systemu.

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.