Skip to main content

Build a Fedora Live CD

A step-by-step guide to creating custom Live CDs based on Fedora Linux

Mayank Sharma (geekybodhi@gmail.com), Freelance technical writer

Summary:  Though Fedora Linux® is a popular and mature Linux distribution, and many people have created Live CD distributions based on Fedora, the Fedora project itself didn't released its first official Live CD until December 2006. Learn how to build your own custom and easy-to-use Live CDs using a rewrite of Pilgrim, the Fedora Live CD creation tool.

Tags for this article:  fedora, fedoracdbuild, live

Date:  28 Feb 2007
Level:  Intermediate
Also available in:   Chinese  Russian  Japanese

Activity:  19467 views
Comments:   0 (Add comments)

1 star2 stars3 stars4 stars5 stars Average rating (based on 71 votes)

In December 2006, the Fedora Linux distribution released its first official Live CD, which, thanks to an intelligent selection of applications, nicely advertises the best features of Fedora. In addition to many applications, the Live CD has several games, uses the Compiz 3D desktop, and is accessible by non-English speaking users. But what stole the show for me was David Zeuthen's livecd tools, which make creating and maintaining a custom Fedora-based Live CD a walk in the park.

Zeuthen is the developer of Pilgrim, which creates system images that can run off USB flash drives for the One Laptop Per Child project (OLPC; see Resources for a link to more information). The livecd tools used for creating the Fedora Live CD is a rewrite of Pilgrim in Python. It can be used for creating live CDs out of Red Hat Enterprise Linux, CentOS, and other downstream Fedora distributions.

Before getting down to making your own Live CD, you need to understand how a Fedora release is assembled, distributed, and maintained. The Fedora project keeps packages in two publicly accessible repositories. The repository maintained by official Fedora developers is called the "core" repository, while the one maintained by contributors and the community is called the "extras" repository. A repository is simply a collection of packages. Apart from the core and extras, there are several third-party repositories such as Livna and FreshRPM.

A Fedora Core distribution contains all the packages in the core repository, the latest being Fedora Core 6. The first official Fedora Live CD is based on packages in Fedora Core 6 and the extras repository. The livecd tools have been submitted for inclusion in Fedora's extras repository, which will be merged with the core repository by the time Fedora 7 is released.

What makes the livecd tools special?

The biggest advantage of the livecd tools approach to creating Live CDs is the design that separates the tools from the Live CD. To cook a Live CD, all you need is a set of configuration files. These configuration files contain a list of packages that you need on the Live CD and also describe the type of system configuration that will happen once the Live CD is booted.

To assist the custom Live CD maintainer, these configuration files are packaged as RPMs and kept in a repository of their own. As the Fedora distribution and its repositories move from version to version, you can keep updating these configuration files to pull the relevant packages.

Zeuthen has made available three such RPMs that you can base your custom Live CDs on. These RPMs follow an inheritance scheme that assists in creating derivative versions. The fedora-livecd package is a minimal Live CD with no user interface. The fedora-livecd-gnome package is based on the fedora-base package and includes a GNOME desktop. The fedora-livecd-desktop packages builds on top of the fedora-gnome package and gives a GNOME desktop with lots of applications and other things.

Figure 1, from Zeuthen, explains this better.


Figure 1. Relationship among livecd tools packages
Figure 1. Relationship among livecd tools packages

Zeuthen also suggests that in the future it might also help other official Fedora Special Interest Groups (SIGs) to roll their own distributions derived from these RPMs.


Figure 2. Possible organization of derivative packages
Figure 2. Possible organization of derivative packages

This might sound a little obscure, but once you get your hands dirty, you'll appreciate this approach.


Setting up the base

The first step is to get the livecd-tools RPM that is available from Zeuthen's Fedora home page. Just grab and install the livecd-tools-001-1.i386.rpm like so:


Listing 1. Installing the Live CD tools
        
$ su -
<Enter root password>
# wget -c http://people.redhat.com/davidz/livecd/i386/livecd-tools-001-1.i386.rpm
# rpm -ivh livecd-tools-001-1.i386.rpm

You should now have the livecd-creator command, which you can invoke without any options to get a simple list of commands.


