Установка Xen на Debian
Устанавливаем Xen на Debian:
Для инсталляции ядра придётся воспользоваться более старым репозиторием пакетов Debian, например etch: [-hide-]# 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 Загрузчик # 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 Инсталляция гостевого домена # 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: Code: # 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) ... 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[-hide-] |