Handbook:Parts/Installation/Base

Distribution files
In order to download source code quickly it is recommended to select a fast mirror. Portage will look in the file for the GENTOO_MIRRORS variable and use the mirrors listed therein. It is possible to surf to the Gentoo mirror list and search for a mirror (or mirrors) that is close to the system's physical location (as those are most frequently the fastest ones). However, we provide a nice tool called which provides users with a nice interface to select the mirrors needed. Just navigate to the mirrors of choice and press to select one or more mirrors.

Main Gentoo repository
A second important step in selecting mirrors is to configure the main Gentoo repository via the file. This file contains the sync information needed to update the Portage tree (the collection of ebuilds and related files containing all the information Portage needs to download and install software packages).

Configuring the main Gentoo repository can be done in a few simple steps. First, if it does not exist, create the directory:

Next, copy the Gentoo repository configuration file provided by Portage to the (newly created) directory:

Take a peek with a text editor or by using the command. The inside of the file should be in format and look like this:

The default sync-uri variable value listed above will determine a mirror location based on a rotation. This will aid in easing bandwidth stress on Gentoo's infrastructure and will provide a fail safe in case a specific mirror is offline. It is recommended the default URI is kept.

For those who wish to choose a single mirror in a closer geographic region, a text editor can be used to change the default value. Again, this is not recommended, but can be done if necessary. This can be helpful especially useful for those who use Gentoo in a private company or a large-scale corporate environment.

Copy DNS info
One thing still remains to be done before entering the new environment and that is copying over the DNS information in. This needs to be done to ensure that networking still works even after entering the new environment. contains the name servers for the network.

To copy this information, it is recommended to pass the  option to the  command. This ensures that, if is a symbolic link, that the link's target file is copied instead of the symbolic link itself. Otherwise in the new environment the symbolic link would point to a non-existing file (as the link's target is most likely not available inside the new environment).

Mounting the necessary filesystems
In a few moments, the Linux root will be changed towards the new location. To make sure that the new environment works properly, certain filesystems need to be made available there as well.

The filesystems that need to be made available are:


 * which is a pseudo-filesystem (it looks like regular files, but is actually generated on-the-fly) from which the Linux kernel exposes information to the environment
 * which is a pseudo-filesystem, like which it was once meant to replace, and is more structured than
 * is a regular file system, partially managed by the Linux device manager (usually ), which contains all device files

The location will be mounted on  whereas the other two are bind-mounted. The latter means that, for instance, will actually be  (it is just a second entry point to the same filesystem) whereas  is a new mount (instance so to speak) of the filesystem.

Entering the new environment
Now that all partitions are initialized and the base environment installed, it is time to enter the new installation environment by chrooting into it. This means that the session will change its root (most top-level location that can be accessed) from the current installation environment (installation CD or other installation medium) to the installation system (namely the initialized partitions). Hence the name, change root or chroot.

This chrooting is done in three steps:


 * 1) The root location is changed from  (on the installation medium) to  (on the partitions) using chroot
 * 2) Some settings (those in ) are reloaded in memory using the  command
 * 3) The primary prompt is changed to help us remember that this session is inside a chroot environment.

From this point, all actions performed are immediately on the new Gentoo Linux environment. Of course it is far from finished, which is why the installation still has some sections left :-)

Installing a Portage snapshot
Next step is to install a Portage snapshot, a collection of files that inform Portage what software titles are available to install, which profiles the administrator can select, etc.

The use of is recommended. This will fetch the latest Portage snapshot (which Gentoo releases on a daily basis) from one of Gentoo's mirrors and install it onto the system.

From this point onward, Portage might mention that certain updates are recommended to be executed. This is because certain system packages installed through the stage3 file might have newer versions available, and Portage is now aware of this because a new Portage snapshot is installed. This can be safely ignored for now; the updates can be triggered after the Gentoo installation has finished.

Optional: Updating the Portage tree
It is possible to update the Portage tree to the latest version. The previous command will have installed a very recent Portage snapshot (usually recent up to 24h) so this step is definitely optional.

