====== BHyVe ======
Задача - установить несколько гостевых ОС на хост с FreeBSD.
Исходные данные:
* FreeBSD 11.0-RELEASE-p9 - ОС хоста
* alpha - имя хоста
* zfs - файловая система хоста
* guests - имя пула zfs, который используется для размещения гостевых систем
* em0 - сетевой интерфейс хоста
* ubuntu server 14.04.5 - гостевая система
===== Подготовка хоста =====
Загружаем модуль ядра bhyve:
alpha# kldload vmm
и настраиваем сетевые интерфейсы --- нам нужно 4 --- под количество гостевых ОС:
alpha# ifconfig tap0 create
alpha# ifconfig tap1 create
alpha# ifconfig tap2 create
alpha# ifconfig tap3 create
alpha# ifconfig bridge0 create
alpha# ifconfig bridge0 addm em0 addm tap0 addm tap1 addm tap2 addm tap3
alpha# ifconfig bridge0 up
Для перманентного сохранения настроек добавляем:
* в файл /etc/sysctl.conf net.link.tap.up_on_open=1
* в файл /boot/loader.conf vmm_load="YES"
if_bridge_load="YES"
if_tap_load="YES"
* в файл /etc/rc.conf cloned_interfaces="bridge0 tap0 tap1 tap2 tap3"
ifconfig_bridge0="addm em0 addm tap0 addm tap1 addm tap2 addm tap3"
Если устанавливать как гостевую систему, отличную от FreeBSD, потребуется установить пакет //grub2-bhyve//:
alpha# pkg install grub2-bhyve
===== Установка Ubuntu Linux как гостевой системы =====
==== Размещение ====
Поскольку файловая система хоста --- zfs, то будем устанавливать linux на том zfs:
alpha# zfs create -V32G -o volmode=dev guests/ubuntu14
Созданный том можно найти в устройствах: ///dev/zvol/guests/ubuntu14//
==== Первый этап установки ====
Согласно документации установка ОС linux проходит в два этапа. Первый этап --- загрузка ядра linux --- осуществляется утилитой **grub-bhyve**.
Создадим файл ubuntu14.device.map, определяющий соответствие между устройствами гостевой и хостовой систем:
alpha# echo "(hd0) /dev/zvol/guests/ubuntu14" > ubuntu14.device.map
alpha# echo "(cd0) ./ubuntu14.iso" >> ubuntu14.device.map
В данном случае диск hd0 у нас соответствует тому zfs, а cd0 - файлу с образом гостевой системы.
Затем загружаем ядро:
alpha# grub-bhyve -m ./ubuntu14.device.map -r cd0 -M 4096M ubuntu14
Здесь ubuntu14 --- имя гостевой системы, ключ
* -m определяет файл ubuntu14.device.map
* -r --- корневое устройство
* -M --- объем оперативной памяти
В предложенном меню загрузки выбираем пункт Install и жмем Enter. Ядро linux пошло грузиться, но мы этого не видим...
==== Второй этап установки ====
Второй этап --- это собственно установка ОС. Выполняется командой
alpha# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/guests/ubuntu14 -s 4:0,ahci-cd,./ubuntu14.iso -l com1,stdio -c 2 -m 4096M ubuntu14
Здесь прокомментируем назначение ключей:
* **-A** --- создает таблицу ACPI. Ключ обязателен для гостевых систем с архитектурой amd64.
* **-H** --- если не указать, то виртуальные процессоры будут использовать процессор хоста полностью.
* **-P** --- обязывает виртуальный процессор завершить работу, когда получена инструкция PAUSE.
* **-s slot,emulation[,conf]** --- конфигурирует виртуальный PCI-слот.
* **-l lpcdev[,conf]** --- конфигурирует устройства на LPC PCI-ISA bridge. Поддерживается только com1, com2 и bootrom.
* **-c numspus** --- количество виртуальных процессоров гостевой ОС.
* **-M memsize** --- объем оперативной памяти.
После завершения работы с виртуальной машиной удаляем ее. Это необходимо для последующего запуска машины.
alpha# bhyvectl --destroy --vm=ubuntu14
===== Запуск и завершение работы =====
Запуск осуществляется тоже в два этапа. Первый:
alpha# grub-bhyve -m ubuntu14.device.map -r hd0,msdos1 -M 4096M ubuntu14
После этого через открывшееся меню загрузчика grub необходимо запустить ядро.
grub> ls
(hd0) (hd0,msdos5) (hd0,msdos1) (cd0) (cd0,apple2) (cd0,apple1) (cd0,msdos2) (host) (lvm/system-root) (lvm/system-swap)
grub> ls (hd0,msdos1)/
lost+found/ config-4.4.0-62-generic System.map-4.4.0-62-generic abi-4.4.0-62-generic grub/ vmlinuz-4.4.0-62-generic initrd.img-4.4.0-62-generic
grub> linux (hd0,msdos1)/vmlinuz-4.4.0-62-generic root=/dev/mapper/system-root
grub> initrd (hd0,msdos1)/initrd.img-4.4.0-62-generic
grub> boot
Второй:
alpha# bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,/dev/zvol/guests/ubuntu14 -l com1,stdio -c 2 -m 4096M ubuntu14
После завершения работы удаляем объект из памяти:
alpha# bhyvectl --destroy --vm=ubuntu14
===== Утилиты для управления виртуальными машинами =====
Можно использовать утилиту [[https://github.com/churchers/vm-bhyve|vm-bhyve]].