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-desktopCompress 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