Как стать автором
Обновить

Развертывание виртуальной машины Windows 10 на Ubuntu с доступом через noVNC

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров732

В данной статье описывается пошаговая методика развертывания виртуальной машины (ВМ) с установленной операционной системой Windows 10 на сервере с операционной системой Ubuntu. Решение предполагает установку всех необходимых компонентов, настройку виртуализации с помощью QEMU/KVM, а также организацию удалённого доступа к ВМ посредством noVNC. Аналогичный подход может применяться и для создания ВМ с Windows 11, однако при её установке необходимо учитывать минимальные требования к оборудованию.

> Замечание. Не у всех хостинг-провайдеров реализована возможность виртуализации (nested virtualization), поэтому для успешного развертывания рекомендуется использовать проверенные сервисы, такие как Timeweb. Моя ссылка с небольшим бонусом: https://timeweb.cloud/r/xillusion

Исходный код bash-скрипта для установки:
https://gist.github.com/amlkyc/a6ac7e05d5f121658d21478868604f79
Спасибо Claude за помощь в написании и дебаге. :)

Для загрузки и запуска скрипта можно выполнить следующие команды:

wget https://gist.githubusercontent.com/amlkyc/a6ac7e05d5f121658d21478868604f79/raw/16865eaaad6a67873d444c07640d73e8cfa8727c/installWin10noVNC.sh
chmod +x installWin10noVNC.sh
./installWin10noVNC.sh

Далее, подробнее о том как работает скрипт.

1. Подготовка VPS и установка необходимых пакетов

Для начала необходимо убедиться, что на сервере работает актуальная версия Ubuntu и имеется возможность установки виртуализации. В первую очередь обновляются системные пакеты:

apt-get update && apt-get upgrade -y

Далее устанавливаются необходимые пакеты:

  • Пакеты для работы с QEMU/KVM и libvirt (qemu-kvm, libvirt-daemon-system, virtinst, libvirt-clients, bridge-utils, qemu-utils);

  • Утилиты для загрузки файлов (wget, curl);

  • Python 3 и Git для установки и работы с noVNC.

Кроме того, после установки необходимо активировать службы libvirtd и virtlogd, что обеспечит стабильную работу виртуализации на сервере:

systemctl enable --now libvirtd
systemctl enable --now virtlogd

2. Установка и настройка noVNC

Для организации доступа к виртуальной машине через веб-интерфейс устанавливается проект noVNC. Для этого клонируются репозитории noVNC и websockify:

git clone https://github.com/novnc/noVNC.git /opt/noVNC
git clone https://github.com/novnc/websockify /opt/noVNC/utils/websockify

После клонирования создаётся символическая ссылка для доступа к клиентской части VNC через файл index.html:

ln -sf /opt/noVNC/vnc.html /opt/noVNC/index.html

3. Подготовка образов установочных ISO и создание виртуального диска

Создаются необходимые директории для хранения образов операционных систем и виртуальных дисков:

mkdir -p /var/lib/libvirt/images/
mkdir -p /var/lib/libvirt/isos/

Загрузка установочного образа Windows 10

Образ Windows 10 может быть загружен посредством утилиты wget с другого сервера или перенесён на целевой сервер заранее. В скрипте в строке:

WINDOWS_ISO_URL="https://example.com/windows10.iso"  # Замените URL на фактический

Необходимо указать корректную ссылку на ISO-образ. В качестве примера загрузки использован следующий образ (тестировался на Ubuntu 22.04): https://torrent.libreseed.icu/SHA-1/5337bb57bd672d6bf2282379a8f52e42100312c4
Либо, поместите образ на сервер заранее и пропустите шаг загрузки wget -O.

Загрузка драйверов VirtIO

Для корректной работы системы рекомендуется загрузить ISO-образ с драйверами VirtIO для Windows:

wget -O /var/lib/libvirt/isos/virtio-win.iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

Создание виртуального диска

Виртуальный диск для ВМ создаётся с использованием формата qcow2 и размером 60 Гб:

qemu-img create -f qcow2 /var/lib/libvirt/images/win10.qcow2 60G

4. Определение и настройка виртуальной машины

Для развертывания ВМ создаётся XML-конфигурация, в которой задаются основные параметры: имя виртуальной машины, объём оперативной памяти (в примере 4 ГБ), количество виртуальных процессоров (2 vCPU) и параметры загрузки (с приоритетом CD/DVD, а затем жесткая копия).

В конфигурации определяются следующие устройства:

  • Три виртуальных диска: – основной диск для системы; – загрузочный образ Windows 10; – образ с драйверами VirtIO.

  • Сетевой адаптер с моделью e1000.

  • Параметры графического вывода через VNC (порт 5900) с доступом через noVNC.

  • Дополнительные контроллеры, USB-контроллер, последовательные порты и прочие компоненты, необходимые для полноценной работы ГУИ и инфраструктуры гипервизора.

Сохранённый XML-файл, например, во временной директории, применяется командой virsh define для регистрации ВМ, после чего она запускается:

virsh define /tmp/win10_vm.xml
rm /tmp/win10_vm.xml

virsh start win10

5. Настройка noVNC для доступа к виртуальной машине

Для обеспечения удалённого доступа создаётся скрипт запуска noVNC:

cat > /usr/local/bin/start_novnc << EOL
#!/bin/bash
cd /opt/noVNC
./utils/novnc_proxy --vnc 127.0.0.1:5900 --listen 0.0.0.0:6080
EOL

Необходимо сделать данный скрипт исполняемым:

chmod +x /usr/local/bin/start_novnc

Далее создаётся unit-файл для systemd, который будет автоматически запускать сервис noVNC:

cat > /etc/systemd/system/novnc.service << EOL
[Unit]
Description=noVNC Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/start_novnc
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOL

После перезагрузки демона systemd сервис активируется и запускается:

systemctl daemon-reload
systemctl enable novnc
systemctl start novnc

6. Получение публичного IP-адреса и инструкция по доступу

Чтобы обеспечить удобство подключения, скрипт пытается получить публичный IP-адрес сервера с помощью утилит curl или команды ip. После установления службы, в консоли выводится инструкция для доступа к Windows:

  • Для входа в систему необходимо в веб-браузере открыть URL:

    http://<ip>:6080/vnc.html

7. Заключительные замечания

  • Образ Windows. В строке установки WINDOWS_ISO_URL укажите корректную ссылку на образ Windows 10, либо заранее поместите его в /var/lib/libvirt/isos/windows10.iso и скорректируйте скрипт.

  • Ресурсы хоста и ВМ. В примере виртуальной машины выделено 2 vCPU и 4 ГБ оперативной памяти. При наличии достаточных ресурсов хост-системы вы можете увеличить параметры.

  • Виртуализация. Убедитесь, что выбранный вами хостинг-провайдер поддерживает виртуализацию внутри виртуализации (nested virtualization).

Данное решение является универсальным и может быть адаптировано под различные требования и версии Windows. Надеюсь, что представленная инструкция поможет вам быстро и качественно развернуть Windows 10 на сервере Ubuntu с удобным веб-доступом через noVNC.


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

Теги:
Хабы:
+2
Комментарии3

Публикации

Истории

Работа

DevOps инженер
20 вакансий

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область