Funtoo Linux First Steps

From Funtoo
Revision as of 19:55, July 24, 2013 by NikosA (talk) (Installing a graphical environment: scratching a new subsection about "Troubleshooting" if X does not launch)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Help us improve this page by adding your favorite post-install first steps!

After booting into a new Funtoo Linux installation, you are ready to explore the full capabilities of your system.

Accurate System Time (NTP)

It's important that your Funtoo Linux system has an accurate clock. NTP (network time protocol) can ensure your clock is accurate at all time.

My favorite and recommended NTP client/server is net-misc/chrony. It is recommended for Funtoo systems:

root # emerge chrony
root # rc-update add chronyd default

Use something like the following for your /etc/chrony/chrony.conf:

maxupdateskew 100
driftfile /etc/chrony/chrony.drift
keyfile /etc/chrony/chrony.keys
commandkey 1
dumpdir /var/log/chrony
initstepslew 10
logdir /var/log/chrony
log measurements statistics tracking
logchange 0.5
mailonchange 0.5
rtcfile /etc/chrony/chrony.rtc
sched_priority 1

Chronyd can then be started immediately by running rc to start all new services:

root # rc

Because Funtoo Linux starts network daemons without waiting for an Internet connection to become available, and because chrony will attempt to synchronize the clock over the Internet when it first starts, you must manually configure chronyd to be dependent on whatever method you use to enable your outbound network connectivity. For example, if using dhcpcd, add the following to /etc/conf.d/chronyd:


You should notice a marked improvement in your system clock's accuracy. If your system time was off by a significant amount, chronyd will gradually correct your clock while the system runs.

Installing an Editor

By default, Funtoo Linux has the nano and vi editors installed. nano is the default editor.

If you are new to Funtoo Linux, you have probably heard about emerge, the Funtoo and Gentoo Linux command for installing packages from the Portage tree. Funtoo Linux has a git-based Portage tree, which is located at /usr/portage by default. It contains scripts called ebuilds that describe how to build and install packages from source. emerge is used to run these scripts and install packages, as follows:

root # emerge vim

You can also see what packages would be installed, but not actually install them, by using the -p, or --pretend option:

root # emerge -p vim

Another equally handy option is the -a, or --ask option, which will display the packages to be merged, and then ask for confirmation from you before continuing:

root # emerge -a emacs

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] app-admin/eselect-emacs-1.13 
[ebuild  N     ] net-libs/liblockfile-1.09 
[ebuild  N     ] app-emacs/emacs-common-gentoo-1.3-r1  USE="-X -emacs22icons" 
[ebuild  N     ] app-editors/emacs-23.4-r1  USE="alsa gif gpm jpeg png tiff xpm -X -Xaw3d (-aqua) -athena -dbus -gconf -gtk -gzip-el -hesiod -kerberos -livecd -m17n-lib -motif -sound -source -svg -toolkit-scroll-bars -xft" 
[ebuild  N     ] virtual/emacs-23 

Would you like to merge these packages? [Yes/No]  y

In the above emerge output, you can see some text beginning with USE= on the app-editors/emacs line. This means that this package has a number of optional build-time features which can be controlled using Portage USE variables. These USE variables can be set globally by adding a line such as this to /etc/make.conf:

USE="gif jpeg png tiff xpm"

If you go ahead and make these changes, and then run emerge -a emacs again, you will notice that several more dependencies will be pulled into the list of packages to be merged. You can control the footprint of your Funtoo Linux system (and avoid bloat) by enabling only the USE variables you need.

Above, we enabled several USE variables globally in /etc/make.conf. It is also possible to enable USE variables on a per-package basis, and often times this is the best approach. If you wanted to enable gtk for emacs only, you would create the /etc/portage/package.use directory, and create an emacs file in it that contained the following:

app-editors/emacs gtk

Note that package.use can also be a file if you prefer. However, using an /etc/portage/package.use directory is recommended as it keeps things better organized. The filenames you use inside the package.use directory do not impact Portage behavior and can be named whatever is convenient for you. You might want to put the settings above in a file called /etc/portage/package.use/editors if you have several USE settings that you use for editors.

Default editor

Funtoo Linux also has a special meta-command called eselect, which can be used to set many default system settings. One of the things it is used for is to set the default editor used by things like crontab -e, etc that will automatically start an editor when run. Here is how to use eselect to change the default system editor:

