Virtualizzazione · 8 min read · Nov 30, 2025

Virtualizzazione Con Xen Su CentOS 6.2 (x86_64) (Paravirtualizzazione & Virtualizzazione Hardware)

Virtualizzazione Con Xen Su CentOS 6.2 (x86_64) (Paravirtualizzazione & Virtualizzazione Hardware)

Versione 1.0
Autore: Falko Timme
Seguimi su Twitter

Questo tutorial fornisce istruzioni passo-passo su come installare Xen (versione 4.1.2) su un sistema CentOS 6.2 (x86_64).

Xen ti consente di creare sistemi operativi guest (sistemi operativi nix come Linux e FreeBSD), così detti “macchine virtuali” o domU, sotto un sistema operativo host (dom0). Utilizzando Xen puoi separare le tue applicazioni in diverse macchine virtuali che sono totalmente indipendenti l’una dall’altra (ad esempio, una macchina virtuale per un server di posta, una macchina virtuale per un sito web ad alto traffico, un’altra macchina virtuale che serve i siti web dei tuoi clienti, una macchina virtuale per DNS, ecc.), ma utilizzare comunque lo stesso hardware. Questo fa risparmiare denaro e, cosa ancora più importante, è più sicuro. Se la macchina virtuale del tuo server DNS viene compromessa, non ha alcun effetto sulle tue altre macchine virtuali. Inoltre, puoi spostare le macchine virtuali da un server Xen all’altro.

Utilizzerò CentOS 6.2 (x86_64) sia per il sistema operativo host (dom0) che per il sistema operativo guest (domU).

Questo howto è inteso come una guida pratica; non copre gli aspetti teorici. Questi sono trattati in molti altri documenti sul web.

Questo documento viene fornito senza garanzia di alcun tipo! Voglio dire che questo non è l’unico modo per configurare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non rilascio alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

Questa guida spiegherà come impostare macchine virtuali basate su immagini e anche macchine virtuali basate su LVM.

Assicurati che SELinux sia disabilitato o permissivo:

vi /etc/sysconfig/selinux

| # Questo file controlla lo stato di SELinux sul sistema. # SELINUX= può assumere uno di questi tre valori: # enforcing - La politica di sicurezza SELinux è applicata. # permissive - SELinux stampa avvisi invece di applicare. # disabled - SELinux è completamente disabilitato. SELINUX=disabled # SELINUXTYPE= tipo di politica in uso. I valori possibili sono: # targeted - Solo i demoni di rete mirati sono protetti. # strict - Protezione completa di SELinux. SELINUXTYPE=targeted |

Se hai dovuto modificare /etc/sysconfig/selinux, riavvia il sistema:

reboot

2 Creazione di un Bridge di Rete

Dobbiamo impostare un bridge di rete sul nostro server in modo che le nostre macchine virtuali possano essere accessibili da altri host come se fossero sistemi fisici nella rete.

Per fare ciò, installiamo il pacchetto bridge-utils…

yum install bridge-utils

… e configuriamo un bridge. Crea il file /etc/sysconfig/network-scripts/ifcfg-br0 (si prega di utilizzare i valori IPADDR, PREFIX, GATEWAY, DNS1 e DNS2 dal file /etc/sysconfig/network-scripts/ifcfg-eth0); assicurati di utilizzare TYPE=Bridge, non TYPE=Ethernet:

vi /etc/sysconfig/network-scripts/ifcfg-br0

| DEVICE="br0" NM_CONTROLLED="yes" ONBOOT=yes TYPE=Bridge BOOTPROTO=none IPADDR=192.168.0.100 PREFIX=24 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System br0" |

Modifica /etc/sysconfig/network-scripts/ifcfg-eth0 come segue (commenta BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1 e DNS2 e aggiungi BRIDGE=br0):

vi /etc/sysconfig/network-scripts/ifcfg-eth0

