Xen

Da OZiOSi.

Indice

Appunti su Xen

Hardware DL320 G5 (Dual Xeon 3200 dualcore con supporto VT-x)
Ram: 4GB
OS: Gentoo 2006.1

Per l'installazione del dom0 il riferimento principale e` stato:
Xen and Gentoo su gentoo wiki
make.conf di base

CFLAGS="-O2 -march=nocona -pipe"
CHOST="x86_64-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
USE="nptl multilib sdl" 
MAKEOPTS="-j9"
LANG="it_IT"
LINGUAS="it"

Il kernel per i domU e` lo stesso di dom0 ma nella sezione "Xen" sono abilitati i frontend drivers e non i backend.
La configurazione finale prevede tre NIC divisi in questa maniera:

  • eth0 per le macchine virtuali che forniscono servizi in LAN
  • eth1 per le macchine virtuali che forniscono servizi verso Internet
  • eth2 per gestire dom0

Rete

eth0 ed eth1 non hanno IP in dom0, mentre eth2 non e` visibile alle domU.
La configurazione prevede due bridge che vengono creati da uno script network-bridge che richiama l'orginale network-bridge passando i parametri che ci occorrono.
Il vecchio network-bridge e` stato rinominato in network-bridge.xen, quello nuovo contiene:

#!/bin/sh
# Exit if anything goes wrong.
set -e
#
# First arg is the operation.
OP=$1
shift
#
script=/etc/xen/scripts/network-bridge.xen
#
case ${OP} in
 start)
       $script start vifnum=0 bridge=xbr0 netdev=eth0
       $script start vifnum=1 bridge=xbr1 netdev=eth1
       ;;
   stop)
       $script stop vifnum=0 bridge=xbr0 netdev=eth0
       $script stop vifnum=1 bridge=xbr1 netdev=eth1
       ;;
   status)
       $script status vifnum=0 bridge=xbr0 netdev=eth0
       $script status vifnum=1 bridge=xbr1 netdev=eth1
       ;;
   *)
      echo 'Comando sconosciuto: ' ${OP}
      echo 'Utilizza: start, stop, status'
      exit 1
esac

in questo modo posso collegare le macchine per la LAN su xbr0 e quello per internet su xbr1 esempio di una macchina in lan:

kernel = '/boot/vmlinux-2.6.16-r1-xenU'
...
vif = [ 'mac=00:16:3e:01:01:02, bridge=xbr0' ]
...
pci=['0x:0x.0', '0y:0x.0']

esempio di una macchina verso internet:

kernel = "/boot/vmlinux-2.6.16-r1-xenU"
...
vif = [ 'mac=00:16:3e:01:01:03,bridge=xbr1' ]
...

gli IP vengono assegnati sempre tramite DHCP.

PCI

Il "pci=['0x:0x.0']" serve per dare accesso diretto a quel domU ad un controller SCSI aggiuntivo, per farlo in gru.conf va aggiunti il parametro pciback.hide=(0x:0x.0) da passare al kernel in questo modo:

title = Gentoo Xen 3.0.2
root (hd0,0)
kernel (hd0,0)/xen.gz 
module (hd0,0)/vmlinux-2.6.16-r1-xen0 root=/dev/cciss/c0d0p5 pciback.hide=(0x:0x.0)('0y:0x.0')

dopo lunghe tribolazioni l'avvio del kernel per dom0 e` diventato

title = Xen 3
root (hd0,0)
kernel (hd0,0)/xen.gz
module (hd0,0)/vmlinux-2.6.16-r1-xen0 root=/dev/cciss/c0d0p5 pci=routeirq max_loop=64 pciback.permissive  pciback.hide=(0f:08.0)
  • pci=routeirq Non ho indagato bene, me lo richiedeva il kernel durante il probe delle periferiche PCI
  • max_loop=64 Per avere piu` di 8 device di loopback
  • pciback.permissive Non so, non ho notato grossi cambiamenti

link di riferimento

Attenzione, se la periferica PCI viene utilizzata anche da dom0 il kernel si freeza.
Avevo provato a passare l'Id PCI della scheda video ma questo non mi permetteva l'avvio del Kernel dom0

Red Hat su domU

Non essendoci script o immagini gia` pronte per mettere una RHES in domU ho installato una RHES in un FS di 4GB nel server HP senza fargli installare il boot loader.
Dopo aver riavviato il dom0 ho creato un file che sara` il FS del domU:

dd if=/dev/zero of=virtual1 bs=1k seek=4096k count=1
mkfs -t ext3 virtual1
mount -o loop virtual1 /mnt
cp -ax /{root,dev,var,etc,usr,bin,sbin,lib,lib64} /mnt
mkdir /mnt/{proc,sys,home,tmp}
umount /mnt

in questo modo in virtual1 c'e` una RedHat pronta per essere fatta bootare da xen.

Strumenti personali