.TH "PORTAGE" "5" "Dec 2005" "Portage 2.1" "Portage"
.SH NAME
portage \- the heart of Gentoo
.SH "DESCRIPTION"
The current portage code uses many different configuration files, most of which 
are unknown to users and normal developers.  Here we will try to collect all 
the odds and ends so as to help users more effectively utilize portage.  This 
is a reference only for files which do not already have a man page.

All files in the make.profile directory may be tweaked via parent profiles 
when using cascading profiles.  For more info, please see 
http://www.gentoo.org/proj/en/releng/docs/cascading-profiles.xml
.IP Note:
If you are looking for information on how to emerge something, please see 
.BR emerge (1).
.SH "SYNOPSIS"
.TP
.BR /etc/
.nf
make.globals
.BR make.conf (5)
.fi
.TP
.BR /etc/make.profile/
.nf
deprecated
make.defaults
packages
packages.build
package.provided
parent
profile.bashrc
use.defaults
use.mask
virtuals
.fi
.TP
.BR /etc/portage/
.nf
bashrc
modules
package.mask
package.unmask
package.keywords
package.use
mirrors
categories
.fi
.TP
.BR /etc/portage/profile/
site-specific overrides of \fB/etc/make.profile/\fR
.TP
.BR /usr/portage/profiles/
.nf
arch.list
categories
info_pkgs
info_vars
package.mask
profiles.desc
thirdpartymirrors
use.desc
use.local.desc
.fi
.TP
.BR /var/lib/portage/
world
.SH "GLOSSARY"
In the following sections, some terminology may be foreign to you or used 
with meaning specific to Portage.  Please see the referenced manpages for 
more detailed explanations.
.RS
.TP
.B DEPEND atom
A string which matches a package.  It is of the form category/package.  
It may also contain optional logical operators and versions.
.br
More reading: 
.BR ebuild (5)
.TP
.B KEYWORD
Each architecture has a unique KEYWORD.
.br
More reading: 
.BR ebuild (5)
.TP
.B virtual
A DEPEND atom that is part of the "virtual" category.  They are used 
when different packages can satisfy a dependency and only one of them is 
needed.
.br
More reading: 
.BR ebuild (5)
.RE
.SH "SPECIFIC FILE DESCRIPTIONS"
.TP
.BR /etc/
.RS
.TP
.BR make.globals
The global default settings for Portage.  This comes from the portage package 
itself.  Settings in \fBmake.conf\fR override values here.  The format 
is described extensivly in \fBmake.conf\fR(5).
.TP
.BR make.conf
The global custom settings for Portage.  See \fBmake.conf\fR(5).
.RE
.TP
.BR /etc/make.profile/
This is usually just a symlink to the correct profile in 
\fB/usr/portage/profiles/\fR.  Since it is part of the portage tree, it 
may easily be updated/regenerated by running `emerge \-\-sync`.  It defines 
what a profile is (usually arch specific stuff).  If you need a custom 
profile, then you should make your own \fB/etc/make.profile/\fR 
directory and populate it.  However, if you just wish to override some 
settings, do NOT edit these files because they WILL be lost with the 
next `emerge \-\-sync`.  See the section below on \fB/etc/portage/\fR for 
overriding.
.RS
.TP
.BR deprecated
The existence of this file marks a profile as deprecated, meaning it is 
not supported by Gentoo anymore.  The first line must be the profile to which 
users are encouraged to upgrade, optionally followed by some instructions 
explaining how they can upgrade.

.I Example:
.nf
default-linux/x86/2005.0
# emerge -n '>=sys-apps/portage-2.0.51'
# rm -f /etc/make.profile
# ln -s /usr/portage/profiles/default-linux/alpha/2005.0 /etc/make.profile
.fi
.TP
.BR make.defaults
The profile default settings for Portage.  The general format is described 
in \fBmake.conf\fR(5).  The \fImake.defaults\fR for your profile defines a 
few specific variables too:

.PD 0
.RS
.TP
.BR ARCH
Architecture type (x86/ppc/hppa/etc...).
.TP
.B USERLAND = \fI"GNU"\fR
Support BSD/cygwin/etc...
.TP
.B PORTAGE_LIBC = \fI"glibc"\fR
Support uClibc/BSD libc/etc...
.TP
.BR PROFILE_ARCH
Distinguish machines classes that have the same \fBARCH\fR.  All sparc 
machines have ARCH=sparc but set this to either 'sparc32' or 'sparc64'.
.TP
.BR STAGE1_USE
Special USE flags which may be needed when bootstrapping from stage1 to stage2.
.TP
.BR GRP_STAGE23_USE
Special USE flags used by catalyst for building a stage3 and GRP sets.
.RE
.PD 1
.TP
.BR packages
This file serves two purposes.  The first is to mask out specific 
packages/versions on a per\-profile basis.  The second is to provide the 
list of packages that compose the special \fIsystem\fR set.