| DEVICE="eth0" NM_CONTROLLED="yes" ONBOOT=yes HWADDR=00:1E:90:F3:F0:02 TYPE=Ethernet #BOOTPROTO=none #IPADDR=192.168.0.100 #PREFIX=24 #GATEWAY=192.168.0.1 #DNS1=8.8.8.8 #DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 BRIDGE=br0 |

Riavvia la rete…

/etc/init.d/network restart

… e esegui

ifconfig

Ora dovrebbe mostrare il bridge di rete (br0):

[root@server1 ~]# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1196 (1.1 KiB)  TX bytes:2794 (2.7 KiB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1E:90:F3:F0:02  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:4554 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:3020 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:6249612 (5.9 MiB)  TX bytes:254928 (248.9 KiB)  
          Interrupt:25 Base address:0x6000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1304 (1.2 KiB)  TX bytes:1304 (1.2 KiB)  
  
[root@server1 ~]#

3 Installazione di Xen

Controlla prima se la tua CPU supporta la virtualizzazione hardware - se è così, il comando

egrep '(vmx|svm)' --color=always /proc/cpuinfo

dovrebbe visualizzare qualcosa, ad esempio:

[root@server1 ~]# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall  
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall  
 nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse  
[root@server1 ~]#

Se non viene visualizzato nulla, significa che il tuo processore non supporta la virtualizzazione hardware. Questo significa che puoi utilizzare solo la paravirtualizzazione con Xen, ma non la virtualizzazione hardware.

Poiché CentOS 6 è basato su RedHat 6, e RedHat ha abbandonato il supporto per Xen nella versione 6, dobbiamo ottenere Xen da un repository di terze parti. Possiamo abilitare il repo come segue:

yum install wget
yum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpm

Per installare Xen, ora eseguiamo semplicemente

yum install kernel-xen xen

Questo installa Xen e un kernel Xen sul nostro sistema CentOS.

Prima di poter avviare il sistema con il kernel Xen, controlla la configurazione del bootloader GRUB. Apriamo /boot/grub/menu.lst:

vi /boot/grub/menu.lst

Il primo kernel elencato dovrebbe essere il kernel Xen che hai appena installato:

| [...] title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |

Dobbiamo modificare quella sezione in modo che l’ipervisore Xen venga caricato per primo. Nella riga kernel /vmlinuz…, sostituisci la prima parola kernel con module. Fai lo stesso nella riga successiva - sostituisci la prima parola initrd con module nella riga initrd /initramfs…. Poi aggiungi la riga kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin dopo la riga root e prima della prima riga module (se hai più di un core CPU, puoi specificare un numero diverso da 1 per dom0_max_vcpus). La sezione kernel finale dovrebbe apparire così:

| [...] title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img [...] |

Cambia il valore di default a 0 (in modo che il primo kernel (il kernel Xen) venga avviato per impostazione predefinita):

| [...] default=0 [...] |

Il completo /boot/grub/menu.lst dovrebbe apparire qualcosa del genere:

| # grub.conf generato da anaconda # # Nota che non devi rieseguire grub dopo aver apportato modifiche a questo file # AVVISO: Hai una partizione /boot. Questo significa che # tutti i percorsi del kernel e initrd sono relativi a /boot/, ad esempio. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/mapper/VolGroup00-LogVol00 # initrd /initrd-[generic-]version.img #boot=/dev/sde default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32.54-1.el6xen.x86_64) root (hd0,0) kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin module /vmlinuz-2.6.32.54-1.el6xen.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM module /initramfs-2.6.32.54-1.el6xen.x86_64.img title CentOS (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup00-LogVol00 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=de rd_LVM_LV=VolGroup00/LogVol01 rd_LVM_LV=VolGroup00/LogVol00 rd_NO_DM initrd /initramfs-2.6.32-220.el6.x86_64.img |

Prima di riavviare, installiamo i pacchetti libvirt e python-virtinst (che contiene lo strumento virt-install che utilizzeremo in seguito per installare le VM Xen):

