Xen Sur Debian 7

De Sn4kY
Aller à : navigation, rechercher

Installation de Xen

Installation des prérequis :

aptitude install -y xen-system xen-tools

Si vous êtes en grub2 , il est conseillé de réaliser les opérations suivantes, afin de modifier l'ordre de détection des noyaux pour que les noyaux XEN soient considérés en premier, et de désactiver l'OS_PROBER, pour éviter d'avoir autant d'entrées dans le fichier que de VM, dans le cas d'une install avec des volumes logiques (LVM)

mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux
echo "" >> /etc/default/grub
echo "# Disable OS prober to prevent virtual machines on logical volumes from appearing in the boot menu." >> /etc/default/grub
echo "GRUB_DISABLE_OS_PROBER=true" >> /etc/default/grub
update-grub2

Il suffit ensuite de rebooter sur le kernel Xen, après avoir modifié le fichier de configuration pour activer le réseau Xen (voir plus bas)

Pour vérifier que l'hyperviseur est fonctionnel :

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   249     4     r-----     14.9

(si rien ne s'affiche, c'est que l'hyperviseur n'est pas démarré, kernel ou module Xen manquant ?)

Ou

# xm info
host                   : xen1-test
release                : 3.2.0-4-amd64
version                : #1 SMP Debian 3.2.46-1
machine                : x86_64
nr_cpus                : 8
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 2
cpu_mhz                : 3400
hw_caps                : bfebfbff:28100800:00000000:00007f40:73bae3ff:00000000:00000001:00000281
virt_caps              : hvm hvm_directio
total_memory           : 32681
free_memory            : 724
free_cpus              : 0
xen_major              : 4
xen_minor              : 1
xen_extra              : .4
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : unavailable
xen_commandline        : placeholder
cc_compiler            : gcc version 4.7.2 (Debian 4.7.2-5)
cc_compile_by          : carnil
cc_compile_domain      : debian.org
cc_compile_date        : Sun May  5 14:44:49 UTC 2013
xend_config_format     : 4

Réseau

Pour du network-bridge

Xen recommande de ne plus utiliser le network-script pour activer le bridge.

Nous allons donc créer celui-ci manuellement.

Tout d'abord, il faut renommer eth0 en peth0 ([1])

Éditer /etc/udev/rules.d/70-persistent-net.rules pour changer le nom de l'interface physique en peth0.

Éditer /etc/network/interfaces :

auto eth0
iface eth0 inet static
       bridge_ports peth0
       address 10.X.X.X
       netmask 255.255.255.0
       gateway 10.X.X.X

Par la suite, les VM doivent être créées dans le bridge eth0 :

vif = [ 'bridge=eth0,mac=00:16:3e:xx:xx:xx' ]  # (vif mac setup works only with the beginning of 00:16:3e!, change xx:xx:xx to valid mac-address characters, 0-9 and a-f)

Pour du network-nat

On désactive le vif-script pour activer les scripts relatifs au NAT

sed -i 's/^(vif-script vif-bridge)/#(vif-script vif-bridge)/g' /etc/xen/xend-config.sxp
sed -i 's/^#(network-script network-nat)/(network-script network-nat)/g' /etc/xen/xend-config.sxp
sed -i 's/^#(vif-script     vif-nat)/(vif-script     vif-nat)/g' /etc/xen/xend-config.sxp

Il est nécessaire de redémarrer au moins le démon xend pour prendre en compte les modifications

/etc/init.d/xend restart

creation de VMs

Créations automatiques, Debian Way

On va utiliser le script xen-create-image, écrit en perl, et fourni par le paquet xen-tools.

Il est conseillé de lire la documentation fournie, ou de faire un coup de --help, il y a vraiment beaucoup d'options.

Note particulière : si vous n'utilisez pas --mirror= le script utilisera le miroir présent dans votre /etc/apt/sources.list

Avec LVM

Deboostrape une Squeeze, utilise un LVM (le VG est MyVgName), indique que le bridge a utiliser est xenbr1

xen-create-image --vcpu=1 --nohosts --install-method=debootstrap --dist=squeeze --genpass=0 --password=kikoolol \
 --arch=amd64 --pygrub --memory=512M --swap=128M --fs=ext4 --size=5G --lvm=MyVgName \
 --hostname=MyVmName \
 --bridge=xenbr1 --broadcast=10.10.0.255 --gateway=10.0.0.1 --netmask=255.255.255.0 --nameserver="10.0.0.1" --ip=10.10.0.10