root # eselect editor list
Available targets for the EDITOR variable:
  [1]   /bin/nano
  [2]   /bin/ed
  [3]   /usr/bin/ex
  [4]   /usr/bin/vi
  [ ]   (free form)
root # eselect editor set 4
Setting EDITOR to /usr/bin/vi ...
Run ". /etc/profile" to update the variable in your shell.

After logging in again, or typing source /etc/profile in the current shell, the new system editor will be active.

Changing profile

The Funtoo_1.0_Profile uses a new multi profile approach which allows way more flexibility and customization. Instead of having to remove what you don't want, now you'll be able to add in just the parts that you do want and leave out the rest.

Updating your system

Sometimes, you may want to update the packages on your system. Often, this is done after you run emerge --sync, which will grab Portage tree updates from the main Funtoo Linux Portage tree:

root # emerge --sync

>>> Starting git pull...
remote: Counting objects: 1791, done.        
remote: Compressing objects: 100% (206/206), done.        
remote: Total 980 (delta 811), reused 931 (delta 764)        
Receiving objects: 100% (980/980), 185.04 KiB, done.
Resolving deltas: 100% (811/811), completed with 754 local objects.
From git://
   7a17140..b836bc8 -> origin/
Updating 7a17140..b836bc8
>>> Git pull in /usr/portage successful

 * IMPORTANT: 1 news items need reading for repository 'gentoo'.
 * Use eselect news to read news items.

root # 

You may also want to update your system after you have changed USE flag settings. To take advantage of the USE flags you have just enabled, it's necessary to recompile everything that includes them.

Below, you'll find a recommended emerge command for updating your entire system. The -a option will cause emerge to prompt you for confirmation before starting the merge:

root # emerge -auDN world

-u tells emerge to update any already-installed but out-of-date packages that we specify on the command-line. The -D option tells emerge to perform a deep dependency tree graph, so it will include sub-dependencies of packages that we have specified on the command line as well. This allows emerge to perform as thorough an update of your system as possible.

The -N (--newuse) option tells Portage to check for any new USE flags that have been enabled or disabled, and rebuild packages so that all USE flags are set as currently defined in /etc/make.conf and /etc/portage/package.use.

world is a "meta-package" or "package set" which includes every package that you have manually installed plus all packages in the system set. It's important to note that whenever you ask emerge to install anything, such as metalog or vim, those packages will be automatically added to the world package set. In this way, emerge learns what packages you care about and want to keep updated. If you want to see what's in your world package set, take a look at /var/lib/portage/world:

root # cat /var/lib/portage/world

Also note that some packages may have been added to the world set by Metro when your stage3 tarball was built.

Updating a few packages

If we simply wanted to rebuild a few packages to reflect updated USE flag settings, we could specify it instead of world. Be sure to include the -N option:

root # emerge -auDN vim emacs

System Services: Installing a logger

It's a good idea to install a system logging daemon, and then enable it. This will ensure that any important system messages are logged to text files in /var/log.

Metalog is a popular lightweight logger:

root # emerge metalog
root # rc-update add metalog default
root # rc
 * Starting metalog ... 

Above, we used the rc-update helper command to add the metalog initialization script to the default runlevel. The default runlevel, defined at /etc/runlevels/default, contains symbolic links to all system initalization scripts to run by default.

The rc command will tell OpenRC to ensure that all services in the current runlevel are running, and if they are not, to start them. Since we added metalog to the default (current) runlevel, but did not start it, running rc will cause metalog (and any other scripts that need to start) to be started.

If you need to stop a service manually, you can run its initialization script directly from /etc/init.d:

root # /etc/init.d/metalog stop
 * Stopping metalog ...     

System Services: Installing a cron daemon

Another useful system service present on most systems is the cron daemon, which allows you to configure certain tasks to be automatically run at certain times. More importantly, some other packages assume you have a cron daemon and may try to set up cron jobs, so it is a good idea to have a cron daemon installed even if you don't anticipate using it manually yourself. Packages that might want to set cron jobs include sys-apps/man-db, sys-apps/mlocate, app-portage/pfl, and other programs that keep some kind of database that needs to be updated from time to time.

There are various different implementations of cron which have different properties, but the one we recommend for Funtoo is sys-process/fcron.

