.TH "PORTAGE" "5" "Apr 2018" "Portage VERSION" "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
https://wiki.gentoo.org/wiki/Profile_(Portage)
.IP Note:
If you are looking for information on how to emerge something, please see
.BR emerge (1).
.SH "SYNOPSIS"
.TP
\fB/etc/portage/make.profile/\fR or \fB/etc/make.profile/\fR
site\-specific overrides go in \fB/etc/portage/profile/\fR
.nf
deprecated
eapi
make.defaults
packages
packages.build
package.accept_keywords
package.bashrc
package.keywords
package.mask
package.provided
package.unmask
package.use
package.use.force
package.use.mask
package.use.stable.force
package.use.stable.mask
parent
profile.bashrc
soname.provided
use.force
use.mask
use.stable.mask
use.stable.force
virtuals
.fi
.TP
.BR /etc/portage/
.nf
bashrc
categories
color.map
license_groups
.BR make.conf (5)
mirrors
modules
package.accept_keywords
package.accept_restrict
package.env
package.keywords
package.license
package.mask
package.properties
package.unmask
package.use
postsync.d
repo.postsync.d
repos.conf
sets.conf
.fi
.TP
.BR /etc/portage/env/
package-specific bashrc files
.TP
.BR /etc/portage/profile/
site-specific overrides of \fB/etc/portage/make.profile/\fR
.TP
.BR /etc/portage/sets/
user\-defined package sets
.TP
.BR /usr/portage/
.nf
sets.conf
.fi
.TP
.BR /usr/portage/metadata/
.nf
layout.conf
pkg_desc_index
.fi
.TP
.BR /usr/portage/profiles/
.nf
arch.list
categories
info_pkgs
info_vars
license_groups
make.defaults
package.mask
package.unmask
package.use
package.use.force
package.use.mask
package.use.stable.force
package.use.stable.mask
profiles.desc
repo_name
thirdpartymirrors
use.desc
use.force
use.local.desc
use.mask
use.stable.mask
use.stable.force
.fi
.TP
.BR /usr/share/portage/config/
.nf
make.globals
repos.conf
sets
.fi
.TP
.BR /var/cache/edb/
misc internal cache files
.TP
.BR /var/db/pkg/
database to track installed packages
.TP
.BR /var/lib/portage/
.nf
config
world
world_sets
.fi
.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
An atom is either of the form category/package or consists of an operator
followed by category/package followed by a hyphen and a version specification.
An atom might be suffixed by a slot specification.
.br
More reading:
.BR ebuild (5)

.B Extended Atom Syntax
.br
The following atom syntax extensions are only supported in user
configuration files and command line arguments for programs such as
\fBemerge\fR(1):
.RS
.TP
.B Repository Constraints
Atoms with repository constraints have a '::' separator appended to the
right side, followed by a repository name. Each repository name should
correspond to the value of a \fBrepo_name\fR entry from one of the
repositories that is configured in \fBrepos.conf\fR file.

.I Examples:
.nf
# match sed from the 'gentoo' repository
sys\-apps/sed::gentoo
# match kdelibs from the 'kde\-testing' repository
kde\-base/kdelibs::kde\-testing
# match empathy from the 'gnome' repository
net\-im/empathy::gnome
.fi
.TP
.B Wildcard Patterns
Atoms containing wildcard patterns are of the form category/package, where
the special '*' wildcard character substitutes for an arbitrary number
of normal characters. More than one '*' character is allowed, but not two
next to each other.

