Outils personnels

Xen Installation

De wikiGite

tuto mis à jour pour lenny : http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch

INSTALLATION

sur debian 5.0.7

La machine est-elle compatible ?

grep -e "svm" -e "vmx" "/proc/cpuinfo" # support virtualisation
grep "pae" /proc/cpuinfo # support Physical Address Extension (up to 64Gb RAM on 32bit system)

Installer le support ioemu

apt-get -y install xen-ioemu-3.0.3-1

On va sûrement utiliser virt-manager pour la gestion des VMs. On installe libvirt :

apt-get install libvirt-bin virtinst

On installe tout de même xen-tools, même si on utilisera virsh, ça ne mange pas de pain

uname --machine # réponse "x86_64" ou "i686", pour savoir quels paquets installer
apt-get -y install xen-linux-system-2.6.26-2-xen-686 xen-hypervisor-i386 xen-utils-3.2-1 xen-tools bridge-utils

Modifier /boot/grub/menu.lst. Verifier que le noyau chargé sera bien xen, et ajouter max_loop=64 à la ligne kernel

title           Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.26-2-xen-686
root            (hd0,0)
kernel          /boot/xen-3.2-1-i386.gz
module          /boot/vmlinuz-2.6.26-2-xen-686 root=/dev/md0 ro console=tty0 max_loop=64
module          /boot/initrd.img-2.6.26-2-xen-686

Ajouter également ce paramètre à lopp dans /etc/modules

loop max_loop=64

Réseau : on va fonctionner en bridge. Dans /etc/xen/xend-config.sxp, commenter :

(network-script network-dummy)

et décommenter

(network-script network-bridge)

Note : S'il y a plusieurs interfaces sur la machine, forcer l'interface de bridge par

(network-script 'network-bridge netdev=eth1')

Puisqu'on est dans xend-config.sxp, changer : (xend-unix-server yes)

Reboot.

uname -a

pour vérifier qu'on a bien redémarré sur le noyau xen.

Vérifier par ifconfig que l'interface peth0 est créée. L'interface eth0 existe toujours avec son IP, mais ce n'est plus une interface physique (il manque une ligne du style "Interruption:20 Mémoire:f2400000-f2420000" à l'ifconfig, ligne qui est passée sur peth0).

xm list