.I Format:
.nf
\- comments begin with #
\- one DEPEND atom per line of what to mask OUT
\- packages to be added to the system set begin with a *
.fi
.I Note:
In a cascading profile setup, you can remove packages in children 
profiles which were added by parent profiles by prefixing the atom with 
a '\-'.

.I Example:
.nf
# i am a comment !
# only allow versions of glibc less than 2.3
<sys\-libs/glibc\-2.3
# add any version of bash to the system set
*app\-shells/bash
# only allow versions of readline earlier than 4.2
# and add it to the system set
*<sys\-libs/readline\-4.2
.fi
.TP
.BR packages.build
A list of packages (one per line) that make up a stage1 tarball.  Really only 
useful for stage builders.
.TP
.BR package.provided
A list of packages (one per line) that portage should assume have been 
provided.  Useful for porting to non-Linux systems.  Portage will not 
attempt to update a package that is listed here unless another package 
explicitly requires a version that is newer than what has been listed.  
Basically, it's a list that replaces the \fBemerge \-\-inject\fR syntax.

For example, if you manage your own copy of a 2.6 kernel, then you can 
tell portage that 'sys-kernel/development-sources-2.6.7' is already taken 
care of and it should get off your back about it.

.I Format:
.nf
\- comments begin with #
\- one DEPEND atom per line
\- relational operators are not allowed
\- must include a version
.fi

.I Example:
.nf
# you take care of the kernel
sys-kernel/development-sources-2.6.7

# you installed your own special copy of QT
x11-libs/qt-3.3.0

# you have modular X but packages want monolithic
x11-base/xorg-x11-6.8
.fi
.TP
.BR parent
This contains a path to the parent profile.  It may be either relative or 
absolute.  The paths will be relative to the location of the profile.  Most 
commonly this file contains '..' to indicate the directory above.  Utilized 
only in cascading profiles.
.TP
.BR profile.bashrc
If needed, this file can be used to set up a special environment for ebuilds,
different from the standard root environment.  The syntax is the same as for
any other bash script.
.TP
.BR use.defaults
Here we DO NOT define the default USE flags, but the so\-called auto\-USE 
flags.  This rather unknown portage feature activates a USE flag if a 
specific package is installed and the flag was not explicitly 
deactivated.  This file contains the associations between USE flags and 
packages that trigger the auto\-USE feature.  

In other words, if we never put "sdl" or "\-sdl" into our USE, but we 
have media\-libs/libsdl emerged, then portage automagically sticks "sdl" 
into our USE for us.

.I Format:
.nf
\- comments begin with #
\- one USE flag per line with a list of DEPEND atom bases
.fi

.I Example:
.nf
# media\-libs/libsdl will activate "sdl"
sdl        media\-libs/libsdl
# activate tcltk only if we have both 
# dev\-lang/tcl and dev\-lang/tk
tcltk      dev\-lang/tcl   dev\-lang/tk
.fi
.TP
.BR use.mask
Some USE flags don't make sense on some archs (for example altivec on 
non\-ppc or mmx on non\-x86), or haven't yet been tested.  Here we list 
the masked ones.

.I Note:
In a cascading profile setup, you can remove USE flags in children 
profiles which were added by parent profiles by prefixing the flag with 
a '\-'.

.I Format:
.nf
\- comments begin with #
\- one USE flag per line
.fi
.TP
.BR virtuals
This controls what packages will provide a virtual by default.  For example, 
if a package needs to send e\-mail, it will need virtual/mta.  In the absence 
of a package that provides virtual/mta (like qmail, sendmail, postfix, etc...), 
portage will look here to see what package to use.  In this case, Gentoo uses 
net\-mail/ssmtp as the default (as defined in the virtuals file) because it's 
the package that does the very bare minimum to send e\-mail.

.I Format:
.nf
\- comments begin with #
\- one virtual and DEPEND atom base pair per line
.fi

.I Example:
.nf
# use net\-mail/ssmtp as the default mta
virtual/mta           net\-mail/ssmtp
# use app\-dicts/aspell\-en as the default dictionary
virtual/aspell\-dict   app\-dicts/aspell\-en
.fi
.RE
.TP
.BR /etc/portage/
.RS
.TP
.BR bashrc
If needed, this file can be used to set up a special environment for ebuilds,
different from the standard root environment.  The syntax is the same as for
any other bash script.