.I Examples:
.nf
# match anything with a version containing 9999, which can be used in
# package.mask to prevent emerge --autounmask from selecting live ebuilds
=*/*-*9999*
# match anything with a version containing _beta
=*/*-*_beta*
# match anything from the 'sys\-apps' category
sys\-apps/*
# match packages named 'zlib' from any category
*/zlib
# match any package from a category that begins with 'net\-'
net\-*/*
# match any package name from any category
*/*
# match any package from the 'gentoo' repository
*/*::gentoo
.fi
.RE
.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
\fB/etc/portage/make.profile/\fR or \fB/etc/make.profile/\fR
This is usually just a symlink to the correct profile in
\fB/usr/portage/profiles/\fR.  Since it is part of the ebuild repository, 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 \fBmake.profile\fR
directory and populate it.  However, if you just wish to override some
settings, use \fB/etc/portage/profile/\fR (it supports all of the same file
types that \fBmake.profile\fR does, except parent). Do NOT edit the
settings in \fBmake.profile\fR because they WILL be lost with the next
`emerge \-\-sync`. If both \fB/etc/portage/make.profile/\fR and
\fB/etc/make.profile/\fR exist, then \fB/etc/portage/make.profile/\fR
will be preferred.

Any file in this directory, directories of other profiles or top-level
"profiles" directory that begins with "package." or "use." can be more than
just a flat file.  If it is a directory, then all the files in that directory
will be sorted in ascending alphabetical order by file name and summed together
as if it were a single file. Note that this behavior is only supported since
portage-2.1.6.7, and it is not included in PMS at this time.

.I Example:
.nf
${repository_location}/profiles/package.mask/removals
${repository_location}/profiles/package.mask/testing
.fi
.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/portage/make.profile
# ln -s /usr/portage/profiles/default-linux/alpha/2005.0 \
/etc/portage/make.profile
.fi
.TP
.BR eapi
The first line of this file specifies the \fBEAPI\fR to which files in the
same directory conform. See \fBebuild\fR(5) for information about \fBEAPI\fR
and related features. Beginning with \fBEAPI 5\fR, new USE
configuration files are supported: use.stable.mask,
use.stable.force, package.use.stable.mask and
package.use.stable.force. These files behave similarly to
previously supported USE configuration files, except that they
only influence packages that are merged due to a stable keyword.

If the eapi file does not exist, then the \fBEAPI\fR defaults to
\fI0\fR unless the default has been overridden by a
profile_eapi_when_unspecified setting inside \fImetadata/layout.conf\fR
of the containing repository.
.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
\fBIUSE_IMPLICIT\fR = \fI[space delimited list of USE flags]\fR
Defines implicit \fBIUSE\fR for ebuilds using \fBEAPI 5\fR or
later. Flags that come from \fBUSE_EXPAND\fR or
\fBUSE_EXPAND_UNPREFIXED\fR variables do not belong in
\fBIUSE_IMPLICIT\fR, since \fBUSE_EXPAND_VALUES_*\fR variables
are used to define implicit \fBIUSE\fR for those flags. See
\fBebuild\fR(5) for more information about \fBIUSE\fR.
.TP
.B USERLAND = \fI"GNU"\fR
Support BSD/cygwin/etc...
.TP
\fBUSE_EXPAND\fR = \fI[space delimited list of variable names]\fR
Any variable listed here will be used to augment USE by inserting a new flag
for every value in that variable, so USE_EXPAND="FOO" and FOO="bar bla" results
in USE="foo_bar foo_bla".
.TP
\fBUSE_EXPAND_HIDDEN\fR = \fI[space delimited list of variable names]\fR
Names of \fBUSE_EXPAND\fR variables that should not be shown in the verbose
merge list output of the \fBemerge\fR(1) command.
.TP
\fBUSE_EXPAND_IMPLICIT\fR = \fI[space delimited list of variable names]\fR
Defines \fBUSE_EXPAND\fR and \fBUSE_EXPAND_UNPREFIXED\fR
variables for which the corresponding USE flags may have
implicit \fBIUSE\fR for ebuilds using \fBEAPI 5\fR or later.
.TP
\fBUSE_EXPAND_UNPREFIXED\fR = \fI[space delimited list of variable names]\fR
Any variable listed here will be used to augment USE by
inserting a new flag for every value in that variable, so
USE_EXPAND_UNPREFIXED="FOO" and FOO="bar bla" results in
USE="bar bla".
.TP
\fBUSE_EXPAND_VALUES_ARCH\fR = \fI[space delimited list of ARCH values]\fR
Defines ARCH values used to generate implicit
\fBIUSE\fR for ebuilds using \fBEAPI 5\fR or later.
.TP
\fBUSE_EXPAND_VALUES_ELIBC\fR = \fI[space delimited list of ELIBC values]\fR
Defines ELIBC values used to generate implicit
\fBIUSE\fR for ebuilds using \fBEAPI 5\fR or later.
.TP
\fBUSE_EXPAND_VALUES_KERNEL\fR = \fI[space delimited list of KERNEL values]\fR
Defines KERNEL values used to generate implicit
\fBIUSE\fR for ebuilds using \fBEAPI 5\fR or later.
.TP
\fBUSE_EXPAND_VALUES_USERLAND\fR = \fI[space delimited list of USERLAND \
values]\fR
Defines USERLAND values used to generate implicit
\fBIUSE\fR for ebuilds using \fBEAPI 5\fR or later.
.TP
.B ELIBC = \fI"glibc"\fR
Support uClibc/BSD libc/etc...
.TP
.B PROFILE_ONLY_VARIABLES = \fI"ARCH"\fR
Prevent critical variables from being changed by the user in make.conf
or the env.
.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 BOOTSTRAP_USE
Special USE flags which may be needed when bootstrapping from stage1 to stage2.
.RE
.PD 1
.TP
.BR packages
Provides the list of packages that compose the \fI@system\fR and
\fI@profile\fR  package sets. The motivation to have \fI@profile\fR
separate from \fI@system\fR is that \fI@system\fR packages may have
incomplete dependency specifications (due to long-standing Gentoo
policy), and incomplete dependency specifications have deleterious
effects on the ability of \fBemerge\fR to parallelize builds. So,
unlike \fI@system\fR, packages included in \fI@profile\fR do not
hurt \fBemerge\fR's ability to parallelize.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- one DEPEND atom per line
\- packages to be added to the @system set begin with a *
\- packages to be added to the @profile set do not begin with a *
\- packages may only be added to the @profile set if the containing
  repository's layout.conf has 'profile-set' listed in the
  profile-formats field. Otherwise, packages that do not begin with
  '*' will simply be ignored for legacy reasons
.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 '\-'. The '\-*' wildcard discards all @system and @profile packages
added by parent profiles.

.I Example:
.nf
# i am a comment !
# pull a version of glibc less than 2.3 into @system
*<sys\-libs/glibc\-2.3
# pull any version of bash into @system
*app\-shells/bash
# pull a version of readline earlier than 4.2 into @system
*<sys\-libs/readline\-4.2
# pull vim into @profile
app-editors/vim
.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.bashrc
Per-package bashrc mechanism.  Contains a list of bashrc files to be sourced
before emerging a given atom.  The bashrc files must be stored in bashrc/, in
the profile directory.

.I Note:
.nf
\- The bashrc files will be sourced after profile.bashrc for the same profile.
\- profile-formats in metadata/layout.conf must contain profile-bashrcs for this
to be enabled.
.fi

.I Format:
.nf
\- comments begin with # (no inline comments).
\- one atom per line with space-delimited list of bashrc files.
.fi

.I Example:
.nf
# By setting INSTALL_MASK in bashrc/nostandardconf.conf, we can avoid installing
# the standard configuration and enable another package to install it.
net-misc/dhcp nostardardconf.conf
.fi
.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. 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.

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. Dependencies that are satisfied by package.provided
entries may cause installed packages satisfying equivalent dependencies
to be removed by \fBemerge\fR(1) \fB\-\-depclean\fR actions (see the
\fBACTIONS\fR section of the \fBemerge\fR(1) man page for more information).

.I Format:
.nf
\- comments begin with # (no inline comments)
\- 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
\fBpackage.use.force\fR and \fBpackage.use.stable.force\fR
Per\-package USE flag forcing.

.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 # (no inline comments)
\- one DEPEND atom per line with space-delimited USE flags
.fi

.I Example:
.nf
# force docs for GTK 2.x
=x11\-libs/gtk+\-2* doc
# unforce mysql support for QT
x11\-libs/qt \-mysql
.fi
.TP
\fBpackage.use.mask\fR and \fBpackage.use.stable.mask\fR
Per\-package USE flag masks.

.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 # (no inline comments)
\- one DEPEND atom per line with space-delimited USE flags
.fi

.I Example:
.nf
# mask docs for GTK 2.x
=x11\-libs/gtk+\-2* doc
# unmask mysql support for QT
x11\-libs/qt \-mysql
.fi
.TP
.BR parent
This contains paths to the parent profiles (one per line).  They may be either
relative (to the location of the profile) or absolute.  Most commonly this file
contains '..' to indicate the directory above.  Utilized only in cascading
profiles.

When multiple parent profiles are specified, they are inherited in order from
the first line to the last.

If \fBlayout.conf\fR is new enough, you can also use the <repo>:<path>
syntax.  The <repo> is the same string as is stored in the \fBrepo_name\fR
file (or omitted to refer to the current repo), and <path> is a subdir starting
at 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 soname.provided
A list of sonames that portage should assume have been provided. This
is useful for using portage to install binary packages on top of a base
image which lacks /var/db/pkg for some reason (perhaps the image was
assembled by another package manager, or by Linux From Scratch).

.I Format:
.nf
\- comments begin with # (no inline comments)
\- line begins with a multilib category
\- multilib category is followed by one or more sonames
\- only one multilib category is allowed per line
\- prefixing an soname with a '\-' will negate a parent profile setting
.fi

.I Example:
.nf
# provide libc and ld-linux sonames for x86_32 and x86_64 categories
x86_32 ld-linux.so.2 libc.so.6
x86_64 ld-linux-x86-64.so.2 libc.so.6
.fi
.TP
\fBuse.force\fR and \fBuse.stable.force\fR
Some USE flags don't make sense to disable under certain conditions.  Here we
list forced flags.

.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 # (no inline comments)
\- one USE flag per line
.fi
.TP
\fBuse.mask\fR and \fBuse.stable.mask\fR
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 # (no inline comments)
\- one USE flag per line
.fi

.I Example:
.nf
# mask doc
doc
# unmask mysql
\-mysql
.fi
.TP
.BR virtuals
The virtuals file controls default preferences for virtuals that
are defined via the \fBPROVIDE\fR ebuild variable (see
\fBebuild\fR(5)). Since Gentoo now uses \fBGLEP 37\fR virtuals
instead of \fBPROVIDE\fR virtuals, the virtuals file is
irrelevant for all Gentoo ebuilds. However, it is still possible
for third\-parties to distribute ebuilds that make use of
\fBPROVIDE\fR.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- 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/
Files in this directory including make.conf, repos.conf, and any file
with a name that begins with "package." can be
more than just a flat file.  If it is a directory, then all the files in that
directory will be sorted in ascending alphabetical order by file name and summed
together as if it were a single file.

.I Example:
.nf
/etc/portage/package.accept_keywords/common
/etc/portage/package.accept_keywords/e17
/etc/portage/package.accept_keywords/kde
.fi
.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.

Additional package-specific bashrc files can be created in /etc/portage/env.
.TP
.BR categories
A simple list of valid categories that may be used in repositories 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
.TP
.BR color.map
Contains variables customizing colors. See \fBcolor.map\fR(5).
.TP
.BR make.conf
The global custom settings for Portage. See \fBmake.conf\fR(5).
.TP
.BR mirrors
Whenever portage encounters a mirror:// style URI 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" or RESTRICT="fetch".

.I Format:
.nf
\- comments begin with # (no inline comments)
\- 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 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 = portage.cache.sqlite.database
.fi

After changing the portdbapi.auxdbmodule setting, it may be necessary to
transfer or regenerate metadata cache. Users of the rsync tree need to
run `emerge \-\-metadata` if they have enabled FEATURES="metadata-transfer"
in \fBmake.conf\fR(5). In order to regenerate metadata for repositories
not distributing pregenerated metadata cache, run `emerge \-\-regen`
(see \fBemerge\fR(1)). If you use something like the sqlite module and want
to keep all metadata in that format alone (useful for querying), enable
FEATURES="metadata-transfer" in \fBmake.conf\fR(5).
.TP
\fBpackage.accept_keywords\fR and \fBpackage.keywords\fR
Per\-package ACCEPT_KEYWORDS.  Useful for mixing unstable packages in with a
normally stable system or vice versa.  This will allow ACCEPT_KEYWORDS to be
augmented for a single package. If both \fBpackage.accept_keywords\fR and
\fBpackage.keywords\fR are present, both of them will be used, and values
from \fBpackage.accept_keywords\fR will override values from
\fBpackage.keywords\fR. The \fBpackage.accept_keywords\fR file is
intended to replace the \fBpackage.keywords\fR file, since
profiles support a different form of \fBpackage.keywords\fR which
modifies effective KEYWORDS (rather than ACCEPT_KEYWORDS).

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- 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 Note:
.fi
In addition to the normal values from ACCEPT_KEYWORDS package.keywords supports
three special tokens:

.nf
\fB*\fR  package is visible if it is stable on any architecture
\fB~*\fR package is visible if it is in testing on any architecture
\fB**\fR package is always visible (KEYWORDS are ignored completely)
.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 use one of the other keywords
in your package.accept_keywords like this:

games-fps/quake3-demo x86

.TP
.BR package.accept_restrict
This will allow ACCEPT_RESTRICT (see \fBmake.conf\fR(5)) to be augmented for a
single package.

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- one DEPEND atom per line followed by additional RESTRICT tokens
.fi
.TP
.BR package.env
Per\-package environment variable settings. Entries refer to
environment files that are placed in the \fB/etc/portage/env/\fR
directory and have the same format as \fBmake.conf\fR(5). Note that these
files are interpreted much earlier than the package\-specific \fIbashrc\fR
files which are described in a later section about \fB/etc/portage/env/\fR.
Beginners should be careful to recognize the difference between these two types
of files. When environment variable settings are all that's needed,
\fBpackage.env\fR is the recommended approach to use.

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- one DEPEND atom per line followed by name(s) of environment file(s)
.fi

.I Example:
.nf
# use environment variables from /etc/portage/env/glibc.conf for the glibc \
package
sys\-libs/glibc glibc.conf
.fi

.TP
.BR package.license
This will allow ACCEPT_LICENSE (see \fBmake.conf\fR(5)) to be augmented for a
single package.

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- one DEPEND atom per line followed by additional licenses or groups
.fi
.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
\- comment lines begin with # (no inline comments)
\- 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.properties
This will allow ACCEPT_PROPERTIES (see \fBmake.conf\fR(5)) to be augmented for
a single package.

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- one DEPEND atom per line followed by additional properties
.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
above).  Note that this does not override packages that are masked via
KEYWORDS.
.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 # (no inline comments)
\- one DEPEND atom per line with space-delimited USE flags
\- USE flags can be prefixed with USE_EXPAND name followed by a colon (:)
and a space. In this case, all the names following it are treated
as values for the USE_EXPAND. Note that if you need to remove earlier
assignments or defaults, you need to explicitly specify '\-*'.
.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
# set preferred video card for all packages
*/* VIDEO_CARDS: \-* radeon
.fi
.TP
.BR postsync.d/
This directory is for user supplied postsync hooks to be run once after all
repositories have been synced.  Each script is called in alphabetic order
without any arguments.
.fi
.TP
.BR repo.postsync.d/
This directory is for user supplied postsync hooks to be run once after each
repository has been synced.  Each script is called in alphabetic order
with three arguments.

