Установка Xen 4.0 на CentOS проходит сложнее чем обычно из-за необходимости замены базового, проверенного в боях ядра 2.6.18 на более свежее 2.6.32 с поддержкой paravirt_ops.  Неплохим толчком для трудоемкого обновления могут послужить новые возможности в Xen 4.0, которые будут доступны для установки на CentOS через репозиторий еще наверное года через 2.

1. Сборка ядра pvops 2.6.32.x

Устанавливаем репозиторий RPMforge,  этот репозиторий просто необходим для установки пакетов git, mercurial, flex, bison.

[root@localhost tmp]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
[root@localhost tmp]# rpm -i rpmforge-release-0.5.1-1.el5.rf.i386.rpm

Устанавливаем необходимые для сборки пакеты

yum install mercurial git make gcc ncurses-devel

Загружаем последний релиз  ядра, эта процедура потянет за собой около 350 метров исходников

[root@localhost tmp]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
[root@localhost tmp]# cd linux-2.6-xen
[root@localhost linux-2.6-xen]# git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x

Переходим к настройке конфигурации ядра. Проверяем текущую версию и копируем файл конфигурации ядра в каталог сборки.

[root@localhost linux-2.6-xen]# uname -r
2.6.18-194.17.1.el5
[root@localhost linux-2.6-xen]# ll /boot/config*
-rw-r--r-- 1 root root 69598 Sep 29 21:21 /boot/config-2.6.18-194.17.1.el5
-rw-r--r-- 1 root root 69593 Apr  2  2010 /boot/config-2.6.18-194.el5
[root@localhost linux-2.6-xen]# cp /boot/config-2.6.18-194.17.1.el5 .config

Настраивавам ядро, более подробно конфигурирование и сборка ядра описаны в статье сборка ядра 2.6.32.x pvops

[root@localhost linux-2.6-xen] make menuconfig

ВАЖНО: Ядро pv_ops при сборке для i386 поддерживает только режим PAE.

После выполнения настройки проверяем наличие следующих параметров в файле .config, если их нет возвращается обратно в menuconfig и добавляем.

CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
 
CONFIG_ACPI_PROCFS=y
CONFIG_XEN=y
CONFIG_XEN_MAX_DOMAIN_MEMORY=32
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_PCI=y
CONFIG_PCI_XEN=y
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_NETXEN_NIC=m
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_KBDDEV_FRONTEND=m
CONFIG_HVC_XEN=y
CONFIG_XEN_FBDEV_FRONTEND=m
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_XENBUS_FRONTEND=m
CONFIG_XEN_PCIDEV_FRONTEND=y

Собираем ядро

[root@localhost linux-2.6-xen]# make -j4
[root@localhost linux-2.6-xen]# make modules_install
[root@localhost linux-2.6-xen]# make headers_install
[root@localhost linux-2.6-xen]# make install

2. Сборка Xen 4.0

Загружаем последнюю версию xen 4.0

[root@localhost tmp]# hg clone http://xenbits.xen.org/xen-4.0-testing.hg
[root@localhost tmp]# cd xen-4.0-testing.hg

Устанавливаем необходимые для сборки пакеты

[root@localhost]# yum install zlib-devel which openssl-devel gettext dev86
python-devel flex bison patch texinfo bzip2 bridge-utils

Собираем Intel ACPI ASL Compiler (iasl), он понадобится нам для сборки xen-tools. Для этого скачиваем UNIX Format Source Code and Build Environment с сайта http://acpica.org/downloads/, собираем компилятор и копируем в директорию /bin.

[root@localhost tmp]# wget http://acpica.org/download/acpica-unix-20100915.tar.gz
[root@localhost tmp]# tar -zxvf acpica-unix-20100915.tar.gz
[root@localhost tmp]# cd acpica-unix-20100915/compiler/
[root@localhost compiler]# make
[root@localhost compiler]# cp iasl /bin

Переходим к сборке Xen-4.0, если правильно установлены все вышеперечисленные пакеты, то сборка пройдет как по маслу.