Listing 2. Options provided by the livecd-creator command
        
$ livecd-creator
No packages specified.

usage: livecd-creator [--help] 
                      [--repo=<name1>,<url1> ...] [--repo=<name2>,<url2>]
                      --package=<p1> [--package=<p2> ...]
                      [--exclude-package=<e1>] --exclude-package=<e2> ...]
                      [--base-on=<path-to-iso-file>]
                      [--fslabel=<label>]

 --help             : Print usage and exit
 --repo             : Path to yum repository
 --package          : Include this package
 --exclude-package  : Exclude this package
 --base-on          : Add packages to an existing live CD iso9660 image
 --fslabel          : File system label (default: livecd-YYYYMMDD-HHMI)

Creating a local repository of core packages

You also need to have access to RPMs of the tools that you want on your custom Live CD. If you are on a fast Internet connection, livecd-creator can download them and the packages they depend upon before creating the Live CD. The other option is to copy all the packages from Fedora Core 6 installation CDs or DVD and create a local "core" repository. To create a local repository, you'll need the createrepo tool.


Listing 3. Installing the createrepo tool
        
# wget -c http://tqmcube.com/files/createrepo-0.4.3-5.1.noarch.rpm
# rpm -ivh createrepo-0.4.3-5.1.noarch.rpm

Now, create the local repository by first copying all the RPMS from Core 6's five CDs or single DVD and then using the createrepo tool.


Listing 4. Creating a local repository
        
# mkdir /var/www/html/repo/core/
# cp <PATH TO RPMs> /var/www/html/repo/core/
# createrepo /var/www/html/repo/core/

This last command will take some time to complete and will create a repodata directory. The livecd-creator command uses this directory to get to the packages.

Creating a local repository of configuration packages

Since you'll be using Zeuthen's packages to base your Live CD on, you'll need to create a local repository for them as well.


Listing 5. Creating a repository of the LiveCD packages
        
# mkdir base_packages
# cd base_packages
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-gnome-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-desktop-6-1.i386.rpm
# createrepo /root/base_packages

As before, this last command will produce the repodata directory to help livecd-creator locate the configuration packages.


Spinning CDs

Now that you have your repositories set, you can easily create custom Live CDs. The livecd-creator command produces ISO images that can be burned to CD-Rs. But I'd recommend using virtualization software to test the ISO without actually burning them onto physical media. There are several freely available, such as VMware Player, QEMU, and VirtualBox.

A minimal Live CD

To get the hang of the livecd-creator command, begin by creating a minimal Live CD:


Listing 6. Creating a minimal Live CD
        
# livecd-creator --repo=c6,file:///var/www/html/repo/core --package=bash \
      --package=kernel --package=grub --fslabel=Fedora-minimal-LiveCD

This command asks livecd-creator to grab three packages -- bash, grub, and the kernel -- from the local repository and include them in a Live CD called Fedora-minimal-LiveCD. The livecd-creator command uses Fedora's YUM to install these packages and will thus also install other applications that the specified packages depend upon.

The command will take some time to complete, since it will create a working space, then install the specified packages and their dependencies, relabel the working space for SELinux, Fedora's security mechanism, compress the whole working space, configure the Live CD bootloader, GRUB, and finally create the ISO image.

Congratulations! You've just created your first Live CD. Of course, you'll not be able do much with it, since it lacks the configuration files.

A Live CD with GNOME

Now that you know how the livecd-creator command works, you can use it to create a Live CD that includes GNOME.


Listing 7. Creating a Live CD with GNOME
         
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-gnome \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --fslabel=My-Fedora-LiveCD-1

Here, you use the local repository for base packages and specify which configuration package you need to base your CD on. You also specify that any package that is required by fedora-livecd-gnome should be fetched from your local core repository. There are some packages in fedora-livecd-gnome that are not in the core repository. These packages will be fetched from the extras repository at the given URL. Finally, it will create an ISO called My-Fedora-LiveCD-1.iso.

If livecd-creator is unable to find a package -- for example, if it's not in the specified repositories -- the command will simply skip the package and still create the Live CD. Unless the missing package is an essential package like the kernel, you'll still end up with a usable Live CD.

