1.28 2005-05-04
Co jsou USE proměnné? Proč USE proměnné

Při instalaci Gentoo (nebo jakékoli jiné distribuce, a dokonce i jakéhokoli operačního systému) činíte volby závisející na prostředí, se kterým pracujete. Nastavení pro server je jiné než nastavení pro pracovní stanici. Stanice určená pro hry je jiná než stanice pro renderování 3D grafiky.

Tyto volby se nevztahují jenom na výběr balíčků, ale týkají se i vlastností, které by měl daný balíček poskytovat. Nebudete-li používat OpenGL, nač ho instalovat a proč aktivovat jeho podporu v jiných balíčcích? Nechcete-li používat KDE, proč byste měli aktivovat jeho podporu v balíčcích, které bezchybně fungují i bez ní?

Abychom uživatelům usnadnili rozhodování co aktivovat a co ne, chceme od nich, aby jednoduše specifikovali své prostředí. To je přiměje k tomu, že si rozmyslí, co vlastně potřebují, a umožní Portage, našemu systému pro správu balíčků, užitečné rozhodování.

Definice USE proměnné

Vítejte do USE proměnných. Tyto proměnné (USE flags) jsou klíčová slova obsahující podporu a informace o závislosti pro konkrétní oblast. Když definujete nějakou USE proměnnou, dáváte tím Portage vědět, že chcete podporu pro danou funkci. To samozřejmě ovlivní závislosti balíčků.

Pojďme se podívat na konkrétní příklad - klíčové slovo kde. Pokud jej nemáte v proměnné USE, všechny balíčky, které mají volitelnou podporu pro KDE budou zkompilovány bez ní. Balíčky, které mají KDE uvedeno jako volitelnou závislost, nebudou instalovat knihovny z KDE. Naopak přidáte-li kde do USE proměnné, budou tyto balíčky zkompilovány s podporou KDE a knihovny z tohoto prostředí budou nainstalovány jako závislosti.

Správným nastavením této proměnné dostanete systém ušitý na míru Vaším potřebám.

Jaké USE proměnné existují?

Jsou dva druhy USE proměnných - globální a lokální.

  • Globální USE proměnnou používá více balíčků z celého systému. Tento druh USE proměnných je to, čemu většina lidí říká USE proměnné.
  • Lokální USE proměnné jsou používané jedním balíčkem pro rozhodnutí, která se týkají pouze jej samotného.

Seznam dostupných globálních USE proměnných je k dispozici na webu nebo na Vašem systému v souboru /usr/portage/profiles/use.desc. Krátká (silně nekompletní) ukázka:

gtk     - Adds support for x11-libs/gtk+ (The GIMP Toolkit)
gtk2    - Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.
gtkhtml - Adds support for gnome-extra/gtkhtml
guile   - Adds support for dev-util/guile (interpreter for Scheme)
icc     - Use the Intel C++ Compiler if the package supports it
icc-pgo - Enable PGO data generation or use when use icc.
imap    - Adds support for IMAP

Seznam dostupných lokálních USE proměnných je v nainstalovaném systému dostupný v souboru /usr/portage/profiles/use.local.desc.

Používáme USE proměnné Deklarace stálých USE proměnných

Doufejme, že jste již přesvědčeni o důležitosti USE proměnných; nyní Vám ukážeme, jak je používat.

Jak jsme již zmínili, USE flagy se nastavují v proměnné USE. Abychom usnadnili uživatelům život, existují výchozí nastavení USE, která reflektují to, co si myslíme, že bude používat většina uživatelů Gentoo Linuxu. Tato výchozí nastavení jsou deklarována v souboru make.defaults a jsou součást profilu.

Profil, kterým se Váš systém řídí, je určen symbolickým odkazem /etc/make.profile. Konečné nastavení je kombinací celého stromu profilů, z nichž hlavní se jmenuje base (/usr/portage/profiles/base).

Podívejme se na výchozí nastavení:

(Tento příklad je výsledek nastavení z profilů base, default-linux,
 default-linux/x86 a default-linux/x86/2004.3)
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
     foomaticdb gdbm gif gpm gtk gtk2 imlib jpeg kde gnome libg++ libwww mad
     mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
     quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"

Jak vidíte, poměrně hodně klíčových slov je již aktivních. Neměňte žádná nastavení v souboru make.defaults - změny v tomto souboru budou potlačeny při aktualizaci Portage.

Chcete-li změnit tato výchozí nastavení, musíte změnit proměnnou USE. Celý systém ovlivní její nastavení v souboru /etc/make.conf. USE proměnné můžete přidávat i odebírat; odstranění se provádí přidáním znaménka mínus ("-") před dané klíčové slovo.

Například pro odstranění podpory KDE a QT a zároveň aktivaci podpory pro LDAP nastavte USE v souboru /etc/make.conf takto:

USE="-kde -qt ldap"
Individuální nastavení USE proměnných

