How I construct my own Ubuntu LTS 12.04 Customization DVD.


In this post, I will post what I did to construct my own Ubuntu LTS 12.04 Customization DVD. The construction used informations from following pages:

  1. Make a live CD/DVD/Bootable flash from your harddisk installation.
  2. LiveCDCustomizationFromScratch.
  3. AskUbuntu – How to customize live Ubuntu CD?
  4. Things to do after installing Ubuntu 12.04 Precise Pangolin.
  5. To Do List After installing Ubuntu 12.04.1 LTS aka Precise Pangolin.
  6. Things to do after Installing Ubuntu 12.04 for perfect desktop.
  7. How to install TeXLive 2012 on Ubuntu.
  8. Ubuntu:Precise.
  9. How to install firefox extensions for all users.
  10. LiveCDCustomization.
  11. Howto: Build the svn MPlayer under the latest release version of Ubuntu.
  12. Ubuntu: Sửa lỗi không phát âm được trên Oxford Advanced Learner’s Dictionary 8th.


Prepare for configuring system

The system configurations were processed in Ubuntu Linux. For convenience, you should execute sudo without typing password. In order to do that, in terminal, type

sudo visudo

and add the following line to the end of the file


where username is your username. The configuration required at least 15 – 20 GB of free disk space. The following packages are also needed

sudo apt-get install grub2 xorriso squashfs-tools debootstrap qemu subversion \
rar unrar zip unzip p7zip-full p7zip-rar

A good internet connection is highly recommended.

Create working directory

export WORK=~/work CD=~/cd FORMAT=squashfs FS_DIR=casper
sudo mkdir -p ${CD}/{${FS_DIR},boot/grub} ${WORK}/rootfs
sudo debootstrap precise ${WORK}/rootfs

Download required files

sudo svn checkout ${WORK}/rootfs/

Build my own custom system

Prepare the new system before chrooting it

sudo unzip ${WORK}/rootfs/ -d ${WORK}/rootfs/etc

Answer A (which means overwrite all) for the question. Next, in terminal, type

for i in /etc/resolv.conf /etc/hosts /etc/hostname; do sudo cp -pv $i ${WORK}/rootfs/etc/; done
sudo mount --bind /dev ${WORK}/rootfs/dev
sudo mount -t proc proc ${WORK}/rootfs/proc
sudo mount -t sysfs sysfs ${WORK}/rootfs/sys
sudo chroot ${WORK}/rootfs /bin/bash
apt-get update --allow-unauthenticated

