Установка Windows на QEMU/KVM с использованием libvirt

install_qemu_kvm.jpg

{{TOC}}

Хотим мы того или нет, но программное обеспечение, для которого необходима Windows, никуда из офисов не исчезло. В ситуации, когда его использование необходимо лучше всё же иметь виртуальную ОС.

Один из вариантов - это выделенная машина, на которой будут запускаться виртуальные. Для решения такой задачи подходит связка libvirt и qemu, в которой libvirt служит для управления виртуальными машинами, а qemu обеспечивает виртуализацию.

Настройка хост машины

Под хост машиной подразумевается компьютер, на котором будет выполняться виртуальная машина.

Установка программного обеспечения

Устанавливаем пакет app-emulation/libvirt (он вытянет все зависимости, включая app-emulation/qemu)

emerge libvirt

Настройка сети

Один из вариантов подключение виртуальной машины - через мост хоста. В этом случае виртуальные машины смогут находится в основной локальной сети, и получать настройки от DHCP сервера. Для этого выполним настройку сети в /etc/conf.d/net.

config_eth0="null"
bridge_br0="eth0"
config_br0="dhcp"
bridge_forward_delay_br0_1=0
bridge_hello_time_br0_1=1000
bridge_stp_state_br0_1=0

или в случае статического IP адреса 192.168.1.10/24 со шлюзом 192.168.1.1

config_eth0="null"
bridge_br0="eth0"
config_br0="192.168.1.10/24"
routes_br0="default via 192.168.1.1"
bridge_forward_delay_br0_1=0
bridge_hello_time_br0_1=1000
bridge_stp_state_br0_1=0

После изменения /etc/conf.d/net удалим /etc/init.d/net.eth0 и создадим /etc/init.d/net.br0

rm /etc/init.d/net.eth0
ln -sf /etc/init.d/net.lo /etc/init.d/net.br0
/etc/init.d/net.br0 restart

Запуск сервера виртуальных машин

Добавим модуль tun в автозагрузку

echo tun > /etc/modules-load.d/libvirt.conf

Запустим /etc/init.d/libvirtd и добавим его в автозапуск.

/etc/init.d/libvirtd start
rc-update add libvirtd

Подключение к серверу виртуальных машин

Для настройки и запуска виртуальных машин будем использовать программу virt-manager, из пакета app-emulation/virt-manager.

Для того, чтобы подключить к серверу виртуальных машин на удалённом хосте, выбираем “Файл~~[Добавить соединение”. В открывшемся окне выбираем “Удалённое подключени”, Тип SSH, Пользователь root, узел]{style=“text-align:right;”}~~ адрес удалённого хоста. При подключении будет запрошен пароль - нужно ввести пароль пользователя root удалённого хоста.

add_connect.jpeg

Для того, чтобы постоянно не спрашивался пароль root, можно настроить мультиплексирование ssh ~/.ssh/config:

Host *
  ControlMaster auto
  ControlPersist 1h
  ControlPath ~/.ssh/cm_socket/%r@%h:%p

Или же настроить вход по ключу

ssh-keygen
ssh-copy-id root@ip_хоста

Создание виртуальной машины

Выполняем ПКМ на строке подключения к серверу виртуальных машин и выбираем “Создать”.

Выбираем Локальный ISO, переходим к следующему шагу, на котором выбираем тип операционной системы и нажимаем обзор для выбора iso образа.

select_iso_pool2.jpeg

При выборе ISO образа откроется диалоговое окно для выбора хранилища. Прежде, чем выбрать образ необходимо добавить каталог в котором он находится как хранилище. Нажимаем кнопку “Добавить пул” в нижнем левом углу. Вписываем название и путь. Выбираем хранилище в левой части окна и из списка томов выбираем необходимый iso образ.

Выбираем память и количество процессоров (в дальнейшем можно будет изменить в настройках виртуальной машины).

На следующем шаге необходимо настроить жёсткий диск. Выбираем пункт “Выбрать или создать дополнительное пространство данных”. Нажимем кнопку “Настроить”.

select_hdd_pool2.jpeg

Снова откроется диалоговое хранилища томов. Добавляем каталог, как уже делали ранее для ISO - здесь будут находится образы жёстких дисков виртуальной машины. Нажимаем “Создать том” и выбираем параметры жёсткого диска.

creating_hdd.jpeg

Выбираем созданный образ из списка и переходим к завершающему шагу, после которого запуститься виртуальная машина, в которой выполняем обычную установку Windows.

kvm_windows.jpeg

После установки с системой можно будет работать через интерфейс гипервизора, или же настроить на ней rdp.

win10.jpeg

Настройка Windows

Отключение обновлений

  • Нажимаем клавиши Win+R, вводим services.msc в окно «Выполнить» и нажимаем Enter. Откроется окно «Службы».
  • Находим в списке службу «Центр обновления Windows» (Windows Update), дважды кликаем по ней.
  • Нажимаем «Остановить» и выбираем тип запуска «Отключена».

RDP доступ

Сам по себе удалённый рабочий стол на операционной системе Windows 10 не запускается, ему ещё необходимо разрешить подключение по протоколу RDP:

  • Заходим в панель управления и щёлкаем по пункту Система.
  • Слева будет список, в котором нужно выбрать Настройка удалённого доступа.

rdp.png

