Installing Xen On CentOS 5.0 (i386)

Version 1.0
Author: Falko Timme

This tutorial provides step-by-step instructions on how to install Xen (version 3.0.3) on a CentOS 5.0 system (i386).

Xen lets you create guest operating systems (*nix operating systems like Linux and FreeBSD), so called "virtual machines" or domUs, under a host operating system (dom0). Using Xen you can separate your applications into different virtual machines that are totally independent from each other (e.g. a virtual machine for a mail server, a virtual machine for a high-traffic web site, another virtual machine that serves your customers' web sites, a virtual machine for DNS, etc.), but still use the same hardware. This saves money, and what is even more important, it's more secure. If the virtual machine of your DNS server gets hacked, it has no effect on your other virtual machines. Plus, you can move virtual machines from one Xen server to the next one.

I will use CentOS 5.0 (i386) for both the host OS (dom0) and the guest OS (domU).

This howto is meant as a practical guide; it does not cover the theoretical backgrounds. They are treated in a lot of other documents in the web.

This document comes without warranty of any kind! I want to say that this is not the only way of setting up such a system. There are many ways of achieving this goal but this is the way I take. I do not issue any guarantee that this will work for you!


1 Preliminary Note

I use the following partitions on my CentOS 5.0 host system (dom0):

  • /boot 150 MB (ext3)
  • swap 1GB
  • / 3GB (ext3)
  • /vm the rest (ext3)

I will create the virtual machines in the /vm directory; of course, you can use any other directory that has enough space left, and you don't have to create a partition of its own for it. If you use another directory, replace /vm with your own directory in this tutorial.

If you want to save your virtual machines in /vm, too, but haven't created a partition for it of if the directory /vm doesn't exist on your system, you can create it like this:

mkdir /vm

(Please note: You don't need a /boot partition, but then you have to keep in mind that the Grub stanzas I describe in this howto are slightly different. For example, when I write that I add

title CentOS (2.6.18-8.1.4.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.1.4.el5
        module /vmlinuz-2.6.18-8.1.4.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-8.1.4.el5xen.img

to /boot/grub/menu.lst then you should probably use

title CentOS (2.6.18-8.1.4.el5xen)
        root (hd0,0)
        kernel /boot/xen.gz-2.6.18-8.1.4.el5
        module /boot/vmlinuz-2.6.18-8.1.4.el5xen ro root=/dev/VolGroup00/LogVol00
        module /boot/initrd-2.6.18-8.1.4.el5xen.img

in that file instead...)


2 Installing Xen

To install Xen, we simply run

yum install kernel-xen xen

This installs Xen and a Xen kernel on our CentOS system. Afterwards, we can find our new Xen kernel (vmlinuz-2.6.18-8.1.4.el5xen) and its ramdisk (initrd-2.6.18-8.1.4.el5xen.img) in the /boot directory:

ls -l /boot/

[[email protected] ~]# ls -l /boot/
total 16327
-rw-r--r-- 1 root root   62154 Apr  9 16:30 config-2.6.18-8.1.1.el5
-rw-r--r-- 1 root root   61057 May 17 12:12 config-2.6.18-8.1.4.el5xen
-rw-r--r-- 1 root root   62150 Mar 16 01:19 config-2.6.18-8.el5
drwxr-xr-x 2 root root    1024 Jun  8 00:14 grub
-rw------- 1 root root 2318110 Apr 13 17:10 initrd-2.6.18-8.1.1.el5.img
-rw------- 1 root root 2320081 Jun  8 00:14 initrd-2.6.18-8.1.4.el5xen.img
-rw------- 1 root root 2318126 Apr 13 16:18 initrd-2.6.18-8.el5.img
drwx------ 2 root root   12288 Apr 13 16:05 lost+found
-rw-r--r-- 1 root root   80032 Apr  1 16:49 message
-rw-r--r-- 1 root root   83542 Apr  9 16:31 symvers-2.6.18-8.1.1.el5.gz
-rw-r--r-- 1 root root   84906 May 17 12:13 symvers-2.6.18-8.1.4.el5xen.gz
-rw-r--r-- 1 root root   83542 Mar 16 01:20 symvers-2.6.18-8.el5.gz
-rw-r--r-- 1 root root  884787 Apr  9 16:30
-rw-r--r-- 1 root root  868062 May 17 12:12
-rw-r--r-- 1 root root  884787 Mar 16 01:19
-rw-r--r-- 1 root root 1765460 Apr  9 16:30 vmlinuz-2.6.18-8.1.1.el5
-rw-r--r-- 1 root root 2075341 May 17 12:12 vmlinuz-2.6.18-8.1.4.el5xen
-rw-r--r-- 1 root root 1765428 Mar 16 01:19 vmlinuz-2.6.18-8.el5
-rw-r--r-- 1 root root  274228 May 17 09:13 xen.gz-2.6.18-8.1.4.el5
-rwxr-xr-x 1 root root  608568 May 17 12:28 xen-syms-2.6.18-8.1.4.el5
[[email protected] ~]#

Before we can boot the system with the Xen kernel, we must tell the bootloader GRUB about it. We open /boot/grub/menu.lst:

vi /boot/grub/menu.lst

and add the following stanza above all other kernel stanzas:

title CentOS (2.6.18-8.1.4.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.1.4.el5
        module /vmlinuz-2.6.18-8.1.4.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-8.1.4.el5xen.img

Then change the value of default to 0:


The complete /boot/grub/menu.lst should look something like this:

# grub.conf generated by anaconda
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
title CentOS (2.6.18-8.1.4.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-8.1.4.el5
        module /vmlinuz-2.6.18-8.1.4.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-8.1.4.el5xen.img
title CentOS (2.6.18-8.1.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-8.1.1.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-8.1.1.el5.img
title CentOS (2.6.18-8.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-8.el5.img

Afterwards, we reboot the system:

shutdown -r now

The system should now automatically boot the new Xen kernel. After the system has booted, we can check that by running

uname -r

[[email protected] ~]# uname -r
[[email protected] ~]#

So it's really using the new Xen kernel!

We can now run

xm list

to check if Xen has started. It should list Domain-0 (dom0):

[[email protected] ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      350     1 r-----     94.4
[[email protected] ~]#


3 Creating A Virtual Machine

CentOS comes with a nice tool called virt-install with which we can create virtual machines for Xen. To start it, we simply run


The tools asks a few questions before it creates a virtual machine. I want to call my first virtual machine vm01, with 256MB RAM and a disk size of 4GB. I want to store it in the file /vm/vm01.img:

What is the name of your virtual machine? <-- vm01
How much RAM should be allocated (in megabytes)? <-- 256
What would you like to use as the disk (path)? <-- /vm/vm01.img
How large would you like the disk (/vm/vm01.img) to be (in gigabytes)? <-- 4
Would you like to enable graphics support? (yes or no) <-- no
What is the install location? <--

The question about the graphics support refers to the installer, not the virtual machine itself! It is possible to start a graphical installer, but you'd have to connect to it via VNC. It's easier to use the text installer - it offers the same options, so I choose the text installer.

As install location, you should specify a mirror close to you where the installer can download all files needed for the installation of CentOS 5.0 in our virtual machine. You can find a list of CentOS mirrors here:

After we have answered all questions, virt-install starts the normal CentOS 5.0 installer (in text mode) in our vm01 virtual machine. You already know the CentOS installer, so it should be no problem for you to finish the CentOS installation in vm01.

After the installation, we stay at the vm01 console. To leave it, type CTRL+] if you are at the console, or CTRL+5 if you're using PuTTY. You will then be back at the dom0 console.

virt-install has created the vm01 configuration file /etc/xen/vm01 for us (in dom0). It should look like this:

cat /etc/xen/vm01

# Automatically generated xen config file
name = "vm01"
memory = "256"
disk = [ 'tap:aio:/vm/vm01.img,xvda,w', ]
vif = [ 'mac=00:16:3e:13:e4:81, bridge=xenbr0', ]

uuid = "5aafecf1-dd66-401d-69cc-151c1cb8ac9e"
on_reboot   = 'restart'
on_crash    = 'restart'


xm console vm01

to log in on that virtual machine again (type CTRL+] if you are at the console, or CTRL+5 if you're using PuTTY to go back to dom0), or use an SSH client to connect to it.

To get a list of running virtual machines, type

xm list

The output should look like this:

[[email protected] xen]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      259     1 r-----   1906.6
vm01                                       3      255     1 ------    137.9
[[email protected] xen]#

To shut down vm01, do this:

xm shutdown vm01

To start vm01 again, run

xm create /etc/xen/vm01

If you want vm01 to start automatically at the next boot of the system, then do this:

ln -s /etc/xen/vm01 /etc/xen/auto

Here are the most important Xen commands:

xm create -c /path/to/config - Start a virtual machine.
xm shutdown <name> - Stop a virtual machine.
xm destroy <name> - Stop a virtual machine immediately without shutting it down. It's as if you switch off the power button.
xm list - List all running systems.
xm console <name> - Log in on a virtual machine.
xm help - List of all commands.


Share this page:

7 Comment(s)

Add comment


From: M.J.

Try "xm console vm02" as below:

 [[email protected] vm]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1753     4 r-----    298.9
vm02                                       3      255     1 ------      0.0

 [[email protected] vm]# xm console vm02

From: Greg

Thanks for the very clear walkthrough.

These steps had Xen and a VM up and running in no time, as long as I assigned a static IP to the VM.

I know that the settings in /etc/xen/xend-config.sxp and in the VM's config file are where one enables DHCP, but so far I haven't hit on the correct combination. 



From: quequotion

How up-to-date is this guide?

I've gone through this installation process without deviation several times and tried various alterations but the end result is always the same: an unbootable operating system.

 Is this information current? there are some oddities here, like having the initrd in menu.lst called by "module"... also, why do i not need to make a new initrd?

 unfortunately, i cannot debug effectively or understand or explain the errors because i'm working on a remote host, and now i have to call someone to manually reboot it... again...

From: ryan keywest

I follow step by step on this guide but no console after virt-install completed the process. I should stay on the console right? But I'm not :(.

 I cannot access the console either using xm console vm02...

 [[email protected] vm]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     1753     4 r-----    298.9
vm02                                       3      255     1 ------      0.0

That state should be 3600+ at least because it's been a day now...

Any ideas?


From: foomip

Hi Guys

If anyone is looking for help setting up XEN on debian, check out this article .

From: Anonymous

Following this tutorial is great until you get to :

What is the install location? <--

 This fails and all other variations I tried all fail in some way, many begin then error part way through, and I failed to get it to work with the hosts CD rom.

So the answer is to start the http server on the host where you are installing the Virtual Machine, and copy in the packages from the CD_ROM to the root of the http server. In my case this was /var/www/html/ and I created CentOS_5.2_Final/CentOS/ to match the CD-Structure.

The commands are:

$ cd /var/www/html/CentOS_5.2_Final/CentOS

$ cp -r /media/CentOS_5.2_Final/CentOS/ .

And repeat the copy for each of your distro disks.

Then prove it is working by  pointing your browser at it, like this:


and you should see all the rpm files you have copied.

Now use http://localhost/CentOS_5.2_Final/CentOS/ as the location and all is well.




From: Jose Luis Chafardet

Hello, I'm playing with xen this days, and im wondering if there is a way to force / use a kickstart file with virt-install.

 I've tried the -x flag as in additional arguments, using --extra-args=ks=http://domain/kickstart.cfg without luck it doesn't reads my kickstart file, maybe im doing something wrong somewhere, as it halts on the lan configuration

 network --device eth0 --bootproto static --ip xx.yy.zz.90 --netmask --gateway xx.yy.zz.89 --nameserver ww.xx.yy.zz, --hostname xentest2.domain

 maybe there is something wrong with the line for it. I'm not sure, so far looks good. tho anyway stops and asks me all the information.

 any clues?