Vultr and Virtio Part 1 – Creating a Custom Windows ISO

In the past, I’ve had difficulty creating Windows virtual machines with Vultr and other VPS providers that require a custom ISO with VirtIO drivers. This post is primarily a how‑to so I can follow the process again in the future, but hopefully others will find it useful as well.

This is the first in a two‑part series and covers creating and uploading the custom ISO. The follow‑up post will cover using that ISO to create a VM.

Requirements

  1. Base Windows ISO
  2. ImgBurn (or similar)
  3. VirtIO drivers

Acquire Your Base ISO

To create a custom ISO you’ll need a vanilla version of the Windows OS you plan to install. At the time of writing, Microsoft provides free evaluation ISOs which can be used temporarily or activated later with a valid licence key.

Evaluation and download options are available at:

  1. Microsoft Evaluation Centre: https://www.microsoft.com/en-us/evalcenter/
  2. Windows Server: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2016
  3. Windows 10 Enterprise: https://www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise

Microsoft will request contact details before allowing downloads. If you prefer not to use your primary email address, temporary email services can be useful:

  1. https://temp-mail.org/en/
  2. https://dropmail.me/en/
  3. https://www.33mail.com/

Download the Latest VirtIO Drivers

The most reliable source for Windows VirtIO drivers is the Fedora Project:

https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html

Download the latest stable VirtIO ISO appropriate for your Windows version.

Download and Install ImgBurn

ImgBurn is used to combine the Windows installation files and VirtIO drivers into a single bootable ISO.

It can be downloaded from http://www.imgburn.com/index.php?act=download.

Putting It All Together

Once you’ve downloaded and installed all the components, follow these steps to produce a custom Windows ISO containing the VirtIO drivers. These steps assume all files are staged under a directory called customiso.

  1. Extract the contents of the Windows ISO to \customiso\Windows
  2. Extract the contents of the VirtIO ISO to \customiso\Windows\virtio
  3. Open ImgBurn
  4. Select Create image file from files/folders
ImgBurn create image file
  1. Add the customiso directory as the source
ImgBurn add source directory
  1. Specify the output file path and ISO filename
ImgBurn output file path
  1. Configure the Options tab as shown below
ImgBurn options
  1. Configure the Labels tab
ImgBurn labels
  1. Under Advanced → Bootable Disc, configure the boot image. The Boot Image should be set to:

    \customiso\Windows\boot\etfsboot.com

ImgBurn boot image

All other settings can be left at their defaults

  1. Click Build
ImgBurn build

When the ImgBurn process completes, you will have a bootable Windows ISO with VirtIO drivers embedded.

Upload to Vultr

There are several ways to upload the ISO into your Vultr account:

  1. Dropbox: simple, but limited by the 2 GB storage cap on free accounts
  2. Amazon S3 or Google Cloud Storage: suitable if you already use these services
  3. Temporary web server: often the simplest approach

In my case, I uploaded the ISO to an existing Linux web server using scp:

scp Windows10Enterprise_vultr.iso user@server_ip:/var/www/html

Once uploaded:

  1. Navigate to the ISO section in the Vultr control panel
Vultr control panel ISO settings
  1. Click Add ISO
Vultr add ISO
  1. Provide the public URL of the uploaded ISO
Vultr upload ISO
  1. Click Upload

After the upload completes, the ISO will be available for VM creation. The next post in this series will cover deploying a Windows VM using the custom ISO.