Автор: Installing Xen 3.3 With Kernel 2.6.27 On Ubuntu 8.10 (x86_64)
Перевод: Сгибнев Михаил
В этом руководства показывается, как установить Xen 3.3 на хост Ubuntu 8.10(dom0). Xen 3.3 доступен в репозитарии Ubuntu 8.10, но ядро Ubuntu 8.10 (2.6.27-x) используется как domU, то есть выступает в роли гостевой машины, но не на уровне dom0. Поэтому мы должны собрать наше собственное dom0 ядро.
Как обычно, не дается никаких гарантий и вы предупреждены о возможных последствиях.
(1) Предварительное примечание
Я использую систему Ubuntu 8.10 x86_64 с именем server1.example.com и IP адресом 192.168.0.100 в качестве dom0. В роли domU будет выступать Debian Lenny.
В этом руководстве будет показано, как создать image-based виртуальную машину и LVM-based виртуальную машину.
Все действия будут выполняться с привилегиями пользователя root.
(2) Устанавливаем Xen
Сперва необходимо обновить систему:
apt-get upgrade
И установить последнюю версию ядра из репозитария Ubuntu:
apt-get install linux-image-server linux-server
Затем, установим Xen 3.3 и все необходимое для сборки ядра dom0:
apt-get install ubuntu-xen-server build-essential libncurses5-dev gawk mercurial
Скачиваем исходные тексты ядра 2.6.27 Xen
mkdir -p ~/build/linux-2.6.27-xen
cd /usr/src/
hg clone http://xenbits.xensource.com/ext/linux-2.6.27-xen.hg
И конфигурируем это ядро:
cd linux-2.6.27-xen.hg
make O=~/build/linux-2.6.27-xen/ menuconfig
В меню конфигурации ядра выберите следущие опции:
General setup ---> Choose SLAB allocator (SLUB (Unqueued Allocator)) ---> (X) SLAB
Processor type and features ---> Subarchitecture Type (PC-compatible) ---> (X) Enable Xen compatible kernel
Bus options (PCI etc.) ---> [*] PCI support
[*] Xen PCI Frontend
[ ] Xen PCI Frontend Debugging (NEW)
Измените
Networking support ---> Networking options ---> <*> 802.1d Ethernet Bridging
Отключите поддержку 10000 Mbit Ethernet(в противном случае можно получить ошибку при сборке):
Device Drivers ---> [*] Network device support ---> [ ] Ethernet (10000 Mbit) --->
Затем обратимся к разделу Xen (вы должны выбрать версию, совместимую с Xen (3.0.4 или более позднюю) вместо версии Xen (3.0.2 или более позднюю)):
Device Drivers ---> XEN ---> [*] Privileged Guest (domain 0)
<*> Backend driver support (NEW)
<*> Block-device backend driver (NEW)
<*> Block-device tap backend driver (NEW)
<*> Network-device backend driver (NEW)
(8) Maximum simultaneous transmit requests (as a power of 2) (NEW)
[ ] Pipelined transmitter (DANGEROUS) (NEW)
< > Network-device loopback driver (NEW)
<*> PCI-device backend driver (NEW)
PCI Backend Mode (Virtual PCI) --->
[ ] PCI Backend Debugging (NEW)
< > TPM-device backend driver (NEW)
<*> User-space granted page access driver (NEW)
<*> Framebuffer-device frontend driver (NEW)
<*> Keyboard-device frontend driver (NEW)
[*] Disable serial port drivers (NEW)
<*> Export Xen attributes in sysfs (NEW)
(256) Number of guest devices (NEW)
Xen version compatibility (3.0.4 and later) --->
После этого мы компилируем и устанавливаем ядро:
make O=~/build/linux-2.6.27-xen/
make O=~/build/linux-2.6.27-xen/ modules_install install
Обратим свой взор на каталог /boot:
root@server1:~# ls -l /boot
total 78364
-rw-r--r-- 1 root root 504280 2009-01-29 22:23 abi-2.6.27-11-server
-rw-r--r-- 1 root root 503560 2008-11-04 22:22 abi-2.6.27-7-server
-rw-r--r-- 1 root root 85313 2009-01-29 22:23 config-2.6.27-11-server
-rw-r--r-- 1 root root 87256 2009-02-12 20:51 config-2.6.27.5
-rw-r--r-- 1 root root 85319 2008-11-04 22:22 config-2.6.27-7-server
drwxr-xr-x 2 root root 4096 2009-02-12 22:28 grub
-rw-r--r-- 1 root root 8983433 2009-02-12 22:28 initrd.img-2.6.27-11-server
-rw-r--r-- 1 root root 8979323 2009-02-12 22:26 initrd.img-2.6.27-7-server
drwx------ 2 root root 16384 2009-02-12 19:30 lost+found
-rw-r--r-- 1 root root 124152 2008-09-11 22:11 memtest86+.bin
-rw-r--r-- 1 root root 1354638 2009-01-29 22:23 System.map-2.6.27-11-server
-rw-r--r-- 1 root root 1258568 2009-02-12 20:51 System.map-2.6.27.5
-rw-r--r-- 1 root root 1351952 2008-11-04 22:22 System.map-2.6.27-7-server
-rw-r--r-- 1 root root 1130 2009-01-29 22:27 vmcoreinfo-2.6.27-11-server
-rw-r--r-- 1 root root 1129 2008-11-04 22:25 vmcoreinfo-2.6.27-7-server
-rw-r--r-- 1 root root 2341536 2009-01-29 22:23 vmlinuz-2.6.27-11-server
-rw-r--r-- 1 root root 2192827 2009-02-12 20:51 vmlinuz-2.6.27.5
-rw-r--r-- 1 root root 2338976 2008-11-04 22:22 vmlinuz-2.6.27-7-server
-rw-r--r-- 1 root root 470144 2008-10-06 20:15 xen-3.3.gz
root@server1:~#
Как вы видите, появилось новое ядро 2.6.27.5, без ramdisk, поэтому собираем его:
depmod 2.6.27.5
update-initramfs -c -k 2.6.27.5
И обновляем загрузчик:
update-grub
После этого открываем файл /etc/modules и убедимся в том, что в файле присутствует строка loop max_loop=64(этот шаг необходим только при создании image-based виртуальной машины):
vi /etc/modules
[...]
loop max_loop=64
После чего перезагружаем машину:
reboot
Выполним команду uname -r для того, чтобы убедиться в правильной установке ядра:
root@server1:~# uname -r
2.6.27.5
root@server1:~#
(3) Создаем Image-Based виртуальную машину
Для создания виртуальных машин мы будем использовать xen-tools, так как этот инструмент справляется с задачей легко и непринужденно. Для получения дополнительной информации, обратитесь к этому документу.
[ad name=»Google Adsense»]
Теперь мы редактируем файл /etc/xen-tools/xen-tools.conf. В этом файле содержатся значения по умолчанию для скрипта xen-create-image, которые будут использованы, если вы не измените их из командной строки. Я изменил нижеследущее, оставив остальное нетронутым:
[...]
dir = /home/xen
[...]
memory = 256Mb
[...]
dist = lenny # Default distribution to install.
[...]
gateway = 192.168.0.1
netmask = 255.255.255.0
broadcast = 192.168.0.255
[...]
passwd = 1
[...]
kernel = /boot/vmlinuz-2.6.27-11-server
initrd = /boot/initrd.img-2.6.27-11-server
[...]
mirror = http://ftp.de.debian.org/debian/
[...]
serial_device = hvc0
[...]
disk_device = xvda #default
[...]
В строках kernel и initrd мы указываем не то ядро, которое мы собрали в предидущей главе, так как оно предназначено только для работы в dom0 и не будет работать как ядро domU. Пожалуйста, используйте одно из ядер Ubuntu, например — 2.6.27-11-server. Так как дефолтное ядро Ubuntu уже собрано с поддержкой Xen, нам нет необходимости в повторной сборке.
Параметр dir указывает нам на каталог, где будут храниться виртуальные машины. dist указывает на то, какой дистрибутив будет установлен — в данном случае Debian Lenny
Параметр passwd = 1 указывает на необходимость задания пароля для root при создании нового домена.
Убедитесь, что вы указали сетевые параметы — gateway, netmask и broadcast address. Если вы этого не сделали и не указали их в командной строке, то рискуете осаться без сети на виртуальной машине.
Очень важным параметром является serial_device = hvc0 (не xvc0 или tty1!), если вы допустите ошибку, то не сможете попасть на консоль виртуальной машины.
Прежде, чем мы начнем, создадим каталог для хранения виртуальных машин:
mkdir /home/xen
Ну, создаем наш первый домен — xen1.example.com, с адресом 192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
Если вы указываете какие-либо параметры в командной строке, то они имеют больший приоритет, чем указанные в файле /etc/xen-tools/xen-tools.conf. Еще раз проверьте, что добавили в файл функцию —role=udev, иначе виртуальная машина не загрузится. Для получения более детальной информации, воспользуйтесь командой man xen-create-image.
Процесс создания виртуальной машины займет несколько минут. В ходе выполнения будет наблюдаться примерно следущее:
root@server1:~# xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
General Information
--------------------
Hostname : xen1.example.com
Distribution : lenny
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : sparse
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.27-11-server
Initrd path : /boot/initrd.img-2.6.27-11-server
Networking Information
----------------------
IP Address 1 : 192.168.0.101 [MAC: 00:16:3E:1E:C4:E1]
Netmask : 255.255.255.0
Broadcast : 192.168.0.255
Gateway : 192.168.0.1
Creating partition image: /home/xen/domains/xen1.example.com/swap.img
Done
Creating swap on /home/xen/domains/xen1.example.com/swap.img
Done
Creating partition image: /home/xen/domains/xen1.example.com/disk.img
Done
Creating ext3 filesystem on /home/xen/domains/xen1.example.com/disk.img
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
root@server1:~#
Обратимся к файлу /etc/xen/xen1.example.com.cfg, чтобы посмотреть — чтоже там такое?
#
# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 3.9 on Fri Feb 13 00:28:34 2009.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.27-11-server'
ramdisk = '/boot/initrd.img-2.6.27-11-server'
memory = '256'
#
# Disk device(s).
#
root = '/dev/xvda2 ro'
disk = [
'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w',
'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w',
]
#
# Hostname
#
name = 'xen1.example.com'
#
# Networking
#
vif = [ 'ip=192.168.0.101,mac=00:16:3E:1E:C4:E1' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
Обратите внимание: если у вас dual-core или quad-core CPU и вы хотите, чтобы виртуальная машина использовала все ядра процессора, то добавьте к файлу конфигурации vcpus = ‘2’ или vcpus = ‘4’.
Перед первым запуском виртуальной машины вам необходимо примонтировать хранилище и скопировать в него ядро domU (команда xen-create-image скопировала в виртуальную машину ядро dom0 kernel 2.6.27.5, а нам его необходимо заменить на 2.6.27-11-server).
mount -o loop /home/xen/domains/xen1.example.com/disk.img /mnt
cd /mnt/lib/modules/
cp -pfr /lib/modules/2.6.27-11-server/ .
cd
umount /mnt
Для запуска вируальной машины выполните команду:
xm create /etc/xen/xen1.example.com.cfg
Для подключения к консоли виртуальной машины, выполните:
xm console xen1.example.com
Для выхода из консоли нажмите CTRL+], или CTRL+5 if если вы используете PuTTY, или используйте SSH для подключения к 192.168.0.101.
Для получения списка виртуальных машин, испольуйте команду xm list:
root@server1:~# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 3499 2 r----- 2826.0
xen1.example.com 22 256 1 -b---- 5.8
root@server1:~#
Для выключения виртуальной машины, испольуйте команду xm shutdown xen1.example.com.
Если вы хотите, чтобы виртуальная машина стартовала при следующей начальной загрузке корневой ситемы, то выполните команду:
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Приведу список самых популярных команд:
- xm create -c /path/to/config — Старт виртуальной машины.
- xm shutdown
— Останов виртуальной машины. - xm destroy
— Немедленный останов виртуальной машины. Аналаогично нажатию кнопки питания. - xm list — Список запущенных виртуальных машин.
- xm console
— Подключение к виртуальной машине. - xm help — Список всех команд.
Для того, чтобы просмотреть список виртуальных машин, созданных утилитой xen-create-image, воспользуйтесь
командой xen-list-images:
root@server1:~# xen-list-images
Name: xen1.example.com
Memory: 256
IP: 192.168.0.101
root@server1:~#
(4) Создаем LVM-Based виртуальную машину
В этой главе мы создадим виртуальную машину использующую в качестве хранилища раздел LVM орневого домена, вместо файла. Виртуальные машины, использующие в качестве хранилища файл, черезвычайно медленны и сильно нагружают систему ввода/вывода.
В данном примере, я использую Ubuntu 8.10 с LVM группой /dev/vg0, размером 465GB. /dev/vg0 содержит два логических раздела, /dev/vg0/root и /dev/vg0/swap_1, которые занимают 48GB простванства, а остельное может быть использовано для создания логических разделов виртуальных машин.
root@server1:~# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 465.26 GB
PE Size 4.00 MB
Total PE 119106
Alloc PE / Size 12396 / 48.42 GB
Free PE / Size 106710 / 416.84 GB
VG UUID 8t178I-M2Fa-T9U6-8b76-Svjy-E7NW-fYIK1D
root@server1:~#
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID CtAiSe-jr1F-Ibvj-80zR-DRnK-dgPz-OPoxnv
LV Write Access read/write
LV Status available
# open 1
LV Size 46.56 GB
Current LE 11920
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID n1DY62-rNBY-LLA9-jYZm-LypC-4LYW-Q4aiQB
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
root@server1:~#
Для создания виртуальных машин мы будем использовать xen-tools, что сделает процесс легким и непринужденным. Для получения дополнительной справочной информации, обратитесь к этому документу. Этот инструментарий установился как зависимость для ubuntu-xen-server и не требует дополнительной инсталляции.
Теперь отредактируем /etc/xen-tools/xen-tools.conf.
[...]
lvm = vg0
[...]
memory = 256Mb
[...]
dist = lenny # Default distribution to install.
[...]
gateway = 192.168.0.1
netmask = 255.255.255.0
broadcast = 192.168.0.255
[...]
passwd = 1
[...]
kernel = /boot/vmlinuz-2.6.27-11-server
initrd = /boot/initrd.img-2.6.27-11-server
[...]
mirror = http://ftp.de.debian.org/debian/
[...]
serial_device = hvc0
[...]
disk_device = xvda #default
[...]
В строках kernel и initrd мы указываем не то ядро, которое мы собрали в предыдущей главе, так как оно предназначено только для работы в dom0 и не будет работать как ядро domU. Пожалуйста, используйте одно из ядер Ubuntu, например — 2.6.27-11-server. Так как дефолтное ядро Ubuntu уже собрано с поддержкой Xen, нам нет необходимости в повторной сборке.
Убедитесь, что раскомментировали строку lvm и указали корректную группу (в моем случае vg0), при этом проверьте, что строка dir закомментирована.
Параметр passwd = 1 указывает на необходимость задания пароля для root при создании нового домена.
Убедитесь, что вы указали сетевые параметы — gateway, netmask и broadcast address. Если вы этого не сделали и не указали их в командной строке, то рискуете осаться без сети на виртуальной машине.
Очень важным параметром является serial_device = hvc0 (не xvc0 или tty1!), если вы допустите ошибку, то не сможете попасть на консоль виртуальной машины.
Ну, создаем наш первый домен — xen1.example.com, с адресом 192.168.0.101:
xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
Если вы указываете какие-либо параметры в командной строке, то они имеют больший приоритет, чем указанные в файле /etc/xen-tools/xen-tools.conf. Еще раз проверьте, что добавили в файл функцию —role=udev, иначе виртуальная машина не загрузится. Для получения более детальной информации, воспользуйтесь командой man xen-create-image.
Процесс создания виртуальной машины займет несколько минут. В ходе выполнения будет наблюдаться примерно следущее:
root@server1:~# xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --arch=amd64 --role=udev
General Information
--------------------
Hostname : xen1.example.com
Distribution : lenny
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : full
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.27-11-server
Initrd path : /boot/initrd.img-2.6.27-11-server
Networking Information
----------------------
IP Address 1 : 192.168.0.101 [MAC: 00:16:3E:BF:02:B9]
Netmask : 255.255.255.0
Broadcast : 192.168.0.255
Gateway : 192.168.0.1
Creating swap on /dev/vg0/xen1.example.com-swap
Done
Creating ext3 filesystem on /dev/vg0/xen1.example.com-disk
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
root@server1:~#
Как мы можем увидеть из вывода команды xen-create-image был создан новый логический раздел для виртуальной машины в группе vg0, называющийся /dev/vg0/xen1.example.com-disk, содержащий корневую файловую систему и раздел /dev/vg0/xen1.example.com-swap, содержащий файл подкачки. Посмотрим:
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID CtAiSe-jr1F-Ibvj-80zR-DRnK-dgPz-OPoxnv
LV Write Access read/write
LV Status available
# open 1
LV Size 46.56 GB
Current LE 11920
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID n1DY62-rNBY-LLA9-jYZm-LypC-4LYW-Q4aiQB
LV Write Access read/write
LV Status available
# open 1
LV Size 1.86 GB
Current LE 476
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-swap
VG Name vg0
LV UUID 0sVqfr-TUoJ-FLeo-qgVn-HIiy-lIeF-dSi3gn
LV Write Access read/write
LV Status available
# open 0
LV Size 256.00 MB
Current LE 64
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
--- Logical volume ---
LV Name /dev/vg0/xen1.example.com-disk
VG Name vg0
LV UUID otgxt7-T5cW-zaxd-y7x3-qwnp-gbmo-oriRLt
LV Write Access read/write
LV Status available
# open 0
LV Size 4.00 GB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:3
root@server1:~#
Посмотрим конфигурационный файл виртуальной машины — /etc/xen/xen1.example.com.cfg.
vi /etc/xen/xen1.example.com.cfg
#
# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 3.9 on Fri Feb 13 00:47:09 2009.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.27-11-server'
ramdisk = '/boot/initrd.img-2.6.27-11-server'
memory = '256'
#
# Disk device(s).
#
root = '/dev/xvda2 ro'
disk = [
'phy:/dev/vg0/xen1.example.com-swap,xvda1,w',
'phy:/dev/vg0/xen1.example.com-disk,xvda2,w',
]
#
# Hostname
#
name = 'xen1.example.com'
#
# Networking
#
vif = [ 'ip=192.168.0.101,mac=00:16:3E:BF:02:B9' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
Обратите внимание: если у вас dual-core или quad-core CPU и вы хотите, чтобы виртуальная машина использовала все ядра процессора, то добавьте к файлу конфигурации vcpus = ‘2’ или vcpus = ‘4’.
Если вы сравните с примером выше, то увидите, что при использовании файла в качестве хранилища, соответствующая строка будет выглядеть как disk = [ ‘file:/path/to/xen1.example.com/disk.img,xvda1,w’, ‘file:/path/to/xen1.example.com/swap.img,xvda2,w’ ].
Перед первым запуском виртуальной машины вам необходимо примонтировать хранилище и скопировать в него ядро domU (команда xen-create-image скопировала в виртуальную машину ядро dom0 kernel 2.6.27.5, а нам его необходимо заменить на 2.6.27-11-server).
mount /dev/vg0/xen1.example.com-disk /mnt
cd /mnt/lib/modules/
cp -pfr /lib/modules/2.6.27-11-server/ .
cd
umount /mnt
Все остальные шаги повторяют наши действия в прошлой главе.
Ссылки:
- Xen: http://www.xensource.com/xen/
- xen-tools: http://xen-tools.org/software/xen-tools
- Ubuntu: http://www.ubuntu.com/
[ad name=»Google Adsense»]
Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!
Хорошо бы кто написал как ставить из исходников.
cd /usr/src
скачал hg clone http://xenbits.xensource.com/xen-unstable.hg
Оказалось последняя это 4 ый XEN релиз кандидат
распаковал
сделал make world
make install
в grub 2 появилась верхняя строка новая но она не грузится.
У меня и того хуже, hg clone http://xenbits.xensource.com/… вообще не отрабатывает.
Выдает:
adding changesets
adding manifests
adding file changes — и вот на этом встает намертво, около пол часа ждал — никакого эффекта.
Может кто подскажет в чем проблема?
Дмитрий, попробуйте сделать как тут описано. Другой репозитарий выбран не hG
http://lists.xensource.com/archives/html/xen-users/2010-03/msg00878.html