Настройка XEN 4.1 с поддержкой LibVirt на CentOS 6

Сегодня мы будем запускать XEN 4.1 под CentOS/RHEL 6. RedHat как известно перестала включать поддержку Xen в свои ОС начиная с ветки RHEL6, продвигая KVM как фирменную технологию виртуализации. Надо сказать, что во первых KVM на данном этапе не вполне подходит для продакшена, а во вторых многие компании тесно интегрированы с Xen, и менять гипервизор не всегда удобно или даже невозможно.
Итак, отсюда задача, все же установить свежий Xen 4.1 на не менее свежую CentOS 6.2. Я не буду вдаваться в подробности, расписывая откуда и что берется, а лишь приведу шаги, выполнив которые у вас будет рабочий XEN на вашем RHEL6-based дистрибутиве. Поехали.

Для начала, ставим ядро с поддержкой XEN. Для этого добавляем репозиторий, и устанавливаем из него ядро и сам Xen. Тут же устанавливаем необходимые bridge-utils:

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

Далее редактируем /etc/grub.conf

Заменяем:

title CentOS (2.6.32.57-2.el6xen.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD KEYTABLE=us rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto console=tty1 rd_LVM_LV=VolGroup/lv_root rhgb crashkernel=auto quiet rd_NO_DM console=ttyS0,115200n8
initrd /initramfs-2.6.32.57-2.el6xen.x86_64.img

На:

title CentOS (2.6.32.57-2.el6xen.x86_64)
root (hd0,0)
kernel /xen.gz dom0_mem=1792M com1=115200,8n1 cpufreq=xen dom0_max_vcpus=1 dom0_vcpus_pin console=com1,vga
module /vmlinuz-2.6.32.57-2.el6xen.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD KEYTABLE=us rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto console=tty1 rd_LVM_LV=VolGroup/lv_root rhgb crashkernel=auto quiet rd_NO_DM console=tty0 console=xvc0 xencons=xvc
module /initramfs-2.6.32.57-2.el6xen.x86_64.img

В этом месте возможен неявный хомут, если вы используете драйвер bnx2 для ваших сетевых карт.
Поскольку ядро менее свежее чем стандартное в CentOS 6.2, оно требует более старую версию firmware для драйвера сети, в результате система загружается, но без поддержки сети. Обходится простым и неэлегантным способом:

cp /lib/firmware/bnx2/bnx2-rv2p-09-5.0.0.j10.fw /lib/firmware/bnx2/bnx2-rv2p-09-5.0.0.j3.fw

На этом установку непосредственно xen можно считать завершенной. Теперь было бы неплохо установить libvirt для удобного управления всем этим добром. Основная проблема в том, что дистрибутивный libvirt принципиально собран без поддержки XEN, и следовательно нуждается в пересборке. Для желающих собрать самостоятельно я приведу инструкции ниже. Для желающих запустить все это дело без лишней головной боли — собранные пакеты вы можете скачать git-ом c моего репозитория на bitbucket.org, и установать следующим образом:

git clone https://bitbucket.org/morozsm/libvirt-0.9.4-23.el6.x86_64.git
cd libvirt-0.9.4-23.el6.x86_64/
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
rpm -Uvh libvirt-devel-0.9.4-23.el6.x86_64.rpm
yum -y install xen-devel augeas python-virtinst

Если же вы желаете собрать libvirt самостоятельно, последовательность действий примерно такая:
1. Льем sRPM libvirt с репозитория дистрибутива.
2. Патчим spec файл, не предмет включения поддержки xen
3. Собираем собственно пакеты.
4. И по итогу, эти пакеты устанавливаем. (Если соберутся 🙂

Теперь с подробностями:

yum -y install xen-devel
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

Патчим:

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 Собираем:

rpmbuild -bb libvirt.spec
В случае успеха, вы должны получить примерно следующий вывод:
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
Если все собралось корректно, заходим в каталог со свежесобранными RPM и устанавливаем:
cd /root/rpmbuild/RPMS/x86_64/
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
rpm -Uvh libvirt-devel-0.9.4-23.el6.x86_64.rpm
Перегружаем систему, и выполняем:
[root@xen ~]# uname -r
2.6.32.57-2.el6xen.x86_64
Для проверки корректной работы libvirt:
[root@xen ~]# virsh version
Compiled against library: libvir 0.9.4
Using library: libvir 0.9.4
Using API: Xen 0.9.4
Running hypervisor: Xen 4.1.0
Радуемся результату! Ссылки на оригинальные материалы по теме: http://www.howtoforge.com/virtualization-with-xen-on-centos-6.2-x86_64-paravirtualization-and-hardware-virtualization
http://www.crc.id.au/xen-on-rhel6-scientific-linux-6-centos-6-howto/
http://wiki.xen.org/xenwiki/RHEL6Xen4Tutorial

Добавить комментарий