For recent versions of Ubuntu, follow this answer.
Note: The Ubuntu Builder project has been discontinued.
##Creating a custom 12.04 CD with Gnome-Classic using Ubuntu-Builder
(for now, this is specific to Karthik's needs; I will update answer later with more general/Unity-specific stuff)
###1. Get Ubuntu Builder and your source ISO
Ubuntu Builder automates many of the preliminary steps that had to be done by hand (mount ISO, extract squashfs, create chroot, etc.) It gives you Synaptic and a "graphical" chroot as well (Unity UI).
Add the PPA to install Ubuntu Builder:
sudo add-apt-repository ppa:kamilion/ubuntu-builder
sudo apt-get update
sudo apt-get install ubuntu-builder
Also download the Ubuntu Desktop ISO you're planning to work with.
###2. Ubuntu Builder Basics
Start Ubuntu Builder from the Launcher. I recommend you set all three fields to "Ubuntu" (like the actual LiveCD), because setting custom fields led to Software Center crashing. When you install, you can choose your own username, machine name, etc. as always.

Load your ISO; I loaded the 64-bit with the Local Disk option, although Ubuntu Builder should be able to download the ISO if you want it to.
The buttons on the right are self-explanatory. Console
gives you a CLI chroot, while Desktop
gives you a graphical one!, i.e. a LiveCD session itself (this one may take a while to load). Note that the Select DE/WM
does an incomplete job sometimes, so it's better to install via apt-get/Synaptic.
###3. Updating, adding Gnome Classic and other package management
Note: All this can also be done from Synaptic if you are more comfortable with that.
- You can edit the
sources.list
with the button (or via the console) to add your own mirrors, ppas, etc.
Let's start with:
- Remove the games
apt-get remove --purge aisleriot gnome-games-data gnomine mahjongg -y
- Do a general update and dist-upgrade to the latest stuff (optional, but recommended since the Gnome-classic and other packages you add will be the latest versions) -- on 12.04, this step also installs Thunderbird and the core Samba components. It will also save time on the actual install.
apt-get update && apt-get dist-upgrade
- Install Gnome Classic (
gnome-shell
to pull in indicators, etc.), Samba and SSH:apt-get install gnome-shell samba ssh
###4. Customization 1: Files, configs and removing the top-panel
Note: All commands must be run from the chrooted console of Ubuntu Builder unless otherwise noted (usually when copying files from your own system). The absolute path of the chroot is /home/ubuntu-builder/FileSystem
- Replace Samba configuration file (from your own system terminal, i.e. outside chroot!)
sudo cp /path/to/mysmb.conf /home/ubuntu-builder/FileSystem/etc/samba/smb.conf
- Put Firefox shortcut on desktop:
mkdir -p /etc/skel/Desktop && cd /etc/skel/Desktop
cp /usr/share/applications/firefox.desktop .
chmod +x firefox.desktop
Copy custom shortcuts and folders to Desktop (from outside chroot!)
sudo cp -r /path/to/mydesktopitems/ /home/ubuntu-builder/FileSystem/etc/skel/Desktop/
Set gnome-classic
as the default shell:
/usr/lib/lightdm/lightdm-set-defaults -s gnome-classic
- Remove the top Gnome-Classic panel and move top-items to the bottom-panel:
expand=true
orientation=top
size=24
- Move the Start Menu to the bottom left by modifying the bolded value for the italicized parameter as below:
[Object menu-bar]
object-iid=PanelInternalFactory::MenuBar
toplevel-id=bottom-panel
pack-index=0
- Move the indicators to the bottom right, just to the left of the Workspace Switcher, by modifying the bolded value for the italicized parameters as below:
[Object indicators]
object-iid=IndicatorAppletCompleteFactory::IndicatorAppletComplete
toplevel-id=bottom-panel
pack-type=end
pack-index=1
- Remove the "Show Desktop" button from the bottom left; I prefer the Start Menu to be the first thing there, you can leave it or move it to the bottom right, etc. Delete these lines:
[Object show-desktop]
object-iid=WnckletFactory::ShowDesktopApplet
toplevel-id=bottom-panel
pack-index=0
###5. Customization 2: Backgrounds and Themes
Note: /usr/share/glib-2.0/schemas
contains most of the default background/theme settings; I found it easier to directly modify those for a LiveCD instead of having to deal complicated stuff just to, for example, prevent the login screen background from being the same as the desktop background.
- Disable the login screen (lightdm) from "copying" the desktop background and other changes:
- Open
nano /usr/share/glib-2.0/schemas/com.canonical.unity-greeter.gschema.xml
- You can change the login background from the default here if you want:
<key name="background" type="s">
<default>'/usr/share/backgrounds/warty-final-ubuntu.png'</default>
- Set the login theme to Radiance:
<key name="theme-name" type="s">
<default>'Radiance'</default>
- Change the default wallpaper; here, we'll set it to the included "Tie My Boat" (
/usr/share/backgrounds/Tie_My_Boat_by_Ray_García.jpg
):
picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
- Change the theme to Radiance
- Open Ubuntu's theme override file ``nano /usr/share/glib-2.0/schemas/ubuntu-artwork.gschema.override`, and change the Ambiance below to Radiance:
[org.gnome.desktop.interface]
gtk-theme="Ambiance"
...
[org.gnome.desktop.wm.preferences]
theme="Ambiance"
- Important: Compile the modified schemas!
###6. Build, test and install!
Press the Build
button in Ubuntu Builder to begin building the custom Live-CD ISO. UB automatically handles the cleanup, etc. that previously had to be done manually.

The ISO can be found in /home/ubuntu-builder
; you can test it using the built-in QEMU, or in another virtual machine.
My finished CD size was 778 MB (after removing the old .23
kernel), with Unity and Gnome 3D still available if the user wishes to, so that's pretty good for a customization! :)
The following should result:
- After bootup, you get the "Try Ubuntu" or "Install Ubuntu" option:

- Clicking "Try" gets us our custom desktop!

- And logging out (login with
ubuntu
, blank password) shows that the login wallpaper is kept at the default:

- Installer does not crash upon Timezone selection:

- Select username, etc. for install:

- Installed login screen:

- Installed desktop:
