Загрузка собственного Windows-образа
Вы можете загрузить собственный пользовательский образ Windows Server в формате qcow2, vmdk или raw. Этот образ можно использовать для создания ВМ.
Для загрузки образа:
- Подготовьте окружение для работы с образами.
- Подготовьте образ для использования в MWS Cloud.
- Установите и настройте утилиту AWS CLI. С ее помощью образ будет загружен с локального компьютера или ВМ в бакет Object Storage.
В результате образ будет доступен в качестве источника при создании новой ВМ.
1. Подготовьте окружение для работы с образами
Заголовок раздела «1. Подготовьте окружение для работы с образами»В этом руководстве даны инструкции для компьютера на базе архитектуры x86-64 с ОС Ubuntu 22.04.
Обновите уже установленные пакеты:
bash sudo apt update && sudo apt upgradeУстановите необходимые пакеты:
bash sudo apt install \qemu-system \ovmf \libguestfs-tools \virt-viewer \unzipЗдесь:
qemu-system— система виртуализации QEMU;ovmf— система UEFI OVMF;libguestfs-tools— набор утилит для взаимодействия с ВМ;virt-viewer— клиент для подключения к ВМ по протоколу SPICE;unzip— утилита для распаковки zip-архивов.
Добавьте текущего пользователя в группу
kvm:bash sudo usermod -aG kvm $USER
2. Создайте и запустите виртуальную машину
Заголовок раздела «2. Создайте и запустите виртуальную машину»Создайте в домашней директории каталоги для исходных
iso-образов иqcow2-образа Windows Server:bash cd ~ && mkdir iso outЗагрузите образ нужной версии Windows Server с официального сайта Microsoft:
bash curl -L -o iso/windows.iso "<ссылка на образ>"Загрузите пакет драйверов Virtio:
bash curl -L -o iso/virtio-win.iso "https://fedora-virt.repo.nfrance.com/virtio-win/direct-downloads/stable-virtio/virtio-win-0.1.285.iso"Загрузите установщик CloudBase-Init и поместите его в
iso-образ:bash curl -L -o CloudBaseInit.msi "https://github.com/cloudbase/cloudbase-init/releases/download/1.1.6/CloudbaseInitSetup_1_1_6_x64.msi" && \mkisofs -o /iso/CloudBaseInit.iso CloudBaseInit.msiСкопируйте UEFI VARS-файл в домашнюю директорию:
bash cp /usr/share/OVMF/OVMF_VARS_4M.fd ~Создайте диск для ВМ:
bash qemu-img create -f qcow2 output/image.qcow2 25600MЗапустите ВМ:
bash qemu-system-x86_64 \-enable-kvm \-machine q35 \-cpu host \-m 4096 \-smp 4 \-monitor stdio \-drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \-drive if=pflash,format=raw,file=iso/OVMF_VARS_4M.fd \-drive file=iso/windows.iso,media=cdrom,index=0 \-drive file=iso/virtio-win.iso,media=cdrom,index=1 \-drive file=CloudBaseInit.iso,media=cdrom,index=2 \-boot order=d,menu=on \-blockdev driver=qcow2,node-name=vd.root,file.driver=file,file.filename=output/image.qcow2 \-device virtio-scsi-pci,id=scsi0 \-device scsi-hd,drive=vd.root,bus=scsi0.0 \-device virtio-serial \-device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \-chardev spicevmc,id=vdagent,debug=0,name=vdagent \-spice port=3001,disable-ticketingПодключитесь к ВМ:
bash remote-viewer spice://127.0.0.1:3001Дождитесь приглашения терминала. Введите
exit. В UEFI выберите опцию Continue. Несколько раз нажмитеEnter.
3. Установите Windows Server
Заголовок раздела «3. Установите Windows Server»Выберите язык, региональные настройки и нажмите Next.
Нажмите Install Now.
Выберите редакцию Windows Server Standard (Desktop Experience).
Примите лицензионное соглашение.
В списке вариантов установки ОС выберите Custom: Install Windows only (advanced).
На экране выбора диска нажмите Load Driver, в новом окне укажите путь к драйверу хранилища на подключенном образе Virtio:
E:\vioscsi\2k<номер версии ОС — 22 или 25>\amd64. Установите предложенный драйвер.Выберите появившийся диск и нажмите Next.
Дождитесь завершения установки ОС. ВМ перезагрузится автоматически.
После перезагрузки задайте пароль администратора.
Установите гостевые инструменты Virtio. Запустите Windows PowerShell и введите команду:
powershell Start-Process -FilePath "E:\virtio-win-guest-tools.exe" -WaitПосле установки гостевых инструментов станет доступен общий буфер обмена между гостевой и хост-системами.
4. Подготовьте образ для использования в MWS Cloud Platform
Заголовок раздела «4. Подготовьте образ для использования в MWS Cloud Platform»Выполните в PowerShell следующие команды:
Отключите энергосбережение:
powershell powercfg -setactive "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"powercfg -change -monitor-timeout-ac 0powercfg -change -standby-timeout-ac 0powercfg -change -hibernate-timeout-ac 0Настройте параметры реестра:
powershell # Использовать UTC как аппаратное времяSet-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" `-Name "RealTimeIsUniversal" -Value 1 -Type DWord -Force# Разрешить выключение без активных пользователейSet-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `-Name "ShutdownWithoutLogon" -Value 1# Сократить таймаут предупреждения при выключении до 1 секундыSet-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" `-Name "ShutdownWarningDialogTimeout" -Value 1Отключите дефрагментацию:
powershell Get-ScheduledTask -TaskName "ScheduledDefrag" | Disable-ScheduledTaskРазрешите трафик по протоколу ICMP (ping):
powershell Get-NetFirewallRule -Name "vm-monitoring-icmpv4" | Enable-NetFirewallRuleНастройте подключение по протоколу RDP:
powershell # Включить RDPSet-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" `-Name "fDenyTSConnections" -Value 0# Отключить NLA (Network Level Authentication), чтобы RDP показывал обычный экран входа и не отбрасывал подключение на этапе предварительной проверки учетных данныхGet-CimInstance -ClassName Win32_TSGeneralSetting `-Namespace root\cimv2\terminalservices |Invoke-CimMethod -MethodName SetUserAuthenticationRequired `-Arguments @{ UserAuthenticationRequired = 0 }# Открыть порт в firewallEnable-NetFirewallRule -DisplayGroup "Remote Desktop"Удалите recovery-раздел и расширьте диск C для подготовки дискового пространства:
powershell reagentc /disable$p = Get-Partition -DiskNumber 0 |Where-Object { $_.Type -eq 'Recovery' } |Sort-Object -Property PartitionNumber -Descending |Select-Object -First 1if ($p) {Remove-Partition -DiskNumber 0 -PartitionNumber $p.PartitionNumber -Confirm:$false -ErrorAction Stop}$size = Get-PartitionSupportedSize -DriveLetter CResize-Partition -DriveLetter C -Size $size.SizeMaxПроверьте, что QEMU Guest Agent установлен на ВМ:
powershell Get-Service 'QEMU-GA'Если сервис не найден, установите и запустите его:
powershell $msi = "E:\guest-agent\qemu-ga-x86_64.msi"$log = "C:\Windows\Temp\qemu-ga-install.log"$p = Start-Process -FilePath 'msiexec.exe' `-ArgumentList "/i `"$msi`" /qn /norestart /L*v `"$log`"" `-Wait -PassThruWrite-Host "Exit code: $($p.ExitCode)"Get-Content $log -Tail 20for ($i = 0; $i -lt 12; $i++) {$svc = Get-Service -Name 'QEMU-GA' -ErrorAction SilentlyContinueif ($svc) { break }Start-Sleep 5}Set-Service -Name 'QEMU-GA' -StartupType AutomaticStart-Service 'QEMU-GA'Выполните скрипт для установки OpenSSH:
Установите CloudBase-Init:
powershell $msi = 'F:\CLOUDBAS.msi'Start-Process msiexec.exe -ArgumentList "/i `"$msi`" /qn /norestart" -WaitСоздайте или отредактируйте файл
C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf:ini [DEFAULT]username=Administratorgroups=Administratorsinject_user_password=trueconfig_drive_raw_hhd=trueconfig_drive_cdrom=trueconfig_drive_vfat=truebsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exemtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\verbose=falsedebug=falselogdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\logfile=cloudbase-init-unattend.logdefault_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARNlogging_serial_port_settings=COM2,115200,N,8mtu_use_dhcp_config=truentp_use_dhcp_config=truelocal_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\run_scripts_once=truemetadata_services=cloudbaseinit.metadata.services.nocloudservice.NoCloudConfigDriveServiceplugins=cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPluginallow_reboot=falsestop_service_on_exit=falsecheck_latest_version=falsefirst_logon_behaviour=alwaysПродублируйте файл для фазы подготовки ВМ:
powershell $confDir = 'C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf'Copy-Item -Force "$confDir\cloudbase-init.conf" "$confDir\cloudbase-init-unattend.conf"Создайте скрипт для принудительной смены пароля при первом входе в ОС по пути
C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\10-force-password-change-from-nocloud.ps1:Создайте файл конфигурации sysprep
C:\sysprep\unattend.xmlи скопируйте в него следующее содержимое:Sysprep используется для подготовки ОС к работе в облаке: сбрасывает SID, имя компьютера и историю устройств, а также выключает ВМ.
Запустите sysprep:
powershell & $env:SystemRoot\System32\Sysprep\Sysprep.exe `/oobe /generalize /quiet /shutdown `/unattend:"C:\sysprep\unattend.xml"
По завершении ВМ выключится автоматически.
5. Настройте утилиту AWS CLI
Заголовок раздела «5. Настройте утилиту AWS CLI»Для загрузки образа в облако установите утилиту AWS CLI:
Создайте сервисный аккаунт с правами
storage.bucket.editor. Этот сервисный аккаунт будет использоваться для работы AWS CLI.Для сервисного аккаунта создайте HMAC-ключ. Сохраните обе части HMAC-ключа —
Access keyиSecret key. Они понадобятся далее.Скачайте и установите утилиту AWS CLI:
bash curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv.zip" && \unzip awscliv.zip && \sudo ./aws/installНастройте AWS CLI:
bash aws configureУкажите следующие параметры:
- AWS Access Key ID — значение
Access keyиз HMAC-ключа (пример —_Ukpnpw3RiCx3iuPhn-t); - AWS Secret Access Key — значение
Secret keyиз HMAC-ключа (пример —3LIK2LbwYqER7oGr3cX4WSC31YN83yZnDgcXyjewX); - Default region name —
ru-central1; - Default output format —
text.
6. Загрузите образ в бакет Object Storage
Заголовок раздела «6. Загрузите образ в бакет Object Storage»Создайте бакет Object Storage, в который будете загружать образ. В этом руководстве для примера используется имя бакета
test-bucket:bash aws s3 mb s3://test-bucket --endpoint-url https://storage.mwsapis.ruРезультат успешного создания бакета:
bash make_bucket: test-bucketЗагрузите образ в бакет:
bash aws s3 cp image.qcow2 s3://test-bucket/win-server.qcow2 --endpoint-url https://storage.mwsapis.ruДождитесь окончания загрузки.
7. Добавьте образ в список пользовательских образов Compute
Заголовок раздела «7. Добавьте образ в список пользовательских образов Compute»Образ win-server.qcow2 сейчас загружен в бакет в виде файла. Чтобы использовать образ в качестве источника при создании новых ВМ, добавьте его в список пользовательских образов Compute.
Добавить образ можно двумя способами:
- С помощью утилит AWS CLI и MWS CLI. Для добавления образа будет сгенерирована специальная подписанная ссылка (presigned URL).
- С помощью веб-консоли и настройки политики доступа бакета.
- Утилиты CLI
- Веб-консоль
Создайте сервисный аккаунт с правами
storage.image.editor. Этот сервисный аккаунт будет использоваться для работы MWS CLI.Установите и настройте утилиту MWS CLI:
Инициализируйте профиль. При инициализации используйте созданный ранее сервисный аккаунт с ролью
storage.image.editor.
Сгенерируйте подписанную ссылку для доступа к образу:
bash aws s3 presign s3://test-bucket/win-server.qcow2 --expires-in 60480 --endpoint-url https://storage.mwsapis.ruПример успешного выполнения запроса:
bash https://storage.mwsapis.ru/test-bucket/win-server.qcow2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=rNw605bp9MIQXFEe-QJF%2F20250812%2Fru-central1%2Fs3%2Faws4_request&X-Amz-Date=20250812T033321Z&X-Amz-Expires=60480&X-Amz-SignedHeaders=host&X-Amz-Signature=3a30dd9402a69b6573cd8f72571faf683eb6fe660b8f4de256dfdfe91e8297b3Добавьте образ в список пользовательских образов Compute::
bash mws compute image create win-server \--project <имя проекта> \--os-type WINDOWS \--family <(опционально) семейство> \--external-url <подписанная ссылка для доступа к образу>
Пользовательский образ станет доступен для выбора при создании ВМ.