32

为 ESXi 集成 SLIC 以及其他自定义 (6.7-8.0)

 1 year ago
source link: https://blog.starryloki.com/2022/12/03/%E4%B8%BAESXi%E9%9B%86%E6%88%90SLIC%E4%BB%A5%E5%8F%8A%E5%85%B6%E4%BB%96%E8%87%AA%E5%AE%9A%E4%B9%89(6.7-8.0)/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为 ESXi 集成 SLIC 以及其他自定义 (6.7-8.0)

Created2022-12-03|Updated2022-12-03|Notes
Word count:982|Reading time:4min|Post View:2

SLIC 是什么

SLIC ( Software Licensing Internal Code) 是微软在合作的 OEM 厂商主板BIOS中写入的特定信息,用于激活 OEM 版本的 Windows。当前最新的 SLIC 版本为2.6, 可以激活最新的 Windows Server 2022 LTSC。

集成进 VMware 产品

VMware 产品当然有自己的 BIOS 或 EFI 固件,我们可以提取 OEM 厂商固件中的 SLIC 信息并写入到 VMware 的固件中,提取和写入的过程本文不进行叙述,相关成品和教程可以在各大网站搜索到,本文重点叙述如何将修改好的固件写入 VMware 产品中。

Workstation 和 Fusion

VMware 面向桌面端的产品主要是 Workstation (Windows & Linux) 和 Fusion (macOS),这两款产品替换 BIOS 非常简单,直接将安装目录下的 BIOS.440.ROM, EFI64.ROM, EFI20-64.ROM 替换为修改好的对应固件即可。

而 ESXi 由于涉及到一个类似 SIP 的机制,一般情况下无法替换而且替换后重启会被原文件覆盖,6.7版本后无法使用直接替换文件的方法

ESXi 的 ROM 文件位于 /usr/lib/vmware/roms 下,ESXi开机时会解压 /bootbank/vmx.v00 并替换关键的系统文件,其中包括了 roms 目录,也就是说我们只需要替换 vmx.v00 中的固件就可以完成修改了。而 ESXi8 收紧了 /bootbank/vmx.v00 的权限,不再可以直接更改,只能更改安装镜像中的 vmx.v00 文件,这样安装后的 /bootbank/vmx.v00 就是我们已经改好的版本。

v00 文件本质上是经过多重打包的,但是有一些压缩方式是 ESXi 独有的,我们需要在 ESXi 上操作:

mkdir "/vmfs/volumes/datastore1/vmvisor-sys/"
mkdir "/vmfs/volumes/datastore1/tmp/"
mkdir "/vmfs/volumes/datastore1/tmp/vmvisor-sys/"
cp "/bootbank/vmx.v00" "/vmfs/volumes/datastore1/vmvisor-sys/vmx.gz"
pigz -d "/vmfs/volumes/datastore1/vmvisor-sys/vmx.gz"
sigfilesize=$(wc -c < "/usr/share/weasel/s.sigblob"); \
sysfilesize=$(wc -c < "/vmfs/volumes/datastore1/vmvisor-sys/vmx"); \
head -c $((sysfilesize-sigfilesize)) "/vmfs/volumes/datastore1/vmvisor-sys/vmx" > "/vmfs/volumes/datastore1/vmvisor-sys/vmx-nosig.xz"
xz -d "/vmfs/volumes/datastore1/vmvisor-sys/vmx-nosig.xz"
vmtar -x "/vmfs/volumes/datastore1/vmvisor-sys/vmx-nosig" -o "/vmfs/volumes/datastore1/vmvisor-sys/vmx.tar"
tar xf "/vmfs/volumes/datastore1/vmvisor-sys/vmx.tar" -C "/vmfs/volumes/datastore1/tmp/vmvisor-sys/"

这时候已经把当前系统的 vmx.v00 解压到 /vmfs/volumes/datastore1/tmp/vmvisor-sys/ 目录了,我们可以在 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms 找到固件并替换,替换后我们需要修改被替换文件的权限:

chmod 755 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI64.ROM
chmod 755 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI20-64.ROM
chmod u+s /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/BIOS.440.ROM
chmod u+s /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI64.ROM
chmod u+s /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI20-64.ROM
chown 201:201 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/BIOS.440.ROM
chown 201:201 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI64.ROM
chown 201:201 /vmfs/volumes/datastore1/tmp/vmvisor-sys/usr/lib/vmware/roms/EFI20-64.ROM
rm -R "/vmfs/volumes/datastore1/vmvisor-sys/"
mkdir "/vmfs/volumes/datastore1/vmvisor-sys/"
cd "/vmfs/volumes/datastore1/tmp/vmvisor-sys/"; \
tar cf "/vmfs/volumes/datastore1/vmvisor-sys/vmx.tar" *
vmtar -c "/vmfs/volumes/datastore1/vmvisor-sys/vmx.tar" -o "/vmfs/volumes/datastore1/vmvisor-sys/vmx-nosig"

运行完成后会报错,是 ESXi 的安全机制,可以忽略,继续打包:

xz --compress --stdout --lzma2=dict=2048KiB --check=crc32 --threads=8 "/vmfs/volumes/datastore1/vmvisor-sys/vmx-nosig" > "/vmfs/volumes/datastore1/vmvisor-sys/vmx"
cat "/usr/share/weasel/s.sigblob" >> "/vmfs/volumes/datastore1/vmvisor-sys/vmx"
pigz -9 -p 60 -n -T "/vmfs/volumes/datastore1/vmvisor-sys/vmx"

此时我们可以得到 /vmfs/volumes/datastore1/vmvisor-sys/vmx.gz 文件,这个就是 vmx.v00 了,我们可以直接重命名为 vmx.v00,后续我们再使用 UltraISO 替换对应版本的安装镜像即可。

此外我们还可以编辑 BOOT.CFG, EFI/BOOT/BOOT.CFG,加入 allowLegacyCPU=true autoPartitionOSDataSize=4096 cpuUniformityHardCheckPanic=false 等参数优化系统安装并提高兼容性。

至此,我们已经制作好了包含 SLIC 的自定义 ESXi 镜像,即装即用。

SLIC2.6激活的Windows Server 2022


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK