Difference between revisions of "Gentoo Workshop"

From CSLabsWiki
m (more)
m (added fetchcommand to make.conf)
Line 153: Line 153:
* MIRRORS="http://mirror.clarkson.edu/gentoo"
* MIRRORS="http://mirror.clarkson.edu/gentoo"
* SYNC="rsync://mirror.clarkson.edu/gentoo-portage"
* SYNC="rsync://mirror.clarkson.edu/gentoo-portage"
* FETCHCOMMAND="rsync rsync://mirror.clarkson.edu/gentoo/distfiles/\${FILE} ${DISTDIR}"
== Preparing to chroot ==
== Preparing to chroot ==

Revision as of 12:09, 18 January 2012


The Gentoo Workshop is intended to broaden interest in Gentoo Linux. Participants learn how to install and maintain Gentoo, such that they will be able to carry out these steps outside of the structured environment of the workshop.

The workshop was originally conducted by Mark Platek. Christian Mesh will be presenting it in the beginning 2012.


Gentoo Handbook:

Gentoo Forums:

FAQs and HOWTOs:

Spring 2012

Based off of http://www.gentoo.org/doc/en/handbook/handbook-x86.xml and Mark Platek's guide from 2010 (below).

About Gentoo

Gentoo is a "metadistribution", due to it's nearly unlimited configurability.

All programs, libraries, etc. are compiled from source, similar to LFS. However, Gentoo includes Portage, a tool that automates some compilation tasks.

Gentoo performs marginally better than binary distributions due to compiled programs being tuned to the host machine, but that's not as important as the extremely high degree of control over the system that Gentoo affords.

The cost of this power is complexity and effort. But, it's hard to go back to binary distributions once you grok Gentoo.

We Begin!

  • A good backup never hurt anyone :)
  • Make sure your machine is connected to the external Clarkson network via ethernet.
  • Boot the live cd. All of the defaults should be adequate.
  • You are now inside a environment in which you can start building.


  • `ping www.google.com` If this works youre networking is setup properly
  • ethX is your primary adapter where X the number of your netork card
  • `ifconfig` If you see your adapter shows up (ethX) procede to dhcpcd
  • `ifconfig -a` This shows all of your network adapters
  • `ifconfig ethX up` This makes sure your adapter is enabled
  • `dhcpcd ethX` this will attempt to obtain an IP address for ethX
  • `ping www.google.com`


For the next few steps, we are assuming you wish to use /dev/sda for your gentoo installation. If you wish to install to a different drive, from here on /dev/sda will be /dev/sdX where X is the letter of the target device

/dev/sda1 /boot ext2 100MB /dev/sda2 swap linux-swap 1-4GB /dev/sda3 / ext4 or xfs the rest

  • / is the root of your filesystem
  • /boot will store your kernel image(s) and grub (a boot loader)
  • swap is how linux uses space on a hard drive as ram. This is usually only used if you run out of physical memory

We will use the `parted` to format the disk.

!!!WARNING!!! The data on /dev/sda will be destroyed

  • `parted /dev/sda`
  • `mklabel msdos` or `mlabel gpt` This creates the partition table
  • `mkpart primary ext2 0MB 100MB` Create the boot partition
  • `mkpart primary linux-swap 100MB 2GB` Create a swap partition close to 2GB
  • `mkpart primary ext4 2GB -1s` Use the rest of the drive for /
  • `p` Verify everthing worked properly
  • `q` Exit the utility


  • `mkfs.ext2 /dev/sda1`
  • `mkswap /dev/sda2`
  • `mkfs.ext4` or `mkfs.xfs` /dev/sda3


/mnt/gentoo will serve as the location where we will start our build

  • `mount /dev/sda3 /mnt/gentoo`
  • `mkdir /mnt/gentoo/boot`
  • `mount /dev/sda1 /mnt/gentoo/boot`
  • `swapon /dev/sda2`


This may seem like a odd time to worry about such things. Tar checks the timestamps on archived files and will holler bloody murder if you try to extract files from the future.

  • `date` If this is close to correct, you can move on
  • `date MMDDhhmmYYYY`


There are three possible “stages” from which to install Gentoo:

  • stage1: closer to LFS, you must compile the entire toolchain from scratch before you can proceed. (no longer supported ­ officially)
  • stage2: no longer supported at all
  • stage3: the toolchain is provided in a binary form

The stage3 tarball we are about to download contains binaries of GCC and other toolchain utilities. However, you can recompile the entire toolchain to emulate a stage1 install from a stage3. This process will give you a toolchain built for your specific machine by the most recent version of GCC. The downside? It takes about 6 hours if you have a good machine. In the interests of time, we will only do a stage3 install.

Installing stage3

We will use a text based web browser (links) to download the necessary files

  • `cd /mnt/gentoo/`
  • `links http://mirror.clarkson.edu/gentoo/`
  • Download "releases/(your architecture)/current-stage3/stage3-i686-______.tar.bz2"
  • Download "snapshots/portage-latest.tar.bz2"
  • 'q' Exit links

Next we will extract the stage3 and portage tarballs

  • `tar xvjpf stage3-*.tar.bz2`
  • `tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr`

The stage3 tarball will create the skeleton of a linux system. The portage snapshot contains a recent portage tree, portage is gentoo's interpretation of a "package manager"

Setting up make.conf

  • `nano /mnt/gentoo/etc/make.conf`

/etc/make.conf is portage's main configuration file. It lets you specify information on how portage should build and install pacakges for your system.