[root@localhost xen-4.0-testing.hg]# make xen
[root@localhost xen-4.0-testing.hg]# make tools
[root@localhost xen-4.0-testing.hg]# make stubdom
[root@localhost xen-4.0-testing.hg]# make install-xen
[root@localhost xen-4.0-testing.hg]# make install-tools
[root@localhost xen-4.0-testing.hg]# make install-stubdom

3. Настройка Xen 4.0

Настраиваем систему на загрузку с ядром pv_ops, для этого открываем для редактирования /boot/grub/grub.conf и добавляем туда следующие строки. На момент написания статьи актуальная версия ядра 2.6.32.24.

title CentOS (2.6.32.24)
root (hd0,0)
kernel /xen-4.0.gz dom0_mem=512M loglvl=all guest_loglvl=all
module /vmlinuz-2.6.32.24 ro root=/dev/VolGroup00/LogVol00
module /initrd-2.6.32.24.img

Перезапускаем систему с новым ядром и переходим к настройке Xend, исправляем в /etc/xen/xend-config.sxp закоментированные строки на

(xend-http-server yes)
(xend-unix-server yes)
(xend-port            8000)

Добавляем сервисы в автозапуск и запускаем

[root@localhost ~]# chkconfig --add xend
[root@localhost ~]# chkconfig --add xendomains
[root@localhost ~]# chkconfig xend on
[root@localhost ~]# chkconfig xendomains on
[root@localhost ~]# service xend start
[root@localhost ~]# service xendomains start

Устанавливаем Virt-Install

[root@localhost xen]# yum install virt-manager

После запуска VirtInstall появляется ошибка, может конечно в новых версиях ее пропачат, но я потерял на этом без малого 4 дня.