.I args:
        repository name, sync-uri, location
.fi

Using this information it is possible for hooks to be run for only a certain
repository.  This way other update actions can be performed for that repository
only.
.fi
.TP
.BR repos.conf
Specifies \fIsite\-specific\fR repository configuration information.
.br
Configuration specified in \fBrepos.conf\fR can be overriden by \fBPORTAGE_REPOSITORIES\fR
environmental variable, which has the same format as \fBrepos.conf\fR.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- configuration of each repository is specified in a section starting with \
"[${repository_name}]"
\- attributes are specified in "${attribute} = ${value}" format
.fi

.I Attributes supported in DEFAULT section:
.RS
.RS
.TP
.B main\-repo
Specifies main repository.
.TP
.B eclass\-overrides
Makes all repositories inherit eclasses from specified repositories.
.br
Setting this attribute is generally not recommended since resulting changes
in eclass inheritance may trigger performance issues due to invalidation
of metadata cache.
.br
When 'force = eclass\-overrides' attribute is not set, \fBegencache\fR(1),
\fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore this attribute,
since operations performed by these tools are inherently
\fBnot\fR \fIsite\-specific\fR.
.TP
.B force
Specifies names of attributes, which should be forcefully respected by
\fBegencache\fR(1), \fBemirrordist\fR(1) and \fBrepoman\fR(1).
.br
Valid values: aliases, eclass\-overrides, masters
.RE