The process for setting up the cron daemon is similar to how we set up the system logger just now:

root # emerge fcron
root # rc-update add fcron default
root # rc
 * Starting fcron ...

Useful applications for daily usage

Here are some other packages you may want to consider installing via emerge:

Allows you to have persistent login sessions.
Similar to screen -- some people prefer it.
Grant root privileges to selected users and command combinations.
Colorful and informative text-based process list.
Similar to htop, includes disc I/O and network I/O in display.
Quick portage package search
Portage utils
GNU Midnight Commander is a text based file manager --- some will recall MS-DOS XtreeGold
Command-line interface to various pastebins; very useful in providing info along with bugs reports
A modular textUI IRC client with IPv6 support; a powerfull tool to get help from Funtoo Community on IRC channel. Nice companion to app-text/wgetpaste
root # emerge --jobs app-misc/screen sudo htop eix gentoolkit app-misc/mc wgetpaste net-irc/irssi
root # eix-update

Then use `eix-sync` for syncing portage.

Creating a user account

It's a good idea to create a normal user account that you can use for general Linux tasks. Before rebooting, create a user account for everyday use. Adjust the groups in the example below to match your needs. Some of them may not exist yet on your system. Replace "<user_name>" with the name you're going to use for your everyday user. The "-m" option instructs useradd to create a home directory for your user. See man useradd for more info.

root # useradd -m -g users -G audio,video,cdrom,wheel <user_name>

Don't forget to set a password for your new user:

root # passwd <user_name>

Installing a graphical environment

If you intend on using your Funtoo Linux installation for more than system administration, chances are you're going to want to have a GUI (graphical user interface). In the past, setting one up involved wading through text files and man pages. Thanks to modern tools like udev this is no longer the case.

Unlike most operating systems, Funtoo does not ship with a GUI pre-installed. If you've used Windows or Mac OS, you'd also know that their interfaces cannot be replaced easily. With Linux, the opposite is true -- you are free to choose from a huge selection of GUIs. From window managers such as Blackbox, IceWM, and xmonad, to fully-featured desktop environments like GNOME and KDE, the possibilities are vast in number.


In order to use a graphical environment it's necessary to install X.Org Server. Before we start it's a good idea to make sure that your system is configured correctly. If you've installed your kernel using the binary USE flag, chances are that your video card is already supported.

In order for Portage to know which video card(s) you want to support, you'll need to add a line to your make.conf.

root # nano -w /etc/portage/make.conf

In the example above we're using Intel integrated graphics drivers. Examples of valid entries include radeon for AMD Radeon cards, and nouveau or nvidia for NVIDIA cards. If you haven't yet switched to the desktop profile it's a good idea to do it now.

Next comes the actual installation:

root # emerge xorg-x11

Now we need to test to make sure X.Org is working properly. To test it we will install twm, a simple window manager which has traditionally served as the standard window manager for X.Org. In Funtoo Linux it is included in the core X.Org meta-package x11-apps/xinit, but is not installed by default.

It is possible to install twm directly by merging x11-wm/twm but for the sake of this tutorial we will install the meta-package, which includes a few extra utilities which may come in handy. There are two ways to do this depending on whether you want it to be installed temporarily or permanently. If you just want it to test X.Org use the following command:

root # USE="-minimal" emerge -1 xinit

The minimal USE flag is used in some ebuilds to install the bare minimum needed to get a working system. By passing USE="-minimal" to the command line before emerge, we are telling Portage to disable the flag and install the complete package. The -1 (--oneshot) following emerge tells Portage not to add the package to world. This is useful when installing packages which are automatically pulled in as dependencies by other packages.

If you want the package installed permanently you will need to add a line to package.use:

root # mkdir -p /etc/portage
root # echo x11-apps/xinit -minimal >> /etc/portage/package.use

Next we reinstall x11-apps/xinit:

root # emerge -1N xinit

Once that's done, we're able to finally test X.Org:

root # startx

If everything is well, a simple GUI along with an analog clock and a terminal will appear.


ToDo: Add basic steps to check if things go wrong and X does not start.

  • x11-drivers
  • /etx/portage/make.conf
    • VIDEO_CARDS=""
    • evdev
    • mouse, keyboard
  • /etc/X11/xorg.conf
  • /etc/conf.d/xdm