Installing Server 2016/2019 (Core) GUI Less with Proxmox

Carl Liebich
7 min readMay 2, 2019

--

This short guide explains how to get up and running with Serve 2016 or 2019 on a headless (core) on a Proxmox hypervisor

Change Log

  • 2019/05/02 — Original Publication
  • 2020/05/14 — This guide was based on VirtIO for but Proxmox recommends VirtIO SCSI. (stated below). The guide is still applicable except for the disk controller selection.
  • 2021/06/06 — Rewrite that includes Proxmox 6.x and more recommendations and updated screen shots to follow Proxmox recommendations for SCSI. With the latest release of VirtIO the steps have become much simpler.

Notes

  • Server 2019 follows the same procedure as 2016. This guide is also applicable to Windows 10.
  • This guide uses the SCSI controller as its recommendation by Proxmox. (ref.)

Prerequisites

  • Upload the Windows Server ISO into promox storage. If you are using this for testing or learning you can always download a evaluation copy from Microsoft here.
  • Download the VirtIO drivers for Windows maintained by Fedora and upload the drivers to your storage on Proxmox.
Example of uploaded virtIO imges

VirtIO Stable ISO can be downloaded here.
VirtIO Latest ISO can be downloaded
here.

VM Creation in Proxmox

When creating the VM there are some general recommendations that can help improve performance of a virtual machine. Proxmox much like vmware will select the best hardware in terms of out of the box compatibility with windows such as the emulated a network card based on the Intel E1000. Optionally we can choose to select hardware options that can provide better performance as they are design to operate inside the virtual machines. During the VM creation in proxmox these are some of the recommended options for best performance we will use in this guide.

Tip: Tick the “Advanced” box to expose all options during the VM creation process.

Create a new virtual machine and follow through the tabs based on the options below:

General Tab

  • Select “Start at boot”

OS Tab

  • Ensure you select your ISO of Microsoft Windows and select the Guest OS type.

System Tab

  • Tick “Qemu Agent” and ensure VirtIO SCSI is selected (default setting)

Hard Disk

  • Set the the Bus/Device as SCSI.
  • If your underlying storage supports thin provisioning then enable “Discard” to save space. This option works together with a TRIM enabled operating system.
  • SSD Emulation (even if you are running on a HDD) may need to enabled as well so the GuestOS will start to use Trim to reclaim space with the above “Discard” option.
  • If you have multiple vDisk on the same VM then enabling “IO thread” can help performance.

CPU

  • Select how many cores you need.
  • (Optional) If you require AES acceleration there is now a + box at the end of the CPU flag list
  • (Optional) If you need further instructions sets you can select from the CPU type in the drop down list.

Memory

  • Depends on your requirements in this example the virtual machine will have 8Gb.

Network

  • VirtIO (paravirtualized)

Confirm

  • If your happy with the configuration click finish.

Optional

  • You can add an additional cdrom drive before booting the VM to help the installation process. This only helps to reduce the steps from having to switch between the Windows ISO and the VirtIo driver ISO during the Windows Server install.
  • Windows also has a strange error messages saying it can’t install on this hard disk (only because the Windows ISO wasn’t switched back) caught me off guard once or twice.
fig4. You can’t just saw the windows ISO is missing?
  • To add an additional CD ROM drive go to the newly created virtual machine -> Hardware Tab -> then click Add -> CD/DVD Drive.
  • Then select for the ISO image your previously downloaded virtio ISO and then press create. Once you have finished the installation don’t forget to remove the drive.

Install Server 2016/2019 GUI-Less

  • Start the virtual machine, go to the console and the Windows setup will appear. Press next on the language settings and then select your Windows Server edition.
Desktop Experience = GUI
  • Accept the EULA and press Next.
  • On the installation type select “Custom” you may notice there is no hardware but if there is still continue on the steps below.
  • We will need to install some of the missing drivers to support the Windows virtualized operating system. I found that installing the drivers on this page is easier (even if its not related to storage) then using the pnutil utiltiy in Windows post installation but both method methods will work The added bonus is your network will work straight away on first log in.
fig5. No drives found :(
  • First lets start with the network drivers. Click on load drivers -> browse -> expand out the virtio iso -> expand NetKVM\( Windows Version)\amd64 and press OK
  • Red Hat VirtIO Ethernet Adapter will show up and press next to install
Red Hat VirtIO Ethernet driver
  • You will be returned back to the same screen as fig. Repeat the process above for the following paths but this time using the directory vioscsi\( Windows Version )\amd64. You will then see the Red Hat VirtIO SCSI driver.
RedHat VirtIO SCSI driver
  • You will now see the vDisk from proxmox. Press Next with “Drive 0 Unallocated Space” selected
vDisk is now visible and you can proceed with the installation
  • If you are using a single CD/DVD Drive then you will need to switch from VirtIO back to ISO back to Windows or you will receive an error that Windows can’t be installed on this hard drive.

Post Install Configuration Steps

  • Once the installation has completed and you have setup the administrative password.
  • You will then see the dos prompt.
  • A nice welcomed update in 2021 is the updated way to install drivers with the new virtIO ISO images. There were quite a few manual steps in the previous version of this guide that I have now been streamlined with the GUI installer.
  • In the dos prompt switch to the CD drive. In my case D:
  • Then type in virtio-win-guest-tools.exe (This should tab out for auto completion).

Tip: If you add the /passive switch at the end of the command most of the installation will go through automaticity.

  • Accept the EULA and press install.
  • Then on the package list just press “Next’ on the default selection and then press Install.
  • When prompted if you trust drivers from Red Hat, Inc, select “Install”.
  • To confirm you can simple drop into powershell and type in ‘get-service -name qemu’
fig9. guest agent service check, note that QEMU-GA is running.
  • On proxmox you should be able to see the IP address of the virtual machine been report as well.
fig10. IP address reporting in proxmox now the guest agent is installed
  • Next is to confirm if the balloon service was installed.
    In a powershell prompt type in ‘get-server -name ball*” you should see the same output as below.
  • Note: There seems to be some controversy around the baloon driver on Windows. At the time of writing I am unable to verify if this has been addressed in the latest version of virtio. If you noticed some performance issues then this would be the best place to look first. Source [1], [2]
  • Cleanup: Be sure to remove your ISO images mounted to the VM and remove the extra CD Rom drive in the hardware tab of proxmox.
  • You are now ready to get started on your gui-less install. If you are new to server 2016/19 core then type ‘sconfig’ as the best place for getting started.
fig13. sconfig — best place to get started on server core

--

--