Modify the new system

  1. Install some basic packages.
    • Generic Linux Kernel
      apt-get install --yes wget linux-generic

      If you were asked for installing grub-pc, continue without installing it.

    • Other packages
      dpkg --get-selections < installed-software
      apt-get -y update
      apt-get dselect-upgrade
  2. Install packages for GNOME desktop
    apt-get install aptitude dselect xorg lightdm faenza-icon-theme ambiance-blue-theme \
    indicator-applet-complete gnome-tweak-tool compiz-gnome dconf-tools gconf-defaults-service gconf-editor
  3. Install packages for various archive formats
    apt-get install unace unrar zip unzip p7zip-full \
    p7zip-rar sharutils rar uudeview mpack lha arj cabextract file-roller
  4. Set GNOME as the default desktop
    /usr/lib/lightdm/lightdm-set-defaults -s gnome
  5. Complie and install Mplayer

    • Prepare…
      apt-get install build-essential subversion checkinstall yasm git-core docbook-xml \
      docbook-xsl xsltproc libxml2-utils libaa1-dev libasound2-dev libcaca-dev \
      libcdparanoia-dev libdca-dev \
      libdirectfb-dev libggi-target-fbdev libenca-dev libesd0-dev libfontconfig1-dev libfreetype6-dev \
      libfribidi-dev libgif-dev libreadline-gplv2-dev libgl1-mesa-dev libjack-jackd2-dev libopenal1 libpulse-dev \
      libsdl1.2-dev libsvga1-dev libvdpau-dev libxinerama-dev libxv-dev libxvmc-dev libxxf86dga-dev \
      libxxf86vm-dev librtmp-dev libsctp-dev libass-dev libfaac-dev libsmbclient-dev libtheora-dev \
      libogg-dev libxvidcore-dev libspeex-dev libvpx-dev libschroedinger-dev libdirac-dev libdv4-dev \
      libopencore-amrnb-dev libopencore-amrwb-dev libmp3lame-dev liblivemedia-dev libtwolame-dev \
      libmad0-dev libgsm1-dev libbs2b-dev liblzo2-dev ladspa-sdk libopenjpeg-dev libfaad-dev 
      apt-get build-dep mplayer
    • Codecs
      mkdir mplayer_build && cd /mplayer_build && \
      mkdir -pv /usr/local/lib/codecs && \
      if [ "$(uname -m)" = "x86_64" ]; then
       tar xjvf essential-amd64-20071007.tar.bz2
       cp -v essential-amd64-20071007/* /usr/local/lib/codecs
       tar xjvf all-20110131.tar.bz2
       cp -v all-20110131/* /usr/local/lib/codecs
    • x264…
      if [ "$(uname -m)" = "x86_64" ]; then
      fi && \
      cd /mplayer_build && \
      git clone git:// --depth 1 && \
      cd x264 && \
      ./configure --prefix=/mplayer_build/mplayer_deps/usr \
                  --enable-static --disable-cli $ARCHOPTS && \
      make && make install
    • Bluray Playback…..
      For libbluray

      cd /mplayer_build && \
      wget && \
      tar xjvf libbluray-0.2.2.tar.bz2 && cd libbluray-0.2.2 && \
      ./configure && make && \
      checkinstall --pakdir "/mplayer_build" --backup=no --deldoc=yes \
                        --pkgname libbluray --pkgversion "2:0.2.2" --fstrans=no \
                        --deldesc=yes --delspec=yes --default && \
      make distclean

      For libaacs

      cd /mplayer_build && \
      apt-get -y install libgcrypt11-dev bison flex && \
      wget && \
      tar xjvf libaacs-0.4.0.tar.bz2 && cd libaacs-0.4.0 && \
      ./configure && make && \
      checkinstall --pakdir "/mplayer_build" --backup=no --deldoc=yes \
                        --pkgname libaacs --pkgversion "2:0.4.0" --fstrans=no \
                        --deldesc=yes --delspec=yes --default && \
      make distclean
    • Installing mpg123…
      apt-get -y remove mpg123 libmpg123-dev && \
      cd /mplayer_build && mkdir mpg123 && \
      cd mpg123 && \
      wget && \
      tar xjvf mpg123-1.14.4.tar.bz2 && cd mpg123-1.14.4 && \
      ./configure && make && \
      checkinstall --pakdir "/mplayer_build" --backup=no --deldoc=yes \
                        --pkgname mpg123 --pkgversion "1.14.4" --fstrans=no \
                        --deldesc=yes --delspec=yes --default && \
      make distclean
    • Installing libopus…
      cd /mplayer_build && \
      wget && \
      tar xvf opus-1.0.1-rc.tar.gz && cd opus-1.0.1-rc && \
      ./configure && make && \
      mkdir -vp doc-pak && \
      cp -v AUTHORS README doc-pak && \
       checkinstall -D --install=yes --fstrans=no --pakdir "/mplayer_build" \
         --pkgname libopus --backup=no --deldoc=yes --deldesc=yes --delspec=yes \
         --default --pkgversion "1.0.1"  && \
      make distclean && ldconfig
    • Compiling MPlayer

      cd /mplayer_build && \
      svn checkout svn:// mplayer && \
      cd mplayer && \
      PKG_CONFIG_PATH="/mplayer_build/mplayer_deps/usr/lib/pkgconfig" \
      ./configure \
                 --extra-cflags="-I/mplayer_build/mplayer_deps/usr/include" \
                 --extra-ldflags="-L/mplayer_build/mplayer_deps/usr/lib" \
                 --confdir=/etc/mplayer --enable-gui \
                 --codecsdir=/usr/local/lib/codecs && \
      make -j 2 && make html-chunked && \
      mkdir -vp doc-pak && \
      cp -v DOCS/HTML/*/* AUTHORS Changelog LICENSE README doc-pak && \
      checkinstall -D --install=yes --fstrans=no --pakdir "/mplayer_build" \
         --pkgname mplayer --backup=no --deldoc=yes --deldesc=yes --delspec=yes --default \
         --pkgversion "2:1.0~svn$(LC_ALL=C svn info 2> /dev/null | \
           grep Revision | cut -d' ' -f2)" --provides "mplayer,mencoder" && \
      make distclean && ldconfig
    • Extract MPlayer theme
      unzip -d /usr/local/share/mplayer/skins
  6. Install office and media packages
    apt-get install gedit gedit-plugins gedit-developer-plugins \
    libreoffice-gnome libreoffice-pdfimport mozilla-libreoffice \
    ubuntu-restricted-extras app-install-data-medibuntu apport-hooks-medibuntu evince \
    non-free-codecs gxine mencoder flac faac faad sox libmpeg3-1 mpeg3-utils \
    mpegdemux mpeg2dec mpg321 totem-mozilla tagtool easytag \
    id3tool nautilus-script-audio-convert libjpeg-progs libdvdcss2 \
    ibus-unikey scim-unikey ttf-abc-fonts ttf-bkunicode-fonts ttf-vni-fonts \
    vlc mozilla-plugin-vlc audacity gimp \
    pidgin pidgin-data \
    skype bleachbit nuvolaplayer avidemux lives gtkpod sopcast-player \
    gtk-recordmydesktop cheese
  7. Install language packages
    apt-get install language-pack-vi-base language-pack-en-base
  8. Install some extra useful packages
    apt-get install firefox nautilus-dropbox dropbox-share ubuntuone-client-gnome \
    indicator-ubuntuone rhythmbox-ubuntuone goldendict artha fbreader \
    galculator djview4 shotwell shutter wine1.4 tasksel
  9. Install packages for utilities and configurations
    apt-get install synaptic y-ppa-manager gdebi \
    ubuntu-tweak super-boot-manager preload \
    network-manager network-manager-gnome network-manager-openvpn openvpn \
    unetbootin grub2 xorriso isomaster squashfs-tools debootstrap dkms virtualbox-4.1 \
    samba smbfs system-config-samba ssh subversion git git-core mercurial mercurial-common \
    filezilla transmission-gtk transmission-common nitroshare openjdk-7-jre gnome-terminal \
    nautilus-open-terminal xfig gnome-power-manager hibernate remastersys \
    python-dev python-mysqldb python-setuptools python-pip python-matplotlib libnetpbm10 libnetpbm10-dev
  10. Install games
    apt-get install gnugo uligo qgo gmchess 
  11. Install Fonts
    • Ubuntu Fonts Family
      dpkg -i ttf-ubuntu-font-family_0.80-0ubuntu2_all.deb
      rm ttf-ubuntu-font-family_0.80-0ubuntu2_all.deb
    • Other Fonts
      apt-get install fonts-cantarell lmodern ttf-aenigma ttf-georgewilliams \
      ttf-bitstream-vera ttf-sjfonts ttf-tuffy tv-fonts \
      ttf-dustin ttf-larabie-deco ttf-larabie-straight ttf-larabie-uncommon \
      ttf-droid ttf-inconsolata xfonts-terminus console-terminus gsfonts-x11
  12. Install packages for using in emergency situations
    apt-get install boot-repair os-uninstaller gparted testdisk wipe \
    partimage xfsprogs reiserfsprogs jfsutils ntfs-3g ntfsprogs dosfstools mtools winusb
  13. Install some deb packages, respectively Google Video and Voice Chat Plugin for Ubuntu, Foxit Reader, Google Chrome, Teamviewer, agent for pidgin, Foobnix, Livestation, XvidCap
    wget -i deb_links
    dpkg -i google-talkplugin_current_i386.deb FoxitReader_1.1.0_i386.deb google-chrome-stable_current_i386.deb \
    teamviewer_linux.deb mrim-prpl_0.1.28-2_i386.deb foobnix_2.5.36p_i386.deb xvidcap_1.1.7-0.2ubuntu12_i386.deb
    rm google-talkplugin_current_i386.deb FoxitReader_1.1.0_i386.deb google-chrome-stable_current_i386.deb \
    teamviewer_linux.deb mrim-prpl_0.1.28-2_i386.deb foobnix_2.5.36p_i386.deb xvidcap_1.1.7-0.2ubuntu12_i386.deb
  14. Install Winetricks
    chmod +x winetricks
    mv winetricks /usr/local/bin
  15. Install TeX Live 2012
    • Download the ISO file texlive2012-20120701.iso from and put it in your host system $HOME folder
    • Open a new terminal, and type
      export WORK=~/work
      sudo mount -o loop $HOME/texlive2012-20120701.iso ${WORK}/rootfs/mnt
    • In the chroot terminal, i.e. the first terminal window that we opened from beginning
      cd mnt

      Respectively type O and L. After configuring the symbolic links, type respectively R and I.

    • After the install process finished, some informations will appear in the chroot terminal
      Add /usr/local/texlive/2012/texmf/doc/man to MANPATH, if not dynamically determined.
       Add /usr/local/texlive/2012/texmf/doc/info to INFOPATH.
       Most importantly, add /usr/local/texlive/2012/bin/i386-linux
       to your PATH for current and future sessions.
       Welcome to TeX Live!
      Logfile: /usr/local/texlive/2012/install-tl.log
    • Now, open the file bash.bashrc
      nano /etc/bash.bashrc

      Then add following in the end

      PATH=/usr/local/texlive/2012/bin/i386-linux:$PATH; export PATH
      MANPATH=/usr/local/texlive/2012/texmf/doc/man:$MANPATH; export MANPATH
      INFOPATH=/usr/local/texlive/2012/texmf/doc/info:$INFOPATH; export INFOPATH
    • Open the file manpath.config
      nano /etc/manpath.config

      Under # set up PATH to MANPATH mapping, add the line

      MANPATH_MAP /usr/local/texlive/2012/bin/i386-linux /usr/local/texlive/2012/texmf/doc/man
    • Install and use getnonfreefonts script
      texlua install-getnonfreefonts
      cd /usr/local/bin
      ln -s /usr/local/texlive/2012/bin/i386-linux/getnonfreefonts
      ln -s /usr/local/texlive/2012/bin/i386-linux/getnonfreefonts-sys
      getnonfreefonts-sys -a
      cd /
    • Finally, in the new opened terminal, type
      sudo umount ${WORK}/rootfs/mnt
  16. Install Texmaker
    apt-get install libpoppler-qt4-3
    dpkg -i texmaker_ubuntu_12.04_3.5_i386.deb
    rm texmaker_ubuntu_12.04_3.5_i386.deb
  17. Install Customizer
    chmod a+x
    ./ -i
  18. Install Sphinx
    easy_install -U Sphinx
  19. Install Oxford Advanced Learner’s Dictionary 8th edition
    • Put file OALD8.iso (ISO image of the CD dictionary) in $HOME folder, just like the texlive2012-20120701.iso before.
    • Open a new terminal, type
      export WORK=~/work
      sudo mount -o loop $HOME/OALD8.iso ${WORK}/rootfs/mnt
    • In the chroot terminal, type
      apt-get install flashplugin-installer
      mkdir /usr/local/OALD8
      export HOME=/usr/local/OALD8
      cd /mnt/linux

      and setup OALD8 to the folder /usr/local/OALD8. Next, open oald8.desktop

      nano $HOME/Desktop/oald8.desktop

      and replace the content of the file with

      [Desktop Entry]
      Exec=padsp '/usr/local/OALD8//oald8'

      then save the file and exit. Next, in the chroot terminal, type

      chmod +x $HOME/Desktop/oald8.desktop
      mv $HOME/Desktop/oald8.desktop /usr/share/applications
      rm -R $HOME/Desktop
      cd /
    • Finally, in the new opened terminal, type
      sudo umount ${WORK}/rootfs/mnt
  20. Install Wink

    • Install files
      mkdir /usr/local/wink
      mv wink15_b1060.tar.gz /usr/local/wink
      cd /usr/local/wink
      tar -zxvf wink15_b1060.tar.gz
      ln -s  /lib/i386-linux-gnu/  /lib/i386-linux-gnu/
      tar -zxvf installdata.tar.gz
      ldd wink
      chmod +x wink
      cp wink /usr/bin
    • Create wink.desktop file
      nano /usr/share/applications/wink.desktop

      with the contents

      [Desktop Entry]
    • Remove unnecessary files
      rm installdata.tar.gz wink15_b1060.tar.gz 
      cd /
  21. Install Packages Essential for live CD
    apt-get install casper lupin-casper ubiquity ubiquity-frontend-gtk

