CI UML HOWTO

Krishnakumar. R, rkrishnakumar@gmail.com

v0.01, 07 Oct 2004
This HOWTO gives the steps required to get uml version of ci running. It explains how to download the uml ci executable, the root file system and how to setup a cluster with two nodes. The system can be expanded to more number of nodes also. It also explains how to create uml linux executable from source.

1. Introduction

2. Running CI UML cluster

3. Playing around with source code


1. Introduction

The uml version of ci consists of a linux executable and a root file system. The linux executable is made out of vanilla kernel source code, ci cvs source code, uml patches and uml addon for ci. More information on how to do this is available in the "Playing around with source code section". The root filesystem is a filesytem image in a file (named root_fs). This image consists of busybox tools (from http://busybox.net/) and ci tools (from http://sourceforge.net/projects/ci-linux/ ).

This article assumes that uml tools, such as uml_switch, is installed on the system on which the CI UML is run. The required rpm can be downloaded from http://user-mode-linux.sourceforge.net/.

2. Running CI UML cluster

2.1 Downloading

A 'linux' uml binary pre-compiled with ci, is placed at the following location http://ci-linux.sourceforge.net/contrib/uml/binaries/linux.bz2 The root file system (root_fs in UML terminology) which has busybox userland tools and the ci tools can be downloaded from http://ci-linux.sourceforge.net/contrib/uml/binaries/root_fs.bz2. Download and bunzip the files.

Create two directories uml1 and uml2. Place one copy each of 'linux' and 'root_fs' in uml1 and uml2.

2.2 The UML switch

UML switch (run by executing command uml_switch) is used for communication between different instances of uml. Run 'uml_switch' on one terminal. Leave it like that.

2.3 Running node1 of the cluster

Execute the uml linux from one terminal as follows

./linux eth0=daemon
After the uml console comes up, type the following commands:
./script 
cluster_start
cluster -V
The script will mount the proc filesystem, remount the root filesystem as read/write and set the ip address of the uml instance. cluster_start will start the ci software on the node and the cluster -V will show the status of the cluster.

The cluster is initialized and will look similar to this:

2.4 Running the second node of the cluster

Before we start running the second node, we need to change the ip address in the script and the node number in the Glaser configuration file. For that run the following commands:

cd uml2
mkdir root
mount -o loop root_fs root
cd root
Change the CLUSTER_NODENUM=2 in the etc/cluster.conf and in the script change the ifconfig line to the following: /sbin/ifconfig eth0 192.168.0.7 So now our second node will come up with different ip and as the cluster node 2. Umount the root_fs and run the same commands, which were:
./linux eth0=daemon
After the uml console comes up, type the following commands:
./script 
cluster_start
cluster -V
Here is a snapshot of it:

When the second node comes up and joins the cluster the cluster state will change. The following will be the output from cluster -V on node 1 at this point:

3. Playing around with source code

3.1 Downloading the sources

The following can be obtained from the given sites:

Following are the steps to be performed to get the final 'linux' binary.

  1. Untar the linux source code
  2. Copy the kernel directory of ci to it.
  3. Apply the uml patches
  4. Apply the add on uml patches
  5. Copy the config-uml to .config
  6. Run make menuconfig and make linux with architecture as 'um'.

Here is the listing of the commands:

tar xvjf linux-2.6.8.1.tar.bz2
cd linux-2.6.8.1
cp -af ../ci/kernel/* .
bzcat ../uml-patch-2.6.8.1-1.bz2 | patch -p1
patch -p1 < ../2.6.8.1-uml-addon-ci.patch
cp -a ../config-uml .config
make ARCH=um menuconfig
make ARCH=um linux