When you are installing Gentoo (or any other distribution, or even operating system for that matter) you make choices depending on the environment you are working with. A setup for a server differs from a setup for a workstation. A gaming workstation differs from a 3D rendering workstation.
This is not only true for choosing what packages you want to install, but also what features a certain package should support. If you don't need OpenGL, why would you bother installing OpenGL and build OpenGL support in most of your packages? If you don't want to use KDE, why would you bother compiling packages with KDE-support if those packages work flawlessly without?
To help users in deciding what to install/activate and what not, we wanted the user to specify his/her environment in an easy way. This forces the user into deciding what they really want and eases the process for Portage, our package managment system, to make useful decisions.
Enter the USE-flags. Such a flag is a keyword that embodies support and dependency-information for a certain concept. If you define a certain USE-flag, Portage will know that you want support for the chosen keyword. Of course this also alters the dependency information for a package.
Let us take a look at a specific example: the
By correctly defining the keywords you will receive a system tailored specifically to your needs.
There are two types of USE-flags:
A list of available global USE-flags can be found
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
A list of available local USE-flags can be found locally in
In the hope you are convinced of the importance of USE-flags we will now inform you how to declare USE-flags.
As previously mentioned, all USE-flags are declared inside the
The profile your system listens to is pointed to by the
Let us take a look at this default setting for the 2004.3 profile:
(This example is the sum of the settings in base, default-linux, default-linux/x86 and 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"
As you can see, this variable already contains quite a lot of keywords. Do
not alter any
To change this default setting, you need to add or remove keywords to the
For instance, to remove support for KDE and QT but add support for ldap, the
following
USE="-kde -qt ldap"
Sometimes you want to declare a certain USE flag for one (or a couple) of
applications but not system-wide. To accomplish this, you will need to create
the
For instance, if you don't want
dev-db/mysql berkdb
You can of course also explicitly
dev-php/php -java
Sometimes you want to set a certain USE-setting only once. Instead of editing
As an example we will temporarily remove java from the USE-setting during the installation of mozilla.
# USE="-java" emerge mozilla
After certain packages are installed, additional USE flags will automatically
be enabled for you if you do not explicitly disable them. To view the list
of packages that trigger automatic USE-flags, check
gnome gnome-base/gnome gtk x11-libs/gtk+ qt x11-libs/qt kde kde-base/kdebase motif x11-libs/openmotif
Of course there is a certain precedence on what setting has priority over the
USE setting. You don't want to declare
To view the final
# emerge --info
If you have altered your USE flags and you wish to update your entire system to
use the new USE flags, use
# emerge --update --deep --newuse world
Next, run Portage's depclean to remove the conditional dependencies that were emerged on your "old" system but that have been obsoleted by the new USE flags.
# emerge -p --depclean
When depclean has finished, run
# revdep-rebuild
When all this is accomplished, your system is using the new USE flag settings.
Let us take the example of
# 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 gentoolkit
Now run
# equery uses gnumeric [ Colour Code : setunset ] [ 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)