COMP 3000 2011 Report: Funtoo Linux

From Soma-notes
Revision as of 21:39, 12 November 2011 by Porter.nicolas (talk | contribs)

Background

Download

Official Download Pagehttp://www.funtoo.org/wiki/Download
Github Profilehttps://github.com/Funtoo

Funtoo Linux is a distribution that aims to improve the core technologies of Gentoo. It is a source-based distribution which features a git-based Portage tree, GPT/GUID boot support, enhanced network configuration and native UTF-8 support. <ref>http://distrowatch.com/table.php?distribution=funtoo, </ref> It is targeted at experienced Linux users and is extremely configurable, sometimes even referred to as a meta-distribution. It is also very fast. <ref>http://www.gentoo.org/main/en/about.xml</ref>

Because Funtoo Linux is a meta-distribution, it is hard to say what size it is. That said, the core system is 110M.

One of the features of Funtoo Linux is that it allows GUID partition tables. The main advantage of the GPT partitioning scheme is that it supports partitions greater than 2TiB, which is the size limit of the standard MBR partitioning scheme. This is essential for systems using RAID logical volumes, as it is easy to exceed the partition size limit imposed by MBR. <ref>http://www.funtoo.org/wiki/GUID_Booting_Guide</ref>

History

Funtoo's history is closely tied to that of Gentoo. Daniel Robbins was the project creator, chief architect and project leader of the Gentoo development team until April 26, 2004, where he had to leave because of personal issues. <ref>http://article.gmane.org/gmane.linux.gentoo.nfp/65</ref> Before leaving, Daniel created a non-profit foundation, Gentoo Technologies, which would hold all of the Gentoo copyrights. <ref>http://linux.sys-con.com/node/44614 Founder of Gentoo Linux, Daniel Robbins, Resigns as Chief Architect.</ref> After working at Microsoft for two years, he joins back the Gentoo development team in 2007. He started working on Funtoo after his proposals to fix problem with the Gentoo foundation were refused, due to his absence. <ref>http://en.wikipedia.org/wiki/Funtoo</ref>

Virtualization Setup

Using Virtual Box 4.1.2. I am sharing my virtual hard drive with two hosts, each running different virtual machines. I do this because my desktop machine is faster at compiling.

Hosts

Gentoo Linux x64 w/ 3.0.4-gentoo kernel (Laptop)
Intel Core 2 Duo CPU P8400 @ 2.26GHz
Allocating 2 cores, 1024Mb RAM to VM.
Windows 7 Professional x64 (Desktop)
Intel Core 2 Quad CPU Q6700 @ 4.0GHz
Allocating 4 cores, 2048Mb RAM to VM.

Guest

  • Enabled IO APIC.
  • Enabled PAE/NX.
  • Enabled VT-x/AMD-V.
  • Using VHD format, 20GB.

Installation

Installing Funtoo Linux is a manual process. It does not have an automated installer because it is not needed. You can actually install Funtoo Linux while being booted in you current OS, provided you have the tools (ex. fdisk, git).

Overview

  1. Boot in an arbitrary Linux system (Live CD or otherwise).
  2. Prepare the disk where Funtoo Linux will be installed.
  3. Install the Funtoo stage tarball of your choice.
  4. Chroot into the new Funtoo Linux system.
  5. Pull the Portage tree repository.
  6. Customize the system configuration.
  7. Install a kernel.
  8. Install a bootloader.
  9. Setup users and boot-time services.
  10. Reboot.

Taken from the official install guide.<ref>http://www.funtoo.org/wiki/Funtoo_Linux_Installation</ref>

Partitioning with Gparted under SystemRescueCD
Compiling kernel under SystemRescueCD
Finished installing Funtoo Linux!

To perform a Funtoo install, you must use an existing Linux system or a live CD. Unlike Gentoo, Funtoo Linux does not have a dedicated live CD. That is because its Metro build tool does not support live CD builds yet. Instead, it recommends the use of SystemRescueCD, a Linux system rescue disk, because it comes with all the software you need for the installation. For my installation, I used SystemRescueCD. I would have used my Linux machine but I could not find a way to use fdisk with VHD's.

