Alors aujourd’hui c’est ma fête et à quoi j’ai droit ? Installer deux VM Windows. Merci, vraiment merci. Donc çà ne méritera pas plus qu’un article type copié/collé tout bête et deux / trois images pour mettre de la couleur. Allez, la mission du jour, l’installation d’un serveur Xen 4 sous Debian 6 / Squeeze et la configuration d’une VM paravirtualisée sous Windows Server 2008.

Installation des packages

# apt-get install linux-image-2.6.32-5-xen-amd64 xen-hypervisor-4.0-amd64 xen-qemu-dm-4.0 genisoimage

Il faut évidemment installer le noyau correspondant à l’architecture matérielle de votre serveur.

# dpkg -l | grep '^ii' | grep xen
ii  libxenstore3.0                      4.0.1-4                      Xenstore communications library for Xen
ii  linux-image-2.6.32-5-xen-amd64      2.6.32-41squeeze2            Linux 2.6.32 for 64-bit PCs, Xen dom0 support
ii  xen-hypervisor-4.0-amd64            4.0.1-4                      The Xen Hypervisor on AMD64
ii  xen-qemu-dm-4.0                     4.0.1-2+squeeze1             Xen Qemu Device Model virtual machine hardware emulator
ii  xen-utils-4.0                       4.0.1-4                      XEN administrative tools
ii  xen-utils-common                    4.0.0-1                      XEN administrative tools - common files
ii  xenstore-utils                      4.0.1-4                      Xenstore utilities for Xen

Configuration de GRUB

Pour booter sur le noyau xenifié (dom0), l’ordre de détection du noyau Xen par Grub doit être modifié afin que l’entrée correspondante dans le menu de démarrage soit positionnée en premier :

# dpkg-divert --divert /etc/grub.d/08_linux_xen  --rename /etc/grub.d/20_linux_xen
# nano /etc/default/grub

Grub se chargeant de détecter les OS installés, cette fonction est à proscrire pour ne pas polluer le menu de démarrage :

# Disable OS prober to prevent virtual machines on logical volumes from appearing in the boot menu.
GRUB_DISABLE_OS_PROBER=true

L’installation peut être enfin être lancée avec la nouvelle configuration :

# update-grub

Configuration de l’hyperviseur Xen

La configuration globale de Xen est à adapter pour faire joujou (l’accès réseau serait inopérant) :

# nano /etc/xen/xend-config.sxp
(network-script 'network-bridge bridge=eth0 antispoof=yes')
(vif-script vif-bridge)
(dom0-min-mem 1024)
(enable-dom0-ballooning yes)
(keymap 'fr')
# shutdown -r now

Suite au redémarrage, on vérifie que le noyau Xen est actif, que l’hyperviseur de Xen est chargé et que le bridge réseau eth0 et son interface physique peth0 (conventions Debian) sont présents :

# uname -a
Linux manjula 2.6.32-5-xen-amd64 #1 SMP Thu Mar 22 21:14:26 UTC 2012 x86_64 GNU/Linux
# xm info
host                   : manjula
release                : 2.6.32-5-xen-amd64
version                : #1 SMP Thu Mar 22 21:14:26 UTC 2012
machine                : x86_64
nr_cpus                : 8
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 2
cpu_mhz                : 2533
hw_caps                : bfebfbff:28100800:00000000:00001b40:0098e3fd:00000000:00000001:00000000
virt_caps              : hvm hvm_directio
total_memory           : 16343
free_memory            : 613
node_to_cpu            : node0:0-7
node_to_memory         : node0:613
node_to_dma32_mem      : node0:609
max_node_id            : 0
xen_major              : 4
xen_minor              : 0
xen_extra              : .1
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.4.5 (Debian 4.4.5-8)
cc_compile_by          : waldi
cc_compile_domain      : debian.org
cc_compile_date        : Thu Jun  9 18:38:03 UTC 2011
xend_config_format     : 4
# brctl show

Configuration de la VM Windows

Le stockage des VM repose sur des volumes logiques LVM. Un volume de 20 Go devrait être suffisant pour cette VM (qui a dit qu’on faisait rien de toute façon sous Windows ?!) :

# lvcreate -L20G -npria vg

Au tour ensuite du fichier de configuration de la VM ; ici le serveur s’appellera pria :

# nano /etc/xend/pria
name = 'pria'
kernel = '/usr/lib/xen-4.0/boot/hvmloader'
builder = 'hvm'
device_model = '/usr/lib/xen-4.0/bin/qemu-dm'

memory = 2048
shadow_memory = 8
vcpus = 1
pae = 1
acpi = 1
apic = 1

vif = [ 'bridge=eth0' ]

disk = [ 'phy:/dev/vg/xen_pria,hda,w','file:/opt/win2008.iso,hdc:cdrom,r','file:/opt/win2008_drivers.iso,hdd:cdrom,r' ]
boot='dc'

usbdevice = 'tablet'

vnc=1
vnclisten = '0.0.0.0'
vncunused = 0
vncconsole = 1
vncviewer = 0
sdl = 0

stdvga = 0
serial = 'pty'
ne2000 = "0"

on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

J’utilise deux lecteurs CD : un pour l’image d’installation de l’OS et l’autre pour les drivers paravirtualisés. Cela évitera 1 redémarrage … Les drivers paravirtualisés ont pour intérêt de faire dialoguer directement le domU avec l’hyperviseur Xen et non plus avec le dom0. Pour Windows, des drivers GPL sont disponibles ici :

http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers

Seuls des packages MSI étant proposés, il faut créer une ISO CD avec genisoimage :

# genisoimage -o win2008_drivers.iso gplpv_Vista2008x32_signed_0.11.0.356.msi

Les ISO nécessaires sont donc copiées dans /opt. Pour mémoire, l’option usbdevice permet de corriger le problème de placement du pointeur de la souris dans la console VNC.

Installation de Windows

Pour débuter l’installation de Windows, un accès VNC est requis. Pour ce faire, je lance une redirection locale par SSH du port 5900 distant afin d’accéder à la console VNC de la VM :

$ ssh root@manjula -N -L 5900:127.0.0.1:5900

Un client VNC local est ensuite lancé depuis mon poste sur localhost:5900.

Installation des drivers paravirtualisés

L’ISO des drivers correspond donc au deuxième lecteur CD que je monte dans la VM, il reste à lancer le package MSI d’installation.

Une fois redémarré, une nouvelle carte réseau fait son apparition ; il s’agit de la carte paravirtualisée. La VM doit être reconfigurée pour utiliser cette carte réseau par défaut, ce qui désactivera la seconde carte (non paravirtualisée). Les deux lecteurs CD peuvent aussi à cet instant être supprimés :

vif = [ 'bridge=eth0,type=paravirtualised' ]
disk = [ 'phy:/dev/vg/xen_pria,hda,w' ]

Une fois l’adressage réseau effectué, l’accès VNC est évidemment à désactiver au profit de l’utilisation de l’accès RDP.