Я джва года этого ждал! В январе 2014 года прочитал в FreeBSD 10.0-RELEASE Release Notes следующее:
[amd64] The BSD Hypervisor, bhyve(8) is included with FreeBSD. bhyve(8) requires Intel CPUs with VT-x and Extended Page Table (EPT) support. These features are on all Nehalem models and beyond (e.g. Nehalem and newer), but not on the lower-end Atom CPUs.
И сразу подумал, что bhyve — это отличная штука, особенно при использовании в паре с ZFS. Это позволит расширить область задач, которые можно решать с помощью FreeBSD, и увеличит популярность данной системы у IT-специалистов. На тот момент поддержка гостевых ОС была ограничена BSD-семейством и Linux, но время шло и вот, с выходом FreeBSD 11.0-RELEASE, уже официально стало возможно запустить гостя с Windows, да ещё с установкой в графическом режиме.
Устанавливать буду Windows 10 — её можно ставить как есть, а для установки более старых версий потребуется интегрировать драйвера virtio в ISO-образ (инструкция). Утилиту для создания ISO-образа с последней актуальной версией можно загрузить с сайта Microsoft.
- Создадим том ZFS для хранения данных ВМ (при необходимости замените pool/usr/bhyve):
# zfs create pool/usr/bhyve
- Чтобы было проще управлять ВМ, установим sysutils/vm-bhyve:
# portmaster sysutils/vm-bhyve # sysrc vm_enable="YES" vm_dir="zfs:pool/usr/bhyve" vm_enable: -> YES vm_dir: -> zfs:pool/usr/bhyve # vm init
- Дополнительно можно скопировать типовые шаблоны для ВМ:
# cp /usr/local/share/examples/vm-bhyve/* /usr/bhyve/.templates/
А при использовании csh есть смысл прописать в файле ~/.cshrc правила автодополнения:
complete vm \ 'p@1@(list create install start stop console configure reset poweroff destroy clone snapshot rollback add switch iso)@' \ 'n@create@n@' \ 'n@list@n@' \ 'n@iso@n@' \ 'n@switch@(list create add remove destroy vlan nat)@' \ 'N@switch@`sysrc -inqf /usr/bhyve/.config/switch switch_list`@' \ 'N@install@`ls -1 /usr/bhyve/.iso`@' \ 'N@nat@(off on)@' \ 'p@2@`ls -1 /usr/bhyve | grep -v "^\." | grep -v "^images"`@'
И активировать их:
# source ~/.cshrc
- Настроем сеть. Для этого создадим виртуальный коммутатор и свяжем его с физическим интерфейсом (при необходимости замените em0):
# vm switch create public # vm switch add public em0
Если требуется, то можно аналогичным образом настроить NAT и VLAN.
- Для запуска Windows потребуется эмулятор UEFI. Установим его:
# portmaster sysutils/bhyve-firmware ===>>> The following actions will be taken if you choose to proceed: Install sysutils/bhyve-firmware Install sysutils/uefi-edk2-bhyve ===>>> Proceed? y/n [y]
Обновление от 27.02.2018. Перед выполнением следующего шага рекомендую ознакомиться с комментарием Александра. Лично я тормозов не наблюдаю, но решение за вами.
# ln -s /usr/local/share/uefi-firmware/BHYVE_UEFI.fd /usr/bhyve/.config/BHYVE_UEFI.fd
- Наконец, создадим нашу первую ВМ с шаблоном «windows» и размером диска 30 ГиБ (при необходимости замените wintest):
# vm create -t windows -s 30G wintest
- Откроем настройки ВМ:
# vm configure wintest
И добавим следующие строки:
graphics="yes" graphics_res="1600x900" graphics_wait="yes" xhci_mouse="yes"
Обязательный параметр только graphics, остальные добавляем по вкусу. Параметр graphics_res позволяет задать более удобное разрешение экрана (значение по умолчанию 800×600). С помощью graphics_wait можно приостановить загрузку ВМ до тех пор, пока не будет установлено подключение по VNC, чтобы не пропустить самое интересное. А xhci_mouse позволит использовать USB-эмуляцию мыши вместо PS/2 (работает только в новых версиях Windows, но работает лучше).
- Теперь всё готово к началу установки. Предполагается, что в директории /usr/bhyve/.iso вы уже разместили подходящий ISO-образ:
# vm install wintest Windows_10_1607.iso
Проверим результат:
# vm list NAME DATASTORE LOADER CPU MEMORY VNC AUTOSTART STATE wintest default uefi 1 2G *:5900 No Locked
- Теперь можно подключаться по VNC и проводить установку в привычном для многих графическом режиме.
- Осталось дело за малым — установить драйвера для сетевого адаптера. Скачать их можно отсюда: archive-virtio, но есть нюанс — они не все корректно работают.
В частности, у меня не заработала версия 0.1.126, поэтому используем версию 0.1.118.Обновление от 16.04.2017. Версия 135 прекрасно работает.# vm stop wintest # vm iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.135-1/virtio-win-0.1.135.iso # vm install wintest virtio-win-0.1.135.iso
Снова подключаемся по VNC и устанавливаем драйвера из директории D:\NetKVM\w10\amd64.
На этом, пожалуй, всё. Если необходимо, то можно включить автоматический запуск ВМ при старте системы, только не забудьте удалить параметр graphics_wait:
# sysrc vm_list="wintest" vm_list: -> wintest
Спасибо за статью.
Не сравнивали ли скорость работы win 2008r2 под bhyve и qemu-kvm в линуксе?
Ну, скажем, та же 1c под виндой в обоих гипервизорах…
Не приходилось, пока только тестировал Windows 10. Субъективно работает не хуже, чем под ESXi, синтетику не запускал, прямых сравнений не производил.
Запускаем не Windows, а Windows 10. Ошибка в заголовке статьи.
Windows 10 тоже Windows. Вся разница с предыдущими версиями лишь в том, что для них требуется специальная подготовка ISO-образа. Информация об этом есть в тексте, там же приведена ссылка на инструкцию.
Тоже то же)) Но почему не написать — «запуск windows 10»?
С предыдущими версиями? ))
https://lists.freebsd.org/pipermail/freebsd-virtualization/2013-November/001741.html
«bhyve only supports amd64 VM kernels at this time and I have clarified
this point on bhyve.org
i386 support is indeed theoretically possible if your proprietary OS can
provide VirtIO devices as needed for your application.
Michael»
теоретически, ибо вирт железка потребует 64битный uefi загрузчик. Держала бы эта железка загрузки legacy (в графике, ибо винда есть графика и без этого хер ее установишь), то да.
В остальном пофиг. есть эмулятор и есть. Но имхо проще поставить vbox.
Есть для удобства такая штука cbsd — рулит и клетками и ульем
Не пойму, как устанавливать этот netkvm. Документации нету, никаких setup/install файлов. Не могли бы рассказать?
Примерно так, за точность шагов не ручаюсь, но направление верное. Открываете «Диспетчер устройств», находите там «Ethernet-контроллер» и дважды щёлкаете по нему. Далее вкладка «Драйвер» → «Обновить драйвер» → «Выполнить поиск драйверов на этом компьютере» → «Искать драйвера в следующем месте» → D:\NetKVM\w10\amd64 (при необходимости изменить на свой) → Далее → …
Я бы рекомендовал бы исключить вот эту строчку:
# ln -s /usr/local/share/uefi-firmware/BHYVE_UEFI.fd /usr/bhyve/.config/BHYVE_UEFI.fd
Так как начинаются жуткие тормоза по VNC, при использовании символической ссылки, и в файле ~/.cshrc поправить 8 строчку на:
‘N@switch@`sysrc -inqf /usr/local/share/uefi-firmware/switch switch_list`@’ \
Народ помогите пожалуйста.
Всё сделал по инструкции win 10 поставил, драйвера virtio-win-0.1.135.iso поставил, ethernet адаптер появился, но не видит сеть и интернет …
Показывает
Autoconfiguration IPv4 Address 169.254.183.243
IPv4 Subnet Mask 255.255.0.0
Default gateway пустой
DNS Server пустой
Сервак стоит в колокейшене, имеет реальный IP
Ping мой реальный IP не проходит.
Как я понимаю нужно прописать шлюз и днс … что прописать? спасибо
Судя по всему ваша ВМ не может получить сетевые настройки по DHCP. Вариантов решения множество: поднять сервер DHCP, прописать сетевые настройки вручную, настроить NAT (см. man vm)…
P. S. Настраивая удалённый сервер соблюдайте осторожность, чтобы не потерять к нему доступ.
Можно у вас попросить платную консультацию по этому вопросу? Оплачу по wmz
Очень нужно поднять интернет. Не знаю куда дальше копать. Спасибо.
Можете написать на мой емайл который я указал при публикации поста или на for_something@i.ua
спасибо.
Пытаюсь настроить в домашней сети.
Включил
pf_enable="YES"
pf_rules="/etc/pf.conf"
в rc.conf на freebsd.
Сделал
vm switch nat public on
Прописал IP в windows IP вручную 172.16.0.11
Всё так же — ничего не происходит …
В windows прописал
IP: 172.16.0.11
MASK: 255.255.255.0
GATE: 172.16.0.1
DNS: 192.168.0.1
и сеть и интернет заработал…
а теперь подскажите пожалуйста
как на этом виртуальном Ip открыть порт 3389 чтобы можно было подключиться по IP сервака на этот порт через RDP
Спасибо.
Платную консультацию нельзя. Бесплатную можно. Если очень припрёт (заранее спасибо за понимание), то пишите на pavel@onlyfriends.info.
По поводу RDP, добавьте в /etc/pf.conf:
rdr pass proto tcp from any to em0 port 3389 -> 172.16.0.11 port 3389
Где em0 — ваш внешний сетевой интерфейс.
Подробное описание синтаксиса смотрите в man 5 pf.conf
Спасибо большое за статью и за помощь!
> 9. Теперь можно подключаться по VNC
А по какому адресу подключаться?
Я ж на винду ещё ни разу не заходил, чтобы установить ей там адрес статический или через DHCP.
Получается какой-то замкнутый круг:
Зайти на винду надо через VNC, а через VNC не зайдёшь потому, что ещё ни разу на винду не зашёл и значит адрес ей внутри неё не дал. 🙂
Может быть заходить можно как-то не через VNC?
Или может быть можно во внешних конф-файлах дать хотя бы мак-адрес виндовой машине, а в рядом с ней лежащем /usr/local/etc/dhcpd.conf этому мак-адресу назначить адрес, чтоб потом уже можно было через VNC по этому адресу на загрузившуюся винду заломиться?
По умолчанию надо подключаться по адресу хоста (гипервизора) на порт 5900 или следующий доступный (см. вывод
vm list
). Настроить можно через параметрыgraphics_listen
иgraphics_port
.Уведомление: Кластер Kubernetes на Oracle Linux за 15 минут — OnlyFriends!