Gentoo Linux AMD64 Handbook
Gentoo Linux AMD64 Handbook
Gentoo Linux AMD64 Handbook
1/111
24/10/13
2/111
24/10/13
A. Installing Gentoo
1. About the Gentoo Linux Installation
1.a. Introduction
Welcome!
First of all, welcome to Gentoo. You are about to enter the world of choices and performance. Gentoo is all about
choices. When installing Gentoo, this is made clear to you several times -- you can choose how much you want to
compile yourself, how to install Gentoo, what system logger you want, etc.
Gentoo is a fast, modern metadistribution with a clean and flexible design. Gentoo is built around free software and
doesn't hide from its users what is beneath the hood. Portage, the package maintenance system which Gentoo uses,
is written in Python, meaning you can easily view and modify the source code. Gentoo's packaging system uses
source code (although support for precompiled packages is included too) and configuring Gentoo happens through
regular textfiles. In other words, openness everywhere.
It is very important that you understand that choices are what makes Gentoo run. We try not to force you onto
anything you don't like. If you feel like we do, please bugreport it.
3/111
24/10/13
After step 4, your installation environment is prepared and you are ready to chroot into the new environment
After step 5, core packages, which are the same on all Gentoo installations, are installed
After step 6, you have compiled your Linux kernel
After step 7, you have written most of your Gentoo system configuration files
After step 8, necessary system tools (which you can choose from a nice list) are installed
After step 9, your choice of bootloader has been installed and configured and you are logged in into your new
Gentoo installation
After step 10, your Gentoo Linux environment is ready to be explored
When you are given a certain choice, we try our best to explain what the pros and cons are. We will continue then
with a default choice, identified by "Default: " in the title. The other possibilities are marked by "Alternative: ". Do not
think that the default is what we recommend. It is however what we believe most users will use.
Sometimes you can pursue an optional step. Such steps are marked as "Optional: " and are therefore not needed to
install Gentoo. However, some optional steps are dependent on a previous decision you made. We will inform you
when this happens, both when you make the decision, and right before the optional step is described.
We also provide a Gentoo Installation Tips & Tricks document that might be useful to read as well. If you are an
experienced Gentoo user and just need a brief installation checklist, feel free to use our Quick Installation Guide
available from our Documentation Resources if your architecture has such a document available.
You also have several possibilities: you can compile your entire system from scratch or use a prebuilt environment to
have your Gentoo environment up and running in no time. And of course you have intermediate solutions in which you
don't compile everything but start from a semi-ready system.
Troubles?
If you find a problem in the installation (or in the installation documentation), please visit our bugtracking system and
check if the bug is known. If not, please create a bugreport for it so we can take care of it. Do not be afraid of the
developers who are assigned to (your) bugs -- they generally don't eat people.
Note though that, although the document you are now reading is architecture-specific, it will contain references to
other architectures as well. This is due to the fact that large parts of the Gentoo Handbook use source code that is
common for all architectures (to avoid duplication of efforts and starvation of development resources). We will try to
keep this to a minimum to avoid confusion.
If you are uncertain if the problem is a user-problem (some error you made despite having read the documentation
carefully) or a software-problem (some error we made despite having tested the installation/documentation carefully)
you are free to join #gentoo on irc.freenode.net. Of course, you are welcome otherwise too as our chat channel
covers the broad Gentoo spectrum :)
Speaking of which, if you have a question regarding Gentoo, check out our Frequently Asked Questions, available
from the Gentoo Documentation. You can also view the FAQs on our forums.
4/111
24/10/13
2.a. Hardware
Requirements
Introduction
Before we start, we first list what hardware requirements you need to successfully install Gentoo on your box.
Hardware Requirements
Minimal CD
Liv eCD
CPU
Any AMD64 CPU or EM64T CPU (Core 2 Duo & Quad processors are EM64T)
Memory
256 MB
Diskspace
Sw ap space
At least 256 MB
512 MB
You should check the Gentoo AMD64 Project Page before proceeding.
2.c. The
Introduction
The Gentoo Installation CDs are bootable CDs which contain a self-sustained Gentoo environment. They allow you to
boot Linux from the CD. During the boot process your hardware is detected and the appropriate drivers are loaded.
They are maintained by Gentoo developers.
All Installation CDs allow you to boot, set up networking, initialize your partitions and start installing Gentoo from the
Internet.
2.c. Download,
5/111
24/10/13
You can download any of the Installation CDs from one of our mirrors. The Installation CDs are located in the
releases/amd64/autobuilds/current-iso/directory.
Inside that directory you'll find ISO files. Those are full CD images which you can write on a CD-R.
In case you wonder if your downloaded file is corrupted or not, you can check its SHA-2 checksum and compare it
with the SHA-2 checksum we provide (such as install-amd64-minimal-<release>.iso.DIGESTS). You can
check the SHA-2 checksum with the sha512sumtool under Linux/Unix or Checksums calculator for Windows.
Code Listing 3.1: Verifying the SHA-2 checksum
$ sha512sum -c <downloaded iso.DIGESTS>
Note: If you get the message that no properly formatted SHA checksum was found, take a look at the DIGESTS file yourself
to see what the supported checksums are.
Another way to check the validity of the downloaded file is to use GnuPG to verify the cryptographic signature that we
provide (the file ending with .asc). Download the signature file and obtain the public keys whose key ids can be
found on the release engineering project site.
Code Listing 3.2: Obtaining the public key
(... Substitute the key ids with those mentioned on the release engineering site ...)
$ gpg --keyserver subkeys.pgp.net --recv-keys 96D8BF6D 2D182910 17072058
To burn the downloaded ISO(s), you have to select raw-burning. How you do this is highly program-dependent. We
will discuss cdrecordand K3Bhere; more information can be found in our Gentoo FAQ.
With cdrecord, you simply type cdrecord dev=/dev/sr0 <downloaded iso file>(replace
/dev/sr0with your CD-RW drive's device path).
With K3B, select Tools> Burn CD Image. Then you can locate your ISO file within the 'Image to Burn'
area. Finally click Start.
6/111
24/10/13
Description
gentoo
Default kernel w ith support for K8 CPUS (including NUMA support) and EM64T CPUs
gentoo-nofb
memtest86
You can also provide kernel options. They represent optional settings you can (de)activate at will.
Hardware options:
acpi=on
This loads support for ACPI and also causes the acpid daemon to be started by the CD on boot. This is only
needed if your system requires ACPI to function properly. This is not required for Hyperthreading support.
acpi=off
Completely disables ACPI. This is useful on some older systems and is also a requirement for using APM.
This will disable any Hyperthreading support of your processor.
console=X
This sets up serial console access for the CD. The first option is the device, usually ttyS0 on x86, followed by
any connection options, which are comma separated. The default options are 9600,8,n,1.
dmraid=X
This allows for passing options to the device-mapper RAID subsystem. Options should be encapsulated in
quotes.
doapm
This loads APM driver support. This requires you to also use acpi=off.
dopcmcia
This loads support for PCMCIA and Cardbus hardware and also causes the pcmcia cardmgr to be started by
the CD on boot. This is only required when booting from PCMCIA/Cardbus devices.
doscsi
This loads support for most SCSI controllers. This is also a requirement for booting most USB devices, as
they use the SCSI subsystem of the kernel.
sda=stroke
This allows you to partition the whole hard disk even when your BIOS is unable to handle large disks. This
option is only used on machines with an older BIOS. Replace sda with the device that requires this option.
ide=nodma
This forces the disabling of DMA in the kernel and is required by some IDE chipsets and also by some
CDROM drives. If your system is having trouble reading from your IDE CDROM, try this option. This also
disables the default hdparm settings from being executed.
noapic
This disables the Advanced Programmable Interrupt Controller that is present on newer motherboards. It has
been known to cause some problems on older hardware.
nodetect
This disables all of the autodetection done by the CD, including device autodetection and DHCP probing. This
is useful for doing debugging of a failing CD or driver.
nodhcp
This disables DHCP probing on detected network cards. This is useful on networks with only static addresses.
nodmraid
Disables support for device-mapper RAID, such as that used for on-board IDE/SATA RAID controllers.
nofirewire
This disables the loading of Firewire modules. This should only be necessary if your Firewire hardware is
causing a problem with booting the CD.
nogpm
This disables gpm console mouse support.
nohotplug
This disables the loading of the hotplug and coldplug init scripts at boot. This is useful for doing debugging of a
failing CD or driver.
nokeymap
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
7/111
24/10/13
This disables the keymap selection used to select non-US keyboard layouts.
nolapic
This disables the local APIC on Uniprocessor kernels.
nosata
This disables the loading of Serial ATA modules. This is used if your system is having problems with the
SATA subsystem.
nosmp
This disables SMP, or Symmetric Multiprocessing, on SMP-enabled kernels. This is useful for debugging
SMP-related issues with certain drivers and motherboards.
nosound
This disables sound support and volume setting. This is useful for systems where sound support causes
problems.
nousb
This disables the autoloading of USB modules. This is useful for debugging USB issues.
slowusb
This adds some extra pauses into the boot process for slow USB CDROMs, like in the IBM BladeCenter.
Volume/Device Management:
dolvm
This enables support for Linux's Logical Volume Management.
Other options:
debug
Enables debugging code. This might get messy, as it displays a lot of data to the screen.
docache
This caches the entire runtime portion of the CD into RAM, which allows you to umount /mnt/cdrom and mount
another CDROM. This option requires that you have at least twice as much available RAM as the size of the
CD.
doload=X
This causes the initial ramdisk to load any module listed, as well as dependencies. Replace X with the module
name.
Multiple modules can be specified by a comma-separated list.
dosshd
Starts sshd on boot, which is useful for unattended installs.
passwd=foo
Sets whatever follows the equals as the root password, which is required for dosshd since we scramble the
root password.
noload=X
This causes the initial ramdisk to skip the loading of a specific module that may be causing a problem. Syntax
matches that of doload.
nonfs
Disables the starting of portmap/nfsmount on boot.
nox
This causes an X-enabled LiveCD to not automatically start X, but rather, to drop to the command line instead.
scandelay
This causes the CD to pause for 10 seconds during certain portions the boot process to allow for devices that
are slow to initialize to be ready for use.
scandelay=X
This allows you to specify a given delay, in seconds, to be added to certain portions of the boot process to
allow for devices that are slow to initialize to be ready for use. Replace X with the number of seconds to pause.
Note: The CD will check for "no*" options before "do*" options, so that you can override any option in the exact order you
specify.
Now boot your CD, select a kernel (if you are not happy with the default gentookernel) and boot options. As an
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
8/111
24/10/13
example, we show you how to boot the gentookernel, with dopcmciaas kernel parameters:
Code Listing 3.4: Booting an Installation CD
boot: gentoo dopcmcia
You will then be greeted with a boot screen and progress bar. If you are installing Gentoo on a system with a non-US
keyboard, make sure you immediately press Alt-F1 to switch to verbose mode and follow the prompt. If no selection
is made in 10 seconds the default (US keyboard) will be accepted and the boot process will continue. Once the boot
process completes, you will be automatically logged in to the "Live" Gentoo Linux as "root", the super user. You
should have a root ("#") prompt on the current console and can also switch to other consoles by pressing Alt-F2, AltF3 and Alt-F4. Get back to the one you started on by pressing Alt-F1.
Now continue with Extra Hardware Configuration.
To create a user account, we first enter their credentials, followed by its password. We use useraddand passwd
for these tasks. In the next example, we create a user called "john".
Code Listing 3.7: Creating a user account
# useradd -m -G users john
# passwd john
New password: (Enter john's password)
Re-enter password: (Re-enter john's password)
You can change your user id from root to the newly created user by using su:
Code Listing 3.8: Changing user id
# su - john
9/111
24/10/13
To be able to use sshd, you first need to set up your networking. Continue with the chapter on Configuring your
Network.
Network Detection
10/111
24/10/13
The interface name on your system can be quite different from eth0. Recent installation media might show regular
network interfaces names like eno0, ens1 or enp5s0. Just seek the interface in the ifconfigoutput that has an IP
address related to your local network.
In the remainder of this document, we will assume that the interface is called eth0.
If your proxy requires a username and password, you should use the following syntax for the variable:
Code Listing 1.3: Adding username/password to the proxy variable
http://username:password@proxy.gentoo.org:8080
If you are now able to use your network, you can skip the rest of this section and continue with Preparing the Disks.
If not, read on.
3.b. Automatic
Network Configuration
If the network doesn't work immediately, some installation media allow you to use net-setup(for regular or wireless
networks), pppoe-setup(for ADSL-users) or pptp(for PPTP-users - available on x86, amd64, alpha, ppc and
ppc64).
If your installation medium does not contain any of these tools or your network doesn't function yet, continue with
Manual Network Configuration.
Regular Ethernet users should continue with Default: Using net-setup
ADSL users should continue with Alternative: Using PPP
PPTP users should continue with Alternative: Using PPTP
11/111
24/10/13
net-setupwill ask you some questions about your network environment. When all is done, you should have a
working network connection. Test your network connection as stated before. If the tests are positive, congratulations!
You are now ready to install Gentoo. Skip the rest of this section and continue with Preparing the Disks.
If your network still doesn't work, continue with Manual Network Configuration.
If something goes wrong, double-check that you correctly typed your username and password by looking at
/etc/ppp/pap-secretsor /etc/ppp/chap-secretsand make sure you are using the right ethernet device. If
your ethernet device doesn't exist, you will have to load the appropriate network modules. In that case you should
continue with Manual Network Configuration as we explain how to load the appropriate network modules there.
If everything worked, continue with Preparing the Disks.
When all that is done, just run pptp(along with the options you couldn't set in options.pptp) to connect the
server:
Code Listing 2.5: Connection to a dial-in server
# pptp <server ip>
3.c. Manual
Network Configuration
12/111
24/10/13
(drivers) to support your hardware. In the vast majority of cases, it does a very good job. However, in some cases, it
may not auto-load the kernel modules you need.
If net-setupor pppoe-setupfailed, then it is possible that your network card wasn't found immediately. This
means you may have to load the appropriate kernel modules manually.
To find out what kernel modules we provide for networking, use ls:
Code Listing 3.1: Searching for provided modules
# ls /lib/modules/`uname -r`/kernel/drivers/net
If you find a driver for your network card, use modprobeto load the kernel module:
Code Listing 3.2: Using modprobe to load a kernel module
(As an example, we load the pcnet32 module)
# modprobe pcnet32
To check if your network card is now detected, use ifconfig. A detected network card would result in something
like this (again, eth0 here is just an example):
Code Listing 3.3: Testing availability of your network card, successful
# ifconfig eth0
eth0
Link encap:Ethernet HWaddr FE:FD:00:00:00:00
BROADCAST NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
If however you receive the following error, the network card is not detected:
Code Listing 3.4: Testing availability of your network card, failed
# ifconfig eth0
eth0: error fetching interface information: Device not found
The available network interface names on your system can be listed through the /sysfile system:
Code Listing 3.5: Viewing the available network interfaces
# ls /sys/class/net
dummy0 eth0 lo sit0 tap0 wlan0
In the above example, 6 interfaces are found. The eth0 one is most likely the (wired) Ethernet adapter whereas wlan0
is the wireless one.
Assuming that you now have a detected network card, you can retry net-setupor pppoe-setupagain (which
should work now), but for the hardcore people amongst you we explain how to configure your network manually.
Select one of the following sections based on your network setup:
Using DHCP for automatic IP retrieval
Preparing for Wireless Access if you have a wireless card
Understanding Network Terminology explains what you need to know about networking
Using ifconfig and route explains how to set up your networking manually
Using DHCP
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
13/111
24/10/13
DHCP (Dynamic Host Configuration Protocol) makes it possible to automatically receive networking information (IP
address, netmask, broadcast address, gateway, nameservers etc.). This only works if you have a DHCP server in
your network (or if your provider provides a DHCP service). To have a network interface receive this information
automatically, use dhcpcd:
Code Listing 3.6: Using dhcpcd
# dhcpcd eth0
Some network admins require that you use the
hostname and domainname provided by the DHCP server.
In that case, use
# dhcpcd -HD eth0
If this works (try pinging some internet server, like Google), then you are all set and ready to continue. Skip the rest
of this section and continue with Preparing the Disks.
If you are using a wireless (802.11) card, you may need to configure your wireless settings before going any further.
To see the current wireless settings on your card, you can use iwconfig. Running iwconfigmight show
something like:
Code Listing 3.7: Showing the current wireless settings
# iwconfig eth0
eth0
IEEE 802.11-DS ESSID:"GentooNode"
Mode:Managed Frequency:2.442GHz Access Point: 00:09:5B:11:CC:F2
Bit Rate:11Mb/s Tx-Power=20 dBm Sensitivity=0/65535
Retry limit:16 RTS thr:off Fragment thr:off
Power Management:off
Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm
Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
excessive retries:237 Invalid misc:350282 Missed beacon:84
Note: Some wireless cards may have a device name of wlan0or ra0instead of eth0. Run iwconfigwithout any
command-line parameters to determine the correct device name.
For most users, there are only two settings that might be important to change, the ESSID (aka wireless network
name) or the WEP key. If the ESSID and Access Point address listed are already that of your access point and you
are not using WEP, then your wireless is working. If you need to change your ESSID, or add a WEP key, you can
issue the following commands:
Note: If your wireless network is set up with WPA or WPA2, you will need to use wpa_supplicant. For more information
on configuring wireless networking in Gentoo Linux, please read the Wireless Networking chapter in the Gentoo
Handbook.
Code Listing 3.8: Changing ESSID and/or adding WEP key
(This sets the network name to "GentooNode")
# iwconfig eth0 essid GentooNode
(This sets a hex WEP key)
# iwconfig eth0 key 1234123412341234abcd
(This sets an ASCII key - prefix it with "s:")
# iwconfig eth0 key s:some-password
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
14/111
24/10/13
You can then confirm your wireless settings again by using iwconfig. Once you have wireless working, you can
continue configuring the IP level networking options as described in the next section (Understanding Network
Terminology) or use the net-setuptool as described previously.
If all of the above fails, you will have to configure your network manually. This is not difficult at all. However, you need
to be familiar with some network terminology, as you will need it to be able to configure your network to your
satisfaction. After reading this, you will know what a gateway is, what a netmask serves for, how a broadcast address
is formed and why you need nameservers.
In a network, hosts are identified by their IP address (Internet Protocol address). Such an address is a combination of
four numbers between 0 and 255. Well, at least that is how we perceive it. In reality, such an IP address consists of
32 bits (ones and zeros). Let's view an example:
Code Listing 3.9: Example of an IP address
IP Address (numbers):
IP Address (bits):
192.168.0.2
11000000 10101000 00000000 00000010
-------- -------- -------- -------192
168
0
2
Such an IP address is unique to a host as far as all accessible networks are concerned (i.e. every host that you are
able to reach must have a unique IP address). In order to distinguish between hosts inside and outside a network, the
IP address is divided in two parts: the network part and the host part.
The separation is written down with the netmask , a collection of ones followed by a collection of zeros. The part of
the IP that can be mapped on the ones is the network-part, the other one is the host-part. As usual, the netmask can
be written down as an IP-address.
Code Listing 3.10: Example of network/host separation
IP-address:
Netmask:
192
168
0
2
11000000 10101000 00000000 00000010
11111111 11111111 11111111 00000000
255
255
255
0
+--------------------------+--------+
Network
Host
In other words, 192.168.0.14 is still part of our example network, but 192.168.1.2 is not.
The broadcast address is an IP-address with the same network-part as your network, but with only ones as host-part.
Every host on your network listens to this IP address. It is truly meant for broadcasting packets.
Code Listing 3.11: Broadcast address
IP-address:
192
168
0
2
11000000 10101000 00000000 00000010
Broadcast: 11000000 10101000 00000000 11111111
192
168
0
255
+--------------------------+--------+
Network
Host
To be able to surf on the internet, you must know which host shares the Internet connection. This host is called the
gateway. Since it is a regular host, it has a regular IP address (for instance 192.168.0.1).
We previously stated that every host has its own IP address. To be able to reach this host by a name (instead of an
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
15/111
24/10/13
IP address) you need a service that translates a name (such as dev.gentoo.org) to an IP address (such as
64.5.62.82). Such a service is called a name service. To use such a service, you must define the necessary name
servers in /etc/resolv.conf.
In some cases, your gateway also serves as nameserver. Otherwise you will have to enter the nameservers provided
by your ISP.
To summarise, you will need the following information before continuing:
Netw ork Item
Example
Your IP address
192.168.0.2
Netmask
255.255.255.0
Broadcast
192.168.0.255
Gatew ay
192.168.0.1
Nameserv er(s)
195.130.130.5, 195.130.130.133
Now set up routing using route. Substitute ${GATEWAY}with your gateway IP address:
Code Listing 3.13: Using route
# route add default gw ${GATEWAY}
Now open /etc/resolv.confwith your favorite editor (in our example, we use nano):
Code Listing 3.14: Creating /etc/resolv.conf
# nano -w /etc/resolv.conf
Now fill in your nameserver(s) using the following as a template. Make sure you substitute ${NAMESERVER1}and
${NAMESERVER2}with the appropriate nameserver addresses:
Code Listing 3.15: /etc/resolv.conf template
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
That's it. Now test your network by pinging some Internet server (like Google). If this works, congratulations then. You
are now ready to install Gentoo. Continue with Preparing the Disks.
to Block Devices
Block Devices
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
16/111
24/10/13
We'll take a good look at disk-oriented aspects of Gentoo Linux and Linux in general, including Linux filesystems,
partitions and block devices. Then, once you're familiar with the ins and outs of disks and filesystems, you'll be
guided through the process of setting up partitions and filesystems for your Gentoo Linux installation.
To begin, we'll introduce block devices. The most famous block device is probably the one that represents the first
drive in a Linux system, namely /dev/sda. SCSI and Serial ATA drives are both labeled /dev/sd*; even IDE drives
are labeled /dev/sd*with the new libata framework in the kernel. If you're using the old device framework, then your
first IDE drive is /dev/hda.
The block devices above represent an abstract interface to the disk. User programs can use these block devices to
interact with your disk without worrying about whether your drives are IDE, SCSI or something else. The program can
simply address the storage on the disk as a bunch of contiguous, randomly-accessible 512-byte blocks.
Partitions
Although it is theoretically possible to use a full disk to house your Linux system, this is almost never done in
practice. Instead, full disk block devices are split up in smaller, more manageable block devices. On AMD64
systems, these are called partitions.
Partitions are divided in three types: primary, extended and logical.
A primary partition is a partition which has its information stored in the MBR (master boot record). As an MBR is very
small (512 bytes) only four primary partitions can be defined (for instance, /dev/sda1to /dev/sda4).
An extended partition is a special primary partition (meaning the extended partition must be one of the four possible
primary partitions) which contains more partitions. Such a partition didn't exist originally, but as four partitions were
too few, it was brought to life to extend the formatting scheme without losing backward compatibility.
A logical partition is a partition inside the extended partition. Their definitions aren't placed inside the MBR, but are
declared inside the extended partition.
Advanced Storage
The AMD64 Installation CDs provide support for LVM2. LVM2 increases the flexibility offered by your partitioning
setup. During the installation instructions, we will focus on "regular" partitions, but it is still good to know LVM2 is
supported as well.
4.b. Designing
a Partitioning Scheme
Filesystem
Size
Description
/dev/sda1
ext2
32M
Boot partition
/dev/sda2
(sw ap)
512M
Sw ap partition
/dev/sda3
ext4
Root partition
If you are interested in knowing how big a partition should be, or even how many partitions you need, read on.
Otherwise continue now with partitioning your disk by reading Using fdisk to Partition your Disk or Using parted to
Partition your Disk (both are partitioning tools, fdiskis well known and stable, partedis a bit more recent but
supports partitions larger than 2TB).
17/111
24/10/13
installing Gentoo to perform as a mailserver, your /varshould be separate as all mails are stored inside /var. A
good choice of filesystem will then maximise your performance. Gameservers will have a separate /optas most
gaming servers are installed there. The reason is similar for /home: security and backups. You will definitely want to
keep /usrbig: not only will it contain the majority of applications, the Portage tree alone takes around 500 Mbyte
excluding the various sources that are stored in it.
As you can see, it very much depends on what you want to achieve. Separate partitions or volumes have the following
advantages:
You can choose the best performing filesystem for each partition or volume
Your entire system cannot run out of free space if one defunct tool is continuously writing files to a partition or
volume
If necessary, file system checks are reduced in time, as multiple checks can be done in parallel (although this
advantage is more with multiple disks than it is with multiple partitions)
Security can be enhanced by mounting some partitions or volumes read-only, nosuid (setuid bits are ignored),
noexec (executable bits are ignored) etc.
However, multiple partitions have disadvantages as well. If not configured properly, you will have a system with lots of
free space on one partition and none on another. Another nuisance is that separate partitions - especially for
important mountpoints like /usror /var- often require the administrator to boot with an initramfs to mount the
partition before other boot scripts start. This isn't always the case though, so your results may vary.
There is also a 15-partition limit for SCSI and SATA unless you use GPT labels.
As an example partitioning, we show you one for a 20GB disk, used as a demonstration laptop (containing
webserver, mailserver, gnome, ...):
Code Listing 2.1: Filesystem usage example
$ df -h
Filesystem
Type
Size Used Avail Use% Mounted on
/dev/sda5
ext4
509M 132M 351M 28% /
/dev/sda2
ext4
5.0G 3.0G 1.8G 63% /home
/dev/sda7
ext4
7.9G 6.2G 1.3G 83% /usr
/dev/sda8
ext4 1011M 483M 477M 51% /opt
/dev/sda9
ext4
2.0G 607M 1.3G 32% /var
/dev/sda1
ext2
51M 17M 31M 36% /boot
/dev/sda6
swap
516M 12M 504M 2% <not mounted>
(Unpartitioned space for future usage: 2 GB)
/usris rather full (83% used) here, but once all software is installed, /usrdoesn't tend to grow that much. Although
allocating a few gigabytes of disk space for /varmay seem excessive, remember that Portage uses this partition by
default for compiling packages. If you want to keep /varat a more reasonable size, such as 1GB, you will need to
alter your PORTAGE_TMPDIRvariable in /etc/portage/make.confto point to the partition with enough free
space for compiling extremely large packages such as OpenOffice.
4.c. Using
Important: If your environment will deal with partitions larger than 2 TB, please use the Using parted to Partition your Disk
instructions instead. fdiskis not able to deal with larger partitions.
The following parts explain how to create the example partition layout using fdisk. The example partition layout was
mentioned earlier:
Partition
Description
/dev/sda1
Boot partition
/dev/sda2
Sw ap partition
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
18/111
24/10/13
/dev/sda3
Root partition
Once in fdisk, you'll be greeted with a prompt that looks like this:
Code Listing 3.2: fdisk prompt
Command (m for help):
Start
1
15
50
71
71
210
349
627
905
End
Blocks Id
14
105808+ 83
49
264600 82
70
158760 83
2184 15981840
5
209 1050808+ 83
348 1050808+ 83
626 2101648+ 83
904 2101648+ 83
2184 9676768+ 83
System
Linux
Linux swap
Linux
Extended
Linux
Linux
Linux
Linux
Linux
This particular disk is configured to house seven Linux filesystems (each with a corresponding partition listed as
"Linux") as well as a swap partition (listed as "Linux swap").
The partition has been scheduled for deletion. It will no longer show up if you type p, but it will not be erased until
your changes have been saved. If you made a mistake and want to abort without saving your changes, type q
immediately and hit enter and your partition will not be deleted.
Now, assuming that you do indeed want to wipe out all the partitions on your system, repeatedly type pto print out a
partition listing and then type dand the number of the partition to delete it. Eventually, you'll end up with a partition
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
19/111
24/10/13
Start
End
Blocks
Id System
Now that the in-memory partition table is empty, we're ready to create the partitions. We will use a default partitioning
scheme as discussed previously. Of course, don't follow these instructions to the letter if you don't want the same
partitioning scheme!
Now, when you type p, you should see the following partition printout:
Code Listing 3.7: Created boot partition
Command (m for help): p
Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot
/dev/sda1
Start
1
End
14
Blocks Id System
105808+ 83 Linux
We need to make this partition bootable. Type ato toggle the bootable flag on a partition and select 1. If you press p
again, you will notice that an * is placed in the "Boot" column.
20/111
24/10/13
Start
1
15
End
14
81
Blocks Id System
105808+ 83 Linux
506520 82 Linux swap
Start
1
15
82
End
Blocks
14
105808+
81
506520
3876 28690200
Id
83
82
83
System
Linux
Linux swap
Linux
Now that your partitions are created, you can continue with Creating Filesystems.
4.d. Using
In this chapter, we guide you through the creation of the example partition layout mentioned earlier in the instructions.
Unlike the previous chapter, we describe the method using the partedapplication instead. Both partedand
fdiskoffer the same functions, so if you partitioned your system using fdiskalready, you can skip this section
and continue with Creating Filesystems.
The example partition layout we use is shown in the next table:
Partition
Description
/dev/sda1
Boot partition
/dev/sda2
Sw ap partition
/dev/sda3
Root partition
21/111
24/10/13
The partedapplication is a somewhat more modern variant of fdisk. It offers a simpler interface for partitioning
your disks and supports very large partitions (more than 2 TB). Fire up partedon your disk (in our example, we use
/dev/sda):
Code Listing 4.1: Starting parted
# parted /dev/sda
GNU Parted 2.3
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
To find out about all options supported by parted, type helpand press return. For now, we just continue by asking
partedto show the partitions currently in use on the selected disk. The printcommand can be used for that.
Code Listing 4.2: An example partition configuration shown by parted
(parted) print
Model: SCSI Block Device
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number
1
2
3
Start
512B
2148MB
3222MB
End
2148MB
3222MB
21.5GB
Size
2148MB
1074MB
18.3GB
Type
File system
Flags
primary ext4
primary linux-swap(v1)
primary
lvm
Do the same for all other partitions that you don't need. However, make sure you do not make any mistakes here partedexecutes the changes immediate (unlike fdiskwhich stages them, allowing a user to "undo" his changes
before saving or exiting fdisk).
22/111
24/10/13
the msdos partition label). Otherwise, you will need to make your fourth partition an extended one which hosts
the rest of the disk, and create logical partitions inside it. If you use a gpt-labeled partition, then there is no
limit on the number of primary partitions.
The file system type to use. The partedapplication supports most common file systems and knows which
kind of partition ID it needs to use for these partitions. This does not mean that partedwill create a file
system on the partition (you can with the mkpartfscommand, but we'll use the regular mkfs.*commands
later for this purpose). The partition ID is often used by auto-detection tools to know what to do with a
particular partition.
The start location of a partition (which can be expressed in MB or GB)
The end location of the partition (which can be expressed in MB or GB)
One advantage of partedis that you can easily just use the partition sizes to automatically find the correct start
and end location as you will see in the next example.
Code Listing 4.5: Creating the partitions
# Create a 32 mbyte /boot partition
(parted) mkpart primary ext2 0 32mb
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
# Create a 512 mbyte swap partition
(parted) mkpart primary linux-swap 32mb 544mb
# Create a partition that spans the remaining disk.
# -1s (minus one s) means the end of the disk
(parted) mkpart primary ext4 544mb -1s
Warning: You requested a partition from 544MB to 21.5GB.
The closest location we can manage is 544MB to 21.5GB.
Is this still acceptable to you?
Yes/No? y
You can now printthe partition layout again to validate if everything is as expected. When you are satisfied, use
the quitcommand to exit parted.
4.e. Creating
Filesystems
Introduction
Now that your partitions are created, it is time to place a filesystem on them. If you don't care about what filesystem
to choose and are happy with what we use as default in this handbook, continue with Applying a Filesystem to a
Partition. Otherwise read on to learn about the available filesystems...
Filesystems
Several filesystems are available. Some of them are found stable on the amd64 architecture, others aren't. The
following filesystems are found to be stable: ext2, ext3, ext4 and XFS. JFS and ReiserFS may work but need more
testing. If you're really adventurous you can try the other filesystems.
ext2 is the tried and true Linux filesystem but doesn't have metadata journaling, which means that routine ext2
filesystem checks at startup time can be quite time-consuming. There is now quite a selection of newer-generation
journaled filesystems that can be checked for consistency very quickly and are thus generally preferred over their
non-journaled counterparts. Journaled filesystems prevent long delays when you boot your system and your
filesystem happens to be in an inconsistent state. If you intend to install Gentoo on a very small disk (less than
4GB), then you'll need to tell ext2 to reserve enough inodes when you create the filesystem. The mke2fsapplication
uses the "bytes-per-inode" setting to calculate how many inodes a file system should have. By running mke2fs -T
small /dev/<device>the number of inodes will generally quadruple for a given file system as its "bytes-perwww.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
23/111
24/10/13
inode" reduces from one every 16kB to one every 4kB. You can tune this even further by using mke2fs -i
<ratio> /dev/<device>.
ext3 is the journaled version of the ext2 filesystem, providing metadata journaling for fast recovery in addition to other
enhanced journaling modes like full data and ordered data journaling. It uses an HTree index that enables high
performance in almost all situations. In short, ext3 is a very good and reliable filesystem. If you intend to install
Gentoo on a very small disk (less than 4GB), then you'll need to tell ext3 to reserve enough inodes when you create
the filesystem. The mke2fsapplication uses the "bytes-per-inode" setting to calculate how many inodes a file
system should have. By running mke2fs -j -T small /dev/<device>the number of inodes will generally
quadruple for a given file system as its "bytes-per-inode" reduces from one every 16kB to one every 4kB. You can
tune this even further by using mke2fs -j -i <ratio> /dev/<device>.
ext4 is a filesystem created as a fork of ext3 bringing new features, performance improvements and removal of size
limits with moderate changes to the on-disk format. It can span volumes up to 1 EB and with maximum file size of 16
TB. Instead of the classic ext2/3 bitmap block allocation ext4 uses extents, which improve large file performance and
reduce fragmentation. Ext4 also provides more sophisticated block allocation algorithms (delayed allocation and
multiblock allocation) giving the filesystem driver more ways to optimise the layout of data on the disk. The ext4
filesystem is a compromise between production-grade code stability and the desire to introduce extensions to an
almost decade old filesystem. Ext4 is the recommended all-purpose all-platform filesystem.
JFS is IBM's high-performance journaling filesystem. JFS is a light, fast and reliable B+tree-based filesystem with
good performance in various conditions.
ReiserFS is a B+tree-based journaled filesystem that has good overall performance, especially when dealing with
many tiny files at the cost of more CPU cycles. ReiserFS appears to be less maintained than other filesystems.
XFS is a filesystem with metadata journaling which comes with a robust feature-set and is optimized for scalability.
XFS seems to be less forgiving to various hardware problems.
Creation Command
ext2
mkfs.ext2
ext3
mkfs.ext3
ext4
mkfs.ext4
reiserfs
mkreiserfs
xfs
mkfs.xfs
j fs
mkfs.jfs
For instance, to have the boot partition (/dev/sda1in our example) in ext2 and the root partition (/dev/sda3in our
example) in ext4 (as in our example), you would use:
Code Listing 5.1: Applying a filesystem on a partition
# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/sda3
Now create the filesystems on your newly created partitions (or logical volumes).
24/111
24/10/13
Create and activate the swap with the commands mentioned above.
4.f. Mounting
Now that your partitions are initialized and are housing a filesystem, it is time to mount those partitions. Use the
mountcommand. Don't forget to create the necessary mount directories for every partition you created. As an
example we mount the root and boot partition:
Code Listing 6.1: Mounting partitions
# mount /dev/sda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda1 /mnt/gentoo/boot
Note: If you want your /tmpto reside on a separate partition, be sure to change its permissions after mounting: chmod
1777 /mnt/gentoo/tmp. This also holds for /var/tmp.
We will also have to mount the proc filesystem (a virtual interface with the kernel) on /proc. But first we will need to
place our files on the partitions.
Continue with Installing the Gentoo Installation Files.
a Stage Tarball
If the date/time displayed is wrong, update it using the date MMDDhhmmYYYYsyntax (Month, Day, hour, minute and
Year). At this stage, you should use UTC time. You will be able to define your timezone later on. For instance, to set
the date to March 29th, 16:21 in the year 2005:
Code Listing 1.2: Setting the UTC date/time
# date 032916212005
5.b. Using
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
25/111
24/10/13
Depending on your installation medium, you have a couple of tools available to download a stage. If you have links
available, then you can immediately surf to the Gentoo mirrorlist and choose a mirror close to you: type links
http://www.gentoo.org/main/en/mirrors.xmland press enter.
If you don't have linksavailable you should have lynxat your disposal. If you need to go through a proxy, export
the http_proxyand ftp_proxyvariables:
Code Listing 2.2: Setting proxy information for lynx
# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"
Make sure you download a stage3 tarball - installations using a stage1 or stage2 tarball are not supported anymore
(and in most cases, you will not find stage1 or stage2 tarballs on our regular download mirrors anyway).
If you want to check the integrity of the downloaded stage tarball, use openssland compare the output with the
checksums provided on the mirror. The digests files provide several checksums, each taken with a different algorithm.
The recommended ones are SHA512 and Whirlpool.
Code Listing 2.4: Calculating the integrity checksum of a stage tarball
## Calculating the SHA512 checksum
# openssl dgst -r -sha512 stage3-amd64-<release>.tar.bz2
or
# sha512sum stage3-amd64-<release>.tar.bz2
## Calculating the Whirlpool checksum
# openssl dgst -r -whirlpool stage3-amd64-<release>.tar.bz2
Then compare the output of these commands with the value registered in the .DIGESTS(.asc)files that can be
found on the mirrors as well. The values need to match, otherwise the downloaded file might be corrupt (or the digests
file is).
Just like with the ISO file, you can also verify the cryptographic signature of the .DIGESTS.ascfile using gpgto
make sure the checksums have not been tampered with:
Code Listing 2.5: Validating the checksums using gpg
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
26/111
24/10/13
Make sure that you use the same options (xvjpf). The xstands for Extract, the vfor Verbose to see what happens
during the extraction process (optional), the jfor Decompress with bzip2, the pfor Preserve permissions and the f
to denote that we want to extract a file, not standard input.
Now that the stage is installed, continue with Configuring the Compile Options.
5.c. Configuring
Introduction
To optimize Gentoo, you can set a couple of variables which impact Portage behaviour. All those variables can be set
as environment variables (using export) but that isn't permanent. To keep your settings, Portage provides you with
/etc/portage/make.conf, a configuration file for Portage. It is this file we will edit now.
Note: A commented listing of all possible variables can be found in
/mnt/gentoo/usr/share/portage/config/make.conf.example. For a successful Gentoo installation you'll only
need to set the variables which are mentioned beneath.
Fire up your favorite editor (in this guide we use nano) so we can alter the optimization variables we will discuss
hereafter.
Code Listing 3.1: Opening /etc/portage/make.conf
# nano -w /mnt/gentoo/etc/portage/make.conf
As you probably noticed, the make.conf.examplefile is structured in a generic way: commented lines start with
"#", other lines define variables using the VARIABLE="content"syntax. The make.conffile uses the same
syntax. Several of those variables are discussed next.
27/111
24/10/13
Possible classes are s(for size-optimized), 0(zero - for no optimizations), 1, 2or even 3for more speedoptimization flags (every class has the same flags as the one before, plus some extras). -O2is the recommended
default. -O3is known to cause problems when used system-wide, so we recommend that you stick to -O2.
Another popular optimization flag is -pipe(use pipes rather than temporary files for communication between the
various stages of compilation). It has no impact on the generated code, but uses more memory. On systems with low
memory, gcc might get killed. In that case, do not use this flag.
Using -fomit-frame-pointer(which doesn't keep the frame pointer in a register for functions that don't need
one) might have serious repercussions on the debugging of applications.
When you define the CFLAGSand CXXFLAGS, you should combine several optimization flags. The default values
contained in the stage3 archive you unpacked should be good enough. The following example is just an example:
Code Listing 3.2: Defining the CFLAGS and CXXFLAGS variable
CFLAGS="-march=k8 -O2 -pipe" # Intel EM64T users should use -march=core2
# Use the same settings for both variables
CXXFLAGS="${CFLAGS}"
Note: You may also want to view the Compilation Optimization Guide for more information on how the various compilation
options can affect your system.
MAKEOPTS
With MAKEOPTSyou define how many parallel compilations should occur when you install a package. A good choice
is the number of CPUs (or CPU cores) in your system plus one, but this guideline isn't always perfect.
Code Listing 3.3: MAKEOPTS for a regular, 1-CPU system
MAKEOPTS="-j2"
A second important setting is the SYNC setting in make.conf. This variable contains the rsync server you want to
use when updating your Portage tree (the collection of ebuilds, scripts containing all the information Portage needs to
download and install software). Although you can manually enter a SYNC server for yourself, mirrorselectcan
ease that operation for you:
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
28/111
24/10/13
Congratulations! You are now inside your own Gentoo Linux environment. Of course it is far from finished, which is
why the installation still has some sections left :-)
If you at any time would need another terminal or console to access the chroot environment, all you need to do is to
execute the above steps again.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
29/111
24/10/13
2.c. Configuring
Portage
If you are behind a firewall that blocks rsync traffic, you safely ignore this step as you already have a quite up-to-date
Portage tree.
If you are warned that a new Portage version is available and that you should update Portage, you should do it now
using emerge --oneshot portage. You might also be notified that "news items need reading". More on that
next.
Portage news items were created to provide a communication medium to push critical messages to users via the
rsync tree. To manage them you will need to use eselect news. With the readsubcommand, you can read all
news items. With listyou can get an overview of the available news items, and with purgeyou can remove them
once you have read them and have no further need for the item(s) anymore.
Code Listing 2.4: Handling Portage news
# eselect news list
# eselect news read
More information about the newsreader is available through its manual page: man news.eselect.
30/111
24/10/13
As you can see, there are also desktopsubprofiles available for some architectures. Running eselect profile
listwill show all available profiles.
After viewing the available profiles for your architecture, you can use a different one if you wish:
Code Listing 2.6: Changing profiles
# eselect profile set 2
If you want to have a pure 64-bit environment, with no 32-bit applications or libraries, you should use a non-multilib
profile:
Code Listing 2.7: Switching to a non-multilib profile
# eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/13.0 *
[2] default/linux/amd64/13.0/desktop
[3] default/linux/amd64/13.0/desktop/gnome
[4] default/linux/amd64/13.0/desktop/kde
[5] default/linux/amd64/13.0/no-multilib
(Choose the no-multilib profile)
# eselect profile set 5
(Verify the change)
# eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/13.0
[2] default/linux/amd64/13.0/desktop
[3] default/linux/amd64/13.0/desktop/gnome
[4] default/linux/amd64/13.0/desktop/kde
[5] default/linux/amd64/13.0/no-multilib *
Note: The developersubprofile is specifically for Gentoo Linux development tasks. It is not meant to help set up general
development environments.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
31/111
24/10/13
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 you can define what options a
package should be compiled with. This is where USEcomes into play.
In the USEvariable you define keywords which are mapped onto compile-options. For instance, ssl will compile sslsupport in the programs that support it. -X will remove X-server support (note the minus sign in front). gnome gtk -k de
-qt4 will compile your programs with gnome (and gtk) support, and not with kde (and qt) support, making your system
fully tweaked for GNOME.
The default USEsettings are placed in the make.defaultsfiles of your profile. You will find make.defaultsfiles
in the directory which /etc/portage/make.profilepoints to and all parent directories as well. The default USE
setting is the sum of all USEsettings in all make.defaultsfiles. What you place in /etc/portage/make.conf
is calculated against these defaults settings. If you add something to the USEsetting, it is added to the default list. If
you remove something from the USEsetting (by placing a minus sign in front of it) it is removed from the default list (if
it was in the default list at all). Never alter anything inside the /etc/portage/make.profiledirectory; it gets
overwritten when you update Portage!
A full description on USEcan be found in the second part of the Gentoo Handbook, USE flags. A full description on
the available USE flags can be found on your system in /usr/portage/profiles/use.desc.
Code Listing 2.8: Viewing available USE flags
# less /usr/portage/profiles/use.desc
(You can scroll using your arrow keys, exit by pressing 'q')
As an example we show a USEsetting for a KDE-based system with DVD, ALSA and CD Recording support:
Code Listing 2.9: Opening /etc/portage/make.conf
# nano -w /etc/portage/make.conf
Code Listing 2.10: USE setting
USE="-gtk -gnome qt4 kde dvd alsa cdr"
6.c. Optional:
Using systemd
The remainder of the Gentoo Handbook focuses on OpenRC as the default init support system. If you want to use
systemd instead, or are planning to use Gnome 3.8 and later (which requires systemd), please consult the systemd
page on the Gentoo wiki as it elaborates on the different configuration settings and methods.
The Gentoo Handbook can then be followed with that page in mind.
6.d. Timezone
Finally select your timezone so that your system knows where it is physically located. Look for your timezone in
/usr/share/zoneinfo, then copy it to /etc/localtime. Please avoid the
/usr/share/zoneinfo/Etc/GMT*timezones as their names do not indicate the expected zones. For instance,
GMT-8is in fact GMT+8.
Code Listing 4.1: Setting the timezone information
# ls /usr/share/zoneinfo
(Suppose you want to use Europe/Brussels)
# cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime
(Next set the timezone)
# echo "Europe/Brussels" > /etc/timezone
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
32/111
24/10/13
the Sources
Choosing a Kernel
The core around which all distributions are built is the Linux kernel. It is the layer between the user programs and
your system hardware. Gentoo provides its users several possible kernel sources. A full listing with description is
available at the Gentoo Kernel Guide.
For AMD64-based systems we have gentoo-sources(kernel source patched for extra features).
Choose your kernel source and install it using emerge.
Code Listing 1.1: Installing a kernel source
# emerge gentoo-sources
When you take a look in /usr/srcyou should see a symlink called linuxpointing to your kernel source. In this
case, the installed kernel source points to gentoo-sources-3.4.9. Your version may be different, so keep this in
mind.
Code Listing 1.2: Viewing the kernel source symlink
# ls -l /usr/src/linux
lrwxrwxrwx
1 root root
Now it is time to configure and compile your kernel source. You can use genkernelfor this, which will build a
generic kernel as used by the Installation CD. We explain the "manual" configuration first though, as it is the best
way to optimize your environment.
If you want to manually configure your kernel, continue now with Default: Manual Configuration. If you want to use
genkernelyou should read Alternative: Using genkernel instead.
7.b. Default:
Manual Configuration
Introduction
Manually configuring a kernel is often seen as the most difficult procedure a Linux user ever has to perform. Nothing
is less true -- after configuring a couple of kernels you don't even remember that it was difficult ;)
However, one thing is true: you must know your system when you start configuring a kernel manually. Most
information can be gathered by emerging pciutils (emerge pciutils) which contains lspci. You will now be able
to use lspciwithin the chrooted environment. You may safely ignore any pcilib warnings (like pcilib: cannot open
/sys/bus/pci/devices) that lspcithrows out. Alternatively, you can run lspcifrom a non-chrooted environment. The
results are the same. You can also run lsmodto see what kernel modules the Installation CD uses (it might provide
you with a nice hint on what to enable).
Now go to your kernel source directory and execute make menuconfig. This will fire up an ncurses-based
configuration menu.
Code Listing 2.1: Invoking menuconfig
# cd /usr/src/linux
# make menuconfig
You will be greeted with several configuration sections. We'll first list some options you must activate (otherwise
Gentoo will not function, or not function properly without additional tweaks).
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
33/111
24/10/13
Next select Maintain a devtmpfs file system to mount at /dev so that critical device files are already available early in
the boot process.
Code Listing 4.14: Enabling devtmpfs support
Device Drivers --->
Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
[ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs
Now go to File Systemsand select support for the filesystems you use. Don't compile the file system you use for
the root filesystem as module, otherwise your Gentoo system will not be able to mount your partition. Also select
Virtual memoryand /proc file system.
Code Listing 2.4: Selecting necessary file systems
File systems --->
(Select one or more of the following options as needed by your system)
<*> Second extended fs support
<*> Ext3 journalling file system support
<*> The Extended 4 (ext4) filesystem
<*> Reiserfs support
<*> JFS filesystem support
<*> XFS filesystem support
...
Pseudo Filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
(Enable GPT partition label support if you used that previously)
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
34/111
24/10/13
If you are using PPPoE to connect to the Internet or you are using a dial-up modem, you will need the following
options in the kernel:
Code Listing 2.5: Selecting PPPoE necessary drivers
Device Drivers --->
Network device support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
The two compression options won't harm but are not definitely needed, neither does the PPP over Ethernet
option, that might only be used by pppwhen configured to do kernel mode PPPoE.
If you require it, don't forget to include support in the kernel for your ethernet card.
If you have a multi-CPU Opteron or a multi-core (e.g. AMD64 X2) system, you should activate "Symmetric multiprocessing support":
Code Listing 2.6: Activating SMP support
Processor type and features --->
[*] Symmetric multi-processing support
Note: In multi-core systems, each core counts as one processor.
If you use USB Input Devices (like Keyboard or Mouse) don't forget to enable those as well:
Code Listing 2.7: Activating USB Support for Input Devices
Device Drivers --->
[*] HID Devices --->
<*> USB Human Interface Device (full HID) support
When the kernel has finished compiling, copy the kernel image to /boot. Use whatever name you feel is appropriate
for your kernel choice and remember it as you will need it later on when you configure your bootloader. Remember to
replace kernel-3.4.9-gentoowith the name and version of your kernel.
Code Listing 2.9: Installing the kernel
# cp arch/x86_64/boot/bzImage /boot/kernel-3.4.9-gentoo
35/111
24/10/13
If you use a specific partition layout where important file system locations (like /usror /var) are on separate
partitions, then you will need to setup an initramfs so that this partition can be mounted before it is needed.
Without an initramfs, you risk that the system will not boot up properly as the tools that are responsible for mounting
the file systems need information that resides on those file systems. An initramfs will pull in the necessary files into
an archive which is used right after the kernel boots, but before the control is handed over to the inittool. Scripts
on the initramfs will then make sure that the partitions are properly mounted before the system continues booting.
To install an initramfs, install genkernelfirst, then have it generate an initramfs for you.
Code Listing 2.10: Building an initramfs
# emerge genkernel
# genkernel --install initramfs
If you need specific support in the initramfs, such as lvm or raid, add in the appropriate options to genkernel. See
genkernel --helpfor more information, or the next example which enables support for LVM and software raid
(mdadm):
Code Listing 2.11: Building an initramfs with support for LVM and software raid
# genkernel --lvm --mdadm --install initramfs
The initramfs will be stored in /boot. You can find the file by simply listing the files starting with initramfs:
Code Listing 2.12: Checking the initramfs file name
# ls /boot/initramfs*
7.c. Alternative:
Using genkernel
If you are reading this section, you have chosen to use our genkernelscript to configure your kernel for you.
Now that your kernel source tree is installed, it's now time to compile your kernel by using our genkernelscript to
automatically build a kernel for you. genkernelworks by configuring a kernel nearly identically to the way our
Installation CD kernel is configured. This means that when you use genkernelto build your kernel, your system will
generally detect all your hardware at boot-time, just like our Installation CD does. Because genkernel doesn't require
any manual kernel configuration, it is an ideal solution for those users who may not be comfortable compiling their
own kernels.
Now, let's see how to use genkernel. First, emerge the genkernel ebuild:
Code Listing 3.1: Emerging genkernel
# emerge genkernel
Now, compile your kernel sources by running genkernel all. Be aware though, as genkernelcompiles a kernel
that supports almost all hardware, this compilation will take quite a while to finish!
Note that, if your boot partition doesn't use ext2 or ext3 as filesystem you might need to manually configure your
kernel using genkernel --menuconfig alland add support for your filesystem in the kernel (i.e. not as a
module). Users of LVM2 will probably want to add --lvmas an argument as well.
Code Listing 3.2: Running genkernel
# genkernel all
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
36/111
24/10/13
Once genkernelcompletes, a kernel, full set of modules and initial ram disk (initramfs) will be created. We will use
the kernel and initrd when configuring a boot loader later in this document. Write down the names of the kernel and
initrd as you will need it when writing the bootloader configuration file. The initrd will be started immediately after
booting to perform hardware autodetection (just like on the Installation CD) before your "real" system starts up.
Code Listing 3.3: Checking the created kernel image name and initrd
# ls /boot/kernel* /boot/initramfs*
7.d. Kernel
Modules
For instance, to automatically load the 3c59x.komodule (which is the driver for a specific 3Com network card
family), edit the /etc/conf.d/modulesfile and enter the module name in it.
Code Listing 4.2: Editing /etc/conf.d/modules
# nano -w /etc/conf.d/modules
modules_2_6="3c59x"
Creating /etc/fstab
/etc/fstabuses a special syntax. Every line consists of six fields, separated by whitespace (space(s), tabs or a
mixture). Each field has its own meaning:
The first field shows the partition described (the path to the device file)
The second field shows the mount point at which the partition should be mounted
The third field shows the filesystem used by the partition
The fourth field shows the mount options used by mountwhen it wants to mount the partition. As every
filesystem has its own mount options, you are encouraged to read the mount man page (man mount) for a full
listing. Multiple mount options are comma-separated.
The fifth field is used by dumpto determine if the partition needs to be dumped or not. You can generally
leave this as 0(zero).
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
37/111
24/10/13
The sixth field is used by fsckto determine the order in which filesystems should be checked if the system
wasn't shut down properly. The root filesystem should have 1while the rest should have 2(or 0if a filesystem
check isn't necessary).
Important: The default /etc/fstabfile provided by Gentoo is not a valid fstab file. You have to create your own
/etc/fstab.
Code Listing 1.1: Opening /etc/fstab
# nano -w /etc/fstab
Let us take a look at how we write down the options for the /bootpartition. This is just an example, if you didn't or
couldn't create a /boot, don't copy it.
In our default AMD64 partitioning example, /bootis usually the /dev/sda1partition, with ext2as filesystem. It
needs to be checked during boot, so we would write down:
Code Listing 1.2: An example /boot line for /etc/fstab
/dev/sda1
/boot
ext2
defaults
02
Some users don't want their /bootpartition to be mounted automatically to improve their system's security. Those
people should substitute defaultswith noauto. This does mean that you need to manually mount this partition
every time you want to use it.
Add the rules that match your partitioning scheme and append rules for your CD-ROM drive(s), and of course, if you
have other partitions or drives, for those too.
Now use the example below to create your /etc/fstab:
Code Listing 1.3: A full /etc/fstab example
/dev/sda1
/dev/sda2
/dev/sda3
/boot
none
/
/dev/cdrom /mnt/cdrom
ext2
swap
ext4
defaults,noatime
sw
noatime
02
00
01
auto
noauto,user
00
automakes mountguess for the filesystem (recommended for removable media as they can be created with one of
many filesystems) and usermakes it possible for non-root users to mount the CD.
To improve performance, most users would want to add the noatimemount option, which results in a faster system
since access times aren't registered (you don't need those generally anyway).
Double-check your /etc/fstab, save and quit to continue.
8.b. Networking
Information
38/111
24/10/13
hostname="tux"
Second, if you need a domainname, set it in /etc/conf.d/net. You only need a domain if your ISP or network
administrator says so, or if you have a DNS server but not a DHCP server. You don't need to worry about DNS or
domainnames if your networking is setup for DHCP.
Code Listing 2.2: Setting the domainname
# nano -w /etc/conf.d/net
(Set the dns_domain variable to your domain name)
dns_domain_lo="homenetwork"
Note: If you choose not to set a domainname, you can get rid of the "This is hostname.(none)" messages at your login
screen by editing /etc/issue. Just delete the string .\Ofrom that file.
If you have a NIS domain (if you don't know what that is, then you don't have one), you need to define that one too:
Code Listing 2.3: Setting the NIS domainname
# nano -w /etc/conf.d/net
(Set the nis_domain variable to your NIS domain name)
nis_domain_lo="my-nisdomain"
Note: For more information on configuring DNS and NIS, please read the examples provided in
/usr/share/doc/openrc-*/net.example.bz2which can be read using bzless. Also, you may want to emerge
openresolvto help manage your DNS/NIS setup.
All networking information is gathered in /etc/conf.d/net. It uses a straightforward yet not intuitive syntax if you
don't know how to set up networking manually. But don't fear, we'll explain everything. A fully commented example
that covers many different configurations is available in /usr/share/doc/openrc-*/net.example.bz2.
DHCP is used by default. For DHCP to work, you will need to install a DHCP client. This is described later in
Installing Necessary System Tools. Do not forget to install a DHCP client.
If you need to configure your network connection either because you need specific DHCP options or because you do
not use DHCP at all, open /etc/conf.d/netwith your favorite editor (nanois used in this example):
Code Listing 2.4: Opening /etc/conf.d/net for editing
# nano -w /etc/conf.d/net
39/111
24/10/13
To enter your own IP address, netmask and gateway, you need to set both config_eth0and routes_eth0:
Note: This assumes that your network interface will be called eth0. This is, however, very system dependent. It is
recommended to assume that the interface is named the same as the interface name when booted from the installation
media if the installation media is sufficiently recent. More information can be found in Network Interface Naming.
Code Listing 2.6: Manually setting IP information for eth0
config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"
If you have several network interfaces, you need to create the appropriate net.*files just like you did with
net.eth0.
If you later find out the assumption about the network interface name (which we currently document as eth0) was
wrong, then
1. update the /etc/conf.d/netfile with the correct interface name (like enp3s0 instead of eth0),
2. create new symbolic link (like /etc/init.d/net.enp3s0),
3. remove the old symbolic link (rm /etc/init.d/net.eth0),
4. add the new one to the default runlevel, and
5. remove the old one using rc-update del net.eth0 default.
40/111
24/10/13
System Information
Gentoo uses /etc/rc.confto configure the services, startup, and shutdown of your system. Open up
/etc/rc.confand enjoy all the comments in the file.
Code Listing 3.2: Configuring services
# nano -w /etc/rc.conf
When you're finished configuring these two files, save them and exit.
Gentoo uses /etc/conf.d/keymapsto handle keyboard configuration. Edit it to configure your keyboard.
Code Listing 3.3: Opening /etc/conf.d/keymaps
# nano -w /etc/conf.d/keymaps
Take special care with the keymapvariable. If you select the wrong keymap, you will get weird results when typing
on your keyboard.
When you're finished configuring /etc/conf.d/keymaps, save and exit.
Gentoo uses /etc/conf.d/hwclockto set clock options. Edit it according to your needs.
Code Listing 3.4: Opening /etc/conf.d/hwclock
# nano -w /etc/conf.d/hwclock
If your hardware clock is not using UTC, you need to add clock="local"to the file. Otherwise you will notice
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
41/111
24/10/13
Configure locales
You will probably only use one or maybe two locales on your system. You have to specify locales you will need in
/etc/locale.gen.
Code Listing 3.5: Opening /etc/locale.gen
# nano -w /etc/locale.gen
The following locales are an example to get both English (United States) and German (Germany) with the
accompanying character formats (like UTF-8).
Code Listing 3.6: Specify your locales
en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
Note: You can select your desired locales in the list given by running locale -a.
Warning: We strongly suggest that you should use at least one UTF-8 locale because some applications may require it.
The next step is to run locale-gen. It will generates all the locales you have specified in the /etc/locale.gen
file.
Code Listing 3.7: Running locale-gen
# locale-gen
Once done, you now have the possibility to set the system-wide locale settings in the /etc/env.d/02localefile:
Code Listing 3.8: Setting the default system locale in /etc/env.d/02locale
LANG="de_DE.UTF-8"
LC_COLLATE="C"
We made a full Localization Guide to help you through this process. You can also read the detailed UTF-8 article for
very specific informations to enable UTF-8 on your system.
Please continue with Installing Necessary System Tools.
42/111
24/10/13
history of logging capabilities -- if you want you can log everything that happens on your system in logfiles. This
happens through the system logger.
Gentoo offers several system loggers to choose from. There are sysklogd, which is the traditional set of system
logging daemons, syslog-ng, an advanced system logger, and metalogwhich is a highly-configurable system
logger. Others might be available through Portage as well - our number of available packages increases on a daily
basis.
If you plan on using sysklogdor syslog-ngyou might want to install logrotateafterwards as those system
loggers don't provide any rotation mechanism for the log files.
To install the system logger of your choice, emergeit and have it added to the default runlevel using rc-update.
The following example installs syslog-ng. Of course substitute with your system logger:
Code Listing 1.1: Installing a system logger
# emerge syslog-ng
# rc-update add syslog-ng default
9.b. Optional:
Cron Daemon
Next is the cron daemon. Although it is optional and not required for your system, it is wise to install one. But what is
a cron daemon? A cron daemon executes scheduled commands. It is very handy if you need to execute some
command regularly (for instance daily, weekly or monthly).
Gentoo offers three possible cron daemons: dcron, fcronand vixie-cron. Installing one of them is similar to
installing a system logger. However, dcronand fcronrequire an extra configuration command, namely crontab
/etc/crontab. If you don't know what to choose, use vixie-cron.
We only provide vixie-cronfor networkless installations. If you want another cron daemon you can wait and install
it later on.
Code Listing 2.1: Installing a cron daemon
# emerge vixie-cron
# rc-update add vixie-cron default
(Only if you have chosen dcron or fcron) # crontab /etc/crontab
9.c. Optional:
File Indexing
If you want to index your system's files so you are able to quickly locate them using the locatetool, you need to
install sys-apps/mlocate.
Code Listing 3.1: Installing mlocate
# emerge mlocate
9.d. Optional:
Remote Access
If you need to access your system remotely after installation, don't forget to add sshdto the default runlevel:
Code Listing 4.1: Adding sshd to the default runlevel
# rc-update add sshd default
If you need serial console access (which is possible in case of remote servers), you might need to uncomment the
serial console section in /etc/inittabif it has not been done already automatically.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
43/111
24/10/13
9.e. File
System Tools
Depending on what file systems you are using, you need to install the necessary file system utilities (for checking
the filesystem integrity, creating additional file systems etc.). Please note that tools for managing ext2, ext3 or ext4
filesystems (e2fsprogs) are already installed as a part of the system.
The following table lists the tools you need to install if you use a certain file system:
File System
Tool
Install Command
XFS
xfsprogs
emerge xfsprogs
ReiserFS
reiserfsprogs
emerge reiserfsprogs
JFS
j fsutils
emerge jfsutils
9.f. Networking
Tools
If you don't require any additional networking-related tools (such as ppp or a dhcp client) continue with Configuring the
Bootloader.
your Choice
Introduction
Now that your kernel is configured and compiled and the necessary system configuration files are filled in correctly, it
is time to install a program that will fire up your kernel when you start the system. Such a program is called a
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
44/111
24/10/13
bootloader.
For AMD64, Gentoo Linux provides GRUB, GRUB2 and LILO.
Note: GRUB2 might not be stabilized at the moment of reading this. However, stabilization is due very soon so we
temporarily document both GRUB and GRUB2 and will remove the GRUB instructions after stabilization of GRUB2.
But before we install the bootloader, we inform you how to configure framebuffer (assuming you want it of course).
With framebuffer you can run the Linux command line with (limited) graphical features (such as using the nice
bootsplash image Gentoo provides).
Optional: Framebuffer
If you have configured your kernel with framebuffer support (or you used genkerneldefault kernel configuration),
you can activate it by adding a a videostatement to your bootloader configuration file.
First of all, you need to know your framebuffer device. You should have used uvesafbas the VESA driver.
The videostatement controls framebuffer display options. It needs to be given the framebuffer driver followed by the
control statements you wish to enable. All variables are listed in
/usr/src/linux/Documentation/fb/uvesafb.txt. The most-used options are:
Control
Description
yw rap
Assume that the graphical card can w rap around its memory (i.e. continue at the beginning w hen it has approached the
end)
mtrr:n
mode
Set up the resolution, color depth and refresh rate. For instance, 1024x768-32@85for a resolution of 1024x768, 32 bit
color depth and a refresh rate of 85 Hz.
The result could be something like video=uvesafb:mtrr:3,ywrap,1024x768-32@85. Write this setting down;
you will need it shortly.
Now continue by installing GRUB, GRUB2 or LILO.
10.b. Default:
What is Legacy?
GRUB has been reworked and a new release dubbed GRUB2 is made available. The new GRUB2 codebase is quite
different from the current GRUB, which is why this GRUB version is now dubbed as "GRUB Legacy".
We recommend to start with GRUB2 as soon as it is available. The migration of GRUB to GRUB2 is documented
online. The instructions in this section relate to "GRUB Legacy" and will disappear from the book soon after the
stabilization of GRUB2.
45/111
24/10/13
configured to boot from SCSI devices.) When you ask the BIOS to boot from a different hard disk (for instance your
primary slave), that harddisk is seen as hd0.
Assuming you have a hard drive on /dev/sdaand two more on /dev/sdband /dev/sdc, /dev/sdb7gets
translated to (hd1,6). It might sound tricky and tricky it is indeed, but as we will see, GRUB offers a tab completion
mechanism that comes handy for those of you having a lot of hard drives and partitions and who are a little lost in the
GRUB numbering scheme.
Having gotten the feel for that, it is time to install GRUB.
Installing GRUB
To install GRUB, let's first emerge it:
Important: If you are using a non-multilib profile, you should not emerge grub, but instead you should emerge grubstatic. If you plan to use a non-multilib profile and you have disabled IA-32 emulation in your kernel, then you should use
lilo.
Code Listing 2.1: Installing GRUB
# emerge sys-boot/grub:0
Although GRUB is now installed, we still need to write up a configuration file for it and place GRUB in our MBR so
that GRUB automatically boots your newly created kernel. Create /boot/grub/grub.confwith nano(or, if
applicable, another editor):
Code Listing 2.2: Creating /boot/grub/grub.conf
# nano -w /boot/grub/grub.conf
Now we are going to write up a grub.conf. Make sure you use your kernel image filename and, if appropriate, your
initrd image filename.
Note: Grub assigns device designations from the BIOS. If you change your BIOS settings, your device letters and numbers
may change, too. For example, if you change your device boot order, you may need to change your grub configuration.
Note: If your root filesystem is JFS, you must add " ro" to the kernelline since JFS needs to replay its log before it allows
read-write mounting.
Code Listing 2.3: Example grub.conf
# Which listing to boot as default. 0 is the first, 1 the second etc.
default 0
# How many seconds to wait before the default listing is booted.
timeout 30
# Nice, fat splash-image to spice things up :)
# Comment out if you don't have a graphics card installed
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Gentoo Linux 3.4.9
# Partition where the kernel image (or operating system) is located
root (hd0,0)
kernel /boot/kernel-3.4.9-gentoo root=/dev/sda3
title Gentoo Linux 3.4.9 (rescue)
# Partition where the kernel image (or operating system) is located
root (hd0,0)
kernel /boot/kernel-3.4.9-gentoo root=/dev/sda3 init=/bin/bb
# The next four lines are only if you dualboot with a Windows system.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
46/111
24/10/13
If, while building the Linux kernel, you opted to include an initramfs to boot from, then you will need to change the
configuration by referring to this initramfs file and telling the initramfs where your real root device is at:
Code Listing 2.4: GRUB snippet for initramfs-enabled kernel builds
title Gentoo Linux 3.4.9
root (hd0,0)
kernel /boot/3.4.9 real_root=/dev/sda3
initrd /boot/initramfs-genkernel-amd64-3.4.9-gentoo
If you used a different partitioning scheme and/or kernel image, adjust accordingly. However, make sure that anything
that follows a GRUB-device (such as (hd0,0)) is relative to the mountpoint, not the root. In other words,
(hd0,0)/grub/splash.xpm.gzis in reality /boot/grub/splash.xpm.gzsince (hd0,0)is /boot.
Besides, if you chose to use a different partitioning scheme and did not put /bootin a separate partition, the /boot
prefix used in the above code samples is really required. If you followed our suggested partitioning plan, the /boot
prefix it not required, but a bootsymlink makes it work. In short, the above examples should work whether you
defined a separate /bootpartition or not.
If you need to pass any additional options to the kernel, simply add them to the end of the kernel command. We're
already passing one option (root=/dev/sda3or real_root=/dev/sda3), but you can pass others as well,
such as the videostatement for framebuffer as we discussed previously.
If your bootloader configuration file contains the real_root parameter, use the real_rootflags parameter to set root
filesystem mount options.
If you're using a 2.6.7 or higher kernel and you jumpered your harddrive because the BIOS can't handle large
harddrives you'll need to append sda=stroke. Replace sda with the device that requires this option.
genkernelusers should know that their kernels use the same boot options as is used for the Installation CD. For
instance, if you have SCSI devices, you should add doscsias kernel option.
Now save the grub.conffile and exit. You still need to install GRUB in the MBR (Master Boot Record) so that
GRUB is automatically executed when you boot your system.
The GRUB developers recommend the use of grub-install. However, if for some reason grub-installfails to
work correctly you still have the option to manually install GRUB.
Continue with Default: Setting up GRUB using grub-install or Alternative: Setting up GRUB using manual instructions.
When using Linux virtio disks, we need to tell grub where to find the disks as the grub-installcommand will
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
47/111
24/10/13
otherwise fail. This is done by adding the device definition to the device.mapfile:
Code Listing 2.6: Adding the virtio disk to the device map table
# echo "(hd0)
If you have more questions regarding GRUB, please consult the GRUB FAQ, the GRUB Wiki, or read info grubin
your terminal.
Continue with Rebooting the System.
In the example configuration we want to install GRUB so that it reads its information from the boot partition
/dev/sda1, and installs the GRUB boot record on the hard drive's MBR (master boot record) so that the first thing
we see when we turn on the computer is the GRUB prompt. Of course, if you haven't followed the example
configuration during the installation, change the commands accordingly.
The tab completion mechanism of GRUB can be used from within GRUB. For instance, if you type in "root ("
followed by a TAB, you will be presented with a list of devices (such as hd0). If you type in "root (hd0," followed
by a TAB, you will receive a list of available partitions to choose from (such as hd0,0).
By using the tab completion, setting up GRUB should be not that hard. Now go on, configure GRUB, shall we? :-)
Code Listing 2.9: Installing GRUB in the MBR
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
Note: If you want to install GRUB in a certain partition instead of the MBR, you have to alter the setupcommand so it
points to the right partition. For instance, if you want GRUB installed in /dev/sda3, then the command becomes setup
(hd0,2). Few users however want to do this.
If you have more questions regarding GRUB, please consult the GRUB FAQ, the GRUB Wiki, or read info grubin
your terminal.
Continue with Rebooting the System.
10.c. Alternative:
Using LILO
Installing LILO
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
48/111
24/10/13
LILO, the LInuxLOader, is the tried and true workhorse of Linux bootloaders. However, it lacks some features that
GRUB has (which is also the reason why GRUB is currently gaining popularity). The reason why LILO is still used is
that, on some systems, GRUB doesn't work and LILO does. Of course, it is also used because some people know
LILO and want to stick with it. Either way, Gentoo supports both, and apparently you have chosen to use LILO.
Installing LILO is a breeze; just use emerge.
Code Listing 3.1: Installing LILO
# emerge lilo
Configuring LILO
To configure LILO, you must create /etc/lilo.conf. Fire up your favorite editor (in this handbook we use nano
for consistency) and create the file.
Code Listing 3.2: Creating /etc/lilo.conf
# nano -w /etc/lilo.conf
Some sections ago we have asked you to remember the kernel-image name you have created. In the next example
lilo.confwe use the example partitioning scheme.
Make sure you use your kernel image filename and, if appropriate, your initrd image filename.
Note: If your root filesystem is JFS, you must add a append="ro"line after each boot item since JFS needs to replay its
log before it allows read-write mounting.
Code Listing 3.3: Example /etc/lilo.conf
boot=/dev/sda
prompt
timeout=50
default=gentoo
image=/boot/kernel-3.4.9-gentoo
label=gentoo
# Name we give to this section
read-only
# Start with a read-only root. Do not alter!
root=/dev/sda3
# Location of the root filesystem
image=/boot/kernel-3.4.9-gentoo
label=gentoo.rescue
# Name we give to this section
read-only
# Start with a read-only root. Do not alter!
root=/dev/sda3
# Location of the root filesystem
append="init=/bin/bb" # Launch the Gentoo static rescue shell
# The next two lines are only if you dualboot with a Windows system.
# In this case, Windows is hosted on /dev/sda6.
other=/dev/sda6
label=windows
Note: If you use a different partitioning scheme and/or kernel image, adjust accordingly.
If, while building the Linux kernel, you opted to include an initramfs to boot from, then you will need to change the
configuration by referring to this initramfs file and telling the initramfs where your real root device is at:
Code Listing 3.4: LILO snippet for initramfs-enabled kernel builds
image=/boot/kernel-3.4.9-gentoo
label=gentoo
read-only
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
49/111
24/10/13
append="real_root=/dev/sda3"
initrd=/boot/initramfs-genkernel-amd64-3.4.9-gentoo
If you need to pass any additional options to the kernel, add an appendstatement to the section. As an example,
we add the videostatement to enable framebuffer:
Code Listing 3.5: Using append to add kernel options
image=/boot/kernel-3.4.9-gentoo
label=gentoo
read-only
root=/dev/sda3
append="video=uvesafb:mtrr,ywrap,1024x768-32@85"
If you're using a 2.6.7 or higher kernel and you jumpered your harddrive because the BIOS can't handle large
harddrives you'll need to append sda=stroke. Replace sda with the device that requires this option.
genkernelusers should know that their kernels use the same boot options as is used for the Installation CD. For
instance, if you have SCSI devices, you should add doscsias kernel option.
Now save the file and exit. To finish up, you have to run /sbin/liloso LILO can apply the /etc/lilo.confto
your system (i.e. install itself on the disk). Keep in mind that you'll also have to run /sbin/liloevery time you
install a new kernel or make any changes to the menu.
Code Listing 3.6: Finishing the LILO installation
# /sbin/lilo
If you have more questions regarding LILO, please consult its wikipedia page.
You can now continue with Rebooting the System.
10.d. Alternative:
Using GRUB2
Installing GRUB2
GRUB2 is provided through the sys-boot/grubpackage. To deploy GRUB2, use the SLOT notation to tell Portage
to install GRUB2. SLOTs are a feature of Gentoo Linux where multiple versions of the same package can be
deployed simultaneously on a system. In our case, this means that GRUB Legacy and GRUB2 can be installed on a
system (software-wise) at the same time.
Note: GRUB2 might still be marked as ~AMD64. If that is the case, you can either wait and use GRUB Legacy or unmask
the package. This is explained in Mixing Stable with Testing. Once GRUB2 is stabilized, the SLOT operator also is no
longer mandatory.
Code Listing 4.1: Installing GRUB2
# emerge sys-boot/grub:2
The GRUB2 software is now installed on the system, but not activated yet.
Configuring GRUB2
First, let us install the necessary GRUB2 files in /boot/grub. Assuming the first disk (the one where the system
boots from) is /dev/sda, the following command will do this for us:
Code Listing 4.2: Installing the GRUB2 files in /boot/grub
# grub2-install /dev/sda
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
50/111
24/10/13
Next, we can generate the GRUB2 configuration based on the user configuration specified in the
/etc/default/grubfile and /etc/grub.dscripts. In most cases, no configuration is needed by users as
GRUB2 will automatically detect which kernel to boot (the highest one available in /boot) and what the root file
system is.
To generate the final GRUB2 configuration, run the grub2-mkconfigcommand:
Code Listing 4.3: Generating GRUB2 configuration
# grub2-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.4.9-gentoo
Found initrd image: /boot/initramfs-genkernel-amd64-3.4.9-gentoo
done
The output of the command must mention that at least one Linux image is found, as those are needed to boot the
system. If you use initramfs or used genkernelto build the kernel, the correct initrd image should be detected as
well. If this is not the case, go to /bootand check the contents using the lscommand. If the files are indeed
missing, go back to the kernel configuration and installation instructions.
10.e. Rebooting
the System
Exit the chrooted environment and unmount all mounted partitions. Then type in that one magical command you have
been waiting for: reboot.
Code Listing 5.1: Unmounting all partitions and rebooting
# exit
cdimage ~# cd
cdimage ~# umount -l /mnt/gentoo/dev{/shm,/pts,}
cdimage ~# umount -l /mnt/gentoo{/boot,/proc,}
cdimage ~# reboot
Of course, don't forget to remove the bootable CD, otherwise the CD will be booted again instead of your new Gentoo
system.
Once rebooted in your Gentoo installation, finish up with Finalizing your Gentoo Installation.
Administration
Description
audio
cdrom
floppy
games
portage
usb
v ideo
be able to access v ideo capturing hardw are and doing hardw are acceleration
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
51/111
24/10/13
w heel
be able to use su
For instance, to create a user called johnwho is member of the wheel, usersand audiogroups, log in as root
first (only root can create users) and run useradd:
Code Listing 1.1: Adding a user for day-to-day use
Login: root
Password: (Your root password)
# useradd -m -G users,wheel,audio -s /bin/bash john
# passwd john
Password: (Enter the password for john)
Re-enter password: (Re-enter the password to verify)
If a user ever needs to perform some task as root, they can use su -to temporarily receive root privileges. Another
way is to use the sudopackage which is, if correctly configured, very secure.
11.b. Disk
Cleanup
Removing tarballs
Now that you've finished installing Gentoo and rebooted, if everything has gone well, you can remove the downloaded
stage3 tarball from your hard disk. Remember that they were downloaded to your /directory.
Code Listing 2.1: Removing the stage3 tarball
# rm /stage3-*.tar.bz2*
12.b. Gentoo
Online
You are of course always welcome on our Gentoo Forums or on one of our many Gentoo IRC channels.
We also have several mailing lists open to all our users. Information on how to join is contained in that page.
We'll shut up now and let you enjoy your installation. :)
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
52/111
24/10/13
to Portage
Portage is probably Gentoo's most notable innovation in software management. With its high flexibility and enormous
amount of features it is frequently seen as the best software management tool available for Linux.
Portage is completely written in Python and Bash and therefore fully visible to the users as both are scripting
languages.
Most users will work with Portage through the emergetool. This chapter is not meant to duplicate the information
available from the emerge man page. For a complete rundown of emerge's options, please consult the man page:
Code Listing 1.1: Reading the emerge man page
$ man emerge
1.b. The
Portage Tree
Ebuilds
When we talk about packages, we often mean software titles that are available to the Gentoo users through the
Portage tree. The Portage tree is a collection of ebuilds, files that contain all information Portage needs to maintain
software (install, search, query, ...). These ebuilds reside in /usr/portageby default.
Whenever you ask Portage to perform some action regarding software titles, it will use the ebuilds on your system as
a base. It is therefore important that you regularly update the ebuilds on your system so Portage knows about new
software, security updates, etc.
If you are unable to rsync due to firewall restrictions you can still update your Portage tree by using our daily
generated Portage tree snapshots. The emerge-webrsynctool automatically fetches and installs the latest
snapshot on your system:
Code Listing 2.2: Running emerge-webrsync
# emerge-webrsync
An additional advantage of using emerge-webrsyncis that it allows the administrator to only pull in portage tree
snapshots that are signed by the Gentoo release engineering GPG key. More information on this can be found in the
Portage Features section on Fetching Validated Portage Tree Snapshots.
1.c. Maintaining
Software
53/111
24/10/13
emerge --searchreturns the names of packages whose title matches (either fully or partially) the given search
term.
For instance, to search for all packages who have "pdf" in their name:
Code Listing 3.1: Searching for pdf-named packages
$ emerge --search pdf
If you want to search through the descriptions as well you can use the --searchdesc(or -S) switch:
Code Listing 3.2: Searching for pdf-related packages
$ emerge --searchdesc pdf
When you take a look at the output, you'll notice that it gives you a lot of information. The fields are clearly labelled
so we won't go further into their meanings:
Code Listing 3.3: Example 'emerge --search' output
* net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage:
http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License:
GPL-2
Installing Software
Once you've found a software title to your liking, you can easily install it with emerge: just add the package name.
For instance, to install gnumeric:
Code Listing 3.4: Installing gnumeric
# emerge gnumeric
Since many applications depend on each other, any attempt to install a certain software package might result in the
installation of several dependencies as well. Don't worry, Portage handles dependencies well. If you want to find out
what Portage would install when you ask it to install a certain package, add the --pretendswitch. For instance:
Code Listing 3.5: Pretend to install gnumeric
# emerge --pretend gnumeric
When you ask Portage to install a package, it will download the necessary source code from the internet (if
necessary) and store it by default in /usr/portage/distfiles. After this it will unpack, compile and install the
package. If you want Portage to only download the sources without installing them, add the --fetchonlyoption to
the emergecommand:
Code Listing 3.6: Download the sourcecode for gnumeric
# emerge --fetchonly gnumeric
54/111
24/10/13
The best way of enabling the docUSE flag is doing it on a per-package basis via /etc/portage/package.use,
so that you get documentation only for packages that you are interested in. Enabling this flag globally is known to
cause problems with circular dependencies. For more information, please read the USE Flags chapter.
Once the package installed, its documentation is generally found in a subdirectory named after the package under
the /usr/share/docdirectory. You can also list all installed files with the equerytool which is part of the appportage/gentoolkitpackage.
Code Listing 3.8: Locating package documentation
# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
total 28
-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz
-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x 2 root root 8560 May 17 21:54 html
-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz
(Alternatively, use equery to locate interesting files:)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.14_rc1
* Contents of media-libs/alsa-lib-1.0.14_rc1:
/usr
/usr/bin
/usr/bin/alsalisp
(Output truncated)
Removing Software
When you want to remove a software package from your system, use emerge --unmerge. This will tell Portage to
remove all files installed by that package from your system except the configuration files of that application if you
have altered those after the installation. Leaving the configuration files allows you to continue working with the
package if you ever decide to install it again.
However, a big warning applies: Portage will not check if the package you want to remove is required by another
package. It will however warn you when you want to remove an important package that breaks your system if you
unmerge it.
Code Listing 3.9: Removing gnumeric from the system
# emerge --unmerge gnumeric
When you remove a package from your system, the dependencies of that package that were installed automatically
when you installed the software are left. To have Portage locate all dependencies that can now be removed, use
emerge's --depcleanfunctionality. We will talk about this later on.
55/111
24/10/13
Portage will then search for newer version of the applications you have installed. However, it will only verify the
versions for the applications you have explicitly installed (the applications listed in /var/lib/portage/world) - it
does not thoroughly check their dependencies. If you want to update the dependencies of those packages as well,
add the --deepargument:
Code Listing 3.11: Updating your system with dependencies
# emerge --update --deep world
Still, this doesn't mean all pack ages: some packages on your system are needed during the compile and build
process of packages, but once that package is installed, these dependencies are no longer required. Portage calls
those build dependencies. To include those in an update cycle, add --with-bdeps=y:
Code Listing 3.12: Updating your entire system
# emerge --update --deep --with-bdeps=y world
Since security updates also happen in packages you have not explicitly installed on your system (but that are pulled
in as dependencies of other programs), it is recommended to run this command once in a while.
If you have altered any of your USE flags lately you might want to add --newuseas well. Portage will then verify if
the change requires the installation of new packages or recompilation of existing ones:
Code Listing 3.13: Performing a full update
# emerge --update --deep --with-bdeps=y --newuse world
Metapackages
Some packages in the Portage tree don't have any real content but are used to install a collection of packages. For
instance, the kde-metapackage will install a complete KDE environment on your system by pulling in various KDErelated packages as dependencies.
If you ever want to remove such a package from your system, running emerge --unmergeon the package won't
have much effect as the dependencies remain on the system.
Portage has the functionality to remove orphaned dependencies as well, but since the availability of software is
dynamically dependent you first need to update your entire system fully, including the new changes you applied when
changing USE flags. After this you can run emerge --depcleanto remove the orphaned dependencies. When this
is done, you need to rebuild the applications that were dynamically linked to the now-removed software titles but don't
require them anymore.
All this is handled with the following three commands:
Code Listing 3.14: Removing orphaned dependencies
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
1.d. Licenses
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
56/111
24/10/13
Beginning with Portage version 2.1.7, you can accept or reject software installation based on its license. All
packages in the tree contain a LICENSEentry in their ebuilds. Running emerge --search packagenamewill tell
you the package's license.
By default, Portage permits all licenses, except End User License Agreements (EULAs) that require reading and
signing an acceptance agreement.
The variable that controls permitted licenses is ACCEPT_LICENSE, which can be set in
/etc/portage/make.conf. In the next example, this default value is shown:
Code Listing 4.1: Setting ACCEPT_LICENSE in /etc/portage/make.conf
ACCEPT_LICENSE="* -@EULA"
With this configuration, packages that require interaction during installation to approve their EULA will not be
installable. Packages without an EULA will be installable.
You can set ACCEPT_LICENSEglobally in /etc/portage/make.conf, or you can specify it on a per-package
basis in /etc/portage/package.license.
For example, if you want to allow the truecrypt-2.7license for app-crypt/truecrypt, add the following to
/etc/portage/package.license:
Code Listing 4.2: Specifying a truecrypt license in package.license
app-crypt/truecrypt truecrypt-2.7
This permits installation of truecrypt versions that have the truecrypt-2.7license, but not versions with the
truecrypt-2.8license.
Important: Licenses are stored in /usr/portage/licenses, and license groups are kept in
/usr/portage/profiles/license_groups. The first entry of each line in CAPITAL letters is the name of the license
group, and every entry after that is an individual license.
License groups defined in ACCEPT_LICENSEare prefixed with an @ sign. A commonly requested setting is to only
allow the installation of free software and documentation. To accomplish this, we can remove all currently accepted
licenses (using -*) and then only allow the licenses in the FREEgroup as follows:
Code Listing 4.3: Only allowing free software and documentation licenses in /etc/portage/make.conf
ACCEPT_LICENSE="-* @FREE"
In this case, "free" is mostly defined by the FSF and OSI. Any package whose license does not meet these
requirements will not be installable on your system.
1.e. When
Portage is Complaining...
57/111
24/10/13
metalogd, sysklogdand syslog-ngare all system loggers. Applications that rely on the availability of "a
system logger" cannot depend on, for instance, metalogd, as the other system loggers are as good a choice as
any. Portage allows for virtuals: each system logger is listed as an "exclusive" dependency of the logging service in
the loggervirtual package of the virtualcategory, so that applications can depend on the virtual/logger
package. When installed, the package will pull in the first logging package mentioned in the package, unless a
logging package was already installed (in which case the virtual is satisfied).
Software in the Portage tree can reside in different branches. By default your system only accepts packages that
Gentoo deems stable. Most new software titles, when committed, are added to the testing branch, meaning more
testing needs to be done before it is marked as stable. Although you will see the ebuilds for those software in the
Portage tree, Portage will not update them before they are placed in the stable branch.
Some software is only available for a few architectures. Or the software doesn't work on the other architectures, or it
needs more testing, or the developer that committed the software to the Portage tree is unable to verify if the package
works on different architectures.
Each Gentoo installation adheres to a certain profilewhich contains, amongst other information, the list of
packages that are required for a system to function normally.
Blocked Packages
Code Listing 5.1: Portage warning about blocked packages (with --pretend)
[blocks B
Code Listing 5.2: Portage warning about blocked packages (without --pretend)
!!! Error: the mail-mta/postfix package conflicts with another package.
!!!
both can't be installed on the same system together.
!!!
Please use 'emerge --pretend' to determine blockers.
Ebuilds contain specific fields that inform Portage about its dependencies. There are two possible dependencies:
build dependencies, declared in DEPENDand run-time dependencies, declared in RDEPEND. When one of these
dependencies explicitly marks a package or virtual as being not compatible, it triggers a blockage.
While recent versions of Portage are smart enough to work around minor blockages without user intervention,
occasionally you will need to fix it yourself, as explained below.
To fix a blockage, you can choose to not install the package or unmerge the conflicting package first. In the given
example, you can opt not to install postfixor to remove ssmtpfirst.
You may also see blocking packages with specific atoms, such as <media-video/mplayer-1.0_rc1-r2. In this case,
updating to a more recent version of the blocking package would remove the block.
It is also possible that two packages that are yet to be installed are blocking each other. In this rare case, you should
find out why you need to install both. In most cases you can do with one of the packages alone. If not, please file a
bug on Gentoo's bugtracking system.
Masked Packages
Code Listing 5.3: Portage warning about masked packages
!!! all ebuilds that could satisfy "bootsplash" have been masked.
Code Listing 5.4: Portage warning about masked packages - reason
!!! possible candidates are:
- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
58/111
24/10/13
When you want to install a package that isn't available for your system, you will receive this masking error. You
should try installing a different application that is available for your system or wait until the package is put available.
There is always a reason why a package is masked:
~arch keyword means that the application is not tested sufficiently to be put in the stable branch. Wait a few
days or weeks and try again.
-arch keyword or -* keyword means that the application does not work on your architecture. If you believe
the package does work file a bug at our bugzilla website.
missing keyword means that the application has not been tested on your architecture yet. Ask the
architecture porting team to test the package or test it for them and report your findings on our bugzilla
website.
package.mask means that the package has been found corrupt, unstable or worse and has been deliberately
marked as do-not-use.
profile means that the package has been found not suitable for your profile. The application might break your
system if you installed it or is just not compatible with the profile you use.
license means that the package's license is not compatible with your ACCEPT_LICENSEsetting. You must
explicitly permit its license or license group by setting it in /etc/portage/make.confor in
/etc/portage/package.license. Refer to Licenses to learn how licenses work.
Such warning or error occurs when you want to install a package which not only depends on another package, but
also requires that that package is built with a particular USE flag (or set of USE flags). In the given example, the
package app-text/feelingsneeds to be built with USE="test", but this USE flag is not set on the system.
To resolve this, either add the requested USE flag to your global USE flags in /etc/portage/make.conf, or set it
for the specific package in /etc/portage/package.use.
Missing Dependencies
Code Listing 5.7: Portage warning about missing dependency
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
59/111
24/10/13
The application you are trying to install depends on another package that is not available for your system. Please
check bugzilla if the issue is known and if not, please report it. Unless you are mixing branches this should not occur
and is therefore a bug.
The application you want to install has a name that corresponds with more than one package. You need to supply
the category name as well. Portage will inform you of possible matches to choose from.
Circular Dependencies
Code Listing 5.9: Portage warning about circular dependencies
!!! Error: circular dependencies:
ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2
Two (or more) packages you want to install depend on each other and can therefore not be installed. This is most
likely a bug in the Portage tree. Please resync after a while and try again. You can also check bugzilla if the issue is
known and if not, report it.
Fetch failed
Code Listing 5.10: Portage warning about fetch failed
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered. Please see above for details.
Portage was unable to download the sources for the given application and will try to continue installing the other
applications (if applicable). This failure can be due to a mirror that has not synchronised correctly or because the
ebuild points to an incorrect location. The server where the sources reside can also be down for some reason.
Retry after one hour to see if the issue still persists.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
60/111
24/10/13
You have asked to remove a package that is part of your system's core packages. It is listed in your profile as
required and should therefore not be removed from the system.
This is a sign that something is wrong with the Portage tree -- often, it is because a developer may have made a
mistake when committing a package to the tree.
When the digest verification fails, do not try to re-digest the package yourself. Running ebuild foo manifestwill
not fix the problem; it will almost certainly make it worse!
Instead, wait an hour or two for the tree to settle down. It's likely that the error was noticed right away, but it can take
a little time for the fix to trickle down the Portage tree. While you're waiting, check Bugzilla and see if anyone has
reported the problem yet. If not, go ahead and file a bug for the broken package.
Once you see that the bug has been fixed, you may want to re-sync to pick up the fixed digest.
Important: This does not mean that you can re-sync your tree multiple times! As stated in the rsync policy (when you run
emerge --sync), users who sync too often will be banned! In fact, it's better to just wait until your next scheduled sync, so
that you don't overload the rsync servers.
2. USE flags
2.a. What
61/111
24/10/13
Let us take a look at a specific example: the kdekeyword. If you do not have this keyword in your USEvariable, all
packages that have optional KDE support will be compiled without KDE support. All packages that have an optional
KDE dependency will be installed without installing the KDE libraries (as dependency). If you have defined the kde
keyword, then those packages will be compiled with KDE support, and the KDE libraries will be installed as
dependency.
By correctly defining the keywords you will receive a system tailored specifically to your needs.
2.b. Using
USE flags
As you can see, this variable already contains quite a lot of keywords. Do not alter any make.defaultsfile to tailor
the USEvariable to your needs: changes in this file will be undone when you update Portage!
To change this default setting, you need to add or remove keywords to the USEvariable. This is done globally by
defining the USEvariable in /etc/portage/make.conf. In this variable you add the extra USE flags you require,
or remove the USE flags you don't want. This latter is done by prefixing the keyword with the minus-sign ("-").
For instance, to remove support for KDE and QT but add support for ldap, the following USEcan be defined in
/etc/portage/make.conf:
Code Listing 2.2: An example USE setting in /etc/portage/make.conf
USE="-kde -qt4 ldap"
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
62/111
24/10/13
You can of course also explicitly disable USE flags for a certain application. For instance, if you don't want java
support in PHP:
Code Listing 2.4: /etc/portage/package.use 2nd example
dev-php/php -java
Precedence
Of course there is a certain precedence on what setting has priority over the USE setting. You don't want to declare
USE="-java"only to see that javais still used due to a setting that has a higher priority. The precedence for the
USE setting is, ordered by priority (first has lowest priority):
1. Default USE setting declared in the make.defaultsfiles part of your profile
2. User-defined USE setting in /etc/portage/make.conf
3. User-defined USE setting in /etc/portage/package.use
4. User-defined USE setting as environment variable
To view the final USEsetting as seen by Portage, run emerge --info. This will list all relevant variables (including
the USEvariable) with the content used by Portage.
Code Listing 2.6: Running emerge --info
# emerge --info
63/111
24/10/13
Next, run Portage's depclean to remove the conditional dependencies that were emerged on your "old" system but
that have been obsoleted by the new USE flags.
Warning: Running emerge --depcleanis a dangerous operation and should be handled with care. Double-check the
provided list of "obsoleted" packages to make sure it doesn't remove packages you need. In the following example we add
the -pswitch to have depclean only list the packages without removing them.
Code Listing 2.8: Removing obsoleted packages
# emerge -p --depclean
When depclean has finished, run revdep-rebuildto rebuild the applications that are dynamically linked against
shared objects provided by possibly removed packages. revdep-rebuildis part of the gentoolkitpackage;
don't forget to emerge it first.
Code Listing 2.9: Running revdep-rebuild
# revdep-rebuild
When all this is accomplished, your system is using the new USE flag settings.
2.c. Package
emergeisn't the only tool for this job. In fact, we have a tool dedicated to package information called equerywhich
resides in the gentoolkitpackage. First, install gentoolkit:
Code Listing 3.2: Installing gentoolkit
# emerge gentoolkit
Now run equerywith the usesargument to view the USE flags of a certain package. For instance, for the
gnumericpackage:
Code Listing 3.3: Using equery to view used USE flags
# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column (U) - USE flags from make.conf
]
[
: Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
UI
- - debug : Enable extra debug codepaths, like asserts and extra output.
If you want to get meaningful backtraces see
http://www.gentoo.org/proj/en/qa/backtraces.xml .
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
64/111
24/10/13
3. Portage Features
3.a. Portage
Features
Portage has several additional features that makes your Gentoo experience even better. Many of these features rely
on certain software tools that improve performance, reliability, security, ...
To enable or disable certain Portage features you need to edit /etc/portage/make.conf's FEATURESvariable
which contains the various feature keywords, separated by white space. In several cases you will also need to install
the additional tool on which the feature relies.
Not all features that Portage supports are listed here. For a full overview, please consult the make.confman page:
Code Listing 1.1: Consulting the make.conf man page
$ man make.conf
To find out what FEATURES are default set, run emerge --infoand search for the FEATURES variable or grep it
out:
Code Listing 1.2: Finding out the FEATURES that are already set
$ emerge --info | grep FEATURES
3.b. Distributed
Compiling
Using distcc
distccis a program to distribute compilations across several, not necessarily identical, machines on a network.
The distccclient sends all necessary information to the available distcc servers (running distccd) so they can
compile pieces of source code for the client. The net result is a faster compilation time.
You can find more information about distcc(and how to have it work with Gentoo) in our Gentoo Distcc
Documentation.
Installing distcc
Distcc ships with a graphical monitor to monitor tasks that your computer is sending away for compilation. If you use
Gnome then put 'gnome' in your USE variable. However, if you don't use Gnome and would still like to have the
monitor then you should put 'gtk' in your USE variable.
Code Listing 2.1: Installing distcc
# emerge distcc
65/111
24/10/13
Code Listing 2.2: Configuring distcc to use three available distcc servers
# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
3.c. Caching
Compilation
About ccache
ccacheis a fast compiler cache. When you compile a program, it will cache intermediate results so that, whenever
you recompile the same program, the compilation time is greatly reduced. The first time you run ccache, it will be
much slower than a normal compilation. Subsequent recompiles should be faster. ccache is only helpful if you will be
recompiling the same application many times; thus it's mostly only useful for software developers.
If you are interested in the ins and outs of ccache, please visit the ccache homepage.
Warning: ccacheis known to cause numerous compilation failures. Sometimes ccache will retain stale code objects or
corrupted files, which can lead to packages that cannot be emerged. If this happens (if you receive errors like "File not
recognized: File truncated"), try recompiling the application with ccache disabled (FEATURES="-ccache"in
/etc/portage/make.conf) b efore reporting a bug. Unless you are doing development work, do not enab le ccache.
Installing ccache
To install ccache, run emerge ccache:
Code Listing 3.1: Installing ccache
# emerge ccache
To check if ccache functions, ask ccache to provide you with its statistics. Because Portage uses a different ccache
home directory, you need to set the CCACHE_DIRvariable as well:
Code Listing 3.3: Viewing ccache statistics
# CCACHE_DIR="/var/tmp/ccache" ccache -s
The /var/tmp/ccachelocation is Portage' default ccache home directory; if you want to alter this setting you can
set the CCACHE_DIRvariable in /etc/portage/make.conf.
However, if you would run ccache, it would use the default location of ${HOME}/.ccache, which is why you
needed to set the CCACHE_DIRvariable when asking for the (Portage) ccache statistics.
66/111
24/10/13
If you would like to use ccache for non-Portage compilations, add /usr/lib/ccache/binto the beginning of your
PATH variable (before /usr/bin). This can be accomplished by editing .bash_profilein your user's home
directory. Using .bash_profileis one way to define PATH variables.
Code Listing 3.4: Editing .bash_profile
PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"
3.d. Binary
Package Support
When you want to install a prebuilt package, add the --getbinpkgoption to the emerge command alongside of the
--usepkgoption. The former tells emerge to download the prebuilt package from the previously defined server while
the latter asks emerge to try to install the prebuilt package first before fetching the sources and compiling it.
For instance, to install gnumericwith prebuilt packages:
Code Listing 4.2: Installing the gnumeric prebuilt package
# emerge --usepkg --getbinpkg gnumeric
More information about emerge's prebuilt package options can be found in the emerge man page:
Code Listing 4.3: Reading the emerge man page
$ man emerge
3.e. Fetching
Files
Parallel fetch
When you are emerging a series of packages, Portage can fetch the source files for the next package in the list even
while it is compiling another package, thus shortening compile times. To make use of this capability, add "parallelfetch" to your FEATURES. Note that this is on by default, so you shouldn't need to specifically enable it.
Userfetch
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
67/111
24/10/13
When Portage is run as root, FEATURES="userfetch" will allow Portage to drop root privileges while fetching package
sources. This is a small security improvement.
3.f. Pulling
As an administrator, you can opt to only update your local Portage tree with a cryptographically validated Portage
tree snapshot as released by the Gentoo infrastructure. This ensures that no rogue rsync mirror is adding unwanted
code or packages in the tree you are downloading.
To configure Portage, first create a truststore in which you download and accept the keys of the Gentoo Infrastructure
responsible for signing the Portage tree snapshots. Of course, if you want to, you can validate this GPG key as per
the proper guidelines (like checking the key fingerprint). You can find the list of GPG keys used by the release
engineering team on their project page.
Code Listing 6.1: Creating a truststore for Portage
# mkdir -p /etc/portage/gpg
# chmod 0700 /etc/portage/gpg
(... Substitute the keys with those mentioned on the release engineering site ...)
# gpg --homedir /etc/portage/gpg --keyserver subkeys.pgp.net --recv-keys 0x239C75C4 0x96D8BF6D
# gpg --homedir /etc/portage/gpg --edit-key 0x239C75C4 trust
# gpg --homedir /etc/portage/gpg --edit-key 0x96D8BF6D trust
Next, edit /etc/portage/make.confand enable support for validating the signed Portage tree snapshots (using
FEATURES="webrsync-gpg") and disabling updating the Portage tree using the regular emerge --syncmethod.
Code Listing 6.2: Updating Portage for signed tree validation
FEATURES="webrsync-gpg"
PORTAGE_GPG_DIR="/etc/portage/gpg"
SYNC=""
That's it. Next time you run emerge-webrsync, only the snapshots with a valid signature will be expanded on your
file system.
4. Initscripts
4.a. Runlevels
Booting your System
When you boot your system, you will notice lots of text floating by. If you pay close attention, you will notice this text
is the same every time you reboot your system. The sequence of all these actions is called the boot sequence and is
(more or less) statically defined.
First, your boot loader will load the kernel image you have defined in the boot loader configuration into memory after
which it tells the CPU to run the kernel. When the kernel is loaded and run, it initializes all kernel-specific structures
and tasks and starts the initprocess.
This process then makes sure that all filesystems (defined in /etc/fstab) are mounted and ready to be used. Then
it executes several scripts located in /etc/init.d, which will start the services you need in order to have a
successfully booted system.
Finally, when all scripts are executed, initactivates the terminals (in most cases just the virtual consoles which
are hidden beneath Alt-F1, Alt-F2, etc.) attaching a special process called agettyto it. This process will then
make sure you are able to log on through these terminals by running login.
Init Scripts
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
68/111
24/10/13
Now initdoesn't just execute the scripts in /etc/init.drandomly. Even more, it doesn't run all scripts in
/etc/init.d, only the scripts it is told to execute. It decides which scripts to execute by looking into
/etc/runlevels.
First, initruns all scripts from /etc/init.dthat have symbolic links inside /etc/runlevels/boot. Usually,
it will start the scripts in alphabetical order, but some scripts have dependency information in them, telling the
system that another script must be run before they can be started.
When all /etc/runlevels/bootreferenced scripts are executed, initcontinues with running the scripts that
have a symbolic link to them in /etc/runlevels/default. Again, it will use the alphabetical order to decide
what script to run first, unless a script has dependency information in it, in which case the order is changed to provide
a valid start-up sequence.
This line tells initthat it must run /sbin/rc sysinitto initialize the system. The /sbin/rcscript takes care
of the initialisation, so you might say that initdoesn't do much -- it delegates the task of initialising the system to
another process.
Second, initexecuted all scripts that had symbolic links in /etc/runlevels/boot. This is defined in the
following line:
Code Listing 1.2: The system initialisation, continued
rc::bootwait:/sbin/rc boot
Again the rcscript performs the necessary tasks. Note that the option given to rc(boot) is the same as the
subdirectory of /etc/runlevelsthat is used.
Now initchecks its configuration file to see what runlevel it should run. To decide this, it reads the following line
from /etc/inittab:
Code Listing 1.3: The initdefault line
id:3:initdefault:
In this case (which the majority of Gentoo users will use), the runlevel id is 3. Using this information, initchecks
what it must run to start runlevel 3:
Code Listing 1.4: The runlevel definitions
l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
69/111
24/10/13
The line that defines level 3, again, uses the rcscript to start the services (now with argument default). Again note
that the argument of rcis the same as the subdirectory from /etc/runlevels.
When rchas finished, initdecides what virtual consoles it should activate and what commands need to be run at
each console:
Code Listing 1.5: The virtual consoles definition
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
What is a runlevel?
You have seen that inituses a numbering scheme to decide what runlevel it should activate. A runlevel is a state
in which your system is running and contains a collection of scripts (runlevel scripts or initscripts) that must be
executed when you enter or leave a runlevel.
In Gentoo, there are seven runlevels defined: three internal runlevels, and four user-defined runlevels. The internal
runlevels are called sysinit, shutdown and reboot and do exactly what their names imply: initialize the system,
powering off the system and rebooting the system.
The user-defined runlevels are those with an accompanying /etc/runlevelssubdirectory: boot, default,
nonetworkand single. The bootrunlevel starts all system-necessary services which all other runlevels use. The
remaining three runlevels differ in what services they start: defaultis used for day-to-day operations, nonetwork
is used in case no network connectivity is required, and singleis used when you need to fix the system.
If you want to stop a service, but not the services that depend on it, you can use the --nodepsargument together
with the stopcommand:
Code Listing 1.7: Stopping Postfix but keep the depending services running
# /etc/init.d/postfix --nodeps stop
If you want to see what status a service has (started, stopped, ...) you can use the statusargument:
Code Listing 1.8: Status information for postfix
# /etc/init.d/postfix status
If the status information tells you that the service is running, but you know that it is not, then you can reset the status
information to "stopped" with the zapargument:
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
70/111
24/10/13
To also ask what dependencies the service has, you can use iuseor ineed. With ineedyou can see the services
that are really necessary for the correct functioning of the service. iuseon the other hand shows the services that
can be used by the service, but are not necessary for the correct functioning.
Code Listing 1.10: Requesting a list of all necessary services on which Postfix depends
# /etc/init.d/postfix ineed
Similarly, you can ask what services require the service (needsme) or can use it (usesme):
Code Listing 1.11: Requesting a list of all services that require Postfix
# /etc/init.d/postfix needsme
Finally, you can ask what dependencies the service requires that are missing:
Code Listing 1.12: Requesting a list of missing dependencies for Postfix
# /etc/init.d/postfix broken
4.b. Working
with rc-update
What is rc-update?
Gentoo's init system uses a dependency-tree to decide what service needs to be started first. As this is a tedious
task that we wouldn't want our users to have to do manually, we have created tools that ease the administration of
the runlevels and init scripts.
With rc-updateyou can add and remove init scripts to a runlevel. The rc-updatetool will then automatically ask
the depscan.shscript to rebuild the dependency tree.
The rc-update -v showcommand will show all the available init scripts and list at which runlevels they will
execute:
Code Listing 2.2: Receiving init script information
# rc-update -v show
You can also run rc-update show(without -v) to just view enabled init scripts and their runlevels.
4.c. Configuring
Services
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
71/111
24/10/13
Such a configuration file contains variables and variables alone (just like /etc/portage/make.conf), making it
very easy to configure services. It also allows us to provide more information about the variables (as comments).
4.d. Writing
Init Scripts
Do I Have To?
No, writing an init script is usually not necessary as Gentoo provides ready-to-use init scripts for all provided services.
However, you might have installed a service without using Portage, in which case you will most likely have to create
an init script.
Do not use the init script provided by the service if it isn't explicitly written for Gentoo: Gentoo's init scripts are not
compatible with the init scripts used by other distributions!
Layout
The basic layout of an init script is shown below.
Code Listing 4.1: Basic layout of an init script
#!/sbin/runscript
depend() {
(Dependency information)
}
start() {
(Commands necessary to start the service)
}
stop() {
(Commands necessary to stop the service)
}
Any init script requires the start()function to be defined. All other sections are optional.
Dependencies
There are two dependency-alike settings you can define that influence the start-up or sequencing of init scripts: use
and need. Next to these two, there are also two order-influencing methods called beforeand after. These last
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
72/111
24/10/13
two are no dependencies per se - they do not make the original init script fail if the selected one isn't scheduled to
start (or fails to start).
The usesettings informs the init system that this script uses functionality offered by the selected script, but
does not directly depend on it. A good example would be use loggeror use dns. If those services are
available, they will be put in good use, but if you do not have a logger or DNS server the services will still work.
If the services exist, then they are started before the script that use's them.
The needsetting is a hard dependency. It means that the script that is need'ing another script will not start
before the other script is launched successfully. Also, if that other script is restarted, then this one will be
restarted as well.
When using before, then the given script is launched before the selected one if the selected one is part of
the init level. So an init script xdmthat defines before alsasoundwill start before the alsasoundscript,
but only if alsasoundis scheduled to start as well in the same init level. If alsasoundis not scheduled to
start too, then this particular setting has no effect and xdmwill be started when the init system deems it most
appropriate.
Similarly, afterinforms the init system that the given script should be launched after the selected one if the
selected one is part of the init level. If not, then the setting has no effect and the script will be launched by the
init system when it deems it most appropriate.
It should be clear from the above that needis the only "true" dependency setting as it affects if the script will be
started or not. All the others are merely pointers towards the init system to clarify in which order scripts can be (or
should be) launched.
Now, if you look at many of Gentoo's available init scripts, you will notice that some have dependencies on things
that are no init scripts. These "things" we call virtuals.
A virtual dependency is a dependency that a service provides, but that is not provided solely by that service. Your init
script can depend on a system logger, but there are many system loggers available (metalogd, syslog-ng, sysklogd,
...). As you cannot needevery single one of them (no sensible system has all these system loggers installed and
running) we made sure that all these services providea virtual dependency.
Let us take a look at the dependency information for the postfix service.
Code Listing 4.2: Dependency information for Postfix
depend() {
need net
use logger dns
provide mta
}
73/111
24/10/13
depend() {
need net
before inetd
before xinetd
}
You can also use the "*" glob to catch all services in the same runlevel, although this isn't advisable.
Code Listing 4.4: Running an init script as first script in the runlevel
depend() {
before *
}
If your service must write to local disks, it should need localmount. If it places anything in /var/runsuch as a
pidfile, then it should start after bootmisc:
Code Listing 4.5: Example depend() function
depend() {
need localmount
after bootmisc
}
Standard Functions
Next to the depend()functionality, you also need to define the start()function. This one contains all the
commands necessary to initialize your service. It is advisable to use the ebeginand eendfunctions to inform the
user about what is happening:
Code Listing 4.6: Example start() function
start() {
if [ "${RC_CMD}" = "restart" ];
then
# Do something in case a restart requires more than stop, start
fi
ebegin "Starting my_service"
start-stop-daemon --start --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
Both --execand --pidfileshould be used in start and stop functions. If the service does not create a pidfile,
then use --make-pidfileif possible, though you should test this to be sure. Otherwise, don't use pidfiles. You
can also add --quietto the start-stop-daemonoptions, but this is not recommended unless the service is
extremely verbose. Using --quietmay hinder debugging if the service fails to start.
Another notable setting used in the above example is to check the contents of the RC_CMDvariable. Unlike the
previous init script system, the newer openrcsystem does not support script-specific restart functionality. Instead,
the script needs to check the contents of the RC_CMDvariable to see if a function (be it start()or stop()) is
called as part of a restart or not.
Note: Make sure that --execactually calls a service and not just a shell script that launches services and exits -- that's
what the init script is supposed to do.
If you need more examples of the start()function, please read the source code of the available init scripts in your
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
74/111
24/10/13
/etc/init.ddirectory.
Another function you can define is stop(). You are not obliged to define this function though! Our init system is
intelligent enough to fill in this function by itself if you use start-stop-daemon.
Here is an example of a stop()function:
Code Listing 4.7: Example stop() function
stop() {
ebegin "Stopping my_service"
start-stop-daemon --stop --exec /path/to/my_service \
--pidfile /path/to/my_pidfile
eend $?
}
If your service runs some other script (for example, bash, python, or perl), and this script later changes names (for
example, foo.pyto foo), then you will need to add --nameto start-stop-daemon. You must specify the
name that your script will be changed to. In this example, a service starts foo.py, which changes names to foo:
Code Listing 4.8: A service that starts the foo script
start() {
ebegin "Starting my_script"
start-stop-daemon --start --exec /path/to/my_script \
--pidfile /path/to/my_pidfile --name foo
eend $?
}
Gentoo's init script syntax is based on the POSIX Shell so you are free to use sh-compatible constructs inside your
init script. Keep other constructs, like bash-specific ones, out of the init scripts to ensure that the scripts remain
functional regardless of the change Gentoo might do on its init system.
75/111
24/10/13
following files are automatically sourced (i.e. the variables are available to use):
/etc/conf.d/<your init script>
/etc/conf.d/basic
/etc/rc.conf
Also, if your init script provides a virtual dependency (such as net), the file associated with that dependency (such
as /etc/conf.d/net) will be sourced too.
4.e. Changing
Using softlevel
First of all, create the runlevel directory for your second "default" runlevel. As an example we create the offline
runlevel:
Code Listing 5.1: Creating a runlevel directory
# mkdir /etc/runlevels/offline
Add the necessary init scripts to the newly created runlevels. For instance, if you want to have an exact copy of your
current defaultrunlevel but without net.eth0:
Code Listing 5.2: Adding the necessary init scripts
(Copy all services from default runlevel to offline runlevel)
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
(Remove unwanted service from offline runlevel)
# rc-update del net.eth0 offline
(Display active services for offline runlevel)
# rc-update show offline
(Partial sample Output)
acpid | offline
domainname | offline
local | offline
net.eth0 |
Even though net.eth0has been removed from the offline runlevel, udevmight want to attempt to start any devices
it detects and launch the appropriate services, a functionality that is called hotplugging. By default, Gentoo does not
enable hotplugging.
If you do want to enable hotplugging, but only for a selected set of scripts, use the rc_hotplugvariable in
/etc/rc.conf:
Code Listing 5.3: Disabling device initiated services in /etc/rc.conf
# Allow net.wlan as well as any other service, except those matching net.*
# to be hotplugged
rc_hotplug="net.wlan !net.*"
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
76/111
24/10/13
Note: For more information on device initiated services, please see the comments inside /etc/rc.conf.
Now edit your bootloader configuration and add a new entry for the offlinerunlevel. For instance, in
/boot/grub/grub.conf:
Code Listing 5.4: Adding an entry for the offline runlevel
title Gentoo Linux Offline Usage
root (hd0,0)
kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
Voil, you're all set now. If you boot your system and select the newly added entry at boot, the offlinerunlevel will
be used instead of the defaultone.
Using bootlevel
Using bootlevelis completely analogous to softlevel. The only difference here is that you define a second
"boot" runlevel instead of a second "default" runlevel.
5. Environment Variables
5.a. Environment
Variables?
Important Examples
The following table lists a number of variables used by a Linux system and describes their use. Example values are
presented after the table.
Variable
Description
PATH
This v ariable contains a colon-separated list of directories in w hich your system looks for executable
files. If you enter a name of an executable (such as ls, rc-updateor emerge) but this executable is not
located in a listed directory, your system w ill not execute it (unless you enter the full path as command,
such as /bin/ls).
ROOTPATH
This v ariable has the same function as PATH, but this one only lists the directories that should be
checked w hen the root-user enters a command.
LDPATH
This v ariable contains a colon-separated list of directories in w hich the dynamical linker searches
through to find a library.
MANPATH
This v ariable contains a colon-separated list of directories in w hich the mancommand searches for the
man pages.
INFODIR
This v ariable contains a colon-separated list of directories in w hich the infocommand searches for
the info pages.
PAGER
This v ariable contains the path to the program used to list the contents of files through (such as lessor
more).
EDITOR
This v ariable contains the path to the program used to change the contents of files w ith (such as nano
or vi).
KDEDIRS
This v ariable contains a colon-separated list of directories w hich contain KDE-specific material.
CONFIG_PROTECT
This v ariable contains a space-delimited list of directories w hich should be protected by Portage during
updates.
CONFIG_PROTECT_MASK
This v ariable contains a space-delimited list of directories w hich should not be protected by Portage
during updates.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
77/111
24/10/13
5.b. Defining
Variables Globally
Other distributions tell you to change or add such environment variable definitions in /etc/profileor other
locations. Gentoo on the other hand makes it easy for you (and for Portage) to maintain and manage the environment
variables without having to pay attention to the numerous files that can contain environment variables.
For instance, when gccis updated, the /etc/env.d/05gccfile is updated too without requesting any userinteraction.
This not only benefits Portage, but also you, as user. Occasionally you might be asked to set a certain environment
variable system-wide. As an example we take the http_proxyvariable. Instead of messing about with
/etc/profile, you can now just create a file (/etc/env.d/99local) and enter your definition(s) in it:
Code Listing 2.2: /etc/env.d/99local
http_proxy="proxy.server.com:8080"
By using the same file for all your variables, you have a quick overview on the variables you have defined yourself.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
78/111
24/10/13
The env-updatescript will append the values in the alphabetical order of the /etc/env.dfiles. The file names
must begin with two decimal digits.
Code Listing 2.3: Update order used by env-update
00basic
99kde-env
99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
The concatenation of variables does not always happen, only with the following variables: ADA_INCLUDE_PATH,
ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH,
CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATHand
PYTHONPATH. For all other variables the latest defined value (in alphabetical order of the files in /etc/env.d) is
used.
You can add more variables into this list of concatenate-variables by adding the variable name to either
COLON_SEPARATEDor SPACE_SEPARATEDvariables (also inside an env.d file).
When you run env-update, the script will create all environment variables and place them in /etc/profile.env
(which is used by /etc/profile). It will also extract the information from the LDPATHvariable and use that to
create /etc/ld.so.conf. After this, it will run ldconfigto recreate the /etc/ld.so.cachefile used by the
dynamical linker.
If you want to notice the effect of env-updateimmediately after you run it, execute the following command to
update your environment. Users who have installed Gentoo themselves will probably remember this from the
installation instructions:
Code Listing 2.4: Updating the environment
# env-update && source /etc/profile
Note: The above command only updates the variables in your current terminal, new consoles, and their children. Thus, if
you are working in X11, you will need to either type source /etc/profilein every new terminal you open or restart X so
that all new terminals source the new variables. If you use a login manager, become root and type /etc/init.d/xdm
restart. If not, you will need to logout and log back in for X to spawn children with the new variable values.
Important: You cannot use shell variables when defining other variables. This means things like FOO="$BAR"(where
$BARis another variable) are forbidden.
5.c. Defining
Variables Locally
User Specific
You do not always want to define an environment variable globally. For instance, you might want to add
/home/my_user/binand the current working directory (the directory you are in) to the PATHvariable but don't
want all other users on your system to have that in their PATHtoo. If you want to define an environment variable
locally, you should use ~/.bashrcor ~/.bash_profile:
Code Listing 3.1: Extending PATH for local usage in ~/.bashrc
(A colon followed by no directory is treated as the current working directory)
PATH="${PATH}:/home/my_user/bin:"
Session Specific
Sometimes even stricter definitions are requested. You might want to be able to use binaries from a temporary
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
79/111
24/10/13
directory you created without using the path to the binaries themselves or editing ~/.bashrcfor the short time you
need it.
In this case, you can just define the PATHvariable in your current session by using the exportcommand. As long
as you don't log out, the PATHvariable will be using the temporary settings.
Code Listing 3.2: Defining a session-specific environment variable
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
Files
Configuration Directives
Portage comes with a default configuration stored in /etc/make.globals. When you take a look at it, you'll notice
that all Portage configuration is handled through variables. What variables Portage listens to and what they mean are
described later.
Since many configuration directives differ between architectures, Portage also has default configuration files which are
part of your profile. Your profile is pointed to by the /etc/portage/make.profilesymlink; Portage'
configurations are set in the make.defaultsfiles of your profile and all parent profiles. We'll explain more about
profiles and the /etc/portage/make.profiledirectory later on.
If you're planning on changing a configuration variable, don't alter /etc/make.globalsor make.defaults.
Instead use /etc/portage/make.confwhich has precedence over the previous files. You'll also find a
/usr/share/portage/config/make.conf.example. As the name implies, this is merely an example file Portage does not read in this file.
You can also define a Portage configuration variable as an environment variable, but we don't recommend this.
Profile-Specific Information
We've already encountered the /etc/portage/make.profiledirectory. Well, this isn't exactly a directory but a
symbolic link to a profile, by default one inside /usr/portage/profilesalthough you can create your own
profiles elsewhere and point to them. The profile this symlink points to is the profile to which your system adheres.
A profile contains architecture-specific information for Portage, such as a list of packages that belong to the system
corresponding with that profile, a list of packages that don't work (or are masked-out) for that profile, etc.
User-Specific Configuration
When you need to override Portage's behaviour regarding the installation of software, you will end up editing files
within /etc/portage. You are highly recommended to use files within /etc/portageand highly discouraged to
override the behaviour through environment variables!
Within /etc/portageyou can create the following files:
package.maskwhich lists the packages you never want Portage to install
package.unmaskwhich lists the packages you want to be able to install even though the Gentoo developers
highly discourage you from emerging them
package.accept_keywordswhich lists the packages you want to be able to install even though the
package hasn't been found suitable for your system or architecture (yet)
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
80/111
24/10/13
package.usewhich lists the USE flags you want to use for certain packages without having the entire
system use those USE flags
These don't have to be files; they can also be directories that contain one file per package. More information about
the /etc/portagedirectory and a full list of possible files you can create can be found in the Portage man page:
Code Listing 1.1: Reading the Portage man page
$ man portage
1.b. Storing
Files
Prebuilt Binaries
Even though Portage doesn't use prebuilt binaries by default, it has extensive support for them. When you ask
Portage to work with prebuilt packages, it will look for them in /usr/portage/packages. This location is defined
by the PKGDIR variable.
Source Code
Application source code is stored in /usr/portage/distfilesby default. This location is defined by the
DISTDIR variable.
Portage Database
Portage stores the state of your system (what packages are installed, what files belong to which package, ...) in
/var/db/pkg. Do not alter these files manually! It might break Portage's knowledge of your system.
Portage Cache
The Portage cache (with modification times, virtuals, dependency tree information, ...) is stored in
/var/cache/edb. This location really is a cache: you can clean it if you are not running any portage-related
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
81/111
24/10/13
1.c. Building
Software
Building Directory
Portage creates specific build directories for each package it emerges inside /var/tmp/portage. This location is
defined by the BUILD_PREFIX variable.
1.d. Logging
Features
Ebuild Logging
Portage can create per-ebuild logfiles, but only when the PORT_LOGDIR variable is set to a location that is writable
by Portage (the portage user). By default this variable is unset. If you don't set PORT_LOGDIR, then you won't
receive any build logs with the current logging system, though you may receive some logs from the new elog. If you
do have PORT_LOGDIR defined and you use elog, you will receive build logs and any logs saved by elog, as
explained below.
Portage offers fine-grained control over logging through the use of elog:
PORTAGE_ELOG_CLASSES: This is where you set what kinds of messages to be logged. You can use any
space-separated combination of info, warn, error, log, and qa.
info: Logs "einfo" messages printed by an ebuild
warn: Logs "ewarn" messages printed by an ebuild
error: Logs "eerror" messages printed by an ebuild
log: Logs the "elog" messages found in some ebuilds
qa: Logs the "QA Notice" messages printed by an ebuild
PORTAGE_ELOG_SYSTEM: This selects the module(s) to process the log messages. If left empty, logging
is disabled. You can use any space-separated combination of save, custom, syslog, mail,
save_summary, and mail_summary. You must select at least one module in order to use elog.
save: This saves one log per package in $PORT_LOGDIR/elog, or /var/log/portage/elogif
$PORT_LOGDIR is not defined.
custom: Passes all messages to a user-defined command in $PORTAGE_ELOG_COMMAND; this
will be discussed later.
syslog: Sends all messages to the installed system logger.
mail: Passes all messages to a user-defined mailserver in $PORTAGE_ELOG_MAILURI; this will be
discussed later. The mail features of elog require >=portage-2.1.1.
save_summary: Similar to save, but it merges all messages in
$PORT_LOGDIR/elog/summary.log, or /var/log/portage/elog/summary.logif
$PORT_LOGDIR is not defined.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
82/111
24/10/13
mail_summary: Similar to mail, but it sends all messages in a single mail when emerge exits.
PORTAGE_ELOG_COMMAND: This is only used when the custommodule is enabled. Here is where you
specify a command to process log messages. Note that you can make use of two variables: ${PACKAGE} is
the package name and version, while ${LOGFILE} is the absolute path to the logfile. Here's one possible
usage:
PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"
PORTAGE_ELOG_MAILURI: This contains settings for the mailmodule such as address, user, password,
mailserver, and port number. The default setting is "root@localhost localhost".
Here's an example for an smtp server that requires username and password-based authentication on a
particular port (the default is port 25):
PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
PORTAGE_ELOG_MAILFROM: Allows you to set the "from" address of log mails; defaults to "portage" if
unset.
PORTAGE_ELOG_MAILSUBJECT: Allows you to create a subject line for log mails. Note that you can make
use of two variables: ${PACKAGE} will display the package name and version, while ${HOST} is the fully
qualified domain name of the host Portage is running on.
Here's one possible use:
PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST} with some
messages"
Important: If you used enoticewith Portage-2.0.*, you must completely remove enotice, as it is incompatible with elog.
Configuration
As noted previously, Portage is configurable through many variables which you should define in
/etc/portage/make.conf. Please refer to the make.confman page for more and complete information:
Code Listing 1.1: Reading the make.conf man page
$ man make.conf
2.b. Build-specific
Options
Merge Options
When Portage has merged a newer version of a certain software title, it will remove the obsoleted files of the older
version from your system. Portage gives the user a 5 second delay before unmerging the older version. These 5
seconds are defined by the CLEAN_DELAY variable.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
83/111
24/10/13
You can tell emergeto use certain options every time it is run by setting EMERGE_DEFAULT_OPTS. Some useful
options would be --ask, --verbose, --tree, and so on.
2.c. Configuration
File Protection
More information about Portage's Configuration File Protection is available in the CONFIGURATION FILES section of
the emergemanpage:
Code Listing 3.2: More information about Configuration File Protection
$ man emerge
Excluding Directories
To 'unprotect' certain subdirectories of protected locations you can use the CONFIG_PROTECT_MASK variable.
2.d. Download
Options
Server Locations
When the requested information or data is not available on your system, Portage will retrieve it from the Internet. The
server locations for the various information and data channels are defined by the following variables:
GENTOO_MIRRORS defines a list of server locations which contain source code (distfiles)
PORTAGE_BINHOST defines a particular server location containing prebuilt packages for your system
A third setting involves the location of the rsync server which you use when you update your Portage tree:
SYNC defines a particular server which Portage uses to fetch the Portage tree from
The GENTOO_MIRRORS and SYNC variables can be set automatically through the mirrorselectapplication.
You need to emerge mirrorselectfirst before you can use it. For more information, see mirrorselect's online
help:
Code Listing 4.1: More information about mirrorselect
# mirrorselect --help
If your environment requires you to use a proxy server, you can use the http_proxy, ftp_proxy and RSYNC_PROXY
variables to declare a proxy server.
Fetch Commands
When Portage needs to fetch source code, it uses wgetby default. You can change this through the
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
84/111
24/10/13
FETCHCOMMAND variable.
Portage is able to resume partially downloaded source code. It uses wgetby default, but this can be altered through
the RESUMECOMMAND variable.
Make sure that your FETCHCOMMAND and RESUMECOMMAND stores the source code in the correct location.
Inside the variables you should use \${URI} and \${DISTDIR} to point to the source code location and distfiles location
respectively.
You can also define protocol-specific handlers with FETCHCOMMAND_HTTP, FETCHCOMMAND_FTP,
RESUMECOMMAND_HTTP, RESUMECOMMAND_FTP, and so on.
Rsync Settings
You cannot alter the rsync command used by Portage to update the Portage tree, but you can set some variables
related to the rsync command:
PORTAGE_RSYNC_OPTS sets a number of default variables used during sync, each space-separated. These
shouldn't be changed unless you know exactly what you're doing. Note that certain absolutely required options
will always be used even if PORTAGE_RSYNC_OPTS is empty.
PORTAGE_RSYNC_EXTRA_OPTS can be used to set additional options when syncing. Each option should
be space separated.
--timeout=<number>: This defines the number of seconds an rsync connection can idle before rsync
sees the connection as timed-out. This variable defaults to 180 but dialup users or individuals with slow
computers might want to set this to 300 or higher.
--exclude-from=/etc/portage/rsync_excludes: This points to a file listing the packages and/or categories
rsync should ignore during the update process. In this case, it points to
/etc/portage/rsync_excludes. Please read Using a Portage Tree Subset for the syntax of this
file.
--quiet: Reduces output to the screen
--verbose: Prints a complete filelist
--progress: Displays a progress meter for each file
PORTAGE_RSYNC_RETRIES defines how many times rsync should try connecting to the mirror pointed to
by the SYNC variable before bailing out. This variable defaults to 3.
For more information on these options and others, please read man rsync.
2.e. Gentoo
Configuration
Branch Selection
You can change your default branch with the ACCEPT_KEYWORDS variable. It defaults to your architecture's stable
branch. More information on Gentoo's branches can be found in the next chapter.
Portage Features
You can activate certain Portage features through the FEATURES variable. The Portage Features have been
discussed in previous chapters, such as Portage Features.
2.f. Portage
Behaviour
Resource Management
With the PORTAGE_NICENESS variable you can augment or reduce the nice value Portage runs with. The
PORTAGE_NICENESS value is added to the current nice value.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
85/111
24/10/13
For more information about nice values, see the nice man page:
Code Listing 6.1: More information about nice
$ man nice
Output Behaviour
The NOCOLOR, which defaults to "false", defines if Portage should disable the use of coloured output.
One Branch
If you update your system now, you will find out that lots of packages will be updated. Mind you though: when you
have updated your system to use the testing branch there is usually no easy way back to the stable, official branch
(except for using backups of course).
3.b. Mixing
86/111
24/10/13
If you want to use a specific software version from the testing branch but you don't want Portage to use the testing
branch for subsequent versions, you can add in the version in the package.accept_keywordslocation. In this
case you must use the = operator. You can also enter a version range using the <=, <, > or >= operators.
In any case, if you add version information, you must use an operator. If you leave out version information, you cannot
use an operator.
In the following example we ask Portage to accept gnumeric-1.2.13:
Code Listing 2.2: Enabling a particular gnumeric test version
=app-office/gnumeric-1.2.13
3.c. Using
Masked Packages
When a package has been masked by the Gentoo developers and you still want to use it despite the reason
mentioned in the package.maskfile (situated in /usr/portage/profilesby default), add the desired version
(usually this will be the exact same line from profiles) in the /etc/portage/package.unmaskfile (or in a file
in that directory if it is a directory).
For instance, if =net-mail/hotwayd-0.8is masked, you can unmask it by adding the exact same line in the
package.unmasklocation:
Code Listing 3.1: /etc/portage/package.unmask
=net-mail/hotwayd-0.8
Note: If an entry in /usr/portage/profiles/package.maskcontains a range of package versions, you will need to
unmask only the version(s) you actually want. Please read the previous section to learn how to specify versions in
package.unmask.
87/111
24/10/13
dispatch-confstores the differences between the configuration files as patches or by using the RCS revision
system. This means that if you make a mistake when updating a config file, you can revert to the previous version of
your config file at any time.
When using dispatch-conf, you can ask to keep the configuration file as-is, use the new configuration file, edit
the current one or merge the changes interactively. dispatch-confalso has some nice additional features:
Automatically merge configuration file updates that only contain updates to comments
Automatically merge configuration files which only differ in the amount of whitespace
Make certain you edit /etc/dispatch-conf.conffirst and create the directory referenced by the archive-dir
variable.
Code Listing 1.1: Running dispatch-conf
# dispatch-conf
When running dispatch-conf, you'll be taken through each changed config file, one at a time. Press uto update
(replace) the current config file with the new one and continue to the next file. Press zto zap (delete) the new config
file and continue to the next file. Once all config files have been taken care of, dispatch-confwill exit. You can
also press qto exit any time.
For more information, check out the dispatch-confman page. It tells you how to interactively merge current and
new config files, edit new config files, examine differences between files, and more.
Code Listing 1.2: Reading the dispatch-conf man page
$ man dispatch-conf
4.b. etc-update
You can also use etc-updateto merge config files. It's not as simple to use as dispatch-conf, nor as
featureful, but it does provide an interactive merging setup and can also auto-merge trivial changes.
However, unlike dispatch-conf, etc-updatedoes not preserve the old versions of your config files. Once you
update the file, the old version is gone forever! So be very careful, as using etc-updateis significantly less safe
than using dispatch-conf.
Code Listing 2.1: Running etc-update
# etc-update
After merging the straightforward changes, you will be prompted with a list of protected files that have an update
waiting. At the bottom you are greeted by the possible options:
Code Listing 2.2: etc-update options
Please select a file to edit by entering the corresponding number.
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i'):
If you enter -1, etc-updatewill exit and discontinue any further changes. If you enter -3or -5, all listed
configuration files will be overwritten with the newer versions. It is therefore very important to first select the
configuration files that should not be automatically updated. This is simply a matter of entering the number listed to
the left of that configuration file.
As an example, we select the configuration file /etc/pear.conf:
Code Listing 2.3: Updating a specific configuration file
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
88/111
24/10/13
You can now see the differences between the two files. If you believe that the updated configuration file can be used
without problems, enter 1. If you believe that the updated configuration file isn't necessary, or doesn't provide any new
or useful information, enter 2. If you want to interactively update your current configuration file, enter 3.
There is no point in further elaborating the interactive merging here. For completeness sake, we will list the possible
commands you can use while you are interactively merging the two files. You are greeted with two lines (the original
one, and the proposed new one) and a prompt at which you can enter one of the following commands:
Code Listing 2.4: Commands available for the interactive merging
ed:
eb:
el:
er:
e:
l:
r:
s:
v:
q:
When you have finished updating the important configuration files, you can now automatically update all the other
configuration files. etc-updatewill exit if it doesn't find any more updateable configuration files.
4.c. quickpkg
With quickpkgyou can create archives of the packages that are already merged on your system. These archives
can be used as prebuilt packages. Running quickpkgis straightforward: just add the names of the packages you
want to archive.
For instance, to archive curl, orage, and procps:
Code Listing 3.1: Example quickpkg usage
# quickpkg curl orage procps
The prebuilt packages will be stored in $PKGDIR(/usr/portage/packages/by default). These packages are
placed in $PKGDIR/<category>.
Excluding Packages/Categories
You can selectively update certain categories/packages and ignore the other categories/packages. We achieve this
by having rsyncexclude categories/packages during the emerge --syncstep.
You need to define the name of the file that contains the exclude patterns in the PORTAGE_RSYNC_EXTRA_OPTS
variable in your /etc/portage/make.conf.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
89/111
24/10/13
Note however that this may lead to dependency issues since new, allowed packages might depend on new but
excluded packages.
5.b. Adding
Unofficial Ebuilds
For more information on working with overlays, please read man laymanand the layman/overlay users' guide.
5.c. Non-Portage
Maintained Software
90/111
24/10/13
6.a. Introduction
For most users, the information received thus far is sufficient for all their Linux operations. But Portage is capable of
much more; many of its features are for advanced users or only applicable in specific corner cases. Still, that would
not be an excuse not to document them.
Of course, with lots of flexibility comes a huge list of potential cases. It will not be possible to document them all
here. Instead, we hope to focus on some generic issues which you can then bend to fit your own needs. If you have
need for more specific tweaks and tips, you might find them on the Gentoo Wiki instead.
Most, if not all of these additional features can be easily found by digging through the manual pages that portage
provides:
Code Listing 1.1: Reading up on portage man pages
$ man portage
$ man make.conf
Finally, know that these are advanced features which, if not worked with correctly, can make debugging and
troubleshooting very difficult. Make sure you mention these if you think you hit a bug and want to open a bugreport.
6.b. Per-Package
Environment Variables
Using /etc/portage/env
By default, package builds will use the environment variables defined in /etc/portage/make.conf, such as
CFLAGS, MAKEOPTSand more. In some cases though, you might want to provide different variables for specific
packages. To do so, Portage supports the use of /etc/portage/envand /etc/portage/package.env.
The /etc/portage/package.envfile contains the list of packages for which you want deviating variables as well
as a specific identifier that tells Portage which changes you want. The identifier name you pick yourself, Portage will
look for the variables in the /etc/portage/env/<identifier>file.
6.c. Hooking
91/111
24/10/13
The advantage of using your own bash environment is that you can hook in the emerge process during each step it
performs. This can be done for every emerge (through /etc/portage/bashrc) or by using per-package
environments (through /etc/portage/envas discussed earlier).
To hook in the process, the bash environment can listen to the variables EBUILD_PHASE, CATEGORYas well as the
variables that are always available during ebuild development (such as P, PF, ...). Based on the values of these
variables, you can then execute additional steps.
6.d. Executing
6.e. Overriding
Profile Settings
92/111
24/10/13
considered to be part of the system set), forced use flags and more.
6.f. Applying
Non-Standard Patches
Using epatch_user
To manage several ebuilds in a similar manner, ebuild developers use eclasses (sort-of shell libraries) that define
commonly used functions. One of these eclasses is eutils.eclasswhich offers an interesting function called
epatch_user.
The epatch_userfunction applies source code patches that are found in
/etc/portage/patches/<category>/<package>[-<version>[-<revision>]], whatever directory is
found first. Sadly, not all ebuilds automatically call this function so just putting your patch in this location might not
always work.
Luckily, with the information provided above, you can call this function by hooking into, for instance, the prepare
phase. The function can be called as many times as you like - it will only apply the patches once.
started
Note: This document assumes that you have correctly configured your kernel, its modules for your hardware and you know
the interface name of your hardware. We also assume that you are configuring eth0, but it could also be eno0, ens1,
wlan0, enp1s0etc.
To get started configuring your network card, you need to tell the Gentoo RC system about it. This is done by
creating a symbolic link from net.loto net.eth0(or whatever the network interface name is on your system) in
/etc/init.d.
Code Listing 1.1: Symlinking net.eth0 to net.lo
# cd /etc/init.d
# ln -s net.lo net.eth0
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
93/111
24/10/13
Gentoo's RC system now knows about that interface. It also needs to know how to configure the new interface. All
the network interfaces are configured in /etc/conf.d/net. Below is a sample configuration for DHCP and static
addresses.
Code Listing 1.2: Examples for /etc/conf.d/net
# For DHCP
config_eth0="dhcp"
# For static IP using CIDR notation
config_eth0="192.168.0.7/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
# For static IP using netmask notation
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
Note: If you do not specify a configuration for your interface then DHCP is assumed.
Note: CIDR stands for Classless InterDomain Routing. Originally, IPv4 addresses were classified as A, B, or C. The early
classification system did not envision the massive popularity of the Internet, and is in danger of running out of new unique
addresses. CIDR is an addressing scheme that allows one IP address to designate many IP addresses. A CIDR IP
address looks like a normal IP address except that it ends with a slash followed by a number; for example,
192.168.0.0/16. CIDR is described in RFC 1519.
Now that we have configured our interface, we can start and stop it using the following commands:
Code Listing 2.6: Starting and stopping network scripts
# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop
Important: When troubleshooting networking, take a look at /var/log/rc.log. Unless you have rc_logger="NO"set in
/etc/rc.conf, you will find information on the boot activity stored in that log file.
Now that you have successfully started and stopped your network interface, you may wish to get it to start when
Gentoo boots. Here's how to do this. The last "rc" command instructs Gentoo to start any scripts in the current
runlevel that have not yet been started.
Code Listing 1.4: Configuring a network interface to load at boot time
# rc-update add net.eth0 default
# rc
2. Advanced Configuration
2.a. Advanced
Configuration
The config_eth0variable is the heart of an interface configuration. It's a high level instruction list for configuring the
interface (eth0in this case). Each command in the instruction list is performed sequentially. The interface is
deemed OK if at least one command works.
Here's a list of built-in instructions.
Command
Description
null
Do nothing
noop
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
94/111
24/10/13
Run the module w hich prov ides the command. For example dhcpw ill run a module that
prov ides DHCP w hich can be one of either dhcpcd, dhclientor pump.
If a command fails, you can specify a fallback command. The fallback has to match the config structure exactly.
You can chain these commands together. Here are some real world examples.
Code Listing 1.1: Configuration examples
# Adding three IPv4 addresses
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"
# Adding an IPv4 address and two IPv6 addresses
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"
# Keep our kernel assigned address, unless the interface goes
# down so assign another via DHCP. If DHCP fails then add a
# static address determined by APIPA
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
Note: When using the ifconfigmodule and adding more than one address, interface aliases are created for each extra
address. So with the above two examples you will get interfaces eth0, eth0:1and eth0:2. You cannot do anything
special with these interfaces as the kernel and other programs will just treat eth0:1and eth0:2as eth0.
Important: The fallback order is important! If we did not specify the nulloption then the apipacommand would only be
run if the noopcommand failed.
Note: APIPA and DHCP are discussed later.
2.b. Network
Dependencies
Init scripts in /etc/init.dcan depend on a specific network interface or just net. All network interfaces in
Gentoo's init system provide what is called net.
If, in /etc/rc.conf, rc_depend_strict="YES"is set, then all network interfaces that provide net must be
active before a dependency on "net" is assumed to be met. In other words, if you have a net.eth0and net.eth1
and an init script depends on "net", then both must be enabled.
On the other hand, if rc_depend_strict="NO"is set, then the "net" dependency is marked as resolved the
moment at least one network interface is brought up.
But what about net.br0depending on net.eth0and net.eth1? net.eth1may be a wireless or PPP device
that needs configuration before it can be added to the bridge. This cannot be done in /etc/init.d/net.br0as
that's a symbolic link to net.lo.
The answer is defining an rc_need_setting in /etc/conf.d/net.
Code Listing 2.1: net.br0 dependency in /etc/conf.d/net
rc_need_br0="net.eth0 net.eth1"
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
95/111
24/10/13
That alone, however, is not sufficient. Gentoo's networking init scripts use a virtual dependency called net to inform
the system when networking is available. Clearly, in the above case, networking should only be marked as available
when net.br0is up, not when the others are. So we need to tell that in /etc/conf.d/netas well:
Code Listing 2.2: Updating virtual dependencies and provisions for networking
rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"
For a more detailed discussion about dependency, consult the section Writing Init Scripts in the Gentoo Handbook.
More information about /etc/rc.confis available as comments within that file.
2.c. Variable
2.d. Network
Interface Naming
How It Works
Network interface names are not chosen arbitrarily: the Linux kernel and the device manager (most systems have
udev as their device manager although others are available as well) choose the interface name through a fixed set of
rules.
When an interface card is detected on a system, the Linux kernel gathers the necessary data about this card. This
includes:
1. the onboard (on the interface itself) registered name of the network card, which is later seen through the
ID_NET_NAME_ONBOARDparameter;
2. the slot in which the network card is plugged in, which is later seen through the ID_NET_NAME_SLOT
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
96/111
24/10/13
parameter;
3. the path through which the network card device can be accessed, which is later seen through the
ID_NET_NAME_PATHparameter;
4. the (vendor-provided) MAC address of the card, which is later seen through the ID_NET_NAME_MAC
parameter;
Based on this information, the device manager decides how to name the interface on the system. By default, it uses
the first hit of the first three parameters above (ID_NET_NAME_ONBOARD, _SLOTor _PATH). For instance, if
ID_NET_NAME_ONBOARDis found and set to eno1, then the interface will be called eno1.
If you know your interface name, you can see the values of the provided parameters using udevadm:
Code Listing 4.1: Reading the network interface card information
# udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0
As the first (and actually only) hit of the top three parameters is the ID_NET_NAME_PATHone, its value is used as
the interface name. If none of the parameters is found, then the system reverts back to the kernel-provided naming
(eth0, eth1, etc.)
97/111
24/10/13
Because the rules are triggered before the default one (rules are triggered in alphanumerical order, so 70 comes
before 80) the names provided in the rule file will be used instead of the default ones. The number granted to the file
should be between 76 and 79 (the environment variables are defined by a rule start starts with 75 and the fallback
naming is done in a rule numbered 80).
3. Modular Networking
3.a. Network
Modules
We now support modular networking scripts, which means we can easily add support for new interface types and
configuration modules while keeping compatibility with existing ones.
Modules load by default if the package they need is installed. If you specify a module here that doesn't have its
package installed then you get an error stating which package you need to install. Ideally, you only use the modules
setting when you have two or more packages installed that supply the same service and you need to prefer one over
the other.
Note: All settings discussed here are stored in /etc/conf.d/netunless otherwise specified.
Code Listing 1.1: Module preference
# Prefer ifconfig over iproute2
modules="ifconfig"
# You can also specify other modules for an interface
# In this case we prefer pump over dhcpcd
modules_eth0="pump"
# You can also specify which modules not to use - for example you may be
# using a supplicant or linux-wlan-ng to control wireless configuration but
# you still want to configure network settings per ESSID associated with.
modules="!iwconfig"
3.b. Interface
Handlers
We provide two interface handlers presently: ifconfigand iproute2. You need one of these to do any kind of
network configuration.
ifconfigis installed by default (the net-toolspackage is part of the system profile). iproute2is a more
powerful and flexible package, but it's not included by default.
Code Listing 2.1: To install iproute2
# emerge sys-apps/iproute2
# To prefer ifconfig over iproute2 if both are installed as openrc prefers
# to use iproute2 then
modules="ifconfig"
As both ifconfigand iproute2do very similar things we allow their basic configuration to work with each other.
For example both the below code snippet work regardless of which module you are using.
Code Listing 2.6: ifconfig and iproute2 examples
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"
# We can also specify broadcast
config_eth0="192.168.0.2/24 brd 192.168.0.255"
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
98/111
24/10/13
3.c. DHCP
DHCP is a means of obtaining network information (IP address, DNS servers, Gateway, etc) from a DHCP server.
This means that if there is a DHCP server running on the network, you just have to tell each client to use DHCP and it
sets up the network all by itself. Of course, you will have to configure for other things like wireless, PPP or other
things if required before you can use DHCP.
DHCP can be provided by dhclient, dhcpcd, or pump. Each DHCP module has its pros and cons - here's a quick
run down.
DHCP
Module
Package
Pros
Cons
dhclient
netmisc/dhcp
dhcpcd
netmisc/dhcpcd
pump
netmisc/pump
If you have more than one DHCP client installed, you need to specify which one to use - otherwise we default to
dhcpcdif available.
To send specific options to the DHCP module, use module_eth0="..."(change module to the DHCP module
you're using - i.e. dhcpcd_eth0).
We try and make DHCP relatively agnostic - as such we support the following commands using the dhcp_eth0
variable. The default is not to set any of them:
release- releases the IP address for re-use
nodns- don't overwrite /etc/resolv.conf
nontp- don't overwrite /etc/ntp.conf
nonis- don't overwrite /etc/yp.conf
Code Listing 3.1: Sample DHCP configuration in /etc/conf.d/net
# Only needed if you have more than one DHCP module installed
modules="dhcpcd"
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # Timeout after 10 seconds
dhcp_eth0="release nodns nontp nonis" # Only get an address
Note: dhcpcdand pumpsend the current hostname to the DHCP server by default so you don't need to specify this
anymore.
3.d. ADSL
with PPPoE/PPPoA
Second, create the PPP net script and the net script for the ethernet interface to be used by PPP:
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
99/111
24/10/13
If you use PPPoE with a USB modem you'll need to emerge br2684ctl. Please read /usr/portage/netdialup/speedtouch-usb/files/READMEfor information on how to properly configure it.
Important: Please carefully read the section on ADSL and PPP in /usr/share/doc/openrc-0.8.3r1/net.example.bz2. It contains many more detailed explanations of all the settings your particular PPP setup will likely
need. Of course, change 0.8.3-r1with the version of OpenRC installed on your system.
Private IP Addressing)
APIPA tries to find a free address in the range 169.254.0.0-169.254.255.255 by arping a random address in that
range on the interface. If no reply is found then we assign that address to the interface.
This is only useful for LANs where there is no DHCP server and you don't connect directly to the internet and all other
computers use APIPA.
For APIPA support, emerge net-misc/iputilsor net-analyzer/arping.
Code Listing 5.1: APIPA configuration in /etc/conf.d/net
# Try DHCP first - if that fails then fallback to APIPA
config_eth0="dhcp"
fallback_eth0="apipa"
# Just use APIPA
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
100/111
24/10/13
config_eth0="apipa"
3.f. Bonding
For link bonding/trunking emerge net-misc/ifenslave.
Bonding is used to increase network bandwidth. If you have two network cards going to the same network, you can
bond them together so your applications see just one interface but they really use both network cards.
First, clear the configuration of the participating interfaces:
Code Listing 6.1: Clearing interface configuration in /etc/conf.d/net
config_eth0="null"
config_eth1="null"
config_eth2="null"
Remove the net.eth*services from the runlevels, create a net.bond0one and add that one to the correct
runlevel.
3.g. Bridging
(802.1d support)
3.h. MAC
Address
If you need to, you can change the MAC address of your interfaces through the network configuration file too.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
101/111
24/10/13
3.i. Tunnelling
You don't need to emerge anything for tunnelling as the interface handler can do it for you.
Code Listing 9.1: Tunnelling configuration in /etc/conf.d/net
# For GRE tunnels
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# For IPIP tunnels
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# To configure the interface
config_vpn0="192.168.0.2 peer 192.168.1.1"
3.j. VLAN
(802.1q support)
For VLAN support, emerge net-misc/vconfig. Also make sure that you use iproute2 as configuration module
rather than ifconfig.
Virtual LAN is a group of network devices that behave as if they were connected to a single network segment - even
though they may not be. VLAN members can only see members of the same VLAN even though they may share the
same physical network.
To configure VLANs, first specify the VLAN numbers in /etc/conf.d/netlike so:
Code Listing 10.1: Specifying VLAN numbers
vlans_eth0="1 2"
102/111
24/10/13
4. Wireless Networking
5.a. Introduction
Wireless networking on Linux is usually pretty straightforward. There are two ways of configuring wifi: graphical
clients, or the command line.
The easiest way is to use a graphical client once you've installed a desktop environment. Most graphical clients,
such as wicd and NetworkManager, are pretty self-explanatory. They offer a handy point-and-click interface that gets
you on a network in just a few seconds.
Note: wicdoffers a command line utility in addition to the main graphical interface. You can get it by emerging wicdwith
the ncursesUSE flag set. This wicd-cursesutility is particularly useful for folks who don't use a gtk-based desktop
environment, but still want an easy command line tool that doesn't require hand-editing configuration files.
However, if you don't want to use a graphical client, then you can configure wifi on the command line by editing a few
configuration files. This takes a bit more time to setup, but it also requires the fewest packages to download and
install. Since the graphical clients are mostly self-explanatory (with helpful screenshots at their homepages), we'll
focus on the command line alternatives.
You can setup wireless networking on the command line by installing wireless-toolsor wpa_supplicant. The
important thing to remember is that you configure wireless networks on a global basis and not an interface basis.
wpa_supplicantis the best choice. For a list of supported drivers, read the wpa_supplicant site.
wireless-toolssupports nearly all cards and drivers, but it cannot connect to WPA-only Access Points. If your
networks only offer WEP encryption or are completely open, you may prefer the simplicity of wireless-tools.
Warning: The linux-wlan-ngdriver is not supported by baselayout at this time. This is because linux-wlan-nghave
its own setup and configuration which is completely different to everyone else's. The linux-wlan-ngdevelopers are
rumoured to be changing their setup over to wireless-tools, so when this happens you may use linux-wlan-ngwith
baselayout.
Some wireless cards are deactivated by default. To activate them, please consult your hardware documentation.
Some of these cards can be unblocked using the rfkill application. If that is the case, use "rfkill list" to see the
available cards and "rfkill unblock <index>" to activate the wireless functionality. If not, you might need to unblock the
wireless card through a button, switch or special key combination on your laptop.
103/111
24/10/13
Note: Depending on your USE flags, wpa_supplicantcan install a graphical interface written in Qt4, which will integrate
nicely with KDE. To get it, run echo "net-wireless/wpa_supplicant qt4" >> /etc/portage/package.useas root
before emerging wpa_supplicant.
That was simple, wasn't it? However, we still have to configure wpa_supplicantitself which is a bit more tricky
depending on how secure the Access Points are that you are trying to connect to. The below example is taken and
simplified from /usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gzwhich ships
with wpa_supplicant.
Code Listing 2.3: An example /etc/wpa_supplicant/wpa_supplicant.conf
# The below line not be changed otherwise we refuse to work
ctrl_interface=/var/run/wpa_supplicant
# Ensure that only root can read the WPA configuration
ctrl_interface_group=0
# Let wpa_supplicant take care of scanning and AP selection
ap_scan=1
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
network={
ssid="simple"
psk="very secret passphrase"
# The higher the priority the sooner we are matched
priority=5
}
# Same as previous, but request SSID-specific scanning (for APs that reject
# broadcast SSID)
network={
ssid="second ssid"
scan_ssid=1
psk="very secret passphrase"
priority=2
}
# Only WPA-PSK is used. Any valid cipher combination is accepted
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
104/111
24/10/13
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
# Plaintext connection (no WPA, no IEEE 802.1X)
network={
ssid="plaintext-test"
key_mgmt=NONE
}
# Shared WEP key connection (no WPA, no IEEE 802.1X)
network={
ssid="static-wep-test"
key_mgmt=NONE
# Keys in quotes are ASCII keys
wep_key0="abcde"
# Keys specified without quotes are hex keys
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
# IEEE 802.11 authentication
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# IBSS/ad-hoc network with WPA-None/TKIP
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}
4.c. Wireless
Tools
105/111
24/10/13
# emerge net-wireless/wireless-tools
Note: Although you can store your wireless settings in /etc/conf.d/wirelessthis guide recommends you store them
in /etc/conf.d/net.
Important: You will need to consult the variable name documentation.
Code Listing 3.2: sample iwconfig setup in /etc/conf.d/net
# Prefer iwconfig over wpa_supplicant
modules="iwconfig"
# Configure WEP keys for Access Points called ESSID1 and ESSID2
# You may configure up to 4 WEP keys, but only 1 can be active at
# any time so we supply a default index of [1] to set key [1] and then
# again afterwards to change the active key to [1]
# We do this incase you define other ESSID's to use WEP keys other than 1
#
# Prefixing the key with s: means it's an ASCII key, otherwise a HEX key
#
# enc open specified open security (most secure)
# enc restricted specified restricted security (least secure)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# The below only work when we scan for available Access Points
# Sometimes more than one Access Point is visible so we need to
# define a preferred order to connect in
preferred_aps="'ESSID1' 'ESSID2'"
Description
any
preferredonly
forcepreferred
We w ill forceably connect to APs in the preferred order if they are not found in a scan
forcepreferredonly
Do not scan for APs - instead j ust try to connect to each one in order
forceany
106/111
24/10/13
unique_ap="yes"
What about connecting to Ad-Hoc networks or running in Master mode to become an Access Point? Here's a
configuration just for that! You may need to specify WEP keys as shown above.
Code Listing 3.5: sample ad-hoc/master configuration
# Set the mode - can be managed (default), ad-hoc or master
# Not all drivers support all modes
mode_eth0="ad-hoc"
# Set the ESSID of the interface
# In managed mode, this forces the interface to try and connect to the
# specified ESSID and nothing else
essid_eth0="This Adhoc Node"
# We use channel 3 if you don't specify one
channel_eth0="9"
Important: The below is taken verbatim from the BSD wavelan documentation found at the NetBSD documentation. There
are 14 channels possible; We are told that channels 1-11 are legal for North America, channels 1-13 for most of Europe,
channels 10-13 for France, and only channel 14 for Japan. If in doubt, please refer to the documentation that came with
your card or access point. Make sure that the channel you select is the same channel your access point (or the other card
in an ad-hoc network) is on. The default for cards sold in North America and most of Europe is 3; the default for cards sold
in France is 11, and the default for cards sold in Japan is 14.
Variable
Description
See the iw config man page for details on w hat to send iwconfig
iwconfig_eth0
See the iw priv man page for details on w hat to send iwpriv
iwpriv_eth0
sleep_scan_eth0
The number of seconds to sleep before attempting to scan. This is needed w hen the
driv er/firmw are needs more time to activ e before it can be used.
sleep_associate_eth0
The number of seconds to w ait for the interface to associate w ith the Access Point before
mov ing onto the next one
associate_test_eth0
MAC
Some driv ers do not reset the MAC address associated w ith an inv alid one w hen they lose
or attempt association. Some driv ers do not reset the quality lev el w hen they lose or
attempt association. Valid settings are MAC, qualityand all.
scan_mode_eth0
Some driv ers hav e to scan in ad-hoc mode, so if scanning fails try setting ad-hochere
iwpriv_scan_pre_eth0
Sends some iwprivcommands to the interface before scanning. See the iw priv man page
for more details.
iwpriv_scan_post_eth0
Sends some iwprivcommands to the interface after scanning. See the iw priv man page for
more details.
4.d. Defining
Sometimes, you need a static IP when you connect to ESSID1 and you need DHCP when you connect to ESSID2.
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
107/111
24/10/13
In fact, most module variables can be defined per ESSID. Here's how we do this.
Note: These work if you're using WPA Supplicant or Wireless Tools.
Important: You will need to consult the variable name documentation.
Code Listing 4.1: override network settings per ESSID
config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"
config_ESSID2="dhcp"
fallback_ESSID2="192.168.3.4/24"
fallback_route_ESSID2="default via 192.168.3.1"
# We can define nameservers and other things too
# NOTE: DHCP will override these unless it's told not to
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# You override by the MAC address of the Access Point
# This handy if you goto different locations that have the same ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"
5. Adding Functionality
5.a. Standard
function hooks
Four functions can be defined in /etc/conf.d/netwhich will be called surrounding the start/stopoperations.
The functions are called with the interface name first so that one function can control multiple adapters.
The return values for the preup()and predown()functions should be 0 (success) to indicate that configuration or
deconfiguration of the interface can continue. If preup()returns a non-zero value, then interface configuration will be
aborted. If predown()returns a non-zero value, then the interface will not be allowed to continue deconfiguration.
The return values for the postup()and postdown()functions are ignored since there's nothing to do if they
indicate failure.
${IFACE}is set to the interface being brought up/down. ${IFVAR}is ${IFACE}converted to variable name bash
allows.
Code Listing 1.1: pre/post up/down function examples in /etc/conf.d/net
preup() {
# Test for link on the interface prior to bringing it up. This
# only works on some network adapters and requires the ethtool
# package to be installed.
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# Remember to return 0 on success
return 0
}
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
108/111
24/10/13
predown() {
# The default in the script is to test for NFS root and disallow
# downing interfaces in that case. Note that if you specify a
# predown() function you will override that logic. Here it is, in
# case you still want it...
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# Remember to return 0 on success
return 0
}
postup() {
# This function could be used, for example, to register with a
# dynamic DNS service. Another possibility would be to
# send/receive mail once the interface is brought up.
return 0
}
postdown() {
# This function is mostly here for completeness... I haven't
# thought of anything nifty to do with it yet ;-)
return 0
}
Note: For more information on writing your own functions, please read /usr/share/doc/openrc-*/net.example.bz2.
5.b. Wireless
Note: This will not work with WPA Supplicant - but the ${ESSID}and ${ESSIDVAR}variables are available in the
postup()function.
Two functions can be defined in /etc/conf.d/netwhich will be called surrounding the associate function. The
functions are called with the interface name first so that one function can control multiple adapters.
The return values for the preassociate()function should be 0 (success) to indicate that configuration or
deconfiguration of the interface can continue. If preassociate()returns a non-zero value, then interface
configuration will be aborted.
The return value for the postassociate()function is ignored since there's nothing to do if it indicates failure.
${ESSID}is set to the exact ESSID of the AP you're connecting to. ${ESSIDVAR}is ${ESSID}converted to a
variable name bash allows.
Code Listing 2.1: pre/post association functions in /etc/conf.d/net
preassociate() {
# The below adds two configuration variables leap_user_ESSID
# and leap_pass_ESSID. When they are both configured for the ESSID
# being connected to then we run the CISCO LEAP script
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
109/111
24/10/13
6. Network Management
3.a. Network
Management
If you and your computer are always on the move, you may not always have an ethernet cable or plugged in or an
access point available. Also, you may want networking to automatically work when an ethernet cable is plugged in or
an access point is found.
Here you can find some tools that help you manage this.
Note: This document only talks about ifplugd, but there are alternatives such as netplug. netplugis a lightweight
alternative to ifplugd, but it relies on your kernel network drivers working correctly, and many drivers do not.
6.b. ifplugd
ifplugd is a daemon that starts and stops interfaces when an ethernet cable is inserted or removed. It can also
manage detecting association to Access Points or when new ones come in range.
Code Listing 2.1: Installing ifplugd
# emerge sys-apps/ifplugd
Configuration for ifplugd is fairly straightforward too. The configuration file is held in /etc/conf.d/net. Run man
ifplugdfor details on the available variables. Also, see /usr/share/doc/openrc-*/net.example.bz2for
more examples.
Code Listing 2.2: Sample ifplug configuration
(Replace eth0 with the interface to be monitored)
ifplugd_eth0="..."
(To monitor a wireless interface)
ifplugd_eth0="--api-mode=wlan"
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
110/111
24/10/13
In addition to managing multiple network connections, you may want to add a tool that makes it easy to work with
multiple DNS servers and configurations. This is very handy when you receive your IP address via DHCP. Simply
emerge openresolv.
Code Listing 2.3: Installing openresolv
# emerge openresolv
www.gentoo.org/doc/en/handbook/handbook-amd64.xml?style=printable&full=1
111/111