Xen/Debian

From Segfault
< Xen
Jump to: navigation, search

Installation

apt-get install xen-system-amd64 grub-xen-host bridge-utils xen-tools qemu-system-x86

After that, the GRUB configuration should look like this:

$ grep -A6 Xen /boot/grub/menu.lst
title           Xen 3.2
root            (hd0,0)
kernel          /xen-3.2.gz
module          /vmlinuz-2.6.26-2-xen-amd64 root=/dev/mapper/vg01-xen--root ro console=tty0
module          /initrd.img-2.6.26-2-xen-amd64

Or, for GRUB2:

$ cat /boot/grub/grub.cfg
[...]
submenu "Xen 4.1-amd64" {
menuentry 'Debian GNU/Linux, with Xen 4.1-amd64 and Linux 3.7-trunk-amd64' \
          --class debian --class gnu-linux --class gnu --class os --class xen {
       insmod part_gpt
       insmod ext2
       set root='(hd0,gpt1)'
       search --no-floppy --fs-uuid --set=root 59c3d59a-36de-457d-a688-bd0b1c7fa9c0
       echo    'Loading Xen 4.1-amd64 ...'
       multiboot       /boot/xen-4.1-amd64.gz placeholder
       echo    'Loading Linux 3.7-trunk-amd64 ...'
       module  /boot/vmlinuz-3.7-trunk-amd64 placeholder root=UUID=59c3d59a-36de-457d-a688-bd0b1c7fa9c0 ro
       echo    'Loading initial ramdisk ...'
       module  /boot/initrd.img-3.7-trunk-amd64
}

To prioritize the Xen HV over the other kernels, we can use dpkg-divert

dpkg-divert --divert /etc/grub.d/09_linux_xen --rename /etc/grub.d/20_linux_xen

This will put the Xen HV ahead of other images:

$ ls -1 /etc/grub.d/
00_header
05_debian_theme
09_linux_xen
10_linux
30_os-prober
40_custom
41_custom

Don't forget to update /boot/grub/grub.cfg:

update-grub

Set the Xen toolstack in /etc/default/xen

TOOLSTACK=xl
  • xl was named "xm" before
  • libvirt/virsh tries to be virtualization technology agnostic and is used in KVM extensivly
  • XAPI/xe is used for XenServer (the commercial version of Xen/XCP) and XCP (Xen Cloud Platform)

Usage

Prepare LVM:

$ pvcreate /dev/sdc                              # Replace sdc with your target disk
$ vgcreate vg0 /dev/sdc
$ vgs
VG   #PV #LV #SN Attr   VSize VFree
vg0    1   4   0 wz--n- 4.00g    0

xen-tools

To install a Debian distribution, we can use xen-create-image (from the xen-tools package). The following will install Debian/wheezy on /dev/vg0/xen-debian0-disk

xen-create-image --hostname xen-debian0 --ip 10.0.0.10 --gateway=10.0.0.1 --netmask 255.255.255.0 \
                 --vcpus 2 --memory 128m --noswap --pygrub --fs ext4 \
                 --dir /mnt/lv0 --lvm vg0 --size 1g --dist wheezy

Available distributions are configured in /usr/lib/xen-tools/:

$ ls -1d /usr/share/xen-tools/*.d | tail
/usr/share/xen-tools/precise.d
/usr/share/xen-tools/quantal.d
/usr/share/xen-tools/raring.d
/usr/share/xen-tools/sarge.d
/usr/share/xen-tools/saucy.d
/usr/share/xen-tools/sid.d
/usr/share/xen-tools/squeeze.d
/usr/share/xen-tools/stable.d
/usr/share/xen-tools/testing.d
/usr/share/xen-tools/wheezy.d
[...]

Note: during installation, debootstrap will download the needed package files from the installation source specified in sources.list. Depending on the connection speed / distribution, this can take a long time. We can't install from an ISO image directly[1], but did the following instead:

mount -t iso9660 -o ro debian-7.1.0-amd64-netinst.iso /mnt/cdrom

Point xen-tools to the CDROM:

$ grep ^mirror /etc/xen-tools/xen-tools.conf
mirror = file:/mnt/cdrom/debian

Now, while the netinst image contained all the package files, it was missing the Release.gpg files and debootstrap would fail in the process. As a workaround, we created a debootstrap wrapper:

$ cat /usr/local/sbin/debootstrap.sh
#!/bin/sh
debootstrap --no-check-certificate --no-check-gpg $@

Let's use this wrapper for xen-create-image now:

xen-create-image --hostname xen-deb0 --dhcp --vcpus 2 --memory 128m --noswap \
                 --pygrub --fs ext4 --dir /mnt/xen/lv0 --lvm vg0 --size 1g --keep \
                 --dist wheezy --debootstrap-cmd=/usr/local/sbin/debootstrap.sh

If all goes well, we now have:

$ lvs
 LV               VG   Attr     LSize    Pool Origin Data%  Move Log Copy%  Convert
 xen-debian0-disk vg0  -wi-a--- 1.00g

$ xen-list-images
Name: xen-debian0
Memory: 128
IP: 10.0.0.10

The configuration is stored in /etc/xen/xen-debian0.cfg:

name            = 'xen-debian0'
bootloader      = '/usr/lib/xen-4.1/bin/pygrub'
# extra         = 'clocksource=jiffies'
vcpus           = '2'
memory          = '128'
root            = '/dev/xvda1 ro'
disk            = [
                  'phy:/dev/vg0/xen-debian0-disk,xvda1,w',
                  ]
vif             = [ 'ip=10.0.0.10, mac=00:10:1E:19:0A:11' ]
on_poweroff     = 'destroy'
on_reboot       = 'restart'
on_crash        = 'restart'

If something is missing in our new Xen image, we can try to fix it manually:

mount -t ext4 /dev/vg0/xen-debian0-disk /mnt/
mount -t devtmpfs udev /mnt/dev/ && mount -t devpts devpts /mnt/dev/pts && mount -t proc proc /mnt/proc/ && mount -t sysfs sysfs /mnt/sys/
chroot /mnt
> apt-get -o APT::Install-Recommends=false install linux-image-cloud-amd64 dropbear xenstore-utils                                       # Or whatever was missing :-)

Umount, and then try again to start:

umount /mnt/{{{dev/pts,dev},proc,sys},}

Links

References