Suppose there is a need for the last package updates (up to 1 hour), then use. This command will use the rsync protocol to update the Portage tree (which was fetched earlier on through ) to the latest state.

On slow terminals, like some framebuffers or serial consoles, it is recommended to use the  option to speed up the process:

Reading news items
When a Portage tree is synchronized to the system, it might warn the user with a message similar to the following:

Portage news items were created to provide a communication medium to push critical messages to users via the rsync tree. To manage them, use. The application is a Gentoo application that allows for a common management interface towards system changes and operations. In this case, is asked to use its   module.

For the  module, three operations are most used:


 * With  an overview of the available news items is displayed.
 * With  the news items can be read.
 * With  news items can be removed once they have been read and will not be reread anymore.

More information about the newsreader is available through its manual page:

Choosing the right profile
A profile is a building block for any Gentoo system. Not only does it specify default values for USE, CFLAGS , and other important variables, it also locks the system to a certain range of package versions. These settings are all maintained by Gentoo's Portage developers.

You can see what profile the system is currently using with, now using the  module:

As can be seen, there are also desktop subprofiles available for some architectures.

After viewing the available profiles for the architecture, users can select a different profile for the system:

Updating the @world set
At this point, if a new system profile has been chosen, it is wise to update the system's @world set so that a base can be established for the new profile.

This following step is necessary for those who have selected a profile with  in the title (since all of Gentoo's official stage tarballs use OpenRC as the default init system), however it is optional for the other profiles:

Configuring the USE variable
USE is one of the most powerful variables Gentoo provides to its users. Several programs can be compiled with or without optional support for certain items. For instance, some programs can be compiled with gtk-support, or with qt-support. Others can be compiled with or without SSL support. Some programs can even be compiled with framebuffer support (svgalib) instead of X11 support (X-server).

Most distributions compile their packages with support for as much as possible, increasing the size of the programs and startup time, not to mention an enormous amount of dependencies. With Gentoo users can define what options a package should be compiled with. This is where USE comes into play.

In the USE variable users define keywords which are mapped onto compile-options. For instance,  will compile ssl-support in the programs that support it. will remove X-server support (note the minus sign in front). will compile programs with GNOME (and GTK) support, and not with KDE (and Qt) support, making the system fully tweaked for GNOME (if the architecture supports it).

The default USE settings are placed in the files of the Gentoo profile used by the system. Gentoo uses a (complex) inheritance system for its profiles, which we will not dive into at this stage. The easiest way to check the currently active USE settings is to run and select the line that starts with USE:

A full description on the available USE flags can be found on the system in.

Inside the command, scrolling can be done using the  and  keys, and exited by pressing.

As an example we show a USE setting for a KDE-based system with DVD, ALSA and CD Recording support:

When USE is defined in it is added (or removed if the USE flag starts with the  sign) from that default list. Users who want to ignore any default USE settings and manage it completely themselves should start the USE definition in with  :

Timezone
Select the timezone for the system. Look for the available timezones in, then write it in the file.

Suppose the timezone of choice is Europe/Brussels:

Please avoid the timezones as their names do not indicate the expected zones. For instance, is in fact.

Next, reconfigure the package, which will update the  file for us, based on the  entry. The file is used by the system C library to know the timezone the system is in.

Configure locales
Most users will want to use only one or two locales on their system.

Locales specify not only the language that the system should use to interact with the system, but also what the rules are for sorting strings, displaying dates and times, etc.

The locales that a system should support should be mentioned in.

The following locales are an example to get both English (United States) and German (Germany) with the accompanying character formats (like UTF-8).

The next step is to run. It will generate all the locales specified in the file.

To verify that the selected locales are now available, run.

Once done, it is now time to set the system-wide locale settings. Again we use for this, now with the   module.

With, the available targets are displayed:

With the correct locale can be set:

Manually, this can still be accomplished through the file:

Make sure a locale is set, as the system would otherwise display warnings and errors during kernel builds and other software deployments later in the installation.

Now reload the environment:

We made a full Localization guide to help the user guide through this process. Another interesting article is the UTF-8 guide for very specific information to enable UTF-8 on the system.