There isn’t a whole lot of information about how to setup CentOS as a DomU under a Debian 4.0 based Dom0 and still maintain the use of pygrub to boot the CentOS kernels. This howto will give you a general overview on what steps to take without having to use an incomplete CentOS image. This is not going to be a copy and paste sort of howto, but rather a more high level detail, and a couple of fixes to make it all work correctly.
A couple of assumptions I am making here:
- You have a working Xen install already under Debian
- You can edit files using vi or a comparable editor.
- You understand how Xen and LVM can work together at least at some basic level
- You are confident to compile your own applications using make, etc…
Here is what you need to do to get started:
Step 1:
Download the kernel image and ram disk for CentOS and put them some place you can access them on the Dom0.
In my case, I put them in /usr/local/src/xen/ (vmlinuz and initrd.gz respectively). I downloaded these files from a CentOS mirror. The files you are after are located in the centos/5.1/os/i386/images/xen/ directory as these contain the Xen code compiled into the kernel so that you can boot the DomU in paravirtualization mode.
Step 2:
Create a Xen DomU configuration file that points to these files for the boot kernel.
I edited the two lines:
kernel = “/usr/local/src/xen/vmlinuz”
ramdisk = “/usr/local/src/xen/initrd.img”
This tells Xen to use these kernels on boot up.
Step 3:
Modify your DomU config to point to your disks:
disk = [ ‘phy:/dev/xen01/centos5-disk,xvda,w’, ‘phy:/dev/xen01/centos5-swap,sda1,w’]
It is important to note that you must export the drives from the Dom0 as xvda, otherwise the CentOS installer will not be able to detect them properly and you will have no target drive to install to.
We will also want to modify the default restart behavior as you will see later, this is important:
on_reboot = ‘destroy’
Step 4:
Go ahead and boot up the Xen DomU using xm create -c
Install CentOS as a normal network installation (point it at an FTP or HTTP mirror and let it install normally).
Step 5:
Once the CentOS installation is completed, the DomU will attempt to reboot itself. This is why we set the on_restart to destroy instead of the default of restart. We need to edit the configuration to boot up via pygrub instead:
bootloader = “/usr/lib/xen-3.0.3-1/bin/pygrub”
Step 6:
Here is where things get a little tricky. The pygrub application is missing a library that it needs in order to boot up CentOS based kernels. We must build this ourselves.
Download the xen-3.0.3 source (the new sources do not build this file, so I used this version specifically, I don’t know if others will work). I know for a fact that xen-3.2.0 does not work.
wget http://bits.xensource.com/oss-xen/release/3.0.3-0/src.tgz/xen-3.0.3_0-src.tgz
Untar the file and cd into the directory xen-3.0.3_0-src
Then:
cd tools/pygrub
Then you need to run make. Pay attention to the errors, you might need to install additional libraries if you don’t have them on your Dom0. (e2fslibs-dev comes to mind).
Step 7:
Once your build has successfully completed, you will need to copy the files to your local xen installation.
cd build/lib.linux-i686-2.4/grub/fsys/ext2
mkdir /usr/lib/xen-3.0.3-1/lib/python/grub/fsys/ext2
cp * /usr/lib/xen-3.0.3-1/lib/python/grub/fsys/ext2/
Step 8:
Boot your DomU using:
xm create -c
Finished:
You should now have a working Xen DomU under Dom0 without having to resort to broken CentOS images.
3:48 pm, February 16, 2009`ariel
You rocks!! i spend a few hours looking a way to solve this on my dev xen environment. Thanks!!!
8:39 pm, May 22, 2010brieweb
In step 1, you say to do the following:
"Download the kernel image and ram disk for CentOS and put them some place you can access them on the Dom0."
Where did you get this kernel and ramdisk? Off the centos install disk?
brian