====== 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]].