Installing Xen On An Ubuntu Feisty Fawn Server From The Ubuntu Repositories
This tutorial provides step-by-step instructions on how to install Xen on an Ubuntu Feisty Fawn (Ubuntu 7.04) server system (i386). You can find all the software used here in the Ubuntu repositories, so no external files or compilation are needed.
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 Ubuntu Feisty Fawn (i386) for the host OS (dom0) and Ubuntu Dapper Drake and Ubuntu Edgy Eft for the guest operating systems (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 Install The Ubuntu Feisty Fawn Host System (dom0)
You can install the host system (dom0) as shown in the chapters one to seven of this tutorial: http://www.howtoforge.com/perfect_setup_ubuntu704 (of course, you don't have to do this if you already have an Ubuntu 7.04 host system that you want to use).
Make sure that the root account is enabled, because we must run all the steps from this tutorial as root user. Also, if you want to use vi as your text editor (as suggested by this tutorial), you should run
apt-get install vim-full
The vim-full package makes sure that the vi text editor behaves as expected (without vim-full, you might experience some strange behaviour in the vi text editor).
dom0's FQDN in this example will be server1.example.com. server1.example.com's IP address will be 192.168.0.100 in this tutorial, and the gateway I use is 192.168.0.1, so the virtual machines will have to use that one, too.
2 Install Xen
To install Xen and all needed dependencies, all we have to do is run the following command:
apt-get install ubuntu-xen-server
This will also install the xen-tools package which we use later on to create virtual machines.
Now we edit /etc/xen/xend-config.sxp. Comment out the (network-script network-dummy) line and add (network-script network-bridge) right above the (vif-script vif-bridge) line, like this:
vi /etc/xen/xend-config.sxp
[...] |
We also need to add the loop module to the kernel every time we boot our system, so edit /etc/modules and add the loop module at the end of the file:
vi /etc/modules
[...] |
Now take a look at the /boot directory to see which kernels and ramdisks are installed:
ls -l /boot/
root@server1:~# ls -l /boot/
total 18780
-rw-r--r-- 1 root root 414210 2007-04-15 10:19 abi-2.6.20-15-server
-rw-r--r-- 1 root root 72726 2007-04-05 08:08 config-2.6.19-4-server
-rw-r--r-- 1 root root 83298 2007-04-15 08:33 config-2.6.20-15-server
drwxr-xr-x 2 root root 4096 2007-06-25 22:00 grub
-rw-r--r-- 1 root root 6325928 2007-06-25 21:56 initrd.img-2.6.19-4-server
-rw-r--r-- 1 root root 6802658 2007-06-25 23:10 initrd.img-2.6.20-15-server
-rw-r--r-- 1 root root 94600 2006-10-20 13:44 memtest86+.bin
-rw-r--r-- 1 root root 783333 2007-04-05 08:08 System.map-2.6.19-4-server
-rw-r--r-- 1 root root 812139 2007-04-15 10:20 System.map-2.6.20-15-server
-rw-r--r-- 1 root root 1726726 2007-04-05 08:08 vmlinuz-2.6.19-4-server
-rw-r--r-- 1 root root 1763308 2007-04-15 10:19 vmlinuz-2.6.20-15-server
-rw-r--r-- 1 root root 259025 2007-03-24 17:03 xen-3.0-i386-pae.gz
root@server1:~#
The /boot/vmlinuz-2.6.19-4-server kernel is the Xen kernel that got installed together with the ubuntu-xen-server package, and /boot/initrd.img-2.6.19-4-server is its ramdisk. We will need these soon.
I want to store my virtual machines in the /home/xen directory, therefore I create it now:
mkdir /home/xen
We will use xen-tools to create virtual machines. xen-tools make it very easy to create virtual machines - please read this tutorial to learn more: http://www.howtoforge.com/xen_tools_xen_shell_argo. As mentioned before, the xen-tools package got installed together with the ubuntu-xen-server package.
Now we edit /etc/xen-tools/xen-tools.conf. This file contains the default values that are used by the xen-create-image script unless you specify other values on the command line. I changed the following values and left the rest untouched:
vi /etc/xen-tools/xen-tools.conf
[...] |
The dist line holds the default distribution that you want to install in a virtual machine. Although a comment in the /etc/xen-tools/xen-tools.conf mentions that at this time the only supported Ubuntu flavour is Dapper Drake (dapper), Edgy Eft (edgy) works as well (Feisty Fawn aka feisty does not at this time).
The kernel line must contain our Xen kernel, and the initrd line its ramdisk.
The passwd = 1 line makes that you can specify a root password when you create a new guest domain. In the mirror line specify an Ubuntu mirror close to you.
Make sure you specify a gateway and netmask. If you don't, and you don't specify a gateway and netmask on the command line when using xen-create-image, your guest domains won't have networking even if you specified an IP address!
Now reboot the system:
shutdown -r now
If your system reboots without problems, then everything is fine!
Run
uname -r
and your new Xen kernel should show up:
root@server1:~# uname -r
2.6.19-4-server
root@server1:~#
3 Creating Virtual Machines (domU)
Now let's create our first guest domain, xen1.example.com, running Dapper Drake (dapper) with the IP address 192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=2Gb --swap=256Mb --ide \
--ip=192.168.0.101 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
--dir=/home/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
--initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=dapper \
--mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd
A lot of switches are unnecessary here because we specified the same details in /etc/xen-tools/xen-tools.conf but it shows that you can specify the desired settings either on the command line or in /etc/xen-tools/xen-tools.conf. Please make sure that you specify --ide, otherwise your virtual machine might not boot!
(To learn more about the available options, take a look at the xen-create-image man page:
man xen-create-image
The xen-create-image command will now create the xen1.example.com virtual machine for us. This can take a few minutes. The output should be similar to this one:
root@server1:~# xen-create-image --hostname=xen1.example.com --size=2Gb --swap=256Mb --ide \
> --ip=192.168.0.101 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
> --dir=/home/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
> --initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=dapper \
> --mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd
General Infomation
--------------------
Hostname : xen1.example.com
Distribution : dapper
Fileystem Type : ext3
Size Information
----------------
Image size : 2Gb
Swap size : 256Mb
Image type : sparse
Memory size : 64Mb
Kernel path : /boot/vmlinuz-2.6.19-4-server
Initrd path : /boot/initrd.img-2.6.19-4-server
Networking Information
----------------------
IP Address 1 : 192.168.0.101
Netmask : 255.255.255.0
Gateway : 192.168.0.1
Creating swap image: /home/xen/domains/xen1.example.com/swap.img
Done
Creating disk image: /home/xen/domains/xen1.example.com/disk.img
Done
Creating ext3 filesystem on /home/xen/domains/xen1.example.com/disk.img
Done
Installing your system with debootstrap mirror http://de.archive.ubuntu.com/ubuntu/
Done
Running hooks
Done
No role script specified. Skipping
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
root@server1:~#
There should now be a xen1.example.com configuration file - /etc/xen/xen1.example.com.cfg. Take a look at it to become familiar with virtual machines configuration files:
cat /etc/xen/xen1.example.com.cfg
# |
To start the virtual machine, run
xm create /etc/xen/xen1.example.com.cfg
Run
xm console xen1.example.com
to log in on that virtual machine (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 (192.168.0.101).
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 327 1 r----- 687.7
xen1.example.com 1 64 1 -b---- 22.4
root@server1:~#
To shut down xen1.example.com, do this:
xm shutdown xen1.example.com
If you want vm01 to start automatically at the next boot of the system, then do this:
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Here are the most important Xen commands:
xm create -c /path/to/config - Start a virtual machine.
xm shutdown
xm destroy
xm list - List all running systems.
xm console
xm help - List of all commands.
Let's create a second vm, xen2.example.com with the IP address 192.168.0.102 and Edgy Eft (edgy) as the operating system:
xen-create-image --hostname=xen2.example.com --size=2Gb --swap=256Mb --ide \
--ip=192.168.0.102 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
--dir=/home/xen --memory=64Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.19-4-server \
--initrd=/boot/initrd.img-2.6.19-4-server --debootstrap --dist=edgy \
--mirror=http://de.archive.ubuntu.com/ubuntu/ --passwd
Afterwards, you can start xen2.example.com like this:
xm create /etc/xen/xen2.example.com.cfg
and shut it down like this:
xm shutdown xen2.example.com
A list of all virtual machines that were created with the xen-create-image command is available under
xen-list-images
root@server1:~# xen-list-images
Name: xen1.example.com
Memory: 64
IP: 192.168.0.101
Name: xen2.example.com
Memory: 64
IP: 192.168.0.102
root@server1:~#
To learn more about what you can do with xen-tools, take a look at this tutorial: http://www.howtoforge.com/xen_tools_xen_shell_argo
4 Links
- Xen: http://www.xensource.com/xen/
- xen-tools: http://xen-tools.org/software/xen-tools
- Ubuntu: http://www.ubuntu.com/