Skip to content. | Skip to navigation

Personal tools


You are here: Home / Wiki / EmulabClientBuild / Ubuntu14Build


Step-by-step instructions to create a Ubuntu 14.04 emulab client.

Emulab Client Setup : Ubuntu 14.04

Instructions presented here are Ubuntu 14.04, Utah site, emulab-dev source and mbr V3 specific. The info here supersedes one the ClientSideStuff and Clientsideinstall pages.

Load minimal OS

How to get a minimal Ubuntu system

Note: There is documentation on installing a minimal system from However after the 12.04 LTS release the "alternate CD" installation was dropped. The currently suggested way of installing a 'small' Ubuntu is the mini.iso see: .

  • Get mini.iso from 64-bit PC (amd64,x86_64) mini.iso
  • boot node into admin-mfs
  • Install the new mbr version 3 on the system disk
  • Whatever is your favorite way to install a iso do it, step-by-step instructions follow.
    • I could have done PXE boot method but instead I burned a CD and booted from that.
  • Install the OS into partition 1.
Installing minimal system from mini.iso
Note: this was done using a pc3000 and using a KVM spider to gain access to VGA monitor

From grub menu choose: 
  advanced-> expert command line install

 Choose Language
  use defaults
Configure the keyboard
  use defaults 
Detect network hardware
  use defaults 
Configure the network
  use defaults
Choose a mirror of the Ubuntu archive
  use defaults -- no proxy setup
Download installer components
  don't add anything extra
Setup users and passwords
  Enable shadow passwords <Yes>
  Allow login as root? <Yes>
  set root password "N**%*S**"
  Create a normal user account <No>
Configure the Clock
  Set the clock using NTP? <Yes>
  NTP server to use:
  Denver timezone <Yes>  
Detect Disks
Partition disks
    Make sure partition #1 is 17.2 GB and the B(oot) flag is set
      Use as: Ext3
      Format the partition
      Mount point: /
      Bootable flag: on 
    Make sure partition #3 is 3.2 GB
      Use as: swap
    Write changes to disk <Yes> 
Install the base system
  Kernel to install: linux-generic
  Drivers to include in the initrd: generic   
Configure the package manager
  Use restricted software? <Yes>
  Use software from the "universe" <Yes>
  Use software from the "multiverse" <No>
  Use backported software <No> 
  Services to use: None - deselect 'security updates'
Select and install software
    Configuring discover "No automatic updates"
Install the GRUB boot loader
  Install the GRUB boot loader to the master boot record? <Yes>
Finish the installation
  use defaults

Boot off the HD  

Login as root and run the command
   grub-install --force /dev/sda1
So the reloading state can find the boot record. We don't use the MBR booting
Use fdisk (or the like) and check the filesystem type for partition 1
If it does list it as LINUX (it might be FREEBSD) change it to type 83.
This needs to be set correct for imagezip to run.
To get a list of packages installed on a apt based system run the command 'dpkg --get-selections'


dpkg --get-selections The list of packages installed after the above install is here  packages installed

Install necessary utilities for remote access to the system

  • apt-get install ssh

Give Boss ssh access

  • login in as root
  • cd /root
  • ssh-keygen
  • cd .ssh
  • append pub key from boss to /root/.ssh/authorized_keys. Use scp to get the key onto the system.

Can now ssh as root from bas and do the rest from a remote window.

Set console to redirect to serial port

Some documentation Serial Console

To get a login prompt on the serial port

Create a file called /etc/init/ttyS0.conf containing the following:
# ttyS0 - getty
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]
exec /sbin/getty -L 115200 ttyS0 vt102

Start getty running on the serial console

  • start ttyS0

Redirect console messages to the serial port

edit the file /etc/default/grub
diff grub.original grub
> GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"
> GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Regenerate Grub.conf

  • update-grub

Install necessary packages to build emulab-client

  • apt-get install git autoconf make gcc g++ flex bison python byacc libtool libboost-dev
  • apt-get install libssl-dev libpcap-dev
  • apt-get install libboost-dev libmysqlclient-dev

Make and install pubsub

Install emulab client-side code

Get emulab sources

  • git clone git://
  • cd emulab-devel
  • git submodule init
  • git submodule update

