Installing ESXi on an Intel NUC11

Most of my personal workloads today run in the cloud, but there are use cases (e.g. this annoying Unifi Bug) where I want a server inside our home network. I recently set up an Intel NUC (specifically, a NUC11PAH with an i5) for this version with the awesome free version of ESXi for provisioning workloads. If you are a VCDX or similar you can probably do this in your sleep, but for the rest of us here are step-by-step instructions.

The main challenge is that the standard ESXi installer currently doesn’t have the necessary networking drivers for the NUC11. This means we have to roll our own offline install image. To do this, you will need a Windows host. While there is a MacOS version of Powershell and PowerCLI, it doesn’t support the functionality to create custom .iso images yet.

Creating the custom offline ISO image

First we need to download the standard ESXi ISO image. Go to VMware Customer Connect, create an account, select License and Download and download the zip file (NOT the .iso). The download page also gives you a free license key. Copy it, you will need it later.

Next download the Community Networking Driver here. It’s a “Fling” which is VMware’s term for semi-supported projects. Officially no support but in practice major critical infra probably runs on some of these. You should now have something like these two:

VMware-ESXi-7.0U3-18644231-depot.zip
Net-Community-Driver_1.2.2.0-1vmw.700.1.0.15843807_18835109.zip

Next, run Powershell in Windows (macOS won’t work, Linux likely won’t work either). You will likely have to run it as admin as otherwise some commands will fail.

PS> Install-Module -Name VMware.PowerCLI
NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\guido\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and
import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y

Next, we add the depot files to let the tool know where to take the components from. File names need to match the ones that you downloaded.

PS> Add-EsxSoftwareDepot "4.\VMware-ESXi-7.0U2a-17867351-depot.zip"

Depot Url
---------
zip:C:\Users\guido\VMware-ESXi-7.0U2a-17867351-depot.zip?index.xml

PS C:\Users\guido\> Add-EsxSoftwareDepot ".\Net-Community-Driver_1.2.2.0-1vmw.700.1.0.15843807_18835109.zip"

Depot Url
---------
zip:C:\Users\guido\Net-Community-Driver_1.2.2.0-1vmw.700.1.0.15843807_18835109.zip?index.xml

To create the profile, we first want to figure out how the old profile is called and then copy it.

PS> Get-EsxImageProfile

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESXi-7.0U2a-17867351-no-tools  VMware, Inc.    4/9/2021 5:5... PartnerSupported
ESXi-7.0U2a-17867351-standard  VMware, Inc.    4/29/2021 12... PartnerSupported

PS C:\Users\guido> New-EsxImageProfile -CloneProfile "ESXi-7.0U2a-17867351-standard" -name "ESX-NUC"

cmdlet New-EsxImageProfile at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
Vendor: whatever
Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESX-NUC                        anet            4/29/2021 12... PartnerSupported

PS> Add-EsxSoftwarePackage -ImageProfile "ESX-NUC" -SoftwarePackage "net-community"

Name                           Vendor          Last Modified   Acceptance Level
----                           ------          -------------   ----------------
ESX-NUC                        anet            12/10/2021 1... PartnerSupported

PS> Export-ESXImageProfile -ImageProfile "ESX-NUC" -ExportToISO -filepath ESXi-NUC.iso

Now that we have we need to get the USB image on a flash drive. I did that on macOS with the instructions here. For Windows, Rufus seems to be the tool of choice, see instructions here.

Boot the NUC from the USB drive, and ESXi installed without any issues for me. Add the license key, and you are done. The actual workloads I run inside docker containers on Alpine Linux. I looked at running kubernetes, but the networking model is still very hard for home use cases (e.g. workloads listening to broadcast traffic on the host network).

Thanks to Shu Wu, Songtao Zhen and William Lam for the community driver, and JeanD-SYD for his comment on the NUC11.