Here on Ghacks I have mentioned a few tools that allow you to create various types of Linux CDs. Most of these tools allow you to create Live CDs that are either images of your current working distribution or tools to create a Live CD with special packages. But none of these tools, so far, have allowed you to really get customized with your Live CD. You can’t specify desktop backgrounds or other configuration options. These are tasks that can really make creating a customized Live CD worth the effort.

In this article I am going to show you how to take a downloaded Ubuntu 9.10 iso image, mount it, customize it, and rebuild the Live CD from your newly customized image. This process can be time consuming, but is worth it. This entire process will be done from the command line, so get your fingers ready to type.

The first thing you are going to need is an ISO image of a recent release. So hop on over to Ubuntu’s web site and download a fresh copy of 9.10. Once that is done you are ready to get to work.

Before you continue with the customization, you need to install some tools that will be necessary. From the command line issue this command:

sudo aptitude install squashfs-tools genisoimage

Now create an empty directory that will be used to work with the ISO image. Let’s create this in your users home directory, so issue the command:

mkdir ~/LIVECD

Now move that freshly downloaded iso image to the new directory and get ready to work.

The first thing to do is to mount the ISO image with the command. You will need to create a subdirectory to mount the image to, so issue the command:

mkdir ~/LIVECD/mount

Now mount the iso with the command:

sudo mount -o loop ubuntu-9.10-desktop-i386.iso ~/LIVECD/mount/

Now you will need to create yet another directory that you will then extract the contents of ~/LIVECD/mount to. Issue the command:

mkdir ~/LIVECD/extract-cd

And then extract with the command:

rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd

Now extract the squashfs file system with the command:

sudo unsquashfs mount/casper/filesystem.squashfs

sudo mv squashfs-root edit

The former of the above two commands will take some time. That is normal.
If you will need network access with this system (and you probably will) you will need to edit the /etc/resolv.conf file so it has the proper DNS addresses. To do this just copy your current working resolve.conf file into the ~/LIVECD/edit/etc directory with the command:

sudo cp /etc/resolve.conf ~/LIVECD/edit/etc/

Now to mount some important directories on your system:

sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts

It will be very important later on to unmount these directories.

Next we make it so we avoid any locale issues and allow us to import GPG keys (if necessary) we issue the commands:

export HOME=/root

export LC_ALL=C

Now you can view all packages installed on the mounted ISO with the command:

dpkg-query -W --showformat='${Package}\n' | sort -nr | less

You can go through that list and delete any package you don’t want on the Live CD with the command:

aptitude purge PACKAGE_NAME

Where PACKAGE_NAME is the name of the package you want to remove. You can then install new packages on the Live CD by issuing the command:

aptitude install PACKAGE_NAME

Where PACKAGE_NAME is the name of the package to install.

What about desktop background images? Yes, you can customize this as well. If you look at the file /usr/share/gnome-background-properties/ubuntu-wallpapers.xml you will see where the default background is configured. You can edit that file, but then you will have to make sure the .png file you want to use is located in /usr/share/gconf/defaults/16_ubuntu-wallpapers.

You can also edit the /etc/gconf/gconf.xml.defaults/%gconf-tree.xml file to make any additional customization changes (fonts, colors, panel options, etc) within that file. Understand that what this file is a blank file which you will add new default values to. If you would rather just use the gconftool to edit these values you can do so with a command like:

gconftool-2 –direct –config-source xml:readwrite:/etc/gconf/gconf.xml.defaults –type string –set KEY “VALUE”

Where KEY is the key you want to change and VALUE is the value to set for the key.

There are a ton of other possible configurations you can undertake here. But for the scope of this article, we’ll leave it with what we have.

It’s time to make sure to remove any temporary files that might be left behind from any package installation with the command:

aptitude clean

You can also remove the /etc/resolv.conf file you added with the command:

rm /etc/resolv.conf

Time to unmount the directories:

umount /proc
umount /sys
umount /dev/pts
sudo umount edit/dev

Put it all back together

Now it’s time to piece everything back together. First you have to regenerate the manifest:

chmod +w extract-cd/casper/filesystem.manifest
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop

Now to compress the file system:

sudo rm extract-cd/casper/filesystem.squashfs
sudo mksquashfs edit extract-cd/casper/filesystem.squashfs

The above command will take some time.

Now open up the ~/LIVECD/extract-cd/README.diskdefines file and make any necessary changes.

The next step requires you to remove the old md5 sums and calculate new sums. Do this with the following commands:

cd extract-cd
sudo rm md5sum.txt
find -type f -print0 | xargs -0 md5sum | grep -v isolinux/ | sudo tee md5sum.txt

Now it’s time to create the ISO image. Do that with the following commands:

sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/ -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-9.04.1-desktop-i386-custom.iso .

Now, in the ~/LIVECD directory you will have your new ISO to burn to disk and use.

Congratulations, you just created your own customized Ubuntu Live CD!