使用PowerCli来创建自定义ESXi ISO镜像

之前我们封装ESXi ISO镜像大多使用的是GitHub – VFrontDe/ESXi-Customizer-PS: PowerCLI script that greatly simplifies and automates the process of creating fully patched and customized VMware ESXi installation images 这个项目的powershell脚本,把一些社区版驱动(比如网卡驱动,USB网卡驱动等)封装进ESXi ISO,这样安装时就可以直接识别相应的硬件了。

实际上上述脚本就是基于VMware.PowerCLI 来实现的。PowerCLI是VMware的一个非常强大的Powershell命令库,有近700 cmdlets 可以用来管理和自动化VMware很多产品(比如vSphere, vCloud Director, vRealize Operations Manager, vSAN, NSX-T, VMware Cloud Services, VMware Cloud on AWS, VMware HCX, VMware Site Recovery Manager, and VMware Horizon environments)。而PowerCLI 12.0.0版本更新中,关于ISO镜像,有如下描述:

New cmdlets for managing auto-bootstrapping and new-style depots in vSphere 7.0 have been added to the VMware.DeployAutomation and VMware.ImageBuilder module:

New/Set/Reset-LCMClusterRuleWithTransform
Get-DepotAddons
Get-DepotBaseImages
Get-DepotComponents
Get-DepotInfo
Get-DepotVibs
New-IsoImage
New-PxeImage

我们注意到它提到了加入了 New-IsoImage (通过VMware.ImageBuilder module)。

查询相关文档,New-IsoImage Command | VMware PowerCLI ReferenceCreate a Custom ESXi ISO Image with PowerCLI Cmdlets (vmware.com) 有很详细的使用方法。

接下来我们在Windows 11 (Windows 10同理)环境下配置下环境来学习下用法。

  1. “以管理员身份运行” Windows Powershell 或者Windows Terminal。
  2. Install-Module -Name VMware.PowerCLI 此过程中如果有提示是否安装NuGet以及是否要从”PSGallery”安装模块请选择“是”,“全是”。视网络情况,此安装过程可能需要几分钟。
  3. 设置Execution policy, Windows 默认不允许执行此类第三方脚本Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine 具体详细用法可以参照 Set-ExecutionPolicy (Microsoft.PowerShell.Security) – PowerShell | Microsoft Docs
  4. Import-Module VMware.ImageBuilder
  5. 我们先使用VMwre的官方online repo来查看有哪些Image profile Get-DepotBaseImages -Depot https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml 查询需要几十秒:

Version Vendor Release date
——- —— ————
7.0.0-1.25.16324942 VMware, Inc. 06/15/2020 23:00:00
7.0.0-1.20.16321839 VMware, Inc. 06/15/2020 23:00:00
7.0.0-1.0.15843807 VMware, Inc. 03/16/2020 08:40:41
7.0.1-0.35.19324898 VMware, Inc. 02/14/2022 23:00:00
7.0.1-0.15.17168206 VMware, Inc. 11/18/2020 23:00:00
7.0.1-0.10.17119627 VMware, Inc. 11/03/2020 23:00:00
7.0.1-0.25.17325551 VMware, Inc. 12/16/2020 23:00:00
7.0.1-0.20.17325020 VMware, Inc. 12/16/2020 23:00:00
7.0.1-0.30.17551050 VMware, Inc. 02/03/2021 23:00:00
7.0.1-0.0.16850804 VMware, Inc. 09/04/2020 16:33:22
7.0.2-0.0.17867351 VMware, Inc. 04/28/2021 23:00:00
7.0.2-0.15.18295176 VMware, Inc. 08/23/2021 23:00:00
7.0.2-0.20.18426014 VMware, Inc. 08/23/2021 23:00:00
7.0.2-0.25.18538813 VMware, Inc. 09/13/2021 23:00:00
7.0.2-0.30.19290878 VMware, Inc. 02/14/2022 23:00:00
7.0.3-0.20.19193900 VMware, Inc. 01/17/2022 23:00:00
7.0.3-0.30.19482531 VMware, Inc. 03/28/2022 23:00:00
7.0.3-0.35.19482537 VMware, Inc. 03/28/2022 23:00:00

其实-Depot这个参数也是可以指向一个本地的离线包(非ISO),比如:

Get-DepotBaseImages -Depot C:\CustomImage\VMware-ESXi-7.0U3c-19193900-depot.zip

Version Vendor Release date
——- —— ————
7.0.3-0.20.19193900 VMware, Inc. 01/17/2022 23:00:00

类似的还有Get-DepotAddons 和 Get-DepotComponents

比如可以查询社区版网卡驱动包:

Get-DepotComponents -Depot C:\CustomImage\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip

  • 接下来创建一个自定义镜像的Spec (json格式):
{
    "base_image": {
        "version": "7.0.3-0.35.19482537"
    },
    "components": {
       "Net-Community-Driver": "1.2.7.0-1vmw.700.1.0.15843807"
   }
}
  • 利用前面查询到的离线包,驱动文件和spec文件来制作自定义镜像:
