Virtualisierung · 7 min read · Nov 30, 2025
Virtualisierung mit Xen auf CentOS 6.2 (x86_64) (Paravirtualisierung & Hardware-Virtualisierung)
Virtualisierung mit Xen auf CentOS 6.2 (x86_64) (Paravirtualisierung & Hardware-Virtualisierung)
Version 1.0
Autor: Falko Timme
Folge mir auf Twitter
Dieses Tutorial bietet Schritt-für-Schritt-Anleitungen zur Installation von Xen (Version 4.1.2) auf einem CentOS 6.2 (x86_64) System.
Xen ermöglicht es Ihnen, Gastbetriebssysteme (nix-Betriebssysteme wie Linux und FreeBSD) zu erstellen, sogenannte “virtuelle Maschinen” oder domU s, unter einem Hostbetriebssystem (dom0). Mit Xen können Sie Ihre Anwendungen in verschiedene virtuelle Maschinen aufteilen, die völlig unabhängig voneinander sind (z. B. eine virtuelle Maschine für einen Mailserver, eine virtuelle Maschine für eine stark frequentierte Website, eine andere virtuelle Maschine, die die Websites Ihrer Kunden bedient, eine virtuelle Maschine für DNS usw.), aber dennoch dieselbe Hardware verwenden. Dies spart Geld und ist, was noch wichtiger ist, sicherer. Wenn die virtuelle Maschine Ihres DNS-Servers gehackt wird, hat dies keine Auswirkungen auf Ihre anderen virtuellen Maschinen. Außerdem können Sie virtuelle Maschinen von einem Xen-Server auf den nächsten verschieben.
Ich werde CentOS 6.2 (x86_64) sowohl für das Host-OS (dom0) als auch für das Gast-OS (domU) verwenden.
Dieses How-to ist als praktische Anleitung gedacht; es behandelt nicht die theoretischen Hintergründe. Diese werden in vielen anderen Dokumenten im Web behandelt.
Dieses Dokument kommt ohne jegliche Gewährleistung! Ich möchte sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies für Sie funktionieren wird!
1 Vorbemerkung
Dieser Leitfaden erklärt, wie man bildbasierte virtuelle Maschinen und auch LVM-basierte virtuelle Maschinen einrichtet.
Stellen Sie sicher, dass SELinux deaktiviert oder permissiv ist:
vi /etc/sysconfig/selinux| # Diese Datei steuert den Status von SELinux im System. # SELINUX= kann einen dieser drei Werte annehmen: # enforcing - SELinux-Sicherheitsrichtlinie wird durchgesetzt. # permissive - SELinux gibt Warnungen aus, anstatt durchzusetzen. # disabled - SELinux ist vollständig deaktiviert. SELINUX=disabled # SELINUXTYPE= Art der verwendeten Richtlinie. Mögliche Werte sind: # targeted - Nur gezielte Netzwerk-Daemons sind geschützt. # strict - Vollständiger SELinux-Schutz. SELINUXTYPE=targeted |
Wenn Sie /etc/sysconfig/selinux ändern mussten, starten Sie das System bitte neu:
reboot2 Erstellen eines Netzwerkbrücke
Wir müssen eine Netzwerkbrücke auf unserem Server einrichten, damit unsere virtuellen Maschinen von anderen Hosts aus wie physische Systeme im Netzwerk zugänglich sind.
Um dies zu tun, installieren wir das Paket bridge-utils…
yum install bridge-utils… und konfigurieren eine Brücke. Erstellen Sie die Datei /etc/sysconfig/network-scripts/ifcfg-br0 (bitte verwenden Sie die Werte IPADDR, PREFIX, GATEWAY, DNS1 und DNS2 aus der Datei /etc/sysconfig/network-scripts/ifcfg-eth0); stellen Sie sicher, dass Sie TYPE=Bridge verwenden, nicht 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" |
Ändern Sie /etc/sysconfig/network-scripts/ifcfg-eth0 wie folgt (kommentieren Sie BOOTPROTO, IPADDR, PREFIX, GATEWAY, DNS1 und DNS2 aus und fügen Sie BRIDGE=br0 hinzu):
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 |
Starten Sie das Netzwerk neu…
/etc/init.d/network restart… und führen Sie aus
ifconfigEs sollte jetzt die Netzwerkbrücke (br0) anzeigen:
[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 Installation von Xen
Überprüfen Sie zunächst, ob Ihre CPU Hardware-Virtualisierung unterstützt - falls dies der Fall ist, sollte der Befehl
egrep '(vmx|svm)' --color=always /proc/cpuinfoetwas anzeigen, z. B. so:
[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 ~]#Wenn nichts angezeigt wird, unterstützt Ihr Prozessor keine Hardware-Virtualisierung. Das bedeutet, dass Sie nur Paravirtualisierung mit Xen verwenden können, jedoch keine Hardware-Virtualisierung.
Da CentOS 6 auf RedHat 6 basiert und RedHat die Unterstützung für Xen in Version 6 eingestellt hat, müssen wir Xen aus einem Drittanbieter-Repository beziehen. Wir können das Repo wie folgt aktivieren:
yum install wgetyum install http://au1.mirror.crc.id.au/repo/kernel-xen-release-6-3.noarch.rpmUm Xen zu installieren, führen wir jetzt einfach aus
yum install kernel-xen xenDies installiert Xen und einen Xen-Kernel auf unserem CentOS-System.
Bevor wir das System mit dem Xen-Kernel starten können, überprüfen Sie bitte Ihre GRUB-Bootloader-Konfiguration. Wir öffnen /boot/grub/menu.lst:
vi /boot/grub/menu.lstDer zuerst aufgeführte Kernel sollte der Xen-Kernel sein, den Sie gerade installiert haben:
| [...] 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 [...] |
Wir müssen diesen Abschnitt ändern, damit der Xen-Hypervisor zuerst geladen wird. In der Kernel /vmlinuz… Zeile ersetzen Sie das erste Wort kernel durch module. Machen Sie dasselbe in der nächsten Zeile - ersetzen Sie das erste Wort initrd durch module in der initrd /initramfs… Zeile. Fügen Sie dann die Zeile kernel /xen.gz dom0_mem=1024M cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin nach der root-Zeile und vor der ersten Modulzeile hinzu (wenn Sie mehr als einen CPU-Kern haben, können Sie eine andere Zahl als 1 für dom0_max_vcpus angeben). Der endgültige Kernel-Abschnitt sollte so aussehen:
| [...] 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 [...] |
Ändern Sie den Wert von default auf 0 (damit der erste Kernel (der Xen-Kernel) standardmäßig gestartet wird):
| [...] default=0 [...] |
Die vollständige /boot/grub/menu.lst sollte ungefähr so aussehen:
| # grub.conf generiert von anaconda # # Beachten Sie, dass Sie grub nach Änderungen an dieser Datei nicht erneut ausführen müssen # HINWEIS: Sie haben eine /boot-Partition. Das bedeutet, dass # alle Kernel- und initrd-Pfade relativ zu /boot/ sind, z. B. # 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 |
Bevor wir neu starten, installieren wir die Pakete libvirt und python-virtinst (das das virt-install-Tool enthält, das wir später zur Installation von Xen-VMs verwenden werden):
yum install libvirt python-virtinstDa das libvirt-Paket von CentOS 6/RedHat 6 keine Unterstützung für Xen hat, müssen wir es mit Xen-Unterstützung neu kompilieren. Dazu installieren wir jetzt ein paar Voraussetzungen:
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-develLassen Sie uns unsere libvirt-Version herausfinden:
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 ~]#Es ist 0.9.4, also laden wir das entsprechende src.rpm-Paket in /root/src herunter und installieren es:
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.rpmDer letzte Befehl zeigt einige Warnungen an, die Sie ignorieren können:
warnung: Benutzer mockbuild existiert nicht - verwende root
warnung: Gruppe mockbuild existiert nicht - verwende rootAls nächstes patchen wir die Xen-Unterstützung in die libvirt-Quellen:
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.patchJetzt bauen wir ein neues libvirt-Paket:
rpmbuild -bb libvirt.specAm Ende des Build-Prozesses sollten Sie etwas sehen wie:
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.rpmGehen Sie in das Verzeichnis, in dem die neuen Pakete erstellt wurden (in diesem Fall /root/rpmbuild/RPMS/x86_64/)…
cd /root/rpmbuild/RPMS/x86_64/… und installieren Sie die neuen libvirt-Pakete (mit Xen-Unterstützung) wie folgt:
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.rpmDanach starten wir das System neu:
rebootDas System sollte jetzt automatisch den neuen Xen-Kernel booten. Nachdem das System gebootet wurde, können wir überprüfen, ob dies funktioniert hat, indem wir ausführen
uname -r[root@server1 ~]# uname -r
2.6.32.54-1.el6xen.x86_64
[root@server1 ~]#Also verwendet es wirklich den neuen Xen-Kernel!
Wir können jetzt
xm listausführen, um zu überprüfen, ob Xen gestartet wurde. Es sollte Domain-0 (dom0) auflisten:
[root@server1 ~]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 1 r----- 18.9
[root@server1 ~]#Anstatt den xm-Befehl zu verwenden, werde ich von nun an den virsh-Befehl verwenden, um Xen-VMs zu verwalten. Dies ist der bevorzugte Weg, da wir libvirt verwenden.
virsh listsollte dies anzeigen:
[root@server1 ~]# virsh list
Id Name State
----------------------------------
0 Domain-0 running
[root@server1 ~]#Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.