Cet exemple utilisera le noyau recompilé disponible sur le dom0, en IP statique, debootstrap une Debian Squeeze i386 via un apt-cacher [2]

xen-create-image --vcpus=1 --nohosts --install-method=debootstrap --dist=squeeze --genpass=0 --password=kikoolol \
--arch=i386 --initrd=/boot/initrd.img-2.6.32-i386-bigmem-xenu --kernel=/boot/vmlinuz-2.6.32-i386-bigmem-xenu \
--memory=700M --noswap --fs=ext3 --size=12G --lvm=MyVgName \
--mirror=http://172.16.200.2:3142/ftp2.fr.debian.org/debian/ --hostname=MyVmName \
--broadcast=172.16.255.255 --gateway=172.16.254.254 --netmask=255.255.0.0 --nameserver="172.16.254.254" --ip=172.16.200.51

PyGrub, LVM2, 64 bits

xen-create-image --vcpus=1 --nohosts --install-method=debootstrap --dist=squeeze --genpass=0 --password=tatayoyo \
--arch=amd64 --pygrub \
--memory=700M --noswap --fs=ext3 --size=12G --lvm=MyVgName \
--mirror=http://ftp2.fr.debian.org/debian/ --hostname=MyVmName \
--broadcast=172.16.255.255 --gateway=172.16.254.254 --netmask=255.255.0.0 --nameserver="172.16.254.254" --ip=172.16.200.51

Cet exemple va debootstraper une Ubuntu Lucid Lynx en AMD64 sans apt-cacher

xen-create-image --vcpus=1 --nohosts --install-method=debootstrap --dist=lucid --genpass=0 --password=kikoolol \
--arch=amd64 --pygrub \
--memory=700M --noswap --fs=ext3 --size=5G --lvm=MyVgName \
--hostname=lucid --mirror=http://archive.ubuntu.com/ubuntu/ \
--broadcast=10.0.0.254 --gateway=10.0.0.128 --netmask=255.255.255.0 --nameserver="10.0.0.128" --ip=10.0.0.3

n.b. : cet exemple a debootsrapé une version "serveur" de lucid

n.b. : avec la même methode et en souhaitant debootstraper maverick, impossible de booter sur xvda1, voir #Impossible_de_booter_sur_xvda1

Sans LVM (fichiers .img)

Debootstrap (via apt-cacher) d'une Lenny en amd64 en utilisant pygrub, avec 2Go de disque, 512Mo de swap (images stockée dans /home/xen-disks/domains/<hostname>/), IP DHCP. Le kernel et l'initrd seront physiquement présent dans le /boot de la VM. A noter que les xen-tools fournis avec Squeeze génèrent par défaut un password root qui vous sera fourni à la fin de l'install (ou dans le fichier de log de la création : /var/log/xen-tools/<hostname>.log)

xen-create-image --vcpus=2 --nohosts --install-method=debootstrap --dist=lenny \
--arch=amd64 --pygrub \
--memory=700M --size=2G --swap=512M --fs=ext4 --dir=/home/xen-disks \
--hostname=MyVmLenny --mirror=http://172.16.200.2:3142/ftp2.fr.debian.org/debian/ \
--dhcp

Créations manuelles

Linux

Windows

Prérequis
Installer qemu :

aptitude install xen-qemu-dm

Puis, il vous faut disposer d'un CD/DVD ou d'une ISO de la version de Windows que vous souhaitez installer.
Vous pouvez installer directement depuis le CD/DVD, ou générer une ISO de celui ci de cette manière :

dd if=/dev/cdrom of=/path/to/ISO/windows_version.iso

Il vous faudra remplacer /dev/cdrom par le vrai nom de votre lecteur CD/DVD, et le démonter (si automount est passé par là)

Création du disque
Là encore, 2 méthodes pour la création du disque, la plus intéressante en terme de performance reste tout de même via LVM :

lvcreate -L 20G -n win2008-disk MyVgName

pour créer un volume de 20G nommé win2008-disk dans le VG MyVgName.
via images disques en attribuant tout l'espace disque (moins de fragmentation possible) :

