Version 2 (modified by, 6 years ago) (diff)



These instructions outline the steps for creating Debian-based (e.g. Ubuntu) images on ExoGENI and then converting them for use on ProtoGENI.

Create a file to store the new OS filesystem

  • Here we create a 1GB file
dd if=/dev/zero of=ubuntu_12.04_fs bs=4096 count=262144
262144+0 records in
262144+0 records out
1073741824 bytes (1.1 GB) copied, 1.62763 s, 660 MB/s
  • Create a loopback device and filesystem, then mount on /mnt/loop.
sudo losetup -f --show ubuntu_12.04_fs 
sudo mkfs.ext4 /dev/loop0
sudo mount /dev/loop0 /mnt/loop
  • We can now bootstrap our OS onto this loopback filesystem.

Ubuntu Image Creation using debootstrap

  • Get debootstrap for Ubuntu 12.04 "precise"
mkdir ubuntu_bootstrap
cd ubuntu_bootstrap/
ar -xf debootstrap_1.0.56_all.deb 
tar -xf data.tar.xz 
tar -xf control.tar.gz
  • Get the Ubuntu keyring to we can verify packages that get installed by deboostrap.
tar -xf ubuntu-keyring_2012.05.19.tar.gz 
  • Now we can run the deboostrap just downloaded and install a new OS onto the loopback fs we created earlier.
sudo DEBOOTSTRAP_DIR=/vm/ubuntu_bootstrap/usr/share/debootstrap usr/sbin/debootstrap --arch amd64 --keyring=ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg precise /mnt/loop
  • Once the boostrap completes, we have a base OS install in the ubuntu_12.04 directory. We can now chroot and install additional packages.
sudo chroot /mnt/loop
apt-get update
apt-get install linux-image sudo python ...
  • To allow the ProtoGENI EC2 conversion tool to work, we need the following packages at a minimum.
apt-get install sudo ruby unzip rsync ssh
  • We can also set a root password using 'passwd' within the chroot.
  • To ensure that the file compresses well, we want to write zeros into all the free space on the filesystem. While chrooted, run:
dd if=/dev/zero of=./zeros && rm -f ./zeros
  • To finish up, unmount and remove the loopback device.
umount /mnt/loop
losetup -d /dev/loop0

Prepare the image for ExoGENI

  • By installing the linux-image (or linux-image-virtual) package, we have a kernel with which we can boot the OS as a VM. The kernel can be found in /boot
  • Copy the kernel as well the the initrd image to a temporary directory.
  • We can test booting the new OS with qemu.
mkdir kernel
sudo cp /mnt/loop/boot/vmlinuz-3.2.0-23-generic kernel/
sudo cp /mnt/loop/boot/initrd.img-3.2.0-23-generic kernel/
sudo umount /mnt/loop

sudo qemu-system-x86_64 -kernel kernel/vmlinuz-3.2.0-23-generic -initrd kernel/initrd.img-3.2.0-23-generic -append "root=/dev/sda ro" ubuntu_12.04_fs
  • If the image boots, then we have a working OS!
  • Now we need to install the NEUCA tools that will allow the image to work on ExoGENI racks.
  • Follow the instructions found here: NEUCA Guest Configuration
  • Get the latest NEUCA tools from SVN to be safe.

Converting a running ExoGENI image for use on ProtoGENI

  • To complete this process, you need an account on a given site's Emulab instance. For instance, at Utah, information can be found at
  • Create a sliver with an EG node you would like to convert. Make sure the running image has the minimum dependencies as described above.
  • Once logged in, follow these steps:
  1. Under "My Emulab" -> "Profile" tab -> "Edit SSH Keys", find your SSH key in the list. Copy that key to the EG node you would like to convert to /home/USER/.ssh/authorized_keys The Emulab conversion script will use this key and only this key when contacting your EG node.
  2. Under "List ImageIDs", click the option for "Import an Amazon EC2 Instance Image"
  3. Fill in the form.
    1. Note: the "EC2 User@Node Info:" field. This should be of the form 'USER@IP', where IP is the public address of your running EG node.
    2. Select "Shared" so the metadata URL will be made public.
  4. Watch the displayed progress as the conversion takes place. If the process fails with tar errors, you are most likely out of disk space (over quota) on