After booting in the Linux system of your choice, you must first prepare the disk that Funtoo will be installed on. This is the preferred way of partitioning your disk for a Linux system. That said, I had to use MBR partitioning because VirtualBox's BIOS does not support booting from GPT disks. <ref>https://forums.virtualbox.org/viewtopic.php?f=4&t=23279</ref> No big deal: I am not planning on using a > 2TiB disk for my virtual machine.

I installed from a stage3 tarball, because I am not crazy enough to start from stage1. Stage3 is the recommended one to use anyway. To install from a stage3 tarball, you first download the stage tarball and then you extract its contents in the Funtoo Linux's root partition. Now that all the core Funtoo Linux programs are installed, you switch to the Funtoo Linux system by chrooting into it.

Then, using git, you pull the Portage tree from Github. Funtoo Linux uses a git-based portage system, which allows smaller manifest sizes because it leverages Git's file integrity checking mechanisms. In the rsync-based system, you would also need a change log. With Git, commit messages are used instead. <ref>http://www.funtoo.org/wiki/Funtoo_Linux_FAQ#What_is_mini-manifest.3F</ref>

After tweaking a few config files, I had to get a kernel. I opted to use a kernel that would be generated by genkernel because I was not sure what kind of configuration was needed for a virtual machine. During compilation, I got some strange gcc error. Since I was not sure what the problem was, I decided to hop on the Funtoo irc channel and see if somebody could help me. Here's the chat log (Surjikal is me):

23:08 < Surjikal> I get some kind of weird error when I use emerge sysrescue-std-sources. gcc: Internal
                  error: Killed (program cc1)
23:09 < angry_vincent> oh
23:09 < angry_vincent> do you have enough space?
23:09 < drobbins> Surjikal: possibly bad memory
23:09 < Surjikal> Ahh I suspected that was it
23:10 < Surjikal> Yes I might be low on space, doing this on a VM
23:10 < drobbins> Surjikal: random segfaults during compile is generally bad mem
23:10 < drobbins> Surjikal: that could be it too
23:10 < drobbins> Surjikal: either bad mem or low mem
23:10 < drobbins> it may be the OOM killer
23:10 < drobbins> since it said it was killed
23:11  * drobbins wonders what to call Portage 1.0
23:11 < Surjikal> You know what, that could be it actually. I don't have lots of RAM allocate on that VM, and
                  I'm running the sysrescue live disk
23:11 < drobbins> Surjikal: did you do swapon first?
23:11 < drobbins> Surjikal: maybe if you add swap it will work ok

Turns out the 256MB of RAM I allocated to the VM was insufficient to compile a kernel. But what really surprised me it was that the chief architect (drobbins) helped me out! Compilation took about 3 hours, but its not too bad since the process is automated.

After compiling the kernel, you must setup the bootloader. This involves installing the GRUB package, modifying a config file and running a GRUB config generator script. This step is much easier and much more automated than on Gentoo, where you would have to edit the GRUB configuration directly. Setting up users was a breeze. There's nothing Funtoo Linux specific about that step.

That's it! Now all that's needed is a reboot.

Basic Operation

Showing xterm and twm after emerging xorg-server

Funtoo Linux gives you the power to customize almost any aspect of your distribution. This is why after installation, you are only presented with a simple bash prompt.

I wanted some kind of window manager, so I had to install an X server. In order to do this, I had to specify which video card and input devices I had in the portage configuration file. I also had to install the virtual box video card and input device driver, as well as the guest additions. I installed twm and xterm to make sure my X server worked correctly.

But twm is extremely ugly, and is not a very good window manager. So, I decided to install awesome, a nice tiling window manager. I disabled the gnome, kde and qt4 use flags, as I really only need GTK+ support. xterm is also horrible to look at, so I installed lxterminal.

Using portage is as easy to use as apt-get.


Usage Evaluation

Awesome window manager running 2 lxterminals, showing irssi and make.conf

Funtoo Linux is an extremely capable source-based distribution. The process of compiling applications is painless, but it is lengthy. However, for big applications such as firefox, you can set the binary use flag to simply download and install the binary, instead of compiling from source.