Откроется окно Параметры, в котором кликаем по пункту Разрешить удалённые подключения к этому компьютеру и Разрешить подключения удалённого помощника к этому компьютеру. Лучше конкретно прописывать тех пользователей, которые будут подключаться к машине. Также есть возможность специально создавать пользователя, для которого будет актуальна настройка рабочего стола. Убираем галку “Разрешить подключение только…”

Изменить тип сети для с публичной на частную

Один из способов, заключается в том, чтобы использовать стандартные возможности в настройках Windows 10.

  • Делаем ЛКМ на значке сети в трее и в меню выбираем команду “Сетевые параметры”
  • Делаем клик на “Ethernet” (или на WiFi) и в правой панели кликаем на имени адаптера
  • В самом верху нового экрана (свойства адаптера) включаем (или выключаем) переключатель, Положение “Вкл” изменяет тип сети на “Частная”. Положение “Выкл” изменяет тип сети на “Общедоступная”.

Удалённое подключение

Подключить rdp терминал можно следующим образом:

rdesktop <ip-адрес-windows> -u <имя пользователя> -p <пароль> -g <размер-окна>
  • ip-адрес-windows - это IP адрес машины
  • имя пользователя - логин в windows
  • пароль - пароль для windows
  • размер окна - например 1400x900

Или настроить подключение через remmina

remmina.jpeg

Возможные проблемы

Во время запуска виртуальной машины можно получить сообщение с ошибкой

internal error: process exited while connecting to monitor: qemu-system-x86_64

В этом случае нужно остановить libvird и перезагрузить модули kvm

/etc/init.d/libvirtd stop
rmmod kvm-amd
rmmod kvm-intel
rmmod kvm
modprobe -a kvm-intel kvm-amd kvm
/etc/init.d/libvirtd start

KVM не работает одновременно с виртуализацией VirtualBox

В случае, если виртуальная машина сильно тормозит - убедитесь, что в BIOS включена поддержка аппаратной виртуализации, а виртуальная машина использует гипервизор KVM. Это можно увидеть в параметрах машины, на вкладке обзор.

hypervisorkvm.png

Статья об установке Windows имеет номер 666. Совпадение? Не думаю.

Не получилось диски пробросить из хоста в виртуалку
Вот про это было бы интересно прочитать

Виктор Кустов писал(а):

Статья об установке Windows имеет номер 666. Совпадение? Не думаю.

во-во…

Хорошая статья. Настраивал и работал примерно с такой схемой. Единственное что не пытался делать это пробрасывать устройства usb в виртуальную машину.

Алексей Долотов писал(а):

Хорошая статья. Настраивал и работал примерно с такой схемой. Единственное что не пытался делать это пробрасывать устройства usb в виртуальную машину.

Не получилось ни usb ни диски увидеть. Для этого надо ядро пересобирать и какие-то сторонние утилиты ставить :frowning:

А следующей статьёй тоже самое но про удалённую работу с любым linux в графическим окружением пожалуйста.

А может лучше модули Virtualbox сделать подключаемыми по умолчанию? И проще и быстрее. Здесь же столько лишних движений надо сделать… и зачем, если Virtualbox просто работает…

Добавлено:
Впрочем, ещё один инструмент не помешает, учитывая что это всё полностью свободно и бесплатно… жаль только, что в Virtualbox’е всё просто и понятно, а здесь нужно всё расписывать… вроде бы всё как раз наоборот должно быть… Кстати, а почему не XEN использовать? Интересно, сложно было бы превратить Calculate во что-то наподобие Qubes OS? Вот там и безопасность и Windows и удобство обновления (основное ядро минимально, а программы можно отдельно обновлять).

Ещё было бы интересно почитать про docker и как бы иметь разные “почти полноценные” дистрибутивы не тратя на это много ресурсов…

Никогда не ставьте т.к. тут написано если не хотите потерять 30-40% производительности. libvirt очень крутая штука. Первое - никаких RDP, никаких ssh, второе - для графики использовать только spice+qlx+гостевые+драйвер spice для qlx, третье - для HDD и сеть virtIO, автор сей статьи выбрал наихудший вариант, и просрал всю производительность своей ВМ. Так же желательно использовать UEFI прошивку для ВМ. При правильной конфигурации ВМ, потеря производительности от реального железа будет не больше 5%.

Это конечно всё хорошо, но авторизация на сервак по руту - это не по феншую. Кто подскажет, как это реализовать под “обычным” пользователем?

Alex Rubin писал(а):

Это конечно всё хорошо, но авторизация на сервак по руту - это не по феншую. Кто подскажет, как это реализовать под “обычным” пользователем?

а в каком месте тут авторизация по руту? единственное для чего может быть запрошен пароль, то это для запуска libvirt. при установке создаются группы kvm,qemu,libvirt, пользователь должен состоять в этих группах, тогда никаких привилегий запрашивать не будет, все будет работать без всяких авторизаций.

Встал на моменте #/etc/init.d/net.br0 restart
net.br0 | * Bringing up interface br0
net.br0 | * Creating bridge br0 …
net.br0 | * Adding ports to br0
net.br0 | * eth0 … [ ok ]
net.br0 | * dhcp …
net.br0 | * Running dhclient …
net.br0 | * start-stop-daemon: failed to start `/sbin/dhcli [ !! ]
net.br0 | * ERROR: net.br0 failed to start

Я только учусь, что нужно делать?