doit indiquer que le dom0 (l'hôte des machines virtuelles) est démarré, et

xm info

donne le détail

CREATION DES VM

Création VM

dd if=/dev/zero of=/var/vm/xenguest.img bs=1024k seek=6144 count=0 # disk 6Go

Création d'un fichier de configuration /etc/xen/XenHVMGuest.cfg

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

#----------------------------------------------------------------------------
# Kernel image file.
kernel = "/usr/lib/xen-3.2-1/boot/hvmloader"

# The domain build function. HVM domain uses 'hvm'.
builder='hvm'

# Initial memory allocation (in megabytes) for the new domain.
#
# WARNING: Creating a domain with insufficient memory may cause out of
#          memory errors. The domain needs enough memory to boot kernel
#          and modules. Allocating less than 32MBs is not recommended.
memory = 128

# 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

# A name for your domain. All domains must have different names.
name = "ExampleHVMDomain"

# 128-bit UUID for the domain.  The default behavior is to generate a new UUID
# on each call to 'xm create'.
#uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9"

#-----------------------------------------------------------------------------
# The number of cpus guest platform has, default=1
#vcpus=1

# 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

# List of which CPUS this domain is allowed to use, default Xen picks
#cpus = ""         # leave to Xen to pick
#cpus = "0"        # all vcpus run on CPU0
#cpus = "0-3,5,^1" # run on cpus 0,2,3,5

# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
#vif = [ 'type=ioemu, mac=00:16:3e:00:00:11, bridge=xenbr0, model=ne2k_pci' ]
# type=ioemu specify the NIC is an ioemu device not netfront
vif = [ 'type=ioemu, bridge=xenbr0' ]

#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
# Each disk entry is of the form phy:UNAME,DEV,MODE
# where UNAME is the device, DEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write.

#disk = [ 'phy:hda1,hda1,r' ]
#disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ]
disk = [ 'file:/var/vm/XenGuest.img,hda,w', 'file:/var/vm/isos/BlueOnyx-5.5-20100519.iso,hdc:cdrom,r' ]

#----------------------------------------------------------------------------
# Configure the behaviour when a domain exits.  There are three 'reasons'
# for a domain to stop: poweroff, reboot, and crash.  For each of these you
# may specify:
#
#   "destroy",        meaning that the domain is cleaned up as normal;
#   "restart",        meaning that a new domain is started in place of the old
#                     one;
#   "preserve",       meaning that no clean-up is done until the domain is
#                     manually destroyed (using xm destroy, for example); or
#   "rename-restart", meaning that the old domain is not cleaned up, but is
#                     renamed and a new domain started in its place.
#
# The default is
#
#   on_poweroff = 'destroy'
#   on_reboot   = 'restart'
#   on_crash    = 'restart'
#
# For backwards compatibility we also support the deprecated option restart
#
# restart = 'onreboot' means on_poweroff = 'destroy'
#                            on_reboot   = 'restart'
#                            on_crash    = 'destroy'
#
# restart = 'always'   means on_poweroff = 'restart'
#                            on_reboot   = 'restart'
#                            on_crash    = 'restart'
#
# restart = 'never'    means on_poweroff = 'destroy'
#                            on_reboot   = 'destroy'
#                            on_crash    = 'destroy'

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

#============================================================================

# New stuff
device_model = '/usr/' + arch_libdir + '/xen-3.2.1/bin/qemu-dm'

#-----------------------------------------------------------------------------
# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) 
# default: hard disk, cd-rom, floppy
#boot="cda"

#-----------------------------------------------------------------------------
#  write to temporary files instead of disk image files
#snapshot=1

#----------------------------------------------------------------------------
# enable SDL library for graphics, default = 0
sdl=0

#----------------------------------------------------------------------------
# enable VNC library for graphics, default = 1
vnc=1

#----------------------------------------------------------------------------
# address that should be listened on for the VNC server if vnc is set.
# default is to use 'vnc-listen' setting from /etc/xen/xend-config.sxp
#vnclisten="127.0.0.1"

#----------------------------------------------------------------------------
# set VNC display number, default = domid
#vncdisplay=1

#----------------------------------------------------------------------------
# try to find an unused port for the VNC server, default = 1
#vncunused=1

#----------------------------------------------------------------------------
# enable spawning vncviewer for domain's console
# (only valid when vnc=1), default = 0
vncconsole=1

#----------------------------------------------------------------------------
# set password for domain's VNC console
# default is depents on vncpasswd in xend-config.sxp
vncpasswd=

#----------------------------------------------------------------------------
# no graphics, use serial port
#nographic=0

#----------------------------------------------------------------------------
# enable stdvga, default = 0 (use cirrus logic device model)
stdvga=0

#-----------------------------------------------------------------------------
#   serial port re-direct to pty deivce, /dev/pts/n 
#   then xm console or minicom can connect
serial='pty'

#-----------------------------------------------------------------------------
#   Qemu Monitor, default is disable
#   Use ctrl-alt-2 to connect
#monitor=1

#-----------------------------------------------------------------------------
#   enable sound card support, [sb16|es1370|all|..,..], default none
#soundhw='sb16'

#-----------------------------------------------------------------------------
#    set the real time clock to local time [default=0 i.e. set to utc]
#localtime=1

#-----------------------------------------------------------------------------
#    set the real time clock offset in seconds [default=0 i.e. same as dom0]
#rtc_timeoffset=3600

#-----------------------------------------------------------------------------
#    start in full screen
#full-screen=1   

#-----------------------------------------------------------------------------
#   Enable USB support (specific devices specified at runtime through the
#                       monitor window)
#usb=1

#   Enable USB mouse support (only enable one of the following, `mouse' for
#                             PS/2 protocol relative mouse, `tablet' for
#                             absolute mouse)
#usbdevice='mouse'
#usbdevice='tablet'

#-----------------------------------------------------------------------------
#   Set keyboard layout, default is en-us keyboard. 
#keymap='ja'

Les lignes importantes :

name = "XenHVMGuest1"

pour lancer une iso au premier démarrage

disk = [ 'file:/var/vm/XenGuest.img,hda,w', 'file:/var/vm/isos/BlueOnyx-5.5-20100519.iso,hdc:cdrom,r' ]

Après l'install, on changera par

disk = [ 'file:/var/vm/xenguest.img,hda,w', 'phy:/dev/cdrom,hdc:cdrom,r' ]

On préferera VNC à SDL qui est moins flexible et cause des risques de crash en cas de fermeture intempestive de la console

vnc = 1
sdl = 0

Et dans ce cas il faut activer la console du DomU, elle ne l'est pas par défaut

vncconsole=1

Définir la séquence de boot (d=cdrom, c=harddisk)

boot="dc"

Création de la HVM

xm create /etc/xen/XenHVMGuest.cfg

La console VNC est accessible par le port VNC 5900 + l'ID du domaine

vncviewer server_xen.domain.tld:5901

VIRT-MANAGER

Installer virtmanager sur le poste distant. Le plus simple et plus sécurisé est d'échanger les clés SSH avec le serveur, et de connecter virt-manager en "Tunnel distant à travers SSH". On peut aussi utiliser TLS (voir création des certificats avec certtool, copie des .pem vers le client, configuration de libvirtd) mais dans ce cas ajouter "-l" à libvirtd_opts dans /etc/default/libvirt-bin pour que libvirt écoute en TCP.

Virt-manager permet de créer des images qcow2, et même vmdk ou vpc!

A ETUDIER

  • DRBD pour répliquer les FS entre 2 machines, et Xen peut migrer d'un à l'autre

(voir config migration dans xend-config.sxp)

  • xenwatch à voir
  • Certain tutos indique de créer explicitement une interface bridge dans /etc/network/interfaces. Est-ce que ça apporte quelque chose ? :
auto xenbr0
iface  xenbr0 inet static
   address 192.168.0.15
   netmask  255.255.255.0
   network 192.168.0.0
   broadcast 192.168.0.255
   gateway 192.168.0.63
   dns-nameservers 192.168.0.2 192.168.0.3
   bridge_ports eth0
   bridge_maxwait 0
   bridge_hello 0
   bridge_fr 0

Note : l'adresse IP EST LA MEME QUE ETH0

COMMANDES

xm top : ressources utilisées

TROUBLESHOUTING

  • xenconsole: Could not read tty from store: No such file or directory

PV (paravirtual): Verifier (ps -ef) que le service xenconsole est lancé, relancer éventuellement xend HVM (hardware, full virtual): les hvm ne gère pas la console xen, elles ne sont accessibles que par vnc ou sdl. Il ne faut donc pas ajouter l'option "-c" au xm create !

  • Error: Device 0 (vif) could not be connected. Hotplug scripts not working.

Verifier que l'option max_loop=64 a bien été ajoutée à /boot/grub/menu.lst et /etc/modules