Ubuntu LiveCD Customization

Reference: https://help.ubuntu.com/community/LiveCDCustomization

Start up preparation (normal environment -- Can be skipped to "Prepare and chroot", if files are prepared.)
Install required tools

sudo aptitude install squashfs-tools genisoimage
sudo modprobe squashfs

Prepare working base

mkdir ~/live
mv ubuntu-9.04-desktop-amd64.iso ~/live
cd ~/live

Extract original CD content

mkdir mnt
sudo mount -o loop ubuntu-9.04-desktop-amd64.iso mnt
mkdir extract-cd
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd

Extract desktop file system (squashfs)

mkdir squashfs
sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs squashfs
mkdir edit
sudo cp -a squashfs/* edit/

Prepare and chroot (normal environment)

sudo cp /etc/resolv.conf edit/etc/
sudo mount --bind /dev/ edit/dev
sudo chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
export HOME=/root
export LC_ALL=C

Customize software packages
Enable and update package list
Edit /etc/apt/sources.list for more package sources
and update package list.

vi /etc/apt/sources.list
aptitude update

Remove and install package

aptitude purge packagename
aptitude install packagename

My customization
Install
firefox sun-java6-jre thunderbird virtualbox-ose squashfs-tools gnome-commander genisoimage flasm vlc filezilla unrar ia32-libs audacity mysql-server nginx cherokee sysv-rc-conf

Uninstall
tomboy gnome-games-data rhythmbox ekiga

Customize start up service

sysv-rc-conf

Customize gnome desktop
Dump current user configurations (normal environment)

gconftool-2 --dump / > your-new-settings.xml

Note: In this example, dump ALL configuration start from root.

Move the configuration file into chroot environment (normal environment)

cp your-new-settings.xml edit

Load into default gconf configuration (chroot environment)

gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --load /your-new-settings.xml

Exit and clean (chroot environment)

rm -rf /tmp/* ~/.bash_history
rm /etc/resolv.conf
umount -lf /proc
umount /sys
exit
sudo umount edit/dev

Note: If cannot successfully umount, we must reboot to ensure file unlock.

Build CD image
Regenerate 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

Compress filesystem

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

Set an image name in extract-cd/README.diskdefines

sudo vi extract-cd/README.diskdefines

Remove old md5sum.txt and calculate new md5 sums

sudo -s
rm extract-cd/md5sum.txt
(cd extract-cd && find . -type f -print0 | \
xargs -0 md5sum > md5sum.txt)
exit

Create Iso

cd extract-cd
sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b \
isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table -o \
../ubuntu-9.04-desktop-amd64-customized.iso .
cd ..

Test

kvm -no-kvm -cdrom ubuntu-9.04-desktop-amd64-customized.iso \
-boot d -m 512