How to Install Paravirtualized CentOS 7 DomU on Xen

This post introduces how to install a paravirtualized CentOS 7 DomU on Xen. The very common way of installing DomU does not work for CentOS 7. A little trick to set the repository and the network used by the VM should be used by adding a setting strings to the “extra=” field for this VM.

Note that this tutorials was tested with CentOS 7.2 (1511). The kernel in CentOS 7.4 seems have problems with Xen. Please check comments on some details.

To install the DomU VM, first download the pxeboot images from CentOS’s website at http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot/ (due to the problems of some later kernels with Xen, we use vault here to make sure it is a 7.2.1511 kernel).

The commands are (assume we are working in a directory of the VM /home/xen/centos7/ ):

# wget http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot/vmlinuz
# wget http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot/initrd.img

Prepare the configuration file centos7.cfg used for the VM:

name="centos7install"
vcpus=4
memory=2048
disk=['file:/home/xen/centos7/vmdisk0,xvda,w' ]
vif=['bridge=xenbr0']
on_reboot="restart"
on_crash="restart"
kernel="/home/xen/centos7/vmlinuz"
ramdisk="/home/xen/centos7/initrd.img"
extra="ksdevice= inst.repo=http://mirror.centos.org/centos/7/os/x86_64/ ip=10.0.0.222::10.0.0.2:255.255.0.0:cento7:eth0:none nameserver=8.8.8.8"

Here, note the trick of adding the line

extra="ksdevice= inst.repo=http://mirror.centos.org/centos/7/os/x86_64/ ip=10.0.0.222::10.0.0.2:255.255.0.0:cento7:eth0:none nameserver=8.8.8.8"

Here 10.0.0.222 is the IP assigned to the VM and 10.0.0.2 is the gateway. You will need to change the parameters here according to your network environment for the VM.

Prepare the disk image for the VM in the VM’s directory:

# dd if=/dev/zero of=./vmdisk0 bs=1k seek=20480k count=1

Now, start the VM and it will starts to install itself,

# xl create -c centos7.cfg

Then, just follow the CentOS 7’s instructions to install and configure the VM.

Booted the kernel and starting to download the installation files:

cenos7-xen-domu-01.png

Choose the installation interface (choose “Use text mode”):

cenos7-xen-domu-03.png

Make the choices for various OS configurations:

cenos7-xen-domu-04.png

Started to install packages:

cenos7-xen-domu-05.png

Installation completes:

cenos7-xen-domu-06.png

Boot the VM again with a normal configuration file as follows.

name="centos7"
vcpus=4
memory=2048
disk=['file:/home/xen/centos7/vmdisk0,xvda,w' ]
vif=['bridge=xenbr0']
on_reboot="restart"
on_crash="restart"
bootloader = "pygrub"

The key changes here are to remove the kernel, ramdisk and extra variables and setting bootloader to “pygrub”.

It works nicely now:

cenos7-xen-domu-07.png

Eric Z Ma

Eric is a father and systems guy. Eric is interested in building high-performance and scalable distributed systems and related technologies. The views or opinions expressed here are solely Eric’s own and do not necessarily represent those of any third parties.

9 comments:

  1. hi
    I just did what you explained but after installation what should I change in the vm config file to let it start normally ?
    thank you

    1. Was the panic from the Domain-0 or the DomU? To understand the problem, what’s your Domain-0’s environment (Xen version and kernel version) and any error messages printed / show?

  2. The kernel panic was from DomU itself, before it got to the install screen. The VM gets the message “Kernel panic – not syncing: Fatal exception” and gets into a reboot loop with that message a few times before the DomU stops altogether.

    It’s done this on a CentOS Dom0 running Xen 4.6 and a Debian Dom0 with is Xen 4.8.

    I’m testing this on an older laptop with a Core i5 2520 CPU that has full VM extensions enabled. It installs fine in full HVM mode.

    1. I see. I confirm the version I tested was CentOS 7.2.1511 on Xen 4.3. The current version on the FTP seem at least some 17xx one. It may have changed. I am not sure whether it works, you may try to delete the “extra” line.

      1. Eric, I got an idea to try these steps but go back to 7.2 using vault.centos.org to pull down the 7.2 pxe images and as the install path. That worked to install CentOS paravirtually. Then, I just updated to CentOS 7.4 (the current version) from there. The only issue is the default kernel for 7.4 doesn’t boot up in pygrub because of a flaw. So, while still on 7.2, I had to install the kernel from the centosplus repo, and then it worked. Or, you just run it as a paravirtual HVM and that will work, too.

        1. Thanks for the confirmation. Then I guess the kernel in CentOS 7.4 does not work well with Xen for para mode.

          As most hardware supports it, HVM based full virtualization may be performance well enough.

          1. From what I’ve read the HVM full virt mode works just as well performance wise since it runs its own paravirtual drivers. However, thanks for your input. Your steps worked well.

Leave a Reply

Your email address will not be published. Required fields are marked *