yum install libvirt python-virtinst

Poiché il pacchetto libvirt di CentOS 6/RedHat 6 non ha supporto per Xen, dobbiamo ricompilarlo con supporto per Xen. Per fare ciò, installiamo ora alcuni prerequisiti:

yum groupinstall 'Development Tools'
yum install python-devel xen-devel libxml2-devel xhtml1-dtds readline-devel ncurses-devel libtasn1-devel gnutls-devel augeas libudev-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl-devel avahi-devel libselinux-devel cyrus-sasl-devel parted-devel device-mapper-devel numactl-devel libcap-ng-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel

Scopriamo la nostra versione di libvirt:

rpm -qa | grep libvirt
[root@server1 ~]# rpm -qa | grep libvirt  
libvirt-client-0.9.4-23.el6_2.4.x86_64  
libvirt-0.9.4-23.el6_2.4.x86_64  
libvirt-python-0.9.4-23.el6_2.4.x86_64  
[root@server1 ~]#

È 0.9.4, quindi scarichiamo il pacchetto src.rpm appropriato in /root/src e installiamolo:

mkdir /root/src  
cd /root/src  
wget http://vault.centos.org/6.2/os/Source/SPackages/libvirt-0.9.4-23.el6.src.rpm  
rpm -i libvirt-0.9.4-23.el6.src.rpm

L’ultimo comando mostrerà alcuni avvisi che puoi ignorare:

warning: user mockbuild does not exist - using root  
warning: group mockbuild does not exist - using root

Successivamente, patchiamo il supporto per Xen nelle sorgenti di libvirt:

wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch  
cd /root/rpmbuild/SPECS  
cp -a libvirt.spec libvirt.spec.orig  
patch -p0 < ~/src/libvirt-spec-rhel6-enable-xen.patch

Ora costruiamo un nuovo pacchetto libvirt:

rpmbuild -bb libvirt.spec

Alla fine del processo di build dovresti vedere qualcosa del genere:

Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-client-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-devel-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-lock-sanlock-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-python-0.9.4-23.el6.x86_64.rpm  
Wrote: /root/rpmbuild/RPMS/x86_64/libvirt-debuginfo-0.9.4-23.el6.x86_64.rpm

Vai nella directory in cui sono stati creati i nuovi pacchetti (in questo caso /root/rpmbuild/RPMS/x86_64/)…

cd /root/rpmbuild/RPMS/x86_64/

… e installa i nuovi pacchetti libvirt (con supporto per Xen) come segue:

rpm -Uvh --force libvirt-0.9.4-23.el6.x86_64.rpm libvirt-client-0.9.4-23.el6.x86_64.rpm libvirt-python-0.9.4-23.el6.x86_64.rpm

Dopo, riavviamo il sistema:

reboot

Il sistema dovrebbe ora avviarsi automaticamente con il nuovo kernel Xen. Dopo che il sistema è stato avviato, possiamo controllare eseguendo

uname -r
[root@server1 ~]# uname -r  
2.6.32.54-1.el6xen.x86_64  
[root@server1 ~]#

Quindi sta davvero utilizzando il nuovo kernel Xen!

Possiamo ora eseguire

xm list

per controllare se Xen è stato avviato. Dovrebbe elencare Domain-0 (dom0):

[root@server1 ~]# xm list  
Name                                    ID   Mem VCPUs      State   Time(s)  
Domain-0                                0   1024     1     r-----     18.9  
[root@server1 ~]#

Invece di utilizzare il comando xm, da ora in poi utilizzerò il comando virsh per gestire le VM Xen. Questo è il modo preferito poiché stiamo utilizzando libvirt.

virsh list

dovrebbe mostrare questo:

[root@server1 ~]# virsh list  
 Id Name                 State  
----------------------------------  
  0 Domain-0             running  
  
[root@server1 ~]#
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.