Инсталляция Xen

Материал из Xgu.ru

(Перенаправлено с xen/installation)
Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Автор: Игорь Чубин
Короткий 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

Icon-caution.gif

В 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

Icon-caution.gif

Оставьте старый вариант загрузки, чтобы его можно было использовать, если 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

Icon-caution.gif

В текущей сборке 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 операционными системами).

Процедура подготовки гостевой системы описана на соответствующей странице:

В качестве гостевой системы также могут использоваться различные эмуляторы, упакованные в домен Xen, например Xenomips ­- эмулятор маршрутизатора Cisco 7200.

[править] Дополнительная информация


Сборка Xen из архива исходных текстов:


Инсталляция на Debian GNU/Linux:

Инсталляция на Linux других дистрибутивов:

Документация по Xen:

[править] Примечания

  1. [1]
Xen
Xen

Виртуализация и паравиртуализация
Эмуляция | Виртуализация | Паравиртуализация | Рекурсивная виртуализация
Паравиртуальные драйверы | Виртуализация ввода/вывода

Общие вопросы по Xen
Аппаратные требования Xen | Поддержка Xen операционными системами | Поддерживаемые аппаратные архитектуры |
Примеры использования Xen | Сравнение виртуальных машин |
Хостинг на Xen
Альтернативы Xen

свободные: KVM | LXC | OpenVZ | VServer | QEMU | VirtualBox
проприетарные: Hyper-V | VMware ESX Server

Технические вопросы
Инсталляция Xen | Конфигурационный файл домена
ОС в Xen: Linux small icon.png Linux | Solaris small icon.png OpenSolaris | Freebsd small icon.png FreeBSD | Openbsd small icon.png OpenBSD | Netbsd small icon.png NetBSD | Windows xp small icon.png Windows XP | Windows vista small icon.png Windows Vista
Устройства: Блочные | USB | SCSI | Сеть | PV-драйверы для Linux | PV-драйверы для Windows | Консоль

Распределение ресурсов между доменами | Перенос системы внутрь Xen | HVM -> PV

Управление и кластеризация | Enomalism | Xen+DRBD | Ganeti | Convirt 2.0 | SkyCover Infrastructure

[править] Подготовка хост-системы 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).