В заметке рассказано о подготовке образа гостевой системы с FreeBSD 8, предназначенного для работы под управлением Xen в режиме паравиртуализации, позволяющем добиться более высокой производительности по сравнению с HVM-режимом (полная аппаратная виртуализация).В настоящее время нет готовых бинарных образов ядра и системы, предназначенных для установки в роли гостевой ОС. Придется создавать их вручную. Для начала поставим FreeBSD обычным образом на диск или под управлением VirtualBox, после чего займемся созданием образа, пригодного для использования в Xen DomU.
Создадим каркас будущего образа гостевой ОС (размер можно сразу изменить исходя из решаемых задач):
# truncate -s 256M freebsd.img
Привяжем к этому файлу виртуальный диск:
# mdconfig -f freebsd.img
Установим загрузчик, создадим дисковые разделы и отформатируем под UFS2 с включенными softupdates:
# fdisk -BI md0
# bsdlabel -wB md0s1
# newfs -U md0s1a
Монтируем локально созданную внутри файла ФС:
# mount /dev/md0s1a /mnt
В /usr/src текущей системы должен быть полный набор исходных текстов, обновим их:
# csup -h cvsup2.ru.FreeBSD.org -L 2 /usr/share/examples/cvsup/standard-supfile
Соберем ядро и мир
# make buildworld && make buildkernel KERNCONF=XEN
Установим итоговые собранные файлы на ранее подготовленный дисковый образ в файле, примонтированный в /mnt:
# export DESTDIR=/mnt && make installworld && make installkernel KERNCONF=XEN && cd etc && make distribution
Адаптируем настройки для работы в качестве гостевой системы Xen.
В /mnt/etc/fstab добавим:
/dev/xbd0 / ufs rw 1 1
В /mnt/etc/ttys:
xc0 "/usr/libexec/getty Pc" vt100 on secure
Сохраним отдельно ядро гостевой системы, так как его потребуется скопировать для загрузки из dom0:
# cp /mnt/boot/kernel/kernel /some/place/freebsd-kernel
Отмонтируем виртуальный диск:
# umount /mnt
# mdconfig -d -u md0
В результате получены файл с гостевой системой freebsd.img и файл с ядром freebsd-kernel.
Конфигурируем управляющее окружение Xen (dom0):
Проверяем работает ли xen:
# xm list
Создаем файл конфигурации /etc/xen/freebsd:
kernel = "/virt/freebsd-8.0p2-i386-xen-domu-kernel"
memory = 512
name = "freebsd"
vif = [ '' ]
disk = [ 'file:/virt/freebsd-8.0p2-i386-xen-domu.img,hda,w' ]
extra = "boot_verbose=1"
extra += ",vfs.root.mountfrom=ufs:/dev/ad0s1a"
extra += ",kern.hz=100"
где, /virt/freebsd-8.0p2-i386-xen-domu-kernel путь к предварительно скопированному в файловую систему dom0 подготовленного ранее ядра FreeBSD.
В /etc/xen/xend-config.sxp активируем сетевой мост для работы сети внутри FreeBSD:
#(network-script network-dummy)
(network-script network-bridge)
Запускаем гостевое окружение и сразу входим в консоль:
# xm create freebsd
# xm console freebsd
Из проблем, отмечена неработа настройки ifconfig_xn0="DHCP", для получения адреса dhclient нужно запускать вручную.
URL: http://forums.freebsd.org/showthread.php?t=10268 http://wiki.freebsd.org/AdrianChadd/XenImages http://wiki.freebsd.org/AdrianChadd/XenHackery
Обсуждается: http://www.opennet.dev/tips/info/2369.shtml