.TP
.BR modules
This file can be used to override the metadata cache implementation.  In
practice, portdbapi.auxdbmodule is the only variable that the user will want to
override.

.I Example:
.nf
portdbapi.auxdbmodule = cache.metadata_overlay.database
.fi

The metadata_overlay cache module makes it possible to disable
FEATURES="metadata-transfer" in \fBmake.conf\fR(5).  When the user initially
enables metadata_overlay in /etc/portage/modules, all of the cache files
contained in /var/cache/edb/dep/${PORTDIR} must be manually removed in order
to avoid unecessary cache regeneration.  In addition, users of the
metadata_overlay module must never modify eclasses in ${PORTDIR} because
portage will not be able to detect that cache regeneration is necessary.  If
the user would like to modify eclasses, it is safe to use metadata_overlay
together with PORTDIR_OVERLAY in \fBmake.conf\fR.

.TP
.BR package.mask
A list of package atoms to mask.  Useful if specific versions of packages do
not work well for you.  For example, you swear by the Nvidia drivers, but only
versions earlier than 1.0.4496.  No problem!

.I Format:
.nf
\- comments begin with #
\- one DEPEND atom per line
.fi

.I Example:
.nf
# mask out versions 1.0.4496 of the nvidia
# drivers and later
>=media\-video/nvidia\-kernel\-1.0.4496
>=media\-video/nvidia\-glx\-1.0.4496
.fi
.TP
.BR package.unmask
Just like package.mask above, except here you list packages you want to 
unmask.  Useful for overriding the global package.mask file (see 
below).  Note that this does not override packages that are masked via 
KEYWORDS.
.TP
.BR package.keywords
Per\-package KEYWORDS.  Useful for mixing unstable packages in with a normally 
stable machine or vice versa.  This will allow you to augment ACCEPT_KEYWORDS 
for a single package.

.nf
\fINote:\fR There are two special KEYWORDS to help out here:
\fB*\fR  Match any stable KEYWORD
\fB~*\fR Match any unstable KEYWORD

.I Format:
\- comments begin with #
\- one DEPEND atom per line followed by additional KEYWORDS
\- lines without any KEYWORDS imply unstable host arch

.I Example:
# always use unstable libgd
media\-libs/libgd ~x86
# only use stable mplayer
media\-video/mplayer \-~x86
# always use unstable netcat
net-analyzer/netcat
.fi

.I Additional Note:
If you encounter the \fB-*\fR KEYWORD, this indicates that the package is known 
to be broken on all systems which are not otherwise listed in KEYWORDS.  For 
example, a binary only package which is built for x86 will look like:

games-fps/quake3-demo-1.11.ebuild:KEYWORDS="-* x86"

If you wish to accept this package anyways, then add \fB-*\fR to your 
package.keywords like this:

games-fps/quake3-demo -*
.TP
.BR package.use
Per\-package USE flags.  Useful for tracking local USE flags or for 
enabling USE flags for certain packages only.  Perhaps you develop GTK 
and thus you want documentation for it, but you don't want 
documentation for QT.  Easy as pie my friend!

.I Format:
.nf
\- comments begin with #
\- one DEPEND atom per line with space-delimited USE flags
.fi

.I Example:
.nf
# turn on docs for GTK 2.x
=x11\-libs/gtk+\-2* doc
# disable mysql support for QT
x11\-libs/qt \-mysql
.fi
.TP
.BR mirrors
Whenever portage encounters a mirror:// style URL it will look up the actual 
hosts here.  If the mirror set is not found here, it will check the global 
mirrors file at /usr/portage/profiles/thirdpartymirrors.  You may also set a 
special mirror type called "local".  This list of mirrors will be checked 
before GENTOO_MIRRORS and will be used even if the package has 
RESTRICT="mirror".

.I Format:
.nf
\- comments begin with #
\- mirror type followed by a list of hosts
.fi

.I Example:
.nf
# local private mirrors used only by my company
local ftp://192.168.0.3/mirrors/gentoo http://192.168.0.4/distfiles

# people in japan would want to use the japanese mirror first
sourceforge http://keihanna.dl.sourceforge.net/sourceforge

# people in tawain would want to use the local gnu mirror first
gnu ftp://ftp.nctu.edu.tw/UNIX/gnu/
.fi
.TP
.BR categories
A simple list of valid categories that may be used in /usr/portage, 
PORTDIR_OVERLAY, and PKGDIR (see \fBmake.conf\fR(5)).  This allows for custom 
categories to be created.

.I Format:
.nf
\- one category per line
.fi