.I Attributes supported in sections of repositories:
.RS
.TP
.B aliases
Specifies aliases of given repository.
.br
Setting this attribute is generally not recommended since resulting changes
in eclass inheritance may trigger performance issues due to invalidation
of metadata cache.
.br
When 'force = aliases' attribute is not set, \fBegencache\fR(1),
\fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore this attribute,
since operations performed by these tools are inherently
\fBnot\fR \fIsite\-specific\fR.
.TP
.B auto\-sync
This setting determines if the repo will be synced during "\fBemerge \-\-sync\fR" or
"\fBemaint sync \-\-auto\fR" runs.  This allows for repositories to be synced only when
desired via "\fBemaint sync \-\-repo foo\fR".
.br
Valid values: yes, no, true, false.
.br
If unset, the repo will be treated as set
yes, true.
.TP
.B clone\-depth
Specifies clone depth to use for DVCS repositories. Defaults to 1 (only
the newest commit). If set to 0, the depth is unlimited.
.TP
.B eclass\-overrides
Makes given repository inherit eclasses from specified repositories.
.br
Setting this attribute is generally not recommended since resulting changes
in eclass inheritance may trigger performance issues due to invalidation
of metadata cache.
.br
When 'force = eclass\-overrides' attribute is not set, \fBegencache\fR(1),
\fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore this attribute,
since operations performed by these tools are inherently
\fBnot\fR \fIsite\-specific\fR.
.TP
.B force
Specifies names of attributes, which should be forcefully respected by
\fBegencache\fR(1), \fBemirrordist\fR(1) and \fBrepoman\fR(1).
.br
Valid values: aliases, eclass\-overrides, masters
.TP
.B location
Specifies location of given repository.
.TP
.B masters
Specifies master repositories of given repository.
.br
Setting this attribute is generally not recommended since resulting changes
in eclass inheritance may trigger performance issues due to invalidation
of metadata cache.
.br
When 'force = masters' attribute is not set, \fBegencache\fR(1),
\fBemirrordist\fR(1) and \fBrepoman\fR(1) ignore this attribute,
since operations performed by these tools are inherently
\fBnot\fR \fIsite\-specific\fR.
.TP
.B priority
Specifies priority of given repository.
.TP
.B strict\-misc\-digests
This setting determines whether digests are checked for files declared
in the Manifest with MISC type (includes ChangeLog and metadata.xml
files). Defaults to true.
.br
Valid values: true, false.
.TP
.B sync\-allow\-hardlinks = yes|no
Allow sync plugins to use hardlinks in order to ensure that a repository
remains in a valid state if something goes wrong during the sync operation.
For example, if signature verification fails during a sync operation,
the previous state of the repository will be preserved. This option may
conflict with configurations that restrict the use of hardlinks, such as
overlay filesystems.
.TP
.B sync\-cvs\-repo
Specifies CVS repository.
.TP
.B sync\-depth
Specifies sync depth to use for DVCS repositories. If set to 0, the
depth is unlimited. Defaults to 0.
.TP
.B sync\-git\-clone\-env
Set environment variables for git when cloning repository (git clone).
This will override settings from sync-git-env.
.RS
.TP
.I Example:
sync-git-clone-env="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"
.br
Gives three variables "VAR1", "VAR2", "VAR3" with the values "word1 word2",
"word3", "$word 5 6".
.RE
.TP
.B sync\-git\-clone\-extra\-opts
Extra options to give to git when cloning repository (git clone).
.TP
.B sync\-git\-env
Set environment variables for git when cloning or pulling the repository.
These will be overridden by setting them again in sync-git-clone-env and sync-git-pull-env.
See also example for sync-git-clone-env.
.TP
.B sync\-git\-pull\-env
Set environment variables for git when updating repository (git pull).
This will override settings from sync-git-env.
See also example for sync-git-clone-env.
.TP
.B sync\-git\-pull\-extra\-opts
Extra options to give to git when updating repository (git pull).
.TP
.B sync\-git\-verify\-commit\-signature = true|false
Require the top commit in the repository to contain a good OpenPGP
signature. Defaults to false.
.TP
.B sync\-hooks\-only\-on\-change
If set to true, then sync of a given repository will not trigger postsync
hooks unless hooks would have executed for a master repository or the
repository has changed since the previous sync operation.
.TP
.B sync\-rcu = yes|no
Enable read\-copy\-update (RCU) behavior for sync operations. The current
latest immutable version of a repository will be referenced by a symlink
found where the repository would normally be located (see the \fBlocation\fR
setting). Repository consumers should resolve the cannonical path of this
symlink before attempt to access the repository, and all operations should
be read\-only, since the repository is considered immutable. Updates occur
by atomic replacement of the symlink, which causes new consumers to use the
new immutable version, while any earlier consumers continue to use the
cannonical path that was resolved earlier. This option requires
sync\-allow\-hardlinks and sync\-rcu\-store\-dir options to be enabled, and
currently also requires that sync\-type is set to rsync. This option is
disabled by default, since the symlink usage would require special handling
for scenarios involving bind mounts and chroots.
.TP
.B sync\-rcu\-store\-dir
Directory path reserved for sync\-rcu storage. This directory must have a
unique value for each repository (do not set it in the DEFAULT section).
This directory must not contain any other files or directories aside from
those that are created automatically when sync\-rcu is enabled.
.TP
.B sync\-rcu\-spare\-snapshots = 1
Number of spare snapshots for sync\-rcu to retain with expired ttl. This
protects the previous latest snapshot from being removed immediately after
a new version becomes available, since it might still be used by running
processes.
.TP
.B sync\-rcu\-ttl\-days = 7
Number of days for sync\-rcu to retain previous immutable snapshots of
a repository. After the ttl of a particular snapshot has expired, it
will be remove automatically (the latest snapshot is exempt, and
sync\-rcu\-spare\-snapshots configures the number of previous snapshots
that are exempt). If the ttl is set too low, then a snapshot could
expire while it is in use by a running process.
.TP
.B sync\-type
Specifies type of synchronization performed by `emerge \-\-sync`.
.br
Valid non\-empty values: cvs, git, rsync, svn, webrsync (emerge-webrsync)
.br
This attribute can be set to empty value to disable synchronization of given
repository. Empty value is default.
.TP
.B sync\-umask
Specifies umask used to synchronize the repository.
.br
Takes an octal permission mask, e.g. 022.
.TP
.B sync\-uri
Specifies URI of repository used for synchronization performed by `emerge
\-\-sync`.
.br
This attribute can be set to empty value to disable synchronization of given
repository. Empty value is default.
.RS
.TP
Syntax:
cvs: [cvs://]:access_method:[username@]hostname[:port]:/path
.br
git: (git|git+ssh|http|https)://[username@]hostname[:port]/path
.br
rsync: (rsync|ssh)://[username@]hostname[:port]/(module|path)
.TP
Examples:
.RS
rsync://private\-mirror.com/portage\-module
.br
rsync://rsync\-user@private\-mirror.com:873/gentoo\-portage
.br
ssh://ssh\-user@192.168.0.1:22/usr/portage
.br
ssh://ssh\-user@192.168.0.1:22/\\${HOME}/portage\-storage
.RE
.TP
Note: For the ssh:// scheme, key\-based authentication might be of interest.
.RE
.TP
.B sync\-user
Specifies the credentials used to perform the synchronization.
.br
Syntax: [user][:group]
.br
If only user is provided, the primary group of the user will be used.
If only group is provided, the current user will be preserved and only
group id will be changed.
.br
This key takes precedence over FEATURES=userpriv. If user or group id
is provided, Portage no longer uses owner of the directory.
.TP
.B sync-rsync-extra-opts
Extra options to give to rsync on repository synchronization. It takes
precedence over a declaration in [DEFAULT] section, that takes
precedence over PORTAGE_RSYNC_EXTRA_OPTS.
.TP
.B sync\-openpgp\-key\-path
Path to the OpenPGP key(ring) used to verify received repository. Used
only for protocols supporting cryptographic verification, provided
that the respective verification option is enabled. If unset, the user's
keyring is used.
.TP
.B sync\-openpgp\-key\-refresh\-retry\-count = 40
Maximum number of times to retry key refresh if it fails. Between each
key refresh attempt, there is an exponential delay with a constant
multiplier and a uniform random multiplier between 0 and 1.
.TP
.B sync\-openpgp\-key\-refresh\-retry\-delay\-exp\-base = 2
The base of the exponential expression. The exponent is the number of
previous refresh attempts.
.TP
.B sync\-openpgp\-key\-refresh\-retry\-delay\-max = 60
Maximum delay between each retry attempt, in units of seconds. This
places a limit on the length of the exponential delay.
.TP
.B sync\-openpgp\-key\-refresh\-retry\-delay\-mult = 4
Multiplier for the exponential delay.
.TP
.B sync\-openpgp\-key\-refresh\-retry\-overall\-timeout = 1200
Combined time limit for all refresh attempts, in units of seconds.
.TP
.B sync-rsync-vcs-ignore = true|false
Ignore vcs directories that may be present in the repository. It is the
user's responsibility to set sync-rsync-extra-opts to protect vcs
directories if appropriate.
.TP
.B sync\-rsync\-verify\-jobs = 1
Number of parallel jobs to use when verifying nested Manifests. When
set to 0, this will use the apparent number of processors if parallel
verification is supported by the installed version of app-portage/gemato.
Defaults to 1.
.TP
.B sync\-rsync\-verify\-max\-age
Warn if repository is older than the specified number of days. Disabled
when 0. Defaults to disabled.
.TP
.B sync\-rsync\-verify\-metamanifest = yes|no
Require the repository to contain a signed MetaManifest and verify
it using \fBapp\-portage/gemato\fR. Defaults to no.
.TP
.B sync\-webrsync\-delta = true|false
Use \fBapp\-portage/emerge\-delta\-webrsync\fR to minimize bandwidth.
Defaults to false.
.TP
.B sync\-webrsync\-keep\-snapshots = true|false
Keep snapshots in \fBDISTDIR\fR (do not delete). Defaults to false.
.TP
.B sync\-webrsync\-verify\-signature = true|false
Require the detached tarball signature to contain a good OpenPGP
signature. This uses the OpenPGP key(ring) specified by the
sync\-openpgp\-key\-path setting. Defaults to false.

.RE

.I Example:
.nf
[DEFAULT]
# make gentoo the main repository, which makes it the default master
# repository for repositories that do not specify masters
main\-repo = gentoo
# make all repositories inherit eclasses from the java\-overlay and
# java\-experimental repositories, with eclasses from java\-experimental
# taking precedence over those from java\-overlay
eclass\-overrides = java\-overlay java\-experimental

[gentoo]
# repos with higher priorities are preferred when ebuilds with equal versions
# are found in multiple repos (see the `emerge \-\-info \-\-verbose` repo
# display for a listing of repos and their corresponding priorities).
priority = 9999
# disable all eclass overrides for ebuilds from the gentoo repository
eclass\-overrides =
# when processing metadata/layout.conf from other repositories, substitute
# 'gentoo' in place of references to repositories named 'foo' and 'bar',
# and discard the 'baz' alias contained in gentoo's layout.conf
aliases = foo bar -baz

[kde-testing]
# override the metadata/layout.conf masters setting from the kde-testing repo
masters = gentoo kde

[python]
# override the metadata/layout.conf masters setting from the python repo,
# so that settings won't be inherited from those masters, and so that
# those master repos won't be required as dependencies (the user must
# ensure that any required dependencies such as eclasses are satisfied)
masters =

# Repository 'gentoo' synchronized using CVS
[gentoo]
location = /usr/portage
sync\-type = cvs
sync\-uri = :pserver:anonymous@anoncvs.gentoo.org:/var/cvsroot
sync\-cvs\-repo = gentoo\-x86
auto\-sync = yes

# Overlay 'voip' syncronized with layman's plug-in sync module
[voip]
location = /var/lib/layman/voip
sync\-type = laymanator
sync\-uri = git://anongit.gentoo.org/proj/voip.git
auto\-sync = yes
.fi
.RE
.TP
.BR sets.conf
A package set configuration file. Settings here override settings from
\fB/usr/portage/sets.conf\fR and \fB/usr/share/portage/config/sets\fR.
The format is described extensively in the
\fIPackage Set Configuration\fR section of the html documentation which
is installed with portage when the "doc" USE flag is enabled.

.I Example:
.nf
[world]
class = portage.sets.base.DummyPackageSet
packages = @profile @selected @system

[usersets]
class = portage.sets.files.StaticFileSet
multiset = true
directory =  %(PORTAGE_CONFIGROOT)setc/portage/sets
world-candidate = True

[module-rebuild]
class = portage.sets.dbapi.OwnerSet
files = /lib/modules
.fi
.RE
.TP
.BR /etc/portage/env/
.RS
In this directory additional package\-specific bashrc files can be created.
Note that if package\-specific environment variable settings are all that's
needed, then \fB/etc/portage/package.env\fR should be used instead of the
bashrc approach that is described here. Also note that special variables
such as \fBFEATURES\fR and \fBINSTALL_MASK\fR will not produce the intended
results if they are set in bashrc, and therefore
\fB/etc/portage/package.env\fR should be used instead. Lastly, note that these
files are interpreted much later than the portage environment file
\fBpackage.env\fR.

Portage will source all of these bashrc files after \fB/etc/portage/bashrc\fR
in the following order:
.nr step 1 1
.IP \n[step]. 3
/etc/portage/env/${CATEGORY}/${PN}
.IP \n+[step].
/etc/portage/env/${CATEGORY}/${PN}:${SLOT}
.IP \n+[step].
/etc/portage/env/${CATEGORY}/${P}
.IP \n+[step].
/etc/portage/env/${CATEGORY}/${PF}
.RE
.TP
.BR /etc/portage/sets/
.RS
For each file in this directory, a package set is created with its name
corresponding to the name of the file. Each file should contain a list
of package atoms and nested package sets, one per line. When a package
set is referenced as an \fBemerge\fR(1) argument or when it is
referenced as a nested package set (inside of another package set), the
set name is prefixed with \fB@\fR.

Also see \fB/var/lib/portage/world_sets\fR and the \fBemerge\fR(1)
\fB\-\-list\-sets\fR option.
.RE
.TP
.BR /usr/portage/
.RS
.TP
.BR sets.conf
A package set configuration file. Also see \fB/etc/portage/sets.conf\fR
which overrides these settings, and
\fB/usr/share/portage/config/sets\fR which contains default settings.
.RE
.TP
.BR /usr/portage/metadata/
.RS
.TP
.BR layout.conf
Specifies information about the repository layout.
\fISite-specific\fR overrides to \fBlayout.conf\fR settings may be specified in
\fB/etc/portage/repos.conf\fR.
Settings in \fBrepos.conf\fR take precedence over settings in
\fBlayout.conf\fR, except tools such as \fBrepoman\fR(1) and \fBegencache\fR(1)
ignore "aliases", "eclass-overrides" and "masters" attributes set in
\fBrepos.conf\fR since their operations are inherently \fBnot\fR
\fIsite\-specific\fR.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- attributes are specified in "${attribute} = ${value}" format
.fi

.I Supported attributes.
.RS
.RS
.TP
.BR aliases
Behaves like an "aliases" attribute in \fBrepos.conf\fR.
.TP
.BR eapis\-banned
List of EAPIs which are not allowed in this repo.
.TP
.BR eapis\-deprecated
List of EAPIs which are allowed but generate warnings when used.
.TP
.BR masters
Names of repositories which satisfy dependencies on eclasses and from which
settings specified in various repository\-level files (\fBpackage.mask\fR,
\fBpackage.use.mask\fR, \fBuse.mask\fR etc.) are inherited. Each repository
name should correspond to the value of a \fBrepo_name\fR entry from one of
the repositories that is configured in \fBrepos.conf\fR file. Repositories
listed toward the right of the \fBmasters\fR list take precedence over those
listed toward the left of the list.
.TP
.BR repo\-name " = <value of profiles/repo_name>"
The name of this repository (overrides profiles/repo_name if it exists).
.TP
.BR sign\-commits " = [true|" false "]"
Boolean value whether we should sign commits in this repo.
.TP
.BR sign\-manifests " = [" true "|false]"
Boolean value whether we should sign Manifest files in this repo.
.TP
.BR thin\-manifests " = [true|" false "]"
Boolean value whether Manifest files contain only DIST entries.
.TP
.BR use\-manifests " = [" strict "|true|false]"
How Manifest files get used.  Possible values are "strict" (require an entry
for every file), "true" (if an entry exists for a file, enforce it), or "false"
(don't check Manifest files at all).
.TP
.BR manifest\-hashes
List of hashes to generate in new/updated entries Manifest files.  Valid hashes
depend on the current version of portage; see the portage.checksum module for
the current list.  Portage will not rewrite old entries if they satisfy
manifest\-required\-hashes.
.TP
.BR manifest\-required\-hashes
List of hashes that must be used in all Manifest entries.  If the hashes listed
here are not present in the Manifest, Portage will refetch all distfiles
and update the respective entries to include them.  Must be a subset
of manifest\-hashes.  If not specified, defaults to all manifest\-hashes.
.TP
.BR update\-changelog " = [true|" false "]"
The default setting for repoman's --echangelog option.
.TP
.BR cache\-formats " = [pms] [md5-dict]"
The cache formats supported in the metadata tree.  There is the old "pms" format
and the newer/faster "md5-dict" format.  Default is to detect dirs.
.TP
.BR profile_eapi_when_unspecified
The EAPI to use for profiles when unspecified. This attribute is
supported only if profile-default-eapi is included in profile-formats.
.TP
.BR profile\-formats " = [pms] [portage-1] [portage-2] [profile-bashrcs] [profile-set] [profile-default-eapi] [build-id]"
Control functionality available to profiles in this repo such as which files
may be dirs, or the syntax available in parent files.  Use "portage-2" if you're
unsure.  The default is "portage-1-compat" mode which is meant to be compatible
with old profiles, but is not allowed to be opted into directly.
Setting profile-bashrcs will enable the per-profile bashrc mechanism
\fBpackage.bashrc\fR. Setting profile-set enables support for using the
profile \fBpackages\fR file to add atoms to the @profile package set.
See the profile \fBpackages\fR section for more information.
Setting profile-default-eapi enables support for the
profile_eapi_when_unspecified attribute. Setting build\-id allows
dependency atoms in the profile to refer to specific builds (see the
binpkg\-multi\-instance FEATURES setting in \fBmake.conf\fR(5)). A
build\-id atom is identical to a version-specific atom, except that the
version is followed by a hyphen and an integer build\-id.
.RE
.RE

.RS
.I Example:
.nf
# Specify the repository name (overriding profiles/repo_name).
repo\-name = foo-overlay

# eclasses provided by java-overlay take precedence over identically named
# eclasses that are provided by gentoo
masters = gentoo java-overlay

# indicate that this repo can be used as a substitute for foo-overlay
aliases = foo-overlay

# indicate that ebuilds with the specified EAPIs are banned
eapis\-banned = 0 1

# indicate that ebuilds with the specified EAPIs are deprecated
eapis\-deprecated = 2 3 4

# sign commits in this repo, which requires Git >=1.7.9, and
# key configured by `git config user.signingkey key_id`
sign\-commits = true

# do not sign Manifest files in this repo
sign\-manifests = false

# Manifest files only contain DIST entries
thin\-manifests = true

# indicate that this repo requires manifests for each package, and is
# considered a failure if a manifest file is missing/incorrect
use\-manifests = strict

# customize the set of hashes generated for Manifest entries
manifest\-hashes = SHA256 SHA512 WHIRLPOOL

# indicate that this repo enables repoman's --echangelog=y option automatically
update\-changelog = false

# indicate that this repo contains the md5-dict cache format,
# which may be generated by egencache(1)
cache\-formats = md5-dict

# indicate that this repo contains profiles that may use directories for
# package.mask, package.provided, package.use, package.use.force,
# package.use.mask, package.use.stable.force, package.use.stable.mask,
# use.force, use.mask, use.stable.force, and use.stable.mask.
# profile\-formats = portage-1
# indicate that paths such as 'gentoo:targets/desktop' or ':targets/desktop' in
# profile parent files can be used to express paths relative to the root
# 'profiles' directory of a repository (when the repo name is omitted before
# the colon, it refers to the current repository the parent file is inside)
profile\-formats = portage-2
.fi
.RE
.TP
.BR pkg_desc_index
This is an index of package names, versions, and descriptions which
may be generated by \fBegencache\fR(1) in order to optimize
\fBemerge\fR(1) search actions.

.I Example:
.nf
sys-apps/sed 4.2 4.2.1 4.2.1-r1 4.2.2: Super-useful stream editor
sys-apps/usleep 0.1: A wrapper for usleep
.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 repositories 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 license_groups
This contains groups of licenses that may be specifed in the
\fBACCEPT_LICENSE\fR variable (see \fBmake.conf\fR(5)). Refer
to GLEP 23 for further information:
\fIhttps://www.gentoo.org/glep/glep-0023.html\fR.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- one group name, followed by list of licenses and nested groups
\- nested groups are prefixed with the '@' symbol
.fi

.I Example:
.nf
# The FSF-APPROVED group includes the entire GPL-COMPATIBLE group and more.
FSF-APPROVED @GPL-COMPATIBLE Apache-1.1 BSD-4 MPL-1.0 MPL-1.1
# The GPL-COMPATIBLE group includes all licenses compatible with the GNU GPL.
GPL-COMPATIBLE Apache-2.0 BSD BSD-2 GPL-2 GPL-3 LGPL-2.1 LGPL-3 X11 ZLIB
.fi
.TP
.BR package.accept_keywords
Per\-package ACCEPT_KEYWORDS for profiles. This has the same format and
behavior as /etc/portage/package.accept_keywords, including the ability
to list atoms without any keywords in order to accept unstable variants
of all stable keywords listed in ACCEPT_KEYWORDS.
.TP
.BR package.keywords
Per\-profile KEYWORDS. Useful for cases in which the effective KEYWORDS of a
given package should vary depending on which profile the user has selected.

.I Format:
.nf
\- comment lines begin with # (no inline comments)
\- one DEPEND atom per line followed by additional KEYWORDS
.fi

.I Example:
.nf
# add stable keyword to libgd
media\-libs/libgd x86
# remove stable keyword from mplayer and add unstable keyword
media\-video/mplayer \-x86 ~x86
# remove all keywords from netcat
net-analyzer/netcat -*
.fi
.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 # (no inline comments)
\- 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.
.I Format:
.nf
\- comments begin with # (no inline comments)
\- 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', 'dev', or 'exp'
.fi

.I Example:
.nf
alpha        default/linux/alpha/10.0    stable
m68k         default/linux/m68k/10.0     dev
x86          default/linux/x86/10.0      stable
x86-linux    prefix/linux/x86            exp
.fi
.TP
.BR repo_name
The first line of the file should define a unique repository name. The name
may contain any of the characters [A\-Za\-z0\-9_\-]. It must not begin with a
hyphen. If the repo\-name attribute is specified in layout.conf, then that
setting will take precedence.
.TP
.BR thirdpartymirrors
Controls the mapping of mirror:// style URIs to actual lists of
mirrors.  Keeps us from overloading a single server.

.I Format:
.nf
\- comments begin with # (no inline comments)
\- 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 https://www.kernel.org/pub https://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 # (no inline comments)
\- 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 are listed here along with the package and a
description. This file is automatically generated from the
metadata.xml files that are included with each individual package.
Refer to GLEP 56 for further information:
\fIhttps://www.gentoo.org/glep/glep-0056.html\fR.

.nf
.I Format:
\- comments begin with # (no inline comments)
\- 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 /usr/share/portage/config/
.RS
.TP
.BR make.globals
The global default settings for Portage.  This comes from the portage package
itself.  Settings in \fBmake.conf\fR or \fBpackage.env\fR override values set
here. The format is described extensively in \fBmake.conf\fR(5).
.TP
.BR repos.conf
The default configuration of repositories for Portage.  This comes from
the portage package itself.  Settings in \fB/etc/portage/repos.conf\fR
override values set here. The format is described extensively in section
for \fB/etc/portage/repos.conf\fR.
.TP
.BR sets
A directory containing package set configuration files. Also see
\fB/etc/portage/sets.conf\fR and \fB/usr/portage/sets.conf\fR, both of
which override values set here. Default set configurations are installed
in \fB/usr/share/portage/config/sets/portage.conf\fR.
.RE
.RE
.TP
.BR /var/cache/edb/
.RS
This directory is used to store internal portage cache files.  The names and
purpose of these files are not documented on purpose so as to keep down bitrot
as internals change.  If you aren't working on portage internally, then the
details most likely do not matter to you.

This entire directory can be safely deleted.  It is highly recommended you do
not do this however as it can be a time consuming process to generate them all
again.
.RE
.TP
.BR /var/db/pkg/
.RS
All installed package information is recorded here.  If portage thinks you have
a package installed, it is usually because it is listed here.

The format follows somewhat closely that of the ebuild repository. There is a
directory for each category and a package-version subdirectory for each package
you have installed.

Inside each package directory are misc files that describe the installed
contents of the package as well as build time information (so that the package
can be unmerged without needing the ebuild repository).

The exact file contents and format are not described here again so that things
can be changed quickly.  Generally though there is one file per environment
variable that "matters" (like CFLAGS) with the contents stored inside of it.
Another common file is the CONTENTS file which lists the path and hashes of
all objects that the package installed onto your system.
.TP
.BR PROVIDES
Contains information about the sonames that a package provides, which is
automatically generated from the files that it installs. The sonames
may have been filtered by the \fBPROVIDES_EXCLUDE\fR \fBebuild\fR(5)
variable. A multilib category, followed by a colon, always preceeds a
list of one or more sonames.

.I Example:
.nf
x86_32: libcom_err.so.2 libss.so.2 x86_64: libcom_err.so.2 libss.so.2
.fi
.TP
.BR REQUIRES
Contains information about the sonames that a package requires, which is
automatically generated from the files that it installs. The sonames
may have been filtered by the \fBREQUIRES_EXCLUDE\fR \fBebuild\fR(5)
variable. Any sonames that a package provides are automatically excluded
from \fBREQUIRES\fR. A multilib category, followed by a colon, always
preceeds a list of one or more sonames.

.I Example:
.nf
x86_32: ld-linux.so.2 libc.so.6 x86_64: ld-linux-x86-64.so.2 libc.so.6
.fi
.RE
.TP
.BR /var/lib/portage/
.RS
.TP
.BR config
Hashes which are used to determine whether files in config protected
directories have been modified since being installed.  Files which have not
been modified will automatically be unmerged.
.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_wsgi` and you do not have apache
already, then "www\-apache/mod_wsgi" is recorded in the world file but
"www\-servers/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
.TP
.BR world_sets
This is like the world file but instead of package atoms it contains
packages sets which always begin with the \fB@\fR character. Use
\fB/etc/portage/sets/\fR to define user package sets.

.I Example:
.nf
@kde
.fi
.RE
.SH "REPORTING BUGS"
Please report bugs via https://bugs.gentoo.org/
.SH "AUTHORS"
.nf
Marius Mauch <genone@gentoo.org>
Mike Frysinger <vapier@gentoo.org>
Drake Wyrm <wyrm@haell.com>
Arfrever Frehtes Taifersar Arahesis <arfrever@apache.org>
.fi
.SH "SEE ALSO"
.BR emerge (1),
.BR ebuild (1),
.BR ebuild (5),
.BR make.conf (5),
.BR color.map (5)
