Historically, if you needed to create a customized ESXi ISO that included additional ESXi drivers, your only supported option was to use the vSphere Image Builder service, which has a dependency on vCenter Server. If you have an existing vCenter Server, this was not a problem and you could easily create a customized ESXi ISO using either the vSphere UI (example here) or the CLI with PowerCLI (example here).
Where this becomes a real challenge is for a greenfield or brand new deployment, where the default ESXi ISO can not be used as it does not contain the required networking and/or storage drivers for the desired hardware platform. Although this affects some customers who use hardware from the VMware HCL but it definitely has a bigger impact on the VMware Homelab community or anyone just getting started for the very first time.
While discussing this topic with a colleague recently, I actually came to learn about an alternative solution for creating a customized ESXi ISO without the need of vCenter Server! Thanks to fellow team member Blair Fritz, who now works in the VMware Cloud Product Management team, for the awesome tip.
PowerCLI 12.0 was a major release with a TON of new functionality, but it it also included a couple of new cmdlets: New-IsoImage and New-PxeImage that allows users to create a custom ESXi ISO and Image without the need of vCenter Server. This was actually the first time I had heard about these cmdlets and I am guessing that this is probably going to be news for many of you as well.
The official VMware documentation does a pretty job explaining how the New-IsoImage cmdlet works, so I will not bore you with the details. One important thing to quickly mention is that these new cmdlets are included under the VMware.ImageBuilder module and unfortunately, that module has not been ported over to PowerCLI Core which also means you will need to use PowerShell on Windows to make use of these cmdlets. The other really cool thing about -Depot argument is that it can reference both a locally download ESXi Image Profile (zip) or it can actually point to VMware's Online repo located at https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml. Using this second option for the depot, I have found that it can take up to 30 seconds before it lists the version when using the Get-DepotBaseImages cmdlet to identify the version string that is required.
I know many folks in the community often create custom ESXi ISOs that include the popular USB Network Native Driver for ESXi, Community NVMe Driver for ESXi and Community Networking Driver for ESXi to name a few and I wanted to make it even easier for folks to get started.
Note: While testing the New-IsoImage cmdlet, I ran into an error when using the USB Network Native Driver for ESXi Fling and it looks like the driver was not created with specific metadata that the cmdlet is expecting. Hopefully we will be able to fix this in a future update of the Fling, but for now, you will need to use the Image Builder service if you need to incorporate USB Fling but for the Community Network and Storage Driver for ESXi, those work as expected.
To aide in this infrequent process, I have created a small PowerCLI script called create_custom_esxi_iso.ps1 which handles creating the required JSON software spec and the only thing users need to provide is the path to the ESXi Image Profile and a list of ESXi Offline Bundle Drivers paths. The script will check to ensure you are running PowerShell for Windows as PowerShell Core is NOT supported and also means you will need a Windows desktop to use this script.
Here is an example output of the script creating a new custom ESXi 7.0 Update 3c ISO that contains both the Community Network and Storage Driver for ESXi:
Michael Ryom says
Thanks for sharing William! But im not sure I get whats new/different from the VMware.ImageBuilder PowerCli commands that has been used for ages?
William Lam says
You should read the blog post again, if you didn’t pick up the difference 🙂
Michael Ryom says
Still dont see it. PowerCli/VMware.ImageBuilder module has no dependency on vCenter and you can add offline bundles, drivers and depots online/offline and it exports as bootable ISO. What am I missing?
parambil says
Agree with Michael. I have been creating custom ESXi ISO for many years now using image builder, which has no dependency to vCenter.
Shane Gibson says
William - great posting - thank you. We deal with spinning ESXi ISOs all the time - and any improvements in the process are certainly welcome.
Still incredibly heartbroken that someone thinks "Windows required" is a valid strategy. Highly automated environments include CI/CD toolchains that may spin ESXi ISOs and test the deployments ... which is awfully annoying / frustrating / hard to do with a Windows desktop requirement inserted in that toolchain.
Here's to hoping that VMware one day in the next few decades modernizes this path ... primarily by jettisoning the 1990s era style requirement for spinning ISOs. Hello ... online software depots ... anyone?
Seriously though - thank you!!
Michael Rice says
I couldnt agree more. Hopefully this cmdlet could get ported into core because at least then a docker solution could help to automate some of this.
Boner Alert (@bobbyw) says
I've been using ESXi for years and even the PS Customizer script but I don't see any info in this article what spec.json is, why you would need it, or how you would make it. Could you elaborate?
William Lam says
The article doesn't cover the JSON details because I had linked to official docs. Its https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-83DB452B-669A-4270-8E0D-B902188376D3.html (which is referenced in the article). This is new in vSphere 7.0 and includes support for vSphere Lifecycle Manager (vLCM)
PS Customizer (although a very awesome community tool, it is NOT officially supported by VMware) and as an employee, we definitely recommend using the official tools to ensure the best possible customer experience
Boner Alert (@bobbyw) says
Thank you!
Steve Ballmer says
Where does it say you need vCenter to use Image Builder? It can be installed on standalone windows workstations with no vCenter anywhere in the environment.
https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.install.doc/GUID-C84C5113-3111-4A27-9096-D61EED29EF45.html
William Lam says
Steve - In the past (see the reference example when I had to create a custom ESXi ISO with NSX-T VIBS), I was not able to proceed without needing to first connect to vCenter Server (which is where the Image Builder service resides). I've also seen this from other users but interestingly, I see that both you and Michael mentioned that hasn't been your experience. I'm now wondering if this was an earlier limitation or constraint but I certainly ran into this over the years and hence the article.
Aside from the dependency aspect, these cmdlets are the recommended ones going forward, especially if you wish to construct customized ESXi Image that can function with the new vSphere Lifecycle Manager (vLCM) feature
Steve Ballmer says
Thanks for the reply William. Great site. Keep up the great work.
VirtuallyWired says
Thanks William, great post! I usually use the PowerCLI ImageBuilder cmdlets myself but, I recently posted on my blog how to do it via vCenter ImageBuilder.
Roy says
I'm using DellEMC custom images, and I need to remove a driver VIB that is causing issues in our environment. So, for this new procedure: https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-83DB452B-669A-4270-8E0D-B902188376D3.html
How can I specify a vib to REMOVE? The VIB is actually in the addon package.
Tom says
Is there already a fix available for PowerCLI to recognize the custom NIC driver?
jeremycirca1980 says
I built a Docker Container that runs PowerCLI 13 with Image Builder support. I'm a Mac user and didn't always have access to a Windows machine to run PowerCLI with Image Builder so, when I saw PowerCLI 13 came out, I jumped for joy. Anyways, I get a lot of my information from William Lam and this website I wanted to share the link to the Container. I hope it helps someone out as much as it helps me out. https://hub.docker.com/r/jmcombs/vmware-powercli
scheblein says
THIS works! So nice to finally be able to add the USB Fling to the ESXi ISO. Thanks for putting this together (from a fellow Mac user).