Xen Sur Debian 7
Sommaire
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