Some Extra Configurations

  1. Yahoo Emoticon for Pidgin
    tar -xvvzf  59794-Original.tar.gz -C /usr/share/pixmaps/pidgin/emotes
  2. Metacity theme
    gconftool-2 -s --type string /apps/metacity/general/theme "Ambiance Blue"
  3. Desktop background and theme

    • Unzip
      unzip -d /usr/share/backgrounds
    • Edit 10_gsettings-desktop-schemas.gschema.override
      nano /usr/share/glib-2.0/schemas/10_gsettings-desktop-schemas.gschema.override

      by replacing the contents of the file with

      gtk-theme='Ambiance Blue'
      font-name='Ubuntu 11'
      monospace-font-name='Ubuntu Mono 13'
      theme='Ambiance Blue'
      minimize = ['<Primary><Alt>KP_0']
      move-to-corner-ne = ['<Primary><Alt>KP_Prior']
      move-to-corner-nw = ['<Primary><Alt>KP_Home']
      move-to-corner-se = ['<Primary><Alt>KP_Next']
      move-to-corner-sw = ['<Primary><Alt>KP_End']
      move-to-side-e = ['<Primary><Alt>KP_Right']
      move-to-side-n = ['<Primary><Alt>KP_Up']
      move-to-side-s = ['<Primary><Alt>KP_Down']
      move-to-side-w = ['<Primary><Alt>KP_Left']
      toggle-maximized = ['<Super>Up','<Primary><Super>Up','<Primary><Alt>KP_5']
      toggle-shaded = ['<Primary><Alt>s']
      unmaximize = ['<Super>Down','<Alt>F5','<Primary><Super>Down']
      show-desktop = ['<Primary><Alt>d','<Primary><Super>d','<Super>d']
    • Change gnome-shell favourite by replacing the content of 10_gnome-shell.gschema.override
      nano /usr/share/glib-2.0/schemas/10_gnome-shell.gschema.override

      with the following

      favorite-apps=[ 'firefox.desktop', 'pidgin.desktop', 'gnome-terminal.desktop', 'texmaker.desktop', 'teamviewer.desktop', 'filezilla.desktop', 'nautilus.desktop', 'yelp.desktop', 'gparted.desktop', 'boot-repair.desktop', 'os-uninstaller.desktop' ]
    • Finally, type
      glib-compile-schemas /usr/share/glib-2.0/schemas
  4. Install firefox addons
    chmod +x
    ./ <name_of_extension>.xpi
  5. Lightdm
    Edit the file lightdm.conf

    nano /etc/lightdm/lightdm.conf

    by replacing its contents with