Configure against a standard flux defs file

  • cd ..
  • mkdir obj
  • cd obj
  • ../emulab-devel/configure --with-TBDEFS=../emulab-devel/defs-utahclient

Build and install the client

    • make client
    • make client-install

Make and install the ping-of-death

  • cd ../emulab-devel/ipod/linux_mod
  • make
  • make install
  • depmod -a `uname -r` (this takes a long time)

Install these packages so the system will boot (and not hang) in an emulab-client mode.

  • apt-get install perl nfs-common nfs-client openssl bc
Reboot node from the Hard Drive.
Watch the boot message and see if it looks like the emulab process started ok. Check for /usr/local/libexec/pubsubd, /usr/local/etc/emulab/evproxy, and ???

Removing unwanted packages

  • apt-get remove --purge apparmor apt-xapian-index discover discover-data geoip-database gir1.2-glib-2.0 krb5-locales laptop-detect libarchive-extract-perl libclass-accessor-perl libdiscover2 libfribidi0 libgirepository-1.0-1 liblog-message-simple-perl libmodule-pluggable-perl libmysqlcppconn7 libmysqlcppconn-dev libpam-systemd libparse-debianchangelog-perl libpod-latex-perl libterm-ui-perl libx11-6 libx11-data libxau6 libxext6 libxmuu1 mtr-tiny os-prober python3-gi python-apt xterm
  • remove the client source and obj build directors and anything else you added to the system
Don't let Ubuntu rename the network interfaces:
  • apt-get remove --purge biosdevname
  • update-initramfs -c -k `uname -r`


Miscellaneous system files updates


  • Copy standard /etc/ssh/keys from another client
    • Copied over ssh_host_dsa_key

    • Removed ssh_host_ed25519_key* ssh_host_ecdsa_key*
    • edit /etc/ssh/sshd_config
      • remove the ecdsa and ed25519 keys for protocol verson2
    • edit the file /etc/default/rcS
      • and change VERBOSE option to yes
    • edit the file /etc/dhcp/dhclient.conf
      • and change "send host-name = gethostname();" > send host-name = "<hostname>";
    • remove the file /etc/hostname
    • vigr /etc/group to remove all users from group root except user 0, remove groups above 1000, The same with vigr
  • The page  Problems in clientside install source that should be looked at. It is included here, all the notes should be down by hand for now.

Make an emulab image for the first time

  • Install grub on the first partition
  • grub-install --force /dev/sda1 (expect to see warning messages, it should say "Installation finished. No error reported.")

Note: Every time just before taking a snapshot do the following

  • reset the root password so that you know what it is if you need to come up in recovery mode
  • remove the file /etc/hostname
  • vigr /etc/group to remove all users from group root except user 0, remove groups above 1000, The same with vigr
  • run updatedb

In a browser go to

Make sure the image is parition 1 and the MBR version is 3.

Before submitting make sure the node is not in admin mode. If the BIOS is set to boot from the HD catch it at post-time change it to PXE boot.

Installing those packages that everyone expects

apt-get install build-essential cvs debhelper e2fslibs gconf2-common gconf-service gconf-service-backend gdb emacs24 gnupg-curl intltool-debian iproute iputils-arping jove kexec-tools lftp lvm2 lzma makedumpfile memtest86+ ntp open-iscsi open-iscsi-utils openvpn os-prober python-apt python-dbus python-dbus-dev python-gdbm python-gnupginterface python-support smartmontools ssl-cert subversion tcl8.5 tcsh ksh valgrind vlan xterm zlib1g xauth zsh plymouth-disabler


Note: Reinstall ipod  if the kernel has been re-installed.

Snapshot the image back into the image-descriptor. For example navigate to The Image Descriptor and use the 'Snapshot Node Disk into Image'.


Making a global Image for the testbed

  • Follow the instructions for Making the image for the first time
  • Name the image with extension "-STD"
  • Check the  "Global" checkbox
  • "Release" the image to the Testbed by running the command
    • /usr/testbed/sbin/imagerelease

Table of image sizes and package lists

Stageimage.ndz sizepackage list
.iso load 352MB min_ios_packages.txt
client installed 385MB client_install_packages.txt
after unwanted packages remove 381MB minclient_packages.txt
after standard testbed packages 575MB emulab_packages.txt

Document generated by Confluence on Sep 30, 2014 11:37