CFLAGS are your flags for gcc, CXXFLAGS are your flags for g++

  • Optimization
    • -O1 lowest optimization
    • -O2 safe optimization
    • -O3 unsafe optimization
  • -fomit-frame-pointer causes programs that don't use a frame pointer to be compiled without one. This can make debugging quite difficult.
  • -pipe use pipes to pass files where possible, increased speed, slightly more memory usage
  • -march=___ causes optimazation for your processor, see: http://en.gentoo-wiki.com/wiki/Safe_Cflags

gcc and g++ can use mutiple threads to take advantage of computers that have multiple cpu cores.

  • MAKEOPTS="-jN" where N is the number of cores + 1

Set mirror info for portage

  • MIRRORS="http://mirror.clarkson.edu/gentoo"
  • SYNC="rsync://mirror.clarkson.edu/gentoo-portage"
  • FETCHCOMMAND="rsync rsync://mirror.clarkson.edu/gentoo/distfiles/\${FILE} ${DISTDIR}"

Preparing to chroot

Copy over DNS info

  • cp -L /etc/resolv.conf /mnt/gentoo/etc/

Mount /dev /proc

  • mount -t proc none /mnt/gentoo/proc
  • mount --rbind /dev /mnt/gentoo/dev


Chrooting allows you to enter the environment you created and run commands as if it is actually running.

  • chroot /mnt/gentoo /bin/bash

Setup your environment

  • env-update (refresh environment variables)
  • source /etc/profile (export new variables)
  • export PS1 = "(chroot)$PS1)"

You are now inside your new gentoo installation!



  • `emerge` is the command used to install and remove packages
  • `equery` is used to find information on a package
  • `eselect` is used to configure system parameters like gcc version and kernel version
  • `revdep-rebuild` is used to make sure the libraries on your system are in the right version


  • `emerge --sync` updates your portage tree
  • `emerge -uDN world` updates the entire system
  • `emerge -s sl` search for a package called sl
  • `eselect kernel list` lists available kernels

Run `emerge --sync`

Emerge the text editor of your choice


  • emerge vim

Setting your locale

edit /etc/locale.gen

  • uncomment en_US.UTF-8 ...


Set your timezone

  • `ls /usr/share/zoneinfo/` list available timezones
  • `cp /usr/share/zoneinfo/EST /etc/localtime`

Running updates

Run `emerge -puDN world` to make sure everything checks out, then run `emerge -uDN world`

The Linux Kernel

We will be using the gentoo-sources package. It includes the generic Linux kernel with a few nice patches. Genkernel is a program that will build a kernel with a more generic config. When you use genkernel to build your kernel, your system will generally detect all your hardware at boot-time. It is not as fun to use genkernel so we will be configuring our kernel by hand.

  • `emerge gentoo-sources`
  • `cd /usr/src/linux`
  • /usr/src/linux points to /usr/src/linux-version. It is configured using eselect kernel. We only have one version at this time so the step is not necessary.
  • `make menuconfig`

We now can see a curses based menu system that will guide us through configuring our kernel. Items marked with a * will be built directly into the kernel. Items marked with a M will be built as a module and can be loaded at a later time. This allows you to include items like extra file systems and drivers without automatically loading them on boot.

General Setup

Here you can change options such as supporting swap, initramfs, kernel size optimization, and other such options. We can leave most of this alone, but it is a good place to look when you want to try some new things.

Module Support

We will leave this alone for now.

Enable the block layer

Take a look at the IO schedulers. The deadline scheduler was used by default until 2.6.18 when it was replaced by CFQ. CFQ (Completely Fair Queuing) tries to minimize costly disk seeks. What if disk seeks are of no concern? Say we have a SSD, we could use the No-op scheduler. No-op does not waste CPU time calculating the best seek pattern.

Processor type and features

First let's set the Processor family. We can also set the preemption mode for the kernel. This has a large impact on the performance of your system.

  • The safest is no preemption, but the kernel will be slower to react.
  • Full preemption allows the kernel to interrupt any process anytime. This decreases response time to user events but can lead to issues with high work loads.
  • Voluntary preemption is a compromise between the two.

You can disable features that do not pertain to your processor, such as Intel microcode update on a AMD system. There is lots of cool options in here that are just not in the scope of this workshop.


ACPI is one way for a computer to report it's state to the OS, for example laptop batteries.

Frequency Scaling support lets the OS set the frequency of the CPU. This is especially useful on laptops.

I would recommend disabling Hibernate. I have found it is easier to setup hibernation when that is not enabled in the kernel.

Bus Options

Again, cool stuff that is out out of the range of this tutorial.

Executable file Formats

I would recommend those of us doing 64bit build enable "IA32 a.out support".

Networking support

Networking Options does not really need to be changed, take a look though it is interesting. Unless you are part of K2CC, you can disable Amateur radio support. If you have bluetooth, make sure it is enabled here. If you have a desktop and want to disable wireless, we will come back to it.

Device Drivers

Here is a fun part that you want to get right. In general, if you are unsure about which driver to pick, choose all relevant ones. You can all ways come back to it later.

To find out what devices you have without looking at the manual, use `lspci` in another console (CTRL+ALT+F1-6).

SATA and PATA drivers

This is the first section that you really need to concern yourself with. I recommend selecting all options that pertain to your chipset manufacturer if you are unsure.


These can be disabled if you don't plan to use RAID or LVM.

To Be Continued ...

Spring 2011 Slides

Session 1: http://web2.clarkson.edu/projects/cosi/fa2010/students/platekme/workshop1.pdf

Session 2: http://web2.clarkson.edu/projects/cosi/fa2010/students/platekme/workshop2.pdf

Session 3: http://web2.clarkson.edu/projects/cosi/fa2010/students/platekme/workshop3.pdf

Session 4: http://web2.clarkson.edu/projects/cosi/fa2010/students/platekme/workshop4.pdf

These slideshow presentations are Copyright © 2011 by Mark Platek and are licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.