...
- Install the latest Windows ADK (download) and choose only Deployment Tools
- Download the Windows 10 Enterprise Evaluation ISO, and mount it in your host/VM (you need to login with your Microsoft account to download ISOs)
- Download the stable amd64 virto-win iso, following this link
- Download the Windows OpenStack Imaging Tools
- Remember to download the WindowsUpdates tools referenced in the repo as well. This must be done separately.
- Change the following:
UnattendTemplate.xml: Change
InputLocale
andUserLocale
fromen-US
tonb-NO
- Create the following powershell-script, modify the three path-variables, and run it:
Code Block language powershell title CreateOpenStackImage.ps1 linenumbers true Import-Module c:\dev\windows-openstack-imaging-tools-master\WinImageBuilder.psm1 Import-Module C:\dev\windows-openstack-imaging-tools-master\Config.psm1 Import-Module C:\dev\windows-openstack-imaging-tools-master\UnattendResources\ini.psm1 function Set-Config { param($file, $section, $key, $value) Set-IniFileValue -Path (Resolve-Path $file) -Section $section ` -Key $key ` -Value $value } $date = Get-Date -UFormat "%Y%m%d" $virtualDiskPath = "C:\dev\images\WS2019_Standard_Eval_$date.qcow2" $virtIOISOPath = "C:\iso\virtio-win-0.1.160.iso" $winISOPath = "C:\iso\17763.1.180914-1434.rs5_release_SERVER_EVAL_x64FRE_en-us.iso" $mountResult = Mount-DiskImage -ImagePath $winISOPath -StorageType ISO -PassThru $imageDrive = ($mountResult | Get-Volume).DriveLetter $wimFilePath = "${imageDrive}:\sources\install.wim" $diskSize = 40GB $ramSize = 4GB # Check which SKU from the WimFile you want, and specify the corresponding index to $image $images = Get-WimFileImagesInfo -WimFilePath $wimFilePath $image = $images[1] $configfile = '.\config.ini' New-WindowsImageConfig -ConfigFilePath $configfile if ( ! (Test-Path C:\dev\images) ) { New-Item C:\dev\images -Type Directory } Set-Config -file $configfile -section "DEFAULT" -key "wim_file_path" -value $wimFilePath Set-Config -file $configfile -section "DEFAULT" -key "image_name" -value $image.ImageName Set-Config -file $configfile -section "DEFAULT" -key "image_path" -value $virtualDiskPath Set-Config -file $configfile -section "DEFAULT" -key "virtual_disk_format" -value "QCOW2" Set-Config -file $configfile -section "DEFAULT" -key "image_type" -value "KVM" Set-Config -file $configfile -section "DEFAULT" -key "disk_layout" -value "BIOS" Set-Config -file $configfile -section "DEFAULT" -key "wallpaper_solid_color" -value "0 0 0" Set-Config -file $configfile -section "vm" -key "external_switch" -value "ext-net" Set-Config -file $configfile -section "vm" -key "ram_size" -value $ramSize Set-Config -file $configfile -section "vm" -key "disk_size" -value $diskSize Set-Config -file $configfile -section "drivers" -key "virtio_iso_path" -value $virtIOISOPath Set-Config -file $configfile -section "updates" -key "install_updates" -value "True" Set-Config -file $configfile -section "updates" -key "purge_updates" -value "True" # Check if we are on a Hyper-V enabled host if ( $(Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V).State -eq "Enabled" ) { New-WindowsOnlineImage -ConfigFilePath $configfile } else { Write-Host "This script only works on Hyper-V enabled hosts" } Dismount-DiskImage -InputObject $mountResult
You now have a .qcow2 diskfile, which contains an updated and sysprepped Windows-installation with cloud-init installed
Convert the qcow2 disk to raw
Code Block qemu-img convert -f qcow2 -O raw disk.qcow2 disk.raw
The raw image can now be imported to glance.
...