Apart from the packages mentioned in the configuration RPM, you can add custom packages with the --package switch. The livecd-creator command can also use multiple repositories to build your CD.


Listing 8. Creating a Live CD using multiple repositories
         
 # livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --package=openoffice
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-gnome \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --repo=livna,http://rpm.livna.org/fedora/6/i386 \
      --package=vlc \
      --fslabel=My-LiveCD-2

As in the previous example, this command creates a Live CD with all the packages from fedora-livecd-gnome. Additionally, it will include the OpenOffice.org office suite, which is available in the core repository. It will also add the VLC Media Player from the livna repository. We are calling it My-LiveCD-2, since it contains packages from third-party repositories and cannot be called a Fedora Live CD.

What if after creating the CD you want to add another application, say Evolution e-mail client, into this custom CD? No problem. If you have the ISO of the previous CD available, just ask livecd-creator to use the packages of this ISO and append the new ones.


Listing 9. Adding new packages to an existing Live CD ISO
         
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --base-on=My-LiveCD-2.iso
      --package=evolution
      --fslabel=My-LiveCD-New

This will create a new Live CD based on packages from the previous ISO with the additional Evolution package.


Creating custom configuration packages

I hope the examples above show you that creating a Live CD is actually a trivial job. Using Zeuthen's packages, you can go on creating Live CDs, adding applications from any repository.

But suppose you need to create a Live CD that you can use to write documents and code as well. You'll want to include OpenOffice.org, Evolution e-mail client, Beagle desktop search, GAIM instant messenger, Xchat IRC client, GIMP image manipulator, GCC compiler, GDB debugger, and Doxygen for code documentation.

Either you can specify them with the --package switch every time you want to assemble the CD, or you can write a configuration file of your own. The added advantage of using a configuration file is that you can specify your custom configuration as well.

Anatomy of a configuration file

Before you create your own configuration file, look at the configuration file that you've been using to create your Live CDs, fedora-gnome. You can extract the configuration file from the RPM by right-clicking on fedora-livecd-gnome-6-1.i386.rpm and selecting the Extract Here option. This should get you a file called 20-fedora-livecd-gnome.conf available under the etc/livecd/ directory. The prefix numbers help identify the particular package in the tree of packages. So 20-* package follows and probably depends upon a 10-* package, and a 30-* package follows and probably depends upon the 20-* and earlier packages.

The first part of the file contains a list of applications to install, and the second part contains the configuration that needs to be done for that particular environment.


Listing 10. Contents of the 20-fedora-livecd-gnome.conf file
         
case $1 in
    # inquire what packages to install; must print packages to install
    pkgadd)
    echo "
chkconfig
gdm
gnome-panel
nautilus
metacity
gnome-themes
redhat-artwork
gnome-power-manager
gnome-volume-manager
desktop-printing
gnome-terminal
gedit
.
.
.
.

# run configuration scripts when all packages are installed
    post)
# mount livecd
mkdir -p /mnt/livecd
mount -o ro -t iso9660 /dev/livecd /mnt/livecd
# add fedora user with no passwd
useradd -c "Fedora live CD" fedora
passwd -d fedora > /dev/null
.
.
.
.

As you can see, most of the work such as setting up a user and setting up networking is done by the fedora-gnome package.

Creating a configuration file

The best way to create a configuration file is to use the 20-fedora-livecd-gnome.conf and remove the GNOME-specific bits. Let's call our file 40-fedora-livecd-office-code.conf. This should do the trick:

# cp 20-fedora-livecd-gnome.conf 40-fedora-livecd-office-code.conf

After stripping off the GNOME bits, you can add the list of packages you need. The new file should read like this (please note that I have removed the license bits to conserve space):


Listing 11. The newly created 40-fedora-live-office.conf file
         
        #!/bin/bash

# livecd configuration for Base Fedora system

# PLEASE ADD LICENSE RELATED NOTE

case $1 in
    # inquire what packages to install; prints package list on stdout
    pkgadd)
    echo "
evolution
evolution-connector
evolution-webcal
gaim
xchat
beagle
gimp

