Cheap VPS & Xen Server

Residential Proxy Network - Hourly & Monthly Packages

Paravirtualization With Xen On CentOS 5.6 (x86_64)


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

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.6 (x86_64) 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

This guide will explain how to set up image-based virtual machines and also LVM-based virtual machines.

Make sure that SELinux is disabled or permissive:

vi /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

If you had to modify /etc/sysconfig/selinux, please reboot the system:

reboot

 

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.

Before we can boot the system with the Xen kernel, please check your GRUB bootloader configuration. We open /boot/grub/menu.lst:

vi /boot/grub/menu.lst

The first listed kernel should be the Xen kernel that you’ve just installed:

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

Change the value of default to 0 (so that the first kernel (the Xen kernel) will be booted by default):

[...]
default=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
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-238.9.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-238.9.1.el5
        module /vmlinuz-2.6.18-238.9.1.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-238.9.1.el5xen.img
title CentOS (2.6.18-238.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-238.el5.img

Afterwards, we reboot the system:

reboot

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

uname -r

[root@server1 ~]# uname -r
2.6.18-238.9.1.el5xen
[root@server1 ~]#

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):

[root@server1 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     3343     2 r—–     18.1
[root@server1 ~]#

3 Creating An Image-Based Virtual Machine

I want to store the disk images of my image-based virtual machines in the directory /vm. Of course, you can use any other directory that has enough space left. 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 or if the directory /vm doesn’t exist on your system, you can create it like this:

mkdir /vm

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

virt-install –prompt

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

Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. <– no
 What is the name of your virtual machine? <– vm01
 How much RAM should be allocated (in megabytes)? <– 512
 What would you like to use as the disk (file path)? <– /vm/vm01.img
 How large would you like the disk (/vm/vm01.img) to be (in gigabytes)? <– 4
 What is the install URL? <– http://wftp.tu-chemnitz.de/pub/linux/centos/5.6/os/x86_64

You should answer the first question about the fully virtualized guest with no because otherwise you will not see the CentOS installer – the installation of the guest system will seem to hang.

As install URL, you should specify a mirror close to you where the installer can download all files needed for the installation of CentOS 5.6 in our virtual machine. You can find a list of CentOS mirrors here: http://www.centos.org/modules/tinycontent/index.php?id=13

After we have answered all questions, virt-install starts the normal CentOS 5.6 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

name = "vm01"
uuid = "809dd76e-f48e-8a3d-343b-1dd8b1d585ea"
maxmem = 512
memory = 512
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
disk = [ "tap:aio:/vm/vm01.img,xvda,w" ]
vif = [ "mac=00:16:36:33:80:b7,bridge=xenbr0,script=vif-bridge" ]

Run

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:

[root@server1 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0     2702     2 r—–     83.4
vm01                                       3      512     1 -b—-     18.2
[root@server1 ~]#

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.

 

4 Creating An LVM-Based Virtual Machine

This chapter explains how you can set up LVM-based virtual machines instead of virtual machines that use disk images. Virtual machines that use disk images are very slow and heavy on disk IO.

In this example I’m using a CentOS 5.6 host with the LVM volume group /dev/VolGroup00 that has about 465GB of space. /dev/VolGroup00 contains two logical volumes, /dev/VolGroup00/LogVol00 and /dev/VolGroup00/LogVol01 that consume about 104GB of space – the rest is not allocated and can be used to create logical volumes for our virtual machines:

vgdisplay

[root@server1 ~]# vgdisplay
/dev/hda: open failed: No medium found
— Volume group —
VG Name               VolGroup00
System ID
Format                lvm2
Metadata Areas        1
Metadata Sequence No  3
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                1
Act PV                1
VG Size               465.66 GB
PE Size               32.00 MB
Total PE              14901
Alloc PE / Size       3303 / 103.22 GB
Free  PE / Size       11598 / 362.44 GB
VG UUID               veUbuN-BNGq-BP3S-H3mP-bWOF-tbAX-GeIhy6

[root@server1 ~]#

lvdisplay

[root@server1 ~]# lvdisplay
/dev/hda: open failed: No medium found
— Logical volume —
LV Name                /dev/VolGroup00/LogVol00
VG Name                VolGroup00
LV UUID                5tEz3i-YlR7-rdQB-VCPK-xHlB-GsWU-4Rijqk
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                97.66 GB
Current LE             3125
Segments               1
Allocation             inherit
Read ahead sectors     auto
– currently set to     256
Block device           253:0

— Logical volume —
LV Name                /dev/VolGroup00/LogVol01
VG Name                VolGroup00
LV UUID                3qp5ia-uBJl-eeNZ-JOkH-4E6o-ZAbf-HvdNms
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                5.56 GB
Current LE             178
Segments               1
Allocation             inherit
Read ahead sectors     auto
– currently set to     256
Block device           253:1

[root@server1 ~]#

I want to create the virtual machine vm02 now which uses the logical volume /dev/VolGroup00/vm02. I want the virtual machine to have a disk space of 10GB, so I create the logical volume /dev/VolGroup00/vm02 as follows:

lvcreate -L10G -n vm02 VolGroup00

Afterwards we can run

virt-install –prompt

again:

Would you like a fully virtualized guest (yes or no)? This will allow you to run unmodified operating systems. <– no
 What is the name of your virtual machine? <– vm02
 How much RAM should be allocated (in megabytes)? <– 512
 What would you like to use as the disk (file path)? <– /dev/VolGroup00/vm02
 What is the install URL? <– http://wftp.tu-chemnitz.de/pub/linux/centos/5.6/os/x86_64

As the disk file path, we specify our new volume group /dev/VolGroup00/vm02. Please note that virt-install doesn’t ask for the disk space anymore because the disk space is determined by the size of the logical volume (10GB).

 

  • Xen: http://www.xen.org/
  • CentOS: http://www.centos.org/

Comments

comments