Logo

HPC @ Uni.lu

High Performance Computing in Luxembourg

Create a Centos7 domU on a Debian7 Dom0

This is my notes for the creation of a Centos 7 domU on a Debian 7 dom0. I did not manage to generate a Centos 7 system with the xen-tools, so I’ve decided to install it from scratch, with the official Centos 7 installation iso.

Requirements:

  • I assume you already have a working/test Debian 7 dom0

  • the qemu packages must be installed for the HVM mode

    (dom0) # apt-get install qemu
    
  • the package kpartx, in order to mount the system disk and modify the boot configuration

    (dom0) # apt-get install kpartx
    

Create the LVs

We create 2 logical volumes in the volume group domU

(dom0) # lvcreate -L512M -n test-centos-7-swap domU
(dom0) # lvcreate -L10G -n test-centos-7-disk domU

Download the Centos 7 installation iso

(dom0) # cd /data
(dom0) # wget http://centos.mirror.root.lu/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso

Create the domain config, boot the installation iso in HVM mode and use vnc as the graphical backend.

(dom0) # vim /etc/xen/test-centos-7.cfg

    vcpus       = '1'
    memory      = '512'
    disk        = [
                      'phy:/dev/domU/test-centos-7-disk,xvda,w',
                      'phy:/dev/domU/test-centos-7-swap,xvdb,w',
                      'file:/data/CentOS-7-x86_64-DVD-1503-01.iso,hdc:cdrom,r'
                  ]
    boot='dc'
    name        = 'test-centos-7'
    vif         = [ 'ip=10.74.5.45,mac=00:16:AB:CD:74:EE,bridge=breth1' ]
    on_poweroff = 'destroy'
    on_reboot   = 'restart'
    on_crash    = 'restart'
    kernel = "hvmloader"
    builder = 'hvm'
    vfb = [ "type=vnc, vncpasswd=, vnclisten=0.0.0.0" ]

Start the domU and connect the the vnc server

(dom0) # xm create test-centos-7.cfg

(laptop)$ vncviewer 10.74.6.4:0

Start the installation as usual.

In the “installation destination” part, select both disks (xvda and xvdb) and create the partitions manually.

Use “standard partitions”, and create an ext4 partition on /dev/xvda and a swap partition on /dev/xvdb. Using a standard ext4 partition will permit to boot the domU using pygrub.

Configure the network interface and proceed with the installation.

At this point, if you encounter the error "'DiskDevice' object has no attribute disk", check the disks names in the xen domU configuration, it must be xvda, xvdb, etc. The installer does not accept xvda1, xvda2, …

At the end of the installation, press reboot, and destroy the domU.

(dom0) # xm destroy test-centos-7

Create the pygrub configuration

At this point, we want to boot the domU using pygrub, you can test pygrub on the system logical volume:

(dom0) # pygrub /dev/domU/test-centos-7-disk
  ...
  "couldn't find bootloader config file in the image provided."

For some reasons, the pygrub version provided with Debian 7 can’t find/parse the grub 2 configuration. My workaround is to create a grub 1 configuration file (/etc/grub/menu.lst), and a kernel post installation script, to ensure that the domU will always boot on the latest installed kernel.

(dom0) # kpartx -av /dev/domU/test-centos-7-disk
(dom0) # mount /dev/mapper/domU-test--centos--7--disk1 /mnt/


(dom0) # vim /mnt/boot/grub/menu.lst

    default 0

    title CentOS Linux 7
      root (hd0,0)
      kernel /boot/vmlinuz root=/dev/xvda1 ro crashkernel=auto
      initrd /boot/initramfs

(dom0) # cd /mnt/boot
(dom0) # ln -sf initramfs-3.10.0-229.4.2.el7.x86_64.img initramfs
(dom0) # ln -sf vmlinuz-3.10.0-229.4.2.el7.x86_64 vmlinuz

(dom0) # vim /mnt/etc/kernel/postinst.d/99-kernel-links.sh

      #! /bin/sh

      KERNEL_VERSION="$1"

      ln -sf /boot/initramfs-${KERNEL_VERSION}.img /boot/initramfs
      ln -sf /boot/vmlinuz-${KERNEL_VERSION} /boot/vmlinuz

(dom0) # chmod +x /mnt/etc/kernel/postinst.d/99-kernel-links.sh

(dom0) # umount /mnt 

Now, pygrub should find the grub configuration

(dom0) # pygrub /dev/domU/test-centos-7-disk
    Using <class 'grub.GrubConf.GrubConfigFile'> to parse /boot/grub/menu.lst

    linux (kernel /var/run/xend/boot/boot_kernel.me6ouM)(ramdisk /var/run/xend/boot/boot_ramdisk.gMOGfE)(args "root=/dev/xvda1 ro crashkernel=auto ")

Modify the xen domU configuration

You can now boot the system using this minimal configuration file

(dom0) # vim /etc/xen/test-centos-7.cfg

    bootloader = '/usr/bin/pygrub'
    vcpus       = '1'
    memory      = '512'
    disk        = [
                      'phy:/dev/domU/test-centos-7-disk,xvda,w',
                      'phy:/dev/domU/test-centos-7-swap,xvdb,w',
                  ]
    name        = 'test-centos-7'
    vif         = [ 'ip=10.74.5.45,mac=00:16:AB:CD:74:EE,bridge=breth1' ]
    on_poweroff = 'destroy'
    on_reboot   = 'restart'
    on_crash    = 'restart'

(dom0) # xm create test-centos-7.cfg

Test your system

Connect to this new domU, update the packages and ensure that the links /boot/vmlinuz and /boot/initramfs are up-to-date

(domU) # ls -la /boot
(domU) # yum update
(domU) # ls -la /boot