openoffice.org-core
openoffice.org-draw
openoffice.org-calc
openoffice.org-graphicfilter
openoffice.org-math
openoffice.org-writer
openoffice.org-xsltfilter
openoffice.org-impress

gcc
gdb
doxygen
"
    ;;

    # run configuration scripts when all packages are installed
    post)
    ;;

    # run when an livecd install is complete to clean up
    install-post)
    ;;

    # run when an livecd install is complete; must prints packages to remove
    install-pkgrem)
echo "
fedora-livecd-office-code
"
    ;;
esac

Do not forget to include the name of the configuration package in the list of packages to remove before the ISO is created.

Creating the RPM

Before you can actually use this configuration file, you need to create an RPM out of it. Creating an RPM requires a SPEC file. You'll need to use Zeuthen's fedora-livecd.spec and edit it to include information about the new configuration file.

Basically, a SPEC file contains the list of files that will be included in the RPM and where will they be placed when the RPM is installed. I won't go into the details of creating a SPEC file, but you can use a SPEC file I created for this article. Download it from the Downloads section, below, and read the comments to understand the changes from Zeuthen's original file.

Note that my SPEC files points to configuration files of other packages, such as fedora-live-gnome-fedora-livecd-desktop. Make sure you have all of them available as well.

Fedora uses the rpmbuild command to create RPMs from a SPEC file. The rpmbuild command expects all the .conf configuration files to be under the /usr/src/redhat/SOURCES directory, along with any other file mentioned as a SOURCE in the SPEC file. Also make sure the fedora-livecd.spec file is under /usr/src/redhat/SPECS directory.


Listing 12. Creating new RPMs
         
# cd /usr/src/redhat/SPECS
# rpmbuild -bb fedora-livecd.spec
# ls /usr/src/redhat/RPMS/i386
fedora-livecd-6-2.i386.rpm          
fedora-livecd-gnome-6-2.i386.rpm
fedora-livecd-desktop-6-2.i386.rpm  
fedora-livecd-office-6-2.i386.rpm

To separate the custom RPMS from the original, I've versioned them 6-2 instead of the original 6-1.

Using custom RPMs to build Live CD

Once the RPMs are at your disposal, the procedure to create a Live CD isn't any different. Re-create the local repository of packages with the new ones.


Listing 13. Creating the local repository of configuration packages with the new RPMs
        
# rm /root/base_packages/*
# cp /usr/src/redhat/RPMS/* /root/base_packages/
# createrepo /root/base_packages

Now use livecd-creator to use the newly created packages.


Listing 14. Creating a Live CD using the new Fedora-Office-Code-LiveCD RPM
         
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-office-code \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --fslabel=My-Fedora-Office-Code-LiveCD

Presto! You have your very own custom Live CD from your very own custom configuration.

Once you get the hang of creating configuration RPMS, you'll be creating Live CDs in no time. You can customize the Live CDs by tweaking any setting and adding or removing packages. Add to that the ability to move any data file into the Live CD environment, as I've shown in my SPEC file.

It's only a matter of time before the Live CD installer, already in testing stages, is released. One single entry in your configuration file or a --package option will bundle it onto your Live CD, making it fully installable on the hard disk. How cool is that? Your custom Linux distribution in no time.



Download

DescriptionNameSizeDownload method
Sample SPEC filefedora-livecd-custom.zip2KB HTTP

Information about download methods


Resources

Learn

Get products and technologies

Discuss

About the author

Mayank Sharma is a contributing editor at the Open Source Technology Group (OSTG), a division of VA Linux, and publishes mainly on OSTG's NewsForge and Linux.com. Also, he contributes a monthly column for Packt Publishing. In addition, he teaches courses on open source topics at the Indian Institute of Technology, Delhi, as guest lecturer.

Comments



0 comments | Add commentReport inappropriate content


Be the first to add a comment

Add comment



Trademarks  |  My developerWorks terms and conditions

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Linux, Open source
ArticleID=199139
ArticleTitle=Build a Fedora Live CD
publish-date=02282007
author1-email=geekybodhi@gmail.com
author1-email-cc=
url=http://www.ibm.com/developerworks/linux/library/l-fedora-livecd/

My developerWorks community

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Special offers