ERROR POST operation failed: xend_post: error from xen daemon: (xend.err Device 0
(vif) could not be connected. Hotplug scripts not working.')

Решения есть 2:

1. Можно отключить модуль xt_physdev

2. Можно /etc/xen/scripts/vif-common.sh в функции frob_iptable() закомментировать строки

#  iptables "$c" FORWARD -m physdev --physdev-in "$vif" "$@" -j ACCEPT \
#    2>/dev/null &&
#  iptables "$c" FORWARD -m state --state RELATED,ESTABLISHED -m physdev \
#    --physdev-out "$vif" -j ACCEPT 2>/dev/null

Если кто-то знает еще какие-то решения решения этой проблемы – пишите буду рад.

31 Коммент. : “Установка и настройка Xen 4.0 на CentOS 5.5”

  1. bott30931024 пишет:

    Здравствуйте, получаю такую ошибку при компиляции tools,tubdom, где я допустил ошибку?

    In file included from tapdisk-queue.c:44:
    libaio-compat.h:82:3: error: #error __NR_eventfd?
    make[5]: *** [tapdisk-queue.o] Ошибка 1
    make[5]: Leaving directory `/tmp/xen-4.0-testing.hg/tools/blktap2/drivers’
    make[4]: *** [subdir-install-drivers] Ошибка 2
    make[4]: Leaving directory `/tmp/xen-4.0-testing.hg/tools/blktap2′
    make[3]: *** [subdirs-install] Ошибка 2
    make[3]: Leaving directory `/tmp/xen-4.0-testing.hg/tools/blktap2′
    make[2]: *** [subdir-install-blktap2] Ошибка 2
    make[2]: Leaving directory `/tmp/xen-4.0-testing.hg/tools’
    make[1]: *** [subdirs-install] Ошибка 2
    make[1]: Leaving directory `/tmp/xen-4.0-testing.hg/tools’
    make: *** [install-tools] Ошибка 2

  2. Alsigned пишет:

    @bott30931024

    Привет.

    1. Какая версия CentOS x64 или i386?

    2. Какой командой ты запустил компиляцию?

  3. bott30931024 пишет:

    @Alsigned

    1)Centos 5.5 – i386

    2)make tools; make stubdom

  4. reverse пишет:

    @bott30931024
    http://mysyura.in.ua/gentoo-xen-4/ тут описана Ваша ошибка и приложен патч

  5. DEMIAN_8 пишет:

    Здравствуйте,у меня проблемы с со сборкой…
    Инфа:
    CentOS x64 2.6.18-194.el5

    делаю make tools и вываливается ошибка следующего рода:
    __________________

    make[1]: Entering directory `/root/xen-4.0-testing.hg/tools’
    set -ex; \
    if test -d git://xenbits.xensource.com/qemu-xen-4.0-testing.git; then \
    rm -f ioemu-dir; \
    ln -sf git://xenbits.xensource.com/qemu-xen-4.0-testing.git ioemu-dir; \
    else \
    if [ ! -d ioemu-remote ]; then \
    rm -rf ioemu-remote ioemu-remote.tmp; \
    mkdir ioemu-remote.tmp; rmdir ioemu-remote.tmp; \
    git clone git://xenbits.xensource.com/qemu-xen-4.0-testing.git ioemu-remote.tmp; \
    if [ "6d5b7ee3acfe8cc10681d2583a38398f7470ec2a" ]; then\
    cd ioemu-remote.tmp; \
    git branch -D dummy >/dev/null 2>&1 ||:; \
    git checkout -b dummy 6d5b7ee3acfe8cc10681d2583a38398f7470ec2a; \
    cd ..; \
    fi; \
    mv ioemu-remote.tmp ioemu-remote; \
    fi; \
    rm -f ioemu-dir; \
    ln -sf ioemu-remote ioemu-dir; \
    fi
    + test -d git://xenbits.xensource.com/qemu-xen-4.0-testing.git
    + ‘[' '!' -d ioemu-remote ']‘
    + rm -rf ioemu-remote ioemu-remote.tmp
    + mkdir ioemu-remote.tmp
    + rmdir ioemu-remote.tmp
    + git clone git://xenbits.xensource.com/qemu-xen-4.0-testing.git ioemu-remote.tmp
    Cloning into ioemu-remote.tmp…
    remote: Counting objects: 45586, done.
    remote: Compressing objects: 100% (14868/14868), done.
    remote: Total 45586 (delta 33175), reused 42563 (delta 30664)
    Receiving objects: 100% (45586/45586), 18.21 MiB | 94 KiB/s, done.
    Resolving deltas: 100% (33175/33175), done.
    + ‘[' 6d5b7ee3acfe8cc10681d2583a38398f7470ec2a ']‘
    + cd ioemu-remote.tmp
    + git branch -D dummy
    + :
    + git checkout -b dummy 6d5b7ee3acfe8cc10681d2583a38398f7470ec2a
    fatal: reference is not a tree: 6d5b7ee3acfe8cc10681d2583a38398f7470ec2a
    make[1]: *** [ioemu-dir-find] Error 128
    make[1]: Leaving directory `/root/xen-4.0-testing.hg/tools’
    make: *** [tools/ioemu-dir] Error 2

    __________________

  6. Alsigned пишет:

    @DEMIAN_8
    Привет.
    Я тоже недавно столкнулся с этой ошибкой, это проблема свежей версии xen-4.0.2-rc1-pre, hg clone автоматом выбирает последний релиз.

    Самый простой способ решения для сборки использовать вместо xen-4.0.2-rc1-pre более ранний релиз xen-4.0.1:

    hg clone -r RELEASE-4.0.1 http://xenbits.xen.org/xen-4.0-testing.hg

  7. DEMIAN_8 пишет:

    Хай спасибо, за ответ… но так как я трафиком ограничен, не стал запариваться и просто залез в папку tools и изменил файл Makefile.

    ioemu-dir-find:
    set -ex; \
    wget http://mirror.choon.net/xen/qemu-xen-4.0-testing.git.tgz \
    tar -xvzf qemu-xen-4.0-testing.git.tgz \
    mv qemu-xen-4.0-testing.git.tgz ioemu-remote.tmp \
    fi; \
    mv ioemu-remote.tmp ioemu-remote; \
    fi; \
    rm -f ioemu-dir; \
    ln -sf ioemu-remote ioemu-dir; \
    fi
    set -e; \
    $(absolutify_xen_root); \
    $(buildmakevars2shellvars); \
    cd ioemu-dir; \
    ./xen-setup $(IOEMU_CONFIGURE_CROSS)

    и все собралось!=)
    На забугорных описывали, что можно подцепить qemu по git http, но как-то не хотел вот и сделал по своему=)

  8. DEMIAN_8 пишет:

    эх забыл, вот так правильнее

    ioemu-dir-find:
    set -ex; \
    wget http://mirror.choon.net/xen/qemu-xen-4.0-testing.git.tgz; \
    tar -xvzf qemu-xen-4.0-testing.git.tgz; \
    mv qemu-xen-4.0-testing.git.tgz ioemu-remote.tmp; \
    fi; \
    mv ioemu-remote.tmp ioemu-remote; \
    fi; \
    rm -f ioemu-dir; \
    ln -sf ioemu-remote ioemu-dir; \
    fi
    set -e; \
    $(absolutify_xen_root); \
    $(buildmakevars2shellvars); \
    cd ioemu-dir; \
    ./xen-setup $(IOEMU_CONFIGURE_CROSS)

  9. DEMIAN_8 пишет:

    Здравствуйте, у вас были ошибки подобного рода?
    начал собирать и повалились:

    [root@vmhost linux-2.6-xen]# make headers_install
    CHK include/linux/version.h
    make[1]: `scripts/unifdef’ is up to date.
    [root@vmhost linux-2.6-xen]# make install
    sh /root/linux-2.6-xen/arch/x86/boot/install.sh 2.6.32.27 arch/x86/boot/bzImage \
    System.map “/boot”
    WARNING: No module ehci-hcd found for kernel 2.6.32.27, continuing anyway
    WARNING: No module ohci-hcd found for kernel 2.6.32.27, continuing anyway
    WARNING: No module uhci-hcd found for kernel 2.6.32.27, continuing anyway
    WARNING: No module ahci found for kernel 2.6.32.27, continuing anyway
    WARNING: No module ahci found for kernel 2.6.32.27, continuing anyway
    WARNING: No module ata_piix found for kernel 2.6.32.27, continuing anyway
    WARNING: No module ahci found for kernel 2.6.32.27, continuing anyway

    не знаете как решить эту траблу?
    .config я взял с сайта XEN, которые рекомендуют

  10. Alsigned пишет:

    @DEMIAN_8
    Привет.
    Конфиг для ядра лучше делать самому, с ядрами 2.6.32.23-24 и с кофигами с сайта XEN у меня тоже были ошибки, правда на тот момент их было поменьше:
    WARNING: No module ehci-hcd found for kernel 2.6.32.23, continuing anyway
    WARNING: No module ohci-hcd found for kernel 2.6.32.23, continuing anyway
    WARNING: No module uhci-hcd found for kernel 2.6.32.23, continuing anyway
    WARNING: No module ata_piix found for kernel 2.6.32.23, continuing anyway
    А после перезапуска с новым ядром система не находила винты и вываливалась в kernel-panic. На сколько я помню проблема была в двух параметрах, которые необходимы исключительно для RHEL, Fedora и CentOS:
    CONFIG_SYSFS_DEPRECATED=y
    CONFIG_SYSFS_DEPRECATED_V2=y
    После чего система стала загружаться, но Xen-так и не заработал. Поэтому я решил настраивать конфиги сам. Здесь немножко более подробно о сборке ядра: http://www.alsigned.ru/?p=653

  11. Georg пишет:

    Привет!
    Выполняю:
    [root@dhcppc1 xen-4.0-testing.hg]# wget http://acpica.org/download/acpica-unix-20100915.tar.gz
    tar -zxvf acpica-unix-20100915.tar.gz
    [root@dhcppc1 compiler]# make
    flex -i -s -PAslCompiler -oaslcompilerlex.c ../compiler/aslcompiler.l
    make: flex: Команда не найдена
    make: *** [aslcompilerlex.c] Ошибка 127

    и не хочет собиться компилятор. где копать?

  12. Alsigned пишет:

    @Georg
    Привет.

    Ну здесь все просто. Не установлен flex – ставится с репозитория RPMForge.

  13. Georg пишет:

    компилер собрался… сроку установки компонентом не так скопипастил (не всю)
    дальше все собралось без остановок на ошибки.
    после настройки grub и перезапуска произошла перезагрузка на строке kernel_thread_helper
    у меня centos 5.5 i386, опции при установке: Gnome decktop и Virtualizatin (вчера с зеркала яндекса скачал диск сетевой установки и с него ставил)
    ядро с Xen – 2.6.32.27
    сами исходники Xen брал командой hg clone http://xenbits.xen.org/xen-4.0-testing.hg (т.е. новый релиз)
    железо мать Intel DQ45CB, видео встроенное Intel GMA-4500, проц Intel C2D E5300
    кромы клавиатуры и мыши (через переходник-контроллер PS2 to USB) и монитора к мат. плате ничего не подключено
    в биос включена поддержка Intel Virtualization Technology
    так же пробовал запуски с включением опций:
    Intel Ttrusted execution Technology,
    Intel VT for Directed I/O (VT-d)
    может вы что-нибуду встречали подобное?

  14. Georg пишет:

    дополнение:
    ядро конфигурировал так как вы написали. кроме всего добавил включение опций видео для Intel 810/915
    кроме всего при сборке tools были ошибки, которые компилятор показал, но не остановился

  15. Alsigned пишет:

    @Georg
    Я тестировал работоспособность Xen 4.0 на Q35 и G41 чипсетах с процессором Q9550 – в принципе работает без проблем.

    1. E5300 – это Dual Core и как написано на сайте интела совсем не факт что поддерживает VT-x, и точно не поддерживает VT-d.
    http://ark.intel.com/Product.aspx?id=35300&processor=E5300&spec-codes=SLB9U,SLGQ6,SLGTL
    Поэтому все эти опции рекомендую отключить.

    2. Проверить как будет загружаться ядро без Xen.

  16. Georg пишет:

    мда… получается самый дешевый E8300
    а ядро без xen запустилось без проблем
    пойду завтра, уже седня в магазин…. менять свой e5300

  17. Alsigned пишет:

    @Georg
    Все зависит от того, что ты собрался виртуализировать. Если Windows то будет необходима полная виртуализация – здесь обязательна поддержка VT-x процессором и материнкой, в случае с Linux можно обойтись паравиртуальным гостем без использования VT-x.

    VT-d нужен в случае использования PCI pass-through – вещичка кончено забавная, но перспективы использования выглядят крайне смутно.

  18. Georg пишет:

    именно XP)

  19. Georg пишет:

    поставил процессор E8400, пытался запустить то, что не запустилось при E5300 – безуспешно. ошибка – та же. опции vt-x и vt-d в bios включил.
    может мне ядро перекомпилировать в связи с новым процессором? хоят что там менять в конфиге? тип процессора там для E5300 и E8400 указывать надо один и тот же Core2Duo – это так?

  20. Georg пишет:

    при компиляции tools возникает ошибка, но компилято идет дальше
    KVM support no – (linux/kvm.h: No such file or directory, #error Invalid KVM version, #error Missing KVM capability KVM_CAP_USER_MEMORY, #error Missing KVM capability KVM_CAP_SET_TSS_ADDR, #error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS)

    выполнил
    yum install python-virtinst.noarch qemu.i386
    и по прежнему ошибка не уходит
    что можно сделать еще?

  21. Alsigned пишет:

    @Georg
    Смотри:
    1. Ядро без xen у тебя загружается
    2. Tools и Stubdom нужны уже после загрузки – процесс загрузки от них не зависит.

    Отсюда вывод поблема либо в xen, либо в мамке.

    Сбрось кофиг ядра на почту (на странице о блоге), интересно посмотреть.

  22. Alsigned пишет:

    @Georg
    В Xen 4.0 Qemu собирается вместе с tools, причем более поздней версии нежели чем в репозитории RPMForge, поэтому yum install qemu лучше было не делать.
    Не большие ошибки во время компиляции это вполне нормальное явление, тем более что KVM это немножко другая вещь и к работе xen отношения особо не имеет.

    А если не секрет в чем конкретно заключается необходимость в установке именно Xen 4.0? Почему бы не поставить 3.0 из базового репозитория?

    PS: Не смотря на восторг от новой версии, я все-таки оставил на серверах Xen 3.0 с ядром 2.6.18.

  23. Georg пишет:

    конфиг сбросил (тема письма “конфин от Georg”)
    насчет 4й версии я подумал что там есть проброс видеокарты, а вобще мне нужно виртуализировать винду. какая версия минимум xen и ядра нужна для этого?
    посмотри плиз конфиг

  24. Alsigned пишет:

    @Georg
    Проброс видеокарты это конечно здорово, но область применения сего чуда для меня все-таки остается загадкой.

    Для виртуализации Windows вполне подойдет Xen 3.0 включенный в CentOS-5.5, устанавливается достаточно просто:
    yum install xen kernel-xen virt-manager.

    Конфигурашка ядра у тебя вроде правильная. На тестовой машинке ядро собралось, xen 4.0 запустился и даже паровиртуальный гость начал устанавливаться. Но тк такой же мамки у меня нет, то все эксперименты отменяются.

  25. Georg пишет:

    Спасибо за проверку конфигурации. Теперь мне остается искать патчи под мат плату или менять последнюю… Сообщи какое железо было у тебя на тесте.
    Буду пробовать 3.0….
    Скажи, а что за ядро такое (вариант загрузки второй по счету) в CentOS-5.5 ? он имеет приписку “xen”? Это ядро я загружал, но на команду xm я получил ответ, что команда не найдена. там какой-то xen 2.6

  26. Alsigned пишет:

    @Georg
    Мат. плата Giga-Byte GA-EG41MFT-US2H процессор Core 2 Quad Q9400.

    По номеру в списке сказать сложно какое это ядро, но если на конце приписка xen, то скорее всего это CentOS (2.6.18-194.32.1.el5xen) – ядро для xen установленное через yum install kernel-xen.

    Если xm не найден – то скорее всего не установлен пакет xen:
    yum install xen

    Если хочешь пиши в аську расскажу подробнее.

  27. Georg пишет:

    в аську тебя добавил
    вопрос: к мат плате Giga-Byte GA-EG41MFT-US2H какое еще важное железо подключено?

  28. Alsigned пишет:

    @Georg
    Никакого, если не считать ATA DVD-RW, SATA HDD и PS/2 клавиатуры.

  29. ALex пишет:

    Кто уже пробрасывал видеокарту в HVM Windows? или хотя бы пытался это делать. Очень нужно, с чего начать?

  30. Alsigned пишет:

    @ALex
    Я как только вышел xen 4.0 сразу заразился этой идеей, но потом так и не смог найти ей человеческого применения. Переключать видеокарту между виртуалками нельзя – отсюда получается что намного эффективнее поставить две ОС на “разных жестких дисках”.

    В первую очередь собираем и устанавливаем Xen 4.0, после того как все заработало в grub добавляем:
    vmlinuz-2.6.32.24 … pciback.permissive xen-pciback.hide=(02:00.0)

    В конфиг виртуалки дописываем:
    gfx_passthru=1
    pci=[ '02:00.0' ]

    02:00.0 – номер видеокарты из lspci
    Приближенно так.

  31. centos пишет:

    Установлен виртуально виндовс XP на Centos. После неаккуратного выключения компьютереа стало выходить такое. Как решается такая бага?

    Traceback (most recent call last):
    File “/usr/share/virt-manager/virtManager/engine.py”, line 501, in run_domain
    vm.startup()
    File “/usr/share/virt-manager/virtManager/domain.py”, line 575, in startup
    self.vm.create()
    File “/usr/lib64/python2.4/site-packages/libvirt.py”, line 333, in create
    if ret == -1: raise libvirtError (‘virDomainCreate() failed’, dom=self)
    libvirtError: Ошибка POST: xend_post: ошибка демона xen: (xend.err ‘Device 5632 (vbd) could not be connected. Hotplug scripts not working.’)

Оставить комментарий