Ingredienti fondamentali per riprodurre ‘o miracolo.

  1. Scheda madre Intel che supporti VT-d. Ci sono altri produttori che supportano VT-d nei loro modelli ma il tutto è abbastanza fumoso. La mia scelta è andata per una DQ67OW
  2. Processore compatibile VT-d. Ho scelto lo XEON E3-1260L per via della scheda grafica integrata, delle prestazioni (4 core, 8 thread) e dei consumi (45W TDP).
  3. Una sheda grafica supportata, la mia scelta è andata per una FirePro V5700 tra l’altro poco costosa a causa del crash da bitcoin mining (vedasi).

Il bios della scheda madre è alquanto antipatico ed oltre a quello non sono riuscito a configurare l’opzione di default di GRUB: cioé sono riuscito a impostarla, ma il bootloader semplicemente la ignora, per cui ho scelto la via più semplice. Installare GRUB su una chiavetta USB e fare il boot da quella.

Dei tre componenti HW quello più delicato sembra essere la scheda grafica: la percentuale di successo con schede grafiche NVidia o non FirePro è decisamente bassa mentre la V5700 è indicata tra le schede testate (e spero supportate).

UPDATE: ho testato e verificato il funzionamento della ATI 5670 e ATI 5450. Quest’ultima è diventata la scheda grafica che sto usando in quanto silenziosissima per via del raffreddamento passivo e estremamente conveniente (prezzo/prestazioni)

Dopo di che ho installato Fedora 16 in versione x64.
Xen si installa via terminale sudato con

yum install xen

Fin qui la parte facile, descritta anche in questa pagina Wiki.

Più complicato è stato creare il network bridge necessario per la connettività dei vari sistemi virtualizzati. Le istruzioni della pagina Wiki di cui sopra a tal riguardo sono incomplete. Nella directory /etc/sysconfig/network-scripts vanno creati due file.

File ifcfg-br0:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
NM_CONTROLLED=NO

File ifcfg-em1:

DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
NM_CONTROLLED=NO
BRIDGE=br0

Per chi vuole spolparsi il manuale, la documentazione riguardo questi interface configuration files è linkata qui. Il nome del bridge (nel caso di cui sopra è br0) è importante per la configurazione delle macchine (para)virtuali. Dopo di che va disabilitato il servizio NetworkManager (che non supporta i bridge) e abilitato il servizio network al suo posto:

systemctl disable NetworkManager.service
systemctl stop NetworkManager.service
systemctl enable network.service
systemctl start network.service

Come ultima fase del setup iniziale ho creato un folder /xen e ho abilitato la condivisione dei file via SMB usando le istruzioni che ho trovato qui.

Ho creato una nuova installazione di grub su chiavetta USB usando:

grub2-install --force --no-floppy --root-directory=/mnt/USB /dev/sdx

laddove /mnt/USB è la directory su cui è montata la chiavetta USB e /dev/sdx è il file associato al dispositivo che si ottiene usando il comando lsscsi. Ho poi copiato e alleggerito il file di configurazione grub da /boot/grub2/grub.cfg a /mnt/USB/boot/grub2/grub.cfg.

UPDATE:

Ho reinstallato Fedora, non per fun ma in quanto ho notato qualche freeze di troppo possibilmente imputabile all’HD di sistema, e ho messo alla prova quanto scritto. Effettivamente mancano un po’ di passi di cui non avevo preso nota in precedenza.

1. FONDAMENTALE: disabilitare SeLinux editando il file /etc/sysconfig/selinux Nella configurazione da me creata non serve ad un pazzo (oserei dire che molto più in generale SeLinux, alla pari dell’Hardening di Windows Server, non serve ad un emerito pazzo).

2. Se ci si vuole connettere ai vari server VNC da altri client è necessario editare il file /etc/xen/xend-config.sxp modificando la linea che contiene vnc-listen in

(vnc-listen '0.0.0.0')

3. È buona norma spegnere il firewall durante la configurazione iniziale.

4. Disabilitare la shell grafica modificando il run level (vedasi):

rm /etc/systemd/system/default.target 
ln -sf /lib/systemd/system/multi-user.target
/etc/systemd/system/default.target

Last but not least non sono riuscito a trovare un buon sistema per fare un boot affidabile se non cancellando le linee indesiderate da /boot/grub2/grub.conf

Il passo successivo è la creazione di macchine virtuali.