.I Example:
.nf
app\-hackers
media\-other
.fi
.RE
.TP
.BR /usr/portage/profiles/
Global Gentoo settings that are controlled by the developers.  To override 
these settings, you can use the files in \fB/etc/portage/\fR.
.RS
.TP
.BR arch.list
A list of all valid KEYWORDS.  This does not include modifiers.

.I Format:
.nf
\- one KEYWORD per line
.fi

.I Example:
.nf
x86
ppc
sparc
.fi
.TP
.BR categories
A simple list of valid categories that may be used in /usr/portage, 
PORTDIR_OVERLAY, and PKGDIR (see \fBmake.conf\fR(5)).

.I Format:
.nf
\- one category per line
.fi

.I Example:
.nf
app\-admin
dev\-lang
games\-strategy
sys\-kernel
.fi
.TP
.BR info_pkgs
A list of all the packages which will be displayed when you run `emerge info`.
.TP
.BR info_vars
A list of all the variables which will be displayed when you run `emerge info`.
.TP
.BR package.mask
This contains a list of DEPEND atoms for packages that should not be installed 
in any profile.  Useful for adding the latest KDE betas and making sure no 
one accidentally upgrades to them.  Also useful for quickly masking specific 
versions due to security issues.  ALWAYS include a comment explaining WHY the 
package has been masked and WHO is doing the masking.

.I Format:
.nf
\- comments begin with #
\- one DEPEND atom per line
.fi

.I Example:
.nf
# masked for security reasons
<sys\-libs/zlib\-1.1.4
# <caleb@gentoo.org> (10 Sep 2003)
# new kde betas
=kde\-base/kde\-3.2.0_beta1
=kde\-base/kdeaccessibility\-3.2.0_beta1
.fi
.TP
.BR profiles.desc
List all the current stable and development profiles.  If a profile is listed 
here, then it will be checked by repoman.  At the moment, only 1 profile is 
allowed per stable/dev/KEYWORD; the last one found is the last one used.

.I Format:
.nf
\- comments begin with #
\- one profile list per line in format: arch dir status
\- arch must be listed in arch.list
\- dir is relative to profiles.desc
\- status must be 'stable' or 'dev'
.fi

.I Example:
.nf
alpha default-linux/alpha/2004.3 stable
m68k  default-linux/m68k         dev
x86   default-linux/x86/2004.3   stable
.fi
.TP
.BR thirdpartymirrors
Controls the mapping of mirror:// style URLs to actual lists of 
mirrors.  Keeps us from overloading a single server.

.I Format:
.nf
\- comments begin with #
\- mirror type followed by a list of hosts
.fi

.I Example:
.nf
sourceforge http://aleron.dl.sourceforge.net/sourceforge http://unc.dl.sourceforge.net/sourceforge

gentoo http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/ ftp://ftp.gtlib.cc.gatech.edu/pub/gentoo/distfiles

kernel http://www.kernel.org/pub http://www.us.kernel.org/pub
.fi
.TP
.BR use.desc
All global USE flags must be listed here with a description of what they do.  

.I Format:
.nf
\- comments begin with #
\- use flag \- some description
.fi

.I Example:
.nf
3dfx \- Adds support for 3dfx video cards
acl \- Adds support for Access Control Lists
doc \- Adds extra documentation
.fi
.TP
.BR use.local.desc
All local USE flags must be listed here along with the package and a 
description.

.nf
.I Format:
\- comments begin with #
\- package:use flag \- description

.I Example:
app\-editors/nano:justify \- Toggles the justify option
dev\-libs/DirectFB:fusion \- Adds Multi Application support
games\-emulation/xmess:net \- Adds network support
.fi
.RE
.TP
.BR /var/lib/portage/
.RS
.TP
.BR world
Every time you emerge a package, the package that you requested is 
recorded here.  Then when you run `emerge world \-up`, the list of 
packages is read from this file.  Note that this does not mean that the 
packages that were installed as dependencies are listed here.  For 
example, if you run `emerge mod_php` and you do not have apache 
already, then "dev\-php/mod_php" is recorded in the world file but 
"net\-www/apache" is not.  For more information, review \fBemerge\fR(1).

.I Format:
.nf
\- one DEPEND atom base per line
.fi

.I Example:
.nf
games\-misc/fortune\-mod\-gentoo\-dev
dev\-libs/uclibc
app\-cdr/cdemu
.fi
.RE
.SH "REPORTING BUGS"
Please report bugs via http://bugs.gentoo.org/
.SH "AUTHORS"
.nf
Marius Mauch <genone@gentoo.org>
Mike Frysinger <vapier@gentoo.org>
Drake Wyrm <wyrm@haell.com>
.fi
.SH "SEE ALSO"
.BR emerge (1),
.BR ebuild (1),
.BR ebuild (5),
.BR make.conf (5)
