Skip to content

Hyper-V

Primcoat builds your hardened image, uploads it to an SMB share or SCVMM library, and registers it as a Generation 1 or 2 VM template.

Uploads to
an SMB file share or SCVMM library
Registers as
a Generation 1 or 2 VM template

Primcoat converts the hardened QCOW2 master to VHDX and writes it to an SMB file share or a System Center Virtual Machine Manager (SCVMM) library, as a template for Generation 1 or Generation 2 virtual machines.

Primcoat installs Hyper-V Integration Services during the build — on Linux guests, the hv_* kernel drivers together with the userspace daemons for key-value exchange, live backup, and file copy — so the host gets a heartbeat, clean shutdown, and usable guest metrics.

Generation 1 and Generation 2 are not interchangeable

Both generations take a VHDX, but the disk inside is not the same: Generation 2 boots UEFI and Generation 1 boots legacy BIOS. A UEFI disk attached to a Generation 1 VM does not report a helpful error — it reports no boot device at all.

Because a bare .vhdx on a share tells whoever imports it nothing about which generation it needs, Primcoat exposes a {gen} token for the filename, which resolves to gen1 or gen2 from the firmware the image was actually built with. Putting it in the template is the difference between a library of self-describing disks and a library of guesses.

The fixed VHD that Azure requires is not reusable here. The two formats look adjacent and are not interchangeable — VHDX also has none of the MiB-alignment fussiness Azure’s fixed VHD does.

Secure Boot and Linux guests

Generation 2 VMs enable Secure Boot by default using the Microsoft Windows certificate template, which does not trust Linux distribution bootloaders. A correctly built, correctly signed Linux image will simply fail to start.

The fix is on the VM, not on the disk: select the Microsoft UEFI Certificate Authority template instead, or turn Secure Boot off. Nothing Primcoat can change about the image avoids this, so it is worth knowing before the first boot rather than after it.

Naming the VHDX

VHDX filenames accept letters, digits, spaces and ( ) . _ -, up to 200 characters — no /, since it is a filename on a share rather than a cloud resource identifier. Primcoat validates the template against that when you save the definition.

What you configure

A publish target holds the delivery path — the SMB share, or the SCVMM server and library share — and the credentials to reach it. You define the image name, and add version information and other details as you like.

Hyper-V is reached by a build worker inside your own network rather than from Primcoat’s infrastructure, because the alternative is exposing a hypervisor management plane to the internet. The platform overview explains how that worker is deployed and why the credential it uses is sealed to it.

Machine-readable:/integrations/hyperv.md

Get started now.

Request access, describe the image you want, and have your first hardened image in about 15 minutes — a typical estimate, before publishing to your clouds. Primcoat builds, hardens, scans, signs, and publishes it, on the operating systems you already run.