Remastering Ubuntu CD : Exploring initrd.gz

( This document was written in connection with Ubuntu Re mastering workshop held at College of Engineering Attingal on 25th of April 2009 . See this post )

On an Ubuntu CD kernel and the associated initrd.gz are found under casper directory. initrd.gz is an initial ram image which helps the kernel to boot the system and mount the squashfs image.
You can tweak initrd.gz with the following steps.

Mount the ubuntu cdrom/ iso image

# mount -o loop ubuntu.iso /cdrom

Create a temporary directory and change to it.

# mkdir initrd_remaster

# cd initrd_remaster

2) Copy initrd.gz and unzip it

# cp /cdrom/casper/initrd.gz .

Unzip it

# gunzip initrd.gz
The resulting file is a cpio archive
Uncompressed it with the following command
# cpio -i < initrd

You will get several folders and a file named init after this.

bin conf etc init lib sbin scripts usr var

If you watch system start up carefully, you can see initrd.gz getting uncompressed. The system starts executing the script named init immediately after that. This script will in turn find out the actual root file system (/) a, mount it and then chroot to the actual file system. You can open up init in an editor and tweak it. There are several other scripts which are called from init.

Finally, you can use cpio and gzip to recreate initrd.gz

# find ./ | cpio -H newc -o > ../initrd

# cd ..

# gunzip intrd.gz

You can replace the original initrd.gz in Casper directory with the modified initrd image