The portage tree contains a lot of packages, and most of them are up to date. If a package is unavailable, Gnome 3 for example, you can most likely find it through a third party overlays (Gnome 3 is in the Gnome overlay).

Funtoo Linux is extremely customizable. It is the reason why I chose this distribution: I was tired of some distribution maker deciding what is best for me.

That said, Funtoo Linux can be a bit frustrating when it comes to errors. Since you are dealing with the source directly, it can be hard to get everything configured properly. Also, updating your system can be quite a chore and it can take several days to complete the process. Also, if a library is updated, and the ABI or API changes, then everything that depends on this library must be recompiled. To be fair, these problems usually happens when you waiting too long (>6 months) before updating. And of course, all the tools to help you update your system are available through portage.


Software Packaging

What packaging format and utilities are used?

There are no packages or archives like .deb or .rpm files in Funtoo Linux. Instead, a package is a directory which contains an ebuild script, a manifest file, patch files and configuration files. Funtoo Linux allows you to customize which parts of the package you want to compile via USE flags.

Ebuild Scripts

An ebuild or ebuild script is a bash script which runs in a special environment, and describe how to download, compile, configure and install a package. The ebuild usually downloads a distfile, which is a source tarball, but can also pull the source from a repository. <ref>http://en.gentoo-wiki.com/wiki/Writing_Ebuilds</ref>

Manifest File

The manifest file is used to determine the integrity of source tarballs (called distfiles). In Gentoo, it is also used to check all files in the package. This is not required in Funtoo Linux since git takes care of that. The manifest files are still needed because the source tarballs are not contained in the git repository and so they must be checked after the ebuild downloads them.

Gentoo Manifest file for the package cowsay:

AUX cowsay-3.03-mech.patch 490 RMD160 bc2318e9832108a39728e92806578566618fad8e SHA1 cec033ce530daa01736a841f351144f3ca5aea3d SHA256 e41ec32c25afd5e8ed8708cc35b228646e0d2d793f91d27327119850b554d6e2
AUX cowsay-3.03-tongue.patch 358 RMD160 9de33eec59e44fd2a375bca1419313f856bade7f SHA1 4cb24d5ea35df531c1e8ad2d000d643e41e97964 SHA256 07a01f73455a00c50760cf1ef9e17a6483b0036ac23fb51d978d38deacdd0f9e
AUX cowsay-3.03-utf8.patch 454 RMD160 00ea66c1561dd6ec2a31156c49f7f8d067b7b119 SHA1 f8eca4fa5dd4c7d404b215ca98601715042a7b62 SHA256 5400fd73294e86f1d58098276e57bf74e3688ce22f07f1df453dd903eda397b1
DIST cowsay-3.03.tar.gz 15189 RMD160 f26b9ffe3d5551ee8049979c628bbe198817044a SHA1 cc65a9b13295c87df94a58caa8a9176ce5ec4a27 SHA256 0b8672a7ac2b51183780db72618b42af8ec1ce02f6c05fe612510b650540b2af
EBUILD cowsay-3.03-r2.ebuild 1245 RMD160 14bce76715480958f0dfa33d1c95e7033965c4d1 SHA1 7c73d1ef3dc0166174acfb28749a896ce8832272 SHA256 8f801328113e872908d32158a99a363c8c14b0ba0ba389490166d3b2506020ac
MISC ChangeLog 4354 RMD160 5681d5b0ee3d5c8a343451258269797fb9140793 SHA1 0378422a1656d493aad0e31aad66c42cf0a10e71 SHA256 6049c0d281da8e00fb42361fe6688b1515a0391569df60303fc78e012cc46019
MISC metadata.xml 158 RMD160 cbd9984bb6b426c8c9cee5022fe0a26261612fea SHA1 be5251fa1dacef5c41b74761bb1c8c54fb633b9e SHA256 1423a4fdd4a79b1728a2056d9e300f7e1074253095d82726218d9e9b953888a3

Funtoo Manifest file for the package cowsay:

