.TH "PORTAGE" "5" "Aug 2008" "Portage 2.2" "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/
site\-specific overrides go in \fB/etc/portage/profile/\fR
.nf
deprecated
eapi
make.defaults
packages
packages.build
package.keywords
package.mask
package.provided
package.unmask
package.use
package.use.force
package.use.mask
parent
profile.bashrc
use.force
use.mask
virtuals
.fi
.TP
.BR /etc/portage/
.nf
bashrc
color.map
modules
package.keywords
package.mask
package.unmask
package.use
mirrors
categories
.fi
.TP
.BR /etc/portage/profile/
site-specific overrides of \fB/etc/make.profile/\fR
.TP
.BR /usr/portage/metadata/
.nf
layout.conf
.fi
.TP
.BR /usr/portage/profiles/
.nf
arch.list
categories
info_pkgs
info_vars
package.mask
profiles.desc
repo_name
thirdpartymirrors
use.desc
use.local.desc
.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
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, use \fB/etc/portage/profile/\fR (it supports all of the same file
types that \fB/etc/make.profile/\fR does, except parent). Do NOT edit the
settings in \fB/etc/make.profile/\fR because they WILL be lost with the next
`emerge \-\-sync`.
.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 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.
.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 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 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
Provides the list of packages that compose the special \fIsystem\fR set.

.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 *
.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 !
# pull in a version of glibc less than 2.3
*<sys\-libs/glibc\-2.3
# pull in any version of bash
*app\-shells/bash
# pull in a version of readline earlier than 4.2
*<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. 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).

Virtual packages (virtual/*) should not be specified in package.provided.
Depending on the type of virtual, it may be necessary to add an entry to the
virtuals file and/or add a package that satisfies a virtual to
package.provided.

.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
.BR package.use.force
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
.BR package.use.mask
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 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.force
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
.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 # (no inline comments)
\- 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 # (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/
Any file in this directory 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.keywords/common
/etc/portage/package.keywords/e17
/etc/portage/package.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.
.TP
.BR color.map
Contains variables customizing colors. See \fBcolor.map\fR(5).
.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
listed in \fBPORTDIR_OVERLAY\fR or a cvs tree, 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
.BR package.keywords
Per\-package 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.

.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.keywords like this:

games-fps/quake3-demo x86

.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.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.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
.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" 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 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/metadata/
.RS
.TP
.BR layout.conf
Specifies information about the repository layout. Currently, only a single
"masters" attribute is supported, which is used to specify names of
repositories which satisfy dependencies on eclasses and/or ebuilds. Each
repository name should correspond the value of a \fBrepo_name\fR entry
from one of the repositories that is configured via the \fBPORTDIR\fR or
\fBPORTDIR_OVERLAY\fR variables (see \fBmake.conf\fR(5)).

.I Example:
.nf
masters = gentoo java-overlay
.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.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.  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 # (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' 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 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.
.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 # (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 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 # (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 must be listed here along with the package and a 
description.

.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 /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 portage tree.  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 portage tree).

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.
.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_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
.TP
.BR world_sets
This is like the world file but instead of package atoms it contains
packages sets which always begin with the @ character.

.I Example:
.nf
@system
.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),
.BR color.map (5)
