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:
reboot2 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
ifconfigOra 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/cpuinfodovrebbe 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 wgetyum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpmPer installare Xen, ora eseguiamo semplicemente
yum install kernel-xen xenQuesto 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.lstIl 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-virtinstPoiché 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-develScopriamo 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.rpmL’ultimo comando mostrerà alcuni avvisi che puoi ignorare:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using rootSuccessivamente, 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.patchOra costruiamo un nuovo pacchetto libvirt:
rpmbuild -bb libvirt.specAlla 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.rpmVai 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.rpmDopo, riavviamo il sistema:
rebootIl 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 listper 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 listdovrebbe mostrare questo:
[root@server1 ~]# virsh list
Id Name State
----------------------------------
0 Domain-0 running
[root@server1 ~]#Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.