dd if=/dev/zero of=/path/to/IMG/win2008-disk.img bs=1M count=20480


Configuration de XEN pour VNC
Dans le fichier de config /etc/xen/xend-config.sxp il faut activer :

(vnc-listen '0.0.0.0')

(ou l'interface sur laquelle l'hyperviseur devra écouter)

(keymap 'fr')

Pour activer un clavier Français.

Configuration du premier démarrage
On va créer le fichier /etc/xen/win2008.cfg. Cet exemple est pour un mode BRIDGE :

import os, re
arch = os.uname()[4]
if re.search('64', arch):
   arch_libdir = 'lib64'
else:
   arch_libdir = 'lib'

kernel = '/usr/lib/xen-4.1/boot/hvmloader'
builder = 'hvm'
memory = 2050
# Shadow pagetable memory for the domain, in MB.
# If not explicictly set, xend will pick an appropriate value.
# Should be at least 2KB per MB of domain memory, plus a few MB per vcpu.
shadow_memory = 8
# The number of cpus guest platform has, default=1
vcpus=2

# Enable/disable HVM guest PAE, default=1 (enabled)
#pae=1

# Enable/disable HVM guest ACPI, default=1 (enabled)
#acpi=1

# Enable/disable HVM APIC mode, default=1 (enabled)
# Note that this option is ignored if vcpus > 1
#apic=1
name = "win2008"

# Bridge name must be your bridge name (possibly eth0)
vif = [ 'type=ioemu, bridge=xenbr0' ]
disk = [ 'phy:/dev/MyVgName/win2008-disk,hda,w', 'file:/home/ISO/WIN2008R2_x86-64_FR_STD.ISO,hdc:cdrom,r' ]
device_model = '/usr/' + arch_libdir + '/xen-4.0/bin/qemu-dm'

#-----------------------------------------------------------------------------
# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d)
# default: hard disk, cd-rom, floppy
boot = 'dc'
sdl = 0
vnc = 1
vncconsole = 1
vncpasswd = 'MyVNCpasswd'

serial = 'pty'
usbdevice = 'tablet'

n.b. : on active dans un premier temps VNC, pour l'installation. On veillera bien à le désactiver après avoir activé le RDP (Prise en Main à Distance/Remote Desktop Protocol).
Pour un mode NAT il faut modifier la ligne vif = par :

vif  = [ 'type=ioemu, vifname=wif_win2008, bridge=10.0.1.254/24' ]

Toujours uniquement pour le NAT, il faut modifier le script hotplug fourni avec qemu /etc/xen/scripts/qemu-ifup en

#!/bin/sh
##############ORIG SCRIPT###############
#echo -c 'config qemu network with xen bridge for '
#echo $*
#
#ifconfig $1 0.0.0.0 up
#brctl addif $2 $1
########################################

# $1 - tapx.x name
# $2 - bridge domain config vif option (vif = ['type=ioemu, bridge=$2'])
echo 'config qemu network with xen interface ' $*
# configure the tapx.x interface to have the ip provided in the bridge option
ip link set "$1" up arp on
ip addr add $2 dev "$1"
# add a route for the Qemu private network to go to the tapx.x interface
ip_only=echo $2 | awk -F/ '{print $1}'
route add $2 dev $1 src $ip_only
# make the tapx.x interface rewrite the MAC address for the forwarded virtual machines packages
# this will make tapx.x interface act as a gateway
echo 1 >/proc/sys/net/ipv4/conf/$1/proxy_arp
# add the iptables rules, in case firewall is enabled, to allow all connection in/out of the tapx.x interface
iptables -I FORWARD -m physdev --physdev-in "$1" -j ACCEPT 2>/dev/null
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out "$1" -j ACCEPT 2>/dev/null


Boot de la VM

xm create -c /etc/xen/vm.cfg

L'option -c permet de se connecter à la console de la VM à la création de celle-ci (inutile sur une VM Windows).
http://img.sn4ky.net/wiki/xen_lenny.JPG

Si VNC est activé, vous devriez pouvoir vous connecter à l'interface de la VM en vous connectant sur l'IP de l'hyperviseur, le port par défaut étant 5900, avec UltraVNC par exemple.

http://img.sn4ky.net/wiki/xen_win2008.JPG

Sources