DIST cowsay-3.03.tar.gz 15189 RMD160 f26b9ffe3d5551ee8049979c628bbe198817044a SHA1 cc65a9b13295c87df94a58caa8a9176ce5ec4a27 SHA256 0b8672a7ac2b51183780db72618b42af8ec1ce02f6c05fe612510b650540b2af
Portage
Porthole, a Portage GUI frontend

Portage is the software management tool of Funtoo Linux. <ref>http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1</ref> It is composed of two programs: Ebuild and Emerge. Ebuild is the tool which runs ebuild scripts. Emerge is the tool that keeps track of installed packages, resolves dependencies and provides the main portage interface.

Porthole is a GUI frontend to portage. It is very useful if you are a first time Funtoo Linux or Gentoo user and works great as a package and use flag browser.

USE Flags

Use flags are used to specify which component of a package you want/don't want to compile. Doing this cuts down compilation by a significant amount because it greatly reduces the number of dependencies pulled in. Use flags can be set globally or they can be package specific. Global use flags are specified in /etc/make.conf.

For example, if I want to disable the Gnome and KDE components of packages, globally, this is how I would modify my make.conf file:

DONT_USE="-kde -gnome"
XORG_USE="udev nptl xorg dri"
USE="$XORG_USE $DONT_USE"
Other Tools

Equery is a collection of modules for querying the state of Funtoo Linux packages, files and USE flags.<ref>Equery man page</ref> It is not bundled with the distribution and it is part of the gentoolkit package. This program uses the /var/db/pkg directory which contains the state of portage. <ref>http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=1, Gentoo Files and Directories</ref>


How can you use these utilities to get a list of installed packages?

Equery can be used to get a list of installed packages:

equery list "*"

Alternatively, you can list the directories in /var/db/pkg.

find . -maxdepth 2 -type d


How do you add and remove packages?

Adding packages:

emerge <package>

Adding a package, with custom flags:

USE="-nautilus" emerge evince

Alternatively, put custom use flags in /etc/portage/package.use:

echo "app-text/evince -nautilus" >> /etc/portage/package.use
emerge evince

Removing packages:

emerge --unmerge <package>

Checking for reverse dependencies before removing:

emerge --pretend --verbose --depclean <package>

Updating the system:

emerge -pv --update --deep --newuse world



How extensive is the software catalog for this distribution?

$ ls -RA /usr/portage | grep : | wc -l
22566

Major Package Versions

Initialization

Terms

Meta-Distribution

A distribution that allows you to build your own distribution. Funtoo Linux is called a meta-distribution due to its ability to be totally customized.

Source-based distribution

A source-based distribution is a distribution that all of the packages are downloaded as source and compiled, as opposed to downloading a precompiled binary. <ref>https://wiki.archlinux.org/index.php/Arch_Compared_to_Other_Distributions#Source-based</ref>

Advantages of source-based distributions (ex. Gentoo, Funtoo)
  • Packages are optimized for your hardware.
  • You can exclude unwanted features from packages in order to minimize dependencies and reduce the binary size. For example, if your system uses Gnome, in most cases you will never need the KDE component of a package. In Funtoo/Gentoo, you are able to do this via 'use' flags.
  • Improved security: You can actually inspect the source of the package instead of trusting that the binary your distribution provides is not malicious.
Advantages of binary-based distributions (ex. Debian, Fedora)
  • Much faster to install large programs such as Firefox.
  • More user-friendly, since the user does not have to deal with compilation issues.

Stage tarballs

A stage tarball is a precompiled system used as a starting point to a Funtoo/Gentoo Linux install. Typically, you would use a stage3 tarball to do a Funtoo/Gentoo Linux installation but some people may want to do a stage1 installation. This means that they would have to compile all the core tools (udev, portage, etc.) first. <ref>http://www.funtoo.org/wiki/Funtoo_Linux_Installation#Installing_the_Stage_3_tarball</ref>

Overlays

Overlays are simply a set of ebuilds, which can be merged into the main portage tree. <ref>http://www.gentoo.org/proj/en/overlays/userguide.xml</ref>

/etc/make.conf

The main portage configuration file.

References

<references/>