Někdy je potřeba nastavit USE proměnnou pro jeden (nebo více) balíčků, avšak ne pro celý systém. V takovém případě musíte vytvořit adresář /etc/portage (pokud ještě neexistuje) a použít soubor /etc/portage/package.use.

Například nechcete-li mít většinu systému zkompilovanou s podporou berkdb, avšak chcete ji používat v mysql, měli byste přidat:

dev-db/mysql berkdb

Je také možné danou USE proměnnou pro daný balíček zakázat. Například pokud nechcete mít aktivovanou java v PHP:

dev-php/php -java
Dočasná nastavení USE proměnných

Někdy můžete chtít nastavit určitou USE proměnnou pouze jednou. Namísto dvojnásobné editace /etc/make.conf (nejprve změna nastavení a poté uvedení do původního stavu) můžete použít USE jako proměnnou prostředí. Avšak pamatujte, že při aktualizaci dané aplikace (ať už explicitně jí samotné a nebo při aktualizaci systému) o svá nastavení přijdete!

Jako příklad dočasně zakážeme Javu během instalace Mozilly.

# USE="-java" emerge mozilla
Automatické USE proměnné

Jsou-li nainstalovány určité balíčky, budou automaticky aktivovány i další USE proměnné, pokud je ovšem výslovně nezakážete. Pro zobrazení seznamu balíčků, které se takto chovají, se podívejte do souboru /etc/make.profile/use.defaults a do use.defaults rodičovských profilů.

gnome           gnome-base/gnome
gtk             x11-libs/gtk+
qt              x11-libs/qt
kde             kde-base/kdebase
motif           x11-libs/openmotif
Přednosti

Nastavení USE proměnných se řídí určitými pravidly o přednosti. Například může být zbytečné deklarovat USE="-java", když víte, že je definovaná jinde a s vyšší prioritou. USE proměnné jsou zpracovávány v tomto pořadí (počínaje nejnižší prioritou):

  1. výchozí nastavení USE deklarované v souboru make.defaults uvnitř profilu
  2. zděděné USE proměnné, pokud jsou nainstalované balíčky z /etc/make.profile/use.defaults
  3. uživatelem definovaná nastavení v /etc/make.conf
  4. uživatelem definovaná nastavení v /etc/portage/package.use
  5. uživatelem definovaná nastavení předaná jako proměnná prostředí

Pro zobrazení výsledných nastavení USE proměnných spusťte emerge --info; tato volba zajistí zobrazení všech proměnných, které Portage použije, včetně USE.

# emerge --info
Promítnutí změn USE proměnných do systému

Změnili-li jste nastavení USE proměnných a přejete-li si, aby se tyto změny promítly do systému, použijte volbu --newuse příkazu emerge:

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

Nyní spusťte depclean (součást Portage), který odstraní závislosti, které již nejsou kvůli změněným USE proměnným potřeba.

Spouštění emerge --depclean je nebezpečná operace a měli byste na ní dát pozor. Překontrolujte, zda jsou "zbytečné" balíčky opravdu zbytečné, abyste si neodstranili něco, co potřebujete. V následujícím příkladu přidáme parametr -p, který zajistí, že depclean pouze vypíše seznam balíčků, aniž by je odstranil.
# emerge -p --depclean

Až depclean skončí, spusťte revdep-rebuild pro nový překlad aplikací, jež jsou dynamicky linkované se sdílenými objekty patřícími možná odstraněným balíčkům. revdep-rebuild je součástí balíčku gentoolkit; nezapomeňte si ho nejprve nainstalovat.

# revdep-rebuild

Až toto vše proběhne, bude Váš systém používat nová nastavení USE proměnných.

USE proměnné pro specifické pro balíčky Zobrazení dostupných USE proměnných

Podívejme se kupříkladu na Mozillu - jaké USE proměnné ji ovlivní? Pro jejich zobrazení předejte emerge parametry --pretend a --verbose:

# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild  N    ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap
+gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail
-moznocompose -moznoxft

emerge není jediný nástroj vhodný k tomuto účelu. Ve skutečnosti existuje nástroj pro informace o balíčcích jménem equery, který je opět součástí balíčku gentoolkit. Nejprve jej tedy nainstalujme:

# emerge gentoolkit

Nyní spusťte equery s argumentem uses, což zobrazí přehled USE proměnných používaných daným balíčkem. Kupříkladu pro balíček gnumeric:

# equery uses gnumeric
[ Colour Code : set unset ]
[ Legend      : (U) Col 1 - Current USE flags        ]
[             : (I) Col 2 - Installed With USE flags ]

 U I [ Found these USE variables in : app-office/gnumeric-1.2.0 ]
 - - libgda  : Adds GNU Data Access (CORBA wrapper) support for gnumeric
 - - gnomedb : unknown
 + + python  : Adds support/bindings for the Python language
 + + bonobo  : Adds support for gnome-base/bonobo (Gnome CORBA interfaces)