New-IsoImage -Depots "c:\CustomImage\VMware-ESXi-7.0U3c-19193900-depot.zip" , "c:\CustomImage\Net-Community-Driver_1.2.7.0-1vmw.700.1.0.15843807_19480755.zip" -SoftwareSpec "c:\CustomImage\spec.json" -Destination "c:\CustomImage\ESXi-70U3c-custom.iso"

此方法尝试封装USB NIC Flings时会报错,是该驱动的一个小bug,估计后续会修复。

New-IsoImage : Error retrieving file for VIB 'VMW_bootbank_vmkusb-nic-fling_1.8-3vmw.703.0.15.51233328':
("<zipfile.ZipExtFile name='vib20/vmkusb-nic-fling/VMW_bootbank_vmkusb-nic-fling_1.8-3vmw.703.0.15.51233328.vib'
mode='r' compress_type=deflate>", "Error opening file object for VIB
'VMW_bootbank_vmkusb-nic-fling_1.8-3vmw.703.0.15.51233328': Expected value '[]' for attribute 'swplatforms', but found
value '[<vmware.esximage.Vib.SoftwarePlatform object at 0x0000015A1ECEBB08>]'.").

ESXi 社区版网卡驱动

最近 VMware的flings网站里新增加了Community Networking Driver for ESXi | VMware Flings.

此驱动旨在对一些官方安装包里不支持的网卡提供一个相对稳定的网卡驱动,可以通过封装到安装镜像或者在现有的ESXi主机上安装来使用.

从requirements一页中可以看到此驱动支持了哪些网卡.

2.5GbE
1GbE

看了下NUC8和NUC11 Pro and Performance的网卡都属于这个驱动可以支持的.

PS: 此前也有一个类似的社区版网卡驱动,之前已经集成到了ESXi7.0.1里.

ESXi社区版ne1000 VIB驱动的更新

原文出自https://www.virtuallyghetto.com/2020/08/enhancements-to-the-community-ne1000-vib-for-intel-nuc-10.html本篇是征求原作者同意后的简要中文翻译。

使用Intel NUC 10(寒霜峡谷)做ESXi主机的玩家应该知道ESXi默认自带的驱动不能识别板载的Intel i219V(8086:0d4f)网卡,需要使用一个社区版的ne1000驱动来封装ESXi ISO进行安装。因此而造成的副作用就是当给ESXi打补丁或者升级时,这个社区版的ne1000驱动会被默认的新版本驱动替换,导致网卡再次无法被ESXi识别。

一个变通的办法是再次安装这个社区版的ne1000 VIB,网络连接就可以恢复了。还可以通过创建vSphere Image Profile来把补丁或者升级包中的驱动用社区版ne1000 VIB替换,再进行补丁或升级安装。原作者在和Songtao(另一个VMware的工程师,USB Network Native Driver for ESXi的开发者)交流后,Songtao提供了一个非常简单的解决方案。这个办法就是给社区版ne1000 VIB取一个不同的名字,这样社区版ne1000 VIB就可以和默认的驱动共存了,更重要的一点,打补丁或者升级ESXi之后它也会一直保留。

下面是新的社区版 ne1000 VIB (离线包):

https://download3.vmware.com/software/vmw-tools/Intel-NUC-ne1000_0.8.4-3vmw.670.0.0.8169922-offline_bundle-16654787.zip

使用vSphere Image Builder UI工具或者PowerCLI版的Image Builder来封装离线包的详细指南可以参考这篇博客(英文)。

最后,一些网友在相关网站中提出对一些其它版本的i219网卡支持的需求,Songtao在此次驱动更新中,添加了如下i219网卡版本的支持:

8086:0d4e – Ethernet Connection (10) I219-LM

8086:0d4f – Ethernet Connection (10) I219-V

8086:0d4c – Ethernet Connection (11) I219-LM

8086:0d4d – Ethernet Connection (11) I219-V

8086:0d53 – Ethernet Connection (12) I219-LM

8086:0d55 – Ethernet Connection (12) I219-V

8086:15fb – Ethernet Connection (13) I219-LM

8086:15fc – Ethernet Connection (13) I219-V

8086:15f9 – Ethernet Connection (14) I219-LM

8086:15fa – Ethernet Connection (14) I219-V

8086:15f4 – Ethernet Connection (15) I219-LM

8086:15f5 – Ethernet Connection (15) I219-V

8086:1a1e – Ethernet Connection (16) I219-LM

8086:1a1f – Ethernet Connection (16) I219-V

8086:1a1c – Ethernet Connection (17) I219-LM

8086:1a1d – Ethernet Connection (17) I219-V

这些额外的版本支持除了因为来自社区的用户反馈,还因为这些设备都是i219家族的网卡,但这并不意味着对其它网卡的改进或者支持。希望使用i219家族网卡的用户能从这次更新中获益。