Инсталляция Xen
Материал из Xgu.ru
- Автор: Игорь Чубин
- Короткий URL: xen/installation
На этой странице описывается процедура подготовки Linux-машины для использования в качестве хост-системы (домена 0) Xen. Хост система работает под управлением Debian GNU/Linux.
Содержание |
[править] Начальные требования
Xen инсталлируется не на чистую машину. Для того чтобы развернуть Xen необходима установленная и настроенная операционная система, одна из тех, которая может работать в домене 0.
Ниже описывается процедура инсталляции Xen внутрь Linux. Обратите внимание: несмотря на то, что инсталляция Xen производится внутрь установленной системы, запуск производится в обратном порядке: сначала запускается гипервизор Xen, а потом ядро операционной системы.
[править] Получение Xen
Xen можно получить одним из нескольких способов:
- Скачать архив исходных кодов;
- Получить исходный код непосредственно из репозитория Xen;
- Воспользоваться пакетом Xen, входящим в ваш дистрибутив Linux.
В первом и втором случае Xen нужно будет собирать из исходников, в третьем — в систему, как правило, устанавливаются уже откомпилированные пакеты.
В современные дистрибутивы входят все необходимые для построения домена 0 пакеты. Ниже рассматривается процедура инсталляции Xen в Debian GNU/Linux. Для других дистрибутивов процедура будет незначительно отличаться.
Процедура инсталляции Xen из исходных текстов описывается на странице:
[править] Инсталляция Xen в домене 0 в Debian GNU/Linux
- Журнал инсталляции и начальной настройки Xen в домене 0 Debian GNU/Linux [2]
[править] Инсталляция недостающего программного обеспечения
Для превращения инсталляции Linux в инсталляцию Xenolinux необходимо установить несколько пакетов программного обеспечения и изменить конфигурацию загрузчика. Полученная в результате система будет доменом 0 Xen.
Необходимо установить:
- Гипервизор;
- Ядро, портированное на Xen, и способное работать в домене 0;
- Утилиты Xen, необходимые для управления другими доменами.
В unstable-репозитории Debian в настоящий момент есть не все пакеты, необходимые для инсталляции Xen в домене 0. В частности, там не хватает ядра Linux, работающего в домене 0.
Для инсталляции ядра придётся воспользоваться более старым репозиторием пакетов Debian, например etch:
# vi /etc/apt/sources.list # egrep 'sid|etch' /etc/apt/sources.list deb http://debian.org.ua/debian sid main deb http://debian.org.ua/debian etch main # apt-get update
Проверяем, есть ли необходимое нам ядро:
# apt-cache search xen 2.6.18 ... linux-image-2.6.18-6-xen-686 - Linux 2.6.18 image on i686 linux-image-2.6.18-6-xen-vserver-686 - Linux 2.6.18 image on i686 linux-modules-2.6.18-6-xen-686 - Linux 2.6.18 modules on i686 linux-modules-2.6.18-6-xen-vserver-686 - Linux 2.6.18 modules on i686 ... xen-linux-system-2.6.18-6-xen-686 - XEN system with Linux 2.6.18 image on i686 xen-linux-system-2.6.18-6-xen-vserver-686 - XEN system with Linux 2.6.18 image on i686
В unstable-репозитории Debian GNU/Linux уже появилось ядро версии 2.6.26, которое можно использовать в домене 0. В этом ядре используются патчи из проекта OpenSuSE |
Кроме ядра понадобятся ещё гипервизор и утилиты:
# apt-cache search xen 3.2 xen-docs-3.2 - Documentation for Xen xen-hypervisor-3.2-1-i386 - The Xen Hypervisor on i386 xen-hypervisor-3.2-1-i386-nonpae - The Xen Hypervisor on i386 without pae xen-utils-3.2-1 - XEN administrative tools
Когда мы выяснили как точно называются все необходимые для инсталляции пакеты, можно приступать к их инсталляции.
# apt-get install linux-image-2.6.18-6-xen-686 xen-hypervisor-3.2-1-i386 xen-utils-3.2-1
В качестве зависимостей будет установлено большое количество программного обеспечения, в том числе:
- bridge-utils — программы для управления модулем bridge ядра Linux;
- libc6-xen — библиотека GNU C Library, оптимизированная для работы в домене Xen.
После того как программное обеспечение установлено, нужно модифицировать конфигурацию загрузчика (она модифицируется автоматически, но стоит проверить, действительно ли там всё так, как нужно).
[править] Загрузчик
# vi /boot/grub/menu.lst # cat /boot/grub/menu.lst | grep -v ^# timeout 5 default 0 fallback 1 title Xen + GNU/Linux root (hd0,0) kernel /boot/vmlinuz-2.6.25-2-686 root=/dev/sda1 initrd /boot/initrd.img-2.6.25-2-686 title Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.18-6-xen-686 root (hd0,0) kernel /boot/xen-3.2-1-i386.gz dom0_mem=256000 module /boot/vmlinuz-2.6.18-6-xen-686 root=/dev/sda1 ro console=tty0 module /boot/initrd.img-2.6.18-6-xen-686
Оставьте старый вариант загрузки, чтобы его можно было использовать, если Xen загрузить не удастся. |
Обратите внимание, что в качестве аргумента директивы kernel указывается не ядро операционной системы, а гипервизор. Он должен быть загружен первым — именно поэтому его имя и указывается как аргумент kernel; естественно, от этого он не становится ядром. В качестве дополнительного аргумента в строке kernel указывается необязательный параметр — количество памяти, выделяемой домену 0:
dom0_mem=256000
(в килобайтах).
Если не указать этот параметр, домену 0 сначала будет выделена вся память, а затем она будет по мере необходимости отбираться у него с помощью специального balloon-драйвера.
Ядро операционной системы загружается следующей строкой, с помощью директивы module. Ядру передаются точно такие же параметры, как и всегда.
Следующая строка загружает initrd. Она, как и всегда, нужна только в том случае, если ядро не сможет подмонтировать корневую файловую систему самостоятельно.
Сделанных изменений достаточно для того чтобы загрузить Xenolinux в домене 0. Можно попробовать перезагрузить машину и посмотреть, что получится. Если что-то пойдёт не так, вы сможете вернуться к использованному ранее варианту загрузки.
[править] Сеть
# vi /etc/xen/xend-config.sxp --- /tmp/l3-saved-21846.11690.24532 2008-07-09 17:33:43.000000000 +0000 +++ /etc/xen/xend-config.sxp 2008-07-09 17:34:20.000000000 +0000 @@ -125,7 +125,7 @@ # Your default ethernet device is used as the outgoing interface, by default. # To use a different one (e.g. eth1) use # -# (network-script 'network-bridge netdev=eth1') +(network-script 'network-bridge netdev=eth0') # # The bridge is named xenbr0, by default. To rename the bridge, use # @@ -136,7 +136,7 @@ # two fake interfaces per guest domain. To do things like this, write # yourself a wrapper script, and call network-bridge from it, as appropriate. # -(network-script network-dummy) +#(network-script network-dummy) # The script used to control virtual interfaces. This can be overridden on a # per-vif basis when creating a domain or a configuring a new vif. The
# cat /etc/network/interfaces auto lo eth0 iface lo inet loopback iface eth0 inet static address 192.168.15.250 network 192.168.15.0 netmask 255.255.255.0 broadcast 192.168.15.255
# brctl show bridge name bridge id STP enabled interfaces eth0 8000.0007e90b2b1d no peth0
[править] Поддержка HVM
В текущей сборке Xen 3.4 для Debian отсутствует поддержка HVM[1]. |
[править] Инсталляция гостевого домена
# lvcreate -L2G -n vol2 /dev/XEN Logical volume "vol2" created
Создайте файловую систему:
# mkfs.ext3 /dev/XEN/vol2 mke2fs 1.40.11 (17-June-2008) Warning: 256-byte inodes not usable on older systems ... Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 26 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Подмонтируйте будущую файловую систему домена в пустой каталог:
# mount /dev/XEN/vol2 /mnt
123 Выполните инсталляцию базовой системы:
# debootstrap sid /mnt http://192.168.15.254:9999/debian/ I: Configuring libdevmapper1.02.1... I: Configuring debconf-i18n... I: Configuring libblkid1... I: Configuring dpkg... I: Configuring sysvinit-utils... I: Configuring bash... I: Configuring debconf... I: Configuring lsb-base... I: Configuring procps... I: Configuring libpam0g... ... I: Configuring apt... I: Configuring netbase... I: Configuring libept0... I: Configuring apt-utils... I: Configuring aptitude... I: Configuring klogd... I: Configuring tasksel-data... I: Configuring sysklogd... I: Configuring tasksel... I: Base system installed successfully.
Скопируйте внутрь базовой системы модули ядра, под которым будет работать домен.
# cp -R /lib/modules/2.6.18-6-xen-686 /mnt/lib/modules/
Подготовьте каталог для выполнения chroot в него. Для этого сделайте привязку необходимых каталогов:
# mount --bind /dev /mnt/dev/ # mount --bind /proc /mnt/proc # mount --bind /sys /mnt/sys
После этого можно сделать chroot внутрь новой системы и установить в ней пакет libc6-xen:
# chroot /mnt linux0:/# linux0:/# linux0:/# apt-get install libc6-xen Reading package lists... Done Building dependency tree... Done The following NEW packages will be installed: libc6-xen 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 1268kB of archives. After this operation, 2789kB of additional disk space will be used. WARNING: The following packages cannot be authenticated! libc6-xen Install these packages without verification [y/N]? Y Get:1 http://192.168.15.254 sid/main libc6-xen 2.7-12 [1268kB] Fetched 1268kB in 0s (5310kB/s) Selecting previously deselected package libc6-xen. (Reading database ... 7366 files and directories currently installed.) Unpacking libc6-xen (from .../libc6-xen_2.7-12_i386.deb) ... Setting up libc6-xen (2.7-12) ... linux0:/# exit
Дальнейшая доработка.
Скопировать файл с настройками сетевых интерфейсов.
# cp /etc/network/interfaces /mnt/etc/network/interfaces
Подправить его.
# vi /mnt/etc/network/interfaces --- /tmp/l3-saved-2333.28139.25306 2008-07-09 18:25:05.000000000 +0000 +++ /mnt/etc/network/interfaces 2008-07-09 18:25:43.000000000 +0000 @@ -1,11 +1,9 @@ auto lo eth0 iface lo inet loopback iface eth0 inet static - address 192.168.15.250 + address 192.168.15.54 network 192.168.15.0 netmask 255.255.255.0 broadcast 192.168.15.255 - up /etc/xen/scripts/network-bridge start bridge=br0 netdev=eth0 - up ifconfig br0 up - up route add default gw 192.168.15.254 + gateway 192.168.15.254
Подправить файл /etc/fstab:
# vi /mnt/etc/fstab --- /tmp/l3-saved-2333.30184.23159 2008-07-09 18:26:04.000000000 +0000 +++ /mnt/etc/fstab 2008-07-09 18:27:36.000000000 +0000 @@ -1 +1,3 @@ -# UNCONFIGURED FSTAB FOR BASE SYSTEM +proc /proc proc defaults 0 0 +/dev/hda1 / ext3 defaults 0 0 +
После того как домен подготовлен, размонтируем сначала то, что смонтировано поверх его корневой файловой системы, а потом и её саму.
# umount /mnt/proc # umount /mnt/dev # umount /mnt/sys # umount /mnt
Создаём конфигурационный файл домена.
# zcat /usr/share/doc/xen-utils-common/examples/xmexample1.gz > /etc/xen/vm2
# grep -v ^# /etc/xen/vm2 | grep -xv '' kernel = "/boot/vmlinuz-2.6.18-6-xen-686" ramdisk = "/boot/initrd.img-2.6.18-6-xen-686" builder='linux' memory = 64 name = "vm2" vif = [ 'mac=00:16:3e:00:00:04, bridge=br0' ] disk = [ 'phy:XEN/vol2,hda1,w' ] root = "/dev/hda1 ro" extra = ""
После того как конфигурационный файл домена создан, создаём сам домен, то есть, запускаем виртуальную машину. Ключ -c означает, что мы хотим сразу же подключиться к консоли машины.
# xm create -c vm2 NX (Execute Disable) protection: active ACPI in unprivileged domain disabled Built 1 zonelists. Total pages: 18432 Kernel command line: root=/dev/hda1 ro Enabling fast FPU save and restore... done. Enabling unmasked SIMD FPU exception support... done. Initializing CPU#0 PID hash table entries: 512 (order: 9, 2048 bytes) Xen reported: 2327.498 MHz processor. Dentry cache hash table entries: 16384 (order: 4, 65536 bytes) ... Setting kernel variables (/etc/sysctl.conf)...done. Mounting local filesystems...done. Activating swapfile swap...done. Setting up networking.... Configuring network interfaces...done. INIT: Entering runlevel: 2 Starting system log daemon.... Starting kernel log daemon.... Starting periodic command scheduler: crond. Debian GNU/Linux lenny/sid linux0 tty1 login:
Отключиться от консоли можно при помощи комбинации клавиш ctrl-].
Если просмотреть список доменов, будет виден запущенный домен vm2:
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 250 2 r----- 782.0 vm2 1 64 1 -b---- 4.4
[править] Что дальше?
После того как домен 0 готов, можно приступать к подготовке гостевых систем — образов для запуска доменов U.
Гостевой домен может работать под управлением различных операционных систем (подробнее: Поддержка Xen операционными системами).
Процедура подготовки гостевой системы описана на соответствующей странице:
- Linux в Xen
- FreeBSD в Xen
- Windows XP в Xen (требует поддержки виртуализации на аппаратном уровне)
В качестве гостевой системы также могут использоваться различные эмуляторы, упакованные в домен Xen, например Xenomips - эмулятор маршрутизатора Cisco 7200.
[править] Дополнительная информация
Сборка Xen из архива исходных текстов:
- http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/ Архивы исходных текстов Xen
- Mercurial(hg) Cheatsheet for Xen - Советы по использованию Mercurial для получения текущего архива Xen
Инсталляция на Debian GNU/Linux:
- Xen Debian Quick Start
- The Perfect Xen 3.0 Setup For Debian
- Installing Xen 3.0 upon Debian Unstable, with a custom Kernel
Инсталляция на Linux других дистрибутивов:
- UbuntuBreezyHowTo на XenSource
- UbuntuHoaryHowTo на XenSource
- HOWTO Xen and Gentoo
Документация по Xen:
- Xen v3.0 Users Manual
- Xen Documentation
- HowTos - сборник HowTo на XenSource
- Xen Wiki на XenSource
[править] Примечания
|
---|
[править] Подготовка хост-системы Xen (устаревшая процедура)
[править] Подготовка домена0
Пусть:
- В качестве хост-машины (dom0) будет использоваться Debian GNU/Linux.
- Будут использовать бинарные версии, доступные в репозитории Debian GNU/Linux.
Выполните инсталляцию бинарных версий
утилит Xen:
# apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0
Версии могут отличаться; найти текущие версии можно с помощью apt-cache:
%# apt-cache search xen hypervisor
В том случае, если в вашей машине >4GB оперативной памяти, используйте PAE-версию гипервизора Xen: xen-hypervisor-3.0-i386-pae.
Проинсталлируйте программное обеспечение, используемое скрипта Xen для настройки сети:
# apt-get install iproute bridge-utils
Отключите поддержку TLS, иначе работа виртуальных машин существенно замедлится. (этот шаг нужен только в более старых системах; в частности в дистрибутиве sarge Debian GNU/Linux):
# mv /lib/tls /lib/tls.disabled
В том случае, если вы используете Etch Debian, необходимо установить libc6-xen:
# apt-get install libc6-xen
Подготовьте Grub к загрузке Xen. Такие строки должны присутствовать в конфигурационном файле /boot/grub/menu.lst:
title Xen 3.0 / XenLinux 2.6 kernel /boot/xen-3.0-i386.gz module /boot/xen0-linux-2.6.16-xen root=/dev/hda1 ro
Подготовьте ядро, под управлением которого будет работать домен Dom0 Xen: Для этого:
- Скачайте исходный код ядра Linux;
- Наложите на него патч Xen;
- Откомпилируйте изменённое ядро.
Получение ядра (используется ядро Debian GNU/Linux):
# apt-get install kernel-source-2.6.16
Разархивирование ядра:
# cd /usr/src # tar xfj linux-source-2.6.16.tar.bz2
Список патчей для ядра Debian GNU/Linux доступен здесь: https://alioth.debian.org/project/showfiles.php?group_id=30894.
Получение патча (точный адрес патча необходимо уточнить на странице, указанной выше):
# cd /usr/src # wget --no-check-certificate https://alioth.debian.org/download.php/1561/linux-2.6 16-xen3.0.2-hg9629.patch.gz
Наложение пачта:
# cd /usr/src/linux-source-2.6.16 # zcat ../linux-2.6.16-xen3.0.2-hg9629.patch.gz | patch -p1 patching file include/xen/interface/vcpu.h patching file include/xen/interface/version.h ... Hunk #1 succeeded at 422 (offset 4 lines). Hunk #2 succeeded at 717 (offset 5 lines). ...
После того как патч наложен, можно приступить к конфигурированию и сборке ядра:
# make menuconfig [configure like a normal machine] Processor type and features ---> Subarchitecture Type (Xen-compatible) Xen ---> [*] Privileged Guest (domain 0) [*] Block-device backend driver [*] Network-device backend driver [*] Scrub memory before freeing it to Xen [*] Block-device frontend driver [*] Network-device frontend driver [*] Disable serial port drivers <*> Export Xen attributes in sysfs
После конфигурирования, выполните сборку ядра с помощью make-kpkg:
# make-kpkg --append-to-version -xen kernel_image
В результате должен быть получен пакет Debian, который можно проинсталлировать в с помощью программы dpkg.
# dpkg -i ../linux-xen0-2.6.16-xen_10.00.Custom_i386.deb
Ядро будет проинсталлировано в каталог /boot.
/boot/xen0-linux-2.6.16-xen
Подготовка образа initrd:
В том случае, если вы используете при загрузке виртуальный диск initrd,
его необходимо подготовить для работы с новым ядром.
Сейчас можно выполнить перезагрузку системы, и загрузиться на новом ядре. Система будет работать под управление Xen, в домен Dom0.
Ещё раз перепроверьте содержимое конфигурационного файла /boot/grub/menu.lst и перезагружайте систему.
[править] Подготовка сетевого моста
- Основная статья: Сеть в Xen
По умолчанию пакеты Debian Xen не модифицируют сетевые настройки при инсталляции.
Необходимо добавить мост br-xen в файлы /etc/network/interfaces.
auto br-xen iface br-xen inet static address 192.168.12.25 netmask 255.255.255.0 gateway 192.168.12.1 bridge_ports eth0 # optional bridge_maxwait 0
Дополнительные сведения о конфигурировании сетевых мостов в Linux, можно узнать в файле /usr/share/doc/bridge-utils/README.Debian.gz, а также в справочном руководстве man на странице brctl(8).