Finish configuring system

In chroot terminal

export kversion=`cd /boot && ls -1 vmlinuz-* | tail -1 | sed 's@vmlinuz-@@'`
depmod -a $kversion
update-initramfs -u -k $kversion
apt-get clean
apt-get --purge autoremove
aptitude purge ?config-files
rm wink15_b1060.tar.gz deb_links installed-software \ 59794-Original.tar.gz
rm /etc/resolv.conf /etc/hostname

Prepare The CD directory tree

  1. Copy the kernel, the updated initrd and memtest prepared in the chroot
    export kversion=`cd ${WORK}/rootfs/boot && ls -1 vmlinuz-* | tail -1 | sed 's@vmlinuz-@@'`
    sudo cp -vp ${WORK}/rootfs/boot/vmlinuz-${kversion} ${CD}/${FS_DIR}/vmlinuz
    sudo cp -vp ${WORK}/rootfs/boot/initrd.img-${kversion} ${CD}/${FS_DIR}/initrd.img
    sudo cp -vp ${WORK}/rootfs/boot/memtest86+.bin ${CD}/boot
  2. Generate manifest
    sudo chroot ${WORK}/rootfs dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee ${CD}/${FS_DIR}/filesystem.manifest
    sudo cp -v ${CD}/${FS_DIR}/filesystem.manifest{,-desktop}
    REMOVE='ubiquity casper user-setup os-prober libdebian-installer4'
    for i in $REMOVE 
            sudo sed -i "/${i}/d" ${CD}/${FS_DIR}/filesystem.manifest-desktop
  3. Unmount bind mounted dirs
    sudo umount ${WORK}/rootfs/proc
    sudo umount ${WORK}/rootfs/sys
    sudo umount ${WORK}/rootfs/dev
  4. Convert the directory tree into a squashfs
    sudo mksquashfs ${WORK}/rootfs ${CD}/${FS_DIR}/filesystem.${FORMAT} -noappend
  5. Make filesystem.size
    echo -n $(sudo du -s --block-size=1 ${WORK}/rootfs | tail -1 | awk '{print $1}') | sudo tee ${CD}/${FS_DIR}/filesystem.size
  6. Calculate MD5
    find ${CD} -type f -print0 | xargs -0 md5sum | sed "s@${CD}@.@" | grep -v md5sum.txt | sudo tee -a ${CD}/md5sum.txt
  7. Make Grub the bootloader of the CD
    Make the grub.cfg

    nano ${CD}/boot/grub/grub.cfg

    with the following contents

    set default="0"
    set timeout=10
    menuentry "Ubuntu GUI" {
    linux /casper/vmlinuz boot=casper quiet splash
    initrd /casper/initrd.img
    menuentry "Ubuntu in safe mode" {
    linux /casper/vmlinuz boot=casper xforcevesa quiet splash
    initrd /casper/initrd.img
    menuentry "Ubuntu CLI" {
    linux /casper/vmlinuz boot=casper textonly quiet splash
    initrd /casper/initrd.img
    menuentry "Ubuntu GUI persistent mode" {
    linux /casper/vmlinuz boot=casper persistent quiet splash
    initrd /casper/initrd.img
    menuentry "Ubuntu GUI from RAM" {
    linux /casper/vmlinuz boot=casper toram quiet splash
    initrd /casper/initrd.img
    menuentry "Check Disk for Defects" {
    linux /casper/vmlinuz boot=casper integrity-check quiet splash
    initrd /casper/initrd.img
    menuentry "Memory Test" {
    linux16 /boot/memtest86+.bin
    menuentry "Boot from the first hard disk" {
    set root=(hd0)
    chainloader +1

Build the CD/DVD

sudo grub-mkrescue -o ~/live-cd.iso ${CD}

Clean the workspace

[ -d "$WORK" ] && sudo rm -r $WORK $CD

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s