Windows OpenStack Imaging Tools 自动生成 Windows 镜像。
这些工具是一组 PowerShell 模块和脚本。
支持Windows镜像的目标环境是。
- 带有KVM、Hyper-V、VMware和baremetal管理程序类型的OpenStack
- 带有KVM、Hyper-V、VMware和baremetal的MAAS
生成环境需要是一个Windows环境,并启用Hyper-V虚拟化。
如果你打算在另一个system / hypervisor 上运行在线Windows设置步骤,则不需要Hyper-V虚拟化。
以下版本的Windows镜像(包括x86/x64,如果存在的话)被支持。
- Windows Server 2008 / 2008 R2
- Windows Server 2012 / 2012 R2
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
- Windows 7 / 8 / 8.1 / 10 / 11
要生成Windows Nano Server 2016,使用以下资源库。
https://github.com/cloudbase/cloudbase-init-offline-install
Windows镜像工具的工作流程
创建Windows镜像的快速路径
要求:
- 一台Windows主机,启用
Hyper-V
虚拟化,支持PowerShell >=v4
和Windows Assessment 和 Deployment Kit(部署工具包ADK)。 - 一个Windows安装ISO或DVD
- Windows兼容的驱动程序,如果目标环境需要的话
- Git环境
生成Windows镜像的步骤
- 克隆这个资源库
- 挂载或提取Windows ISO文件
- 下载和/或提取Windows兼容的驱动程序
- 如果目标环境是MAAS或者镜像生成被配置为安装更新。
- windows-curtin-hooks 和 WindowsUpdates git submodules 是必需的。
- 运行
git submodule update --init
来获取它们 - 导入
WinImageBuilder.psm1
模块 - 使用具有适当配置文件的
New-WindowsCloudImage
或New-WindowsOnlineCloudImage
方法
用于OpenStack KVM的PowerShell镜像生成示例(主机需要启用Hyper-V)。
git clone https://github.com/cloudbase/windows-openstack-imaging-tools.git
pushd windows-openstack-imaging-tools
Import-Module .\WinImageBuilder.psm1
Import-Module .\Config.psm1
Import-Module .\UnattendResources\ini.psm1
# Create a config.ini file using the built in function, then set them accordingly to your needs
$ConfigFilePath = ".\config.ini"
New-WindowsImageConfig -ConfigFilePath $ConfigFilePath
# To automate the config options setting:
Set-IniFileValue -Path (Resolve-Path $ConfigFilePath) -Section "DEFAULT" `
-Key "wim_file_path" `
-Value "D:\Sources\install.wim"
# Use the desired command with the config file you just created
New-WindowsOnlineImage -ConfigFilePath $ConfigFilePath
popd
镜像生成工作流程
New-WindowsCloudImage
这个命令不需要启用Hyper-V
,但是生成的镜像还没有准备好被部署,因为它需要在另一个管理程序上手动启动。
当它关闭时,该镜像就可以使用了。
你可以在Examples/create-windows-cloud-image.ps1
中找到一个生成原始OpenStack Ironic
镜像的PowerShell例子
,它也可以在KVM
上使用。
New-WindowsOnlineImage
这个命令要求启用Hyper-V
,如果要安装更新,需要配置一个VMSwitch
用于外部网络连接。如果要安装更新的话,强烈建议使用VMSwitch的网络连接。
这个命令在内部使用New-WindowsCloudImage
来生成基础镜像,并使用基础镜像启动Hyper-V
实例。使用基本镜像启动一个Hyper-V
实例。在Hyper-V
实例关闭后。产生的VHDX
被缩减到最小尺寸,并转换为所需的格式。
你可以在 Examples/create-windows-online-cloud-image.ps1
中找到一个生成原始 OpenStack Ironic 镜像的 PowerShell 示例,该镜像也可在 KVM 上使用。
常见问题 (FAQ)
镜像的生成始终不停止
确保
Hyper-V VMSwitch
配置正确,如果你已经配置了镜像生成来安装Windows更新,它允许互联网连接。在相关的
Hyper-V
虚拟机中检查Logon.ps1
脚本是否失败。如果脚本失败,应该有一个PowerShell窗口显示错误信息。
我用镜像启动了一个实例,得到的是一个BSOD
这是可能遇到的最常见的情况,而且很容易解决。
如果你在KVM hypervisor上启动,确保你为带有VirtIO驱动的ISO/folder配置了正确的路径。配置选项是 virtio_iso_path 和 virtio_base_path。
在KVM hypervisor方面,确保你用
--enable-kvm
启动KVM vm
进程。如果你在裸机上启动,确保基本的Windows安装有内置的存储驱动,或者你在drivers_path配置选项中指定了驱动文件夹的正确路径。
我用这个镜像启动了一个实例,永远在Windows加载屏幕
这通常发生在hypervisor没有公开该特定Windows版本所需的CPU标志的情况下。
例如,对于Windows 10,你可以检查 https://www.microsoft.com/en-us/windows/windows-10-specifications ,确保你选择的管理程序暴露了CPU标志。
对于开发者而言
运行单元测试
需要在系统上安装 PowerShell Pester 包。
如果你运行的是Windows 10,它应该已经安装在你的系统上。
如果没有安装,你可以在Windows 10或更高版本上安装它。
Install-Package Pester
或者你可以从以下网站克隆它:https://github.com/pester/Pester
在一个封闭的环境中运行测试:
cmd /c 'powershell.exe -NonInteractive { Invoke-Pester }'
这将运行所有的测试而不污染你当前的shell环境。
如果你在持续集成环境中运行它,就不需要这样做。