这篇博文将演示如何实现在 1.6.3 版中添加到 Packer 的新功能。这个新功能提供了在 Proxmox VM 上挂载多个 ISO 的能力,因为 Proxmox “不”支持虚拟软盘驱动器。由于 Proxmox 不支持虚拟软盘驱动器,因此您无法提供 Autounattend.xml 文件来自动安装和初始配置 Windows。通过将 Autounattend.xml 文件转换为 ISO,我们现在可以挂载 ISO 以安装操作系统和包含自动安装所需文件的 ISO。最后,我将使用 Vault 来存储 Packer 创建此 VM 所需的敏感值。
背景
什么是Packer ?
Packer 是一个开源工具,用于从单个源配置为多个平台创建相同的机器映像。Packer 是轻量级的,可以在每个主要操作系统上运行,并且性能很高,可以为多个平台并行创建机器映像。
在 macOS 上安装 Packer v1.6.3
-
brew install hashicorp/tap/packer
- 安装Packer
-
packer -v
- 确保版本为 1.6.3 或更高
设置 Proxmox
下载 Windows 和 Windows VirtoIO 驱动程序 ISO
您可以指示 Packer 通过 URL 下载 ISO,但对于 Windows,我发现这个过程很乏味,首先,Packer 必须在执行 Packer 的机器上本地下载它。接下来,Packer 必须将 ISO 上传到 Proxmox。由于我的服务器是远程的,我的服务器上传速度为 5MB,将 ISO 上传到 Proxmox 大约需要两个小时。由于我的 Proxmox 实例的网络有 1GB 的带宽,因此将 4GB 的 ISO 直接下载到 Proxmox 需要几秒钟的时间。如果您更喜欢 ISO URL 下载方法,请跳过此部分。
- SSH 到 Proxmox 节点
-
cd <ISO 目录>
-
wget <Windows ISO URL>
-
wget <VirtIO Windows 驱动程序>
设置Vault
最近,我一直在将 Vault 集成到我的许多项目中,我将在这里继续这样做。如果您的环境没有 Vault,您可以替换所有
与实际值,您可以跳过本节。如果您想了解如何将 Vault 集成到您的 Packer 构建中,请继续阅读。
启用秘密引擎
-
vault login
-
vault secrets enable -version=2 -path=secrets kv
设置策略
-
vault policy write packer-read-only vault_policies/read-only.hcl
- 为 Packer 机密添加只读策略
-
vault policy write packer-admin vault_policies/admin.hcl
- 添加 Packer 机密的管理策略
- 将策略附加到各自的用户
Proxmox 的秘密
-
vault kv put secrets/proxmox proxmox_url=https://<Proxmox IP addr or FQDN>/api2/json
- 设置 Proxmox URL
-
vault kv patch secrets/proxmox proxmox_host=<Proxmox 节点名称>
- 设置 Proxmox 节点以在其上创建 VM
-
vault kv patch secrets/proxmox proxmox_username=<proxmox_username>@pam
- 设置 Proxmox 用户名
-
vault kv patch secrets/proxmox proxmox_password=changeme
- 设置 Proxmox 密码
-
vault kv patch secrets/proxmox proxmox_skip_tls_verify=false
- 定义 Packer 是否应验证 TLS 证书
-
vault kv get secrets/proxmox

Windows 机密
由于这些值中的大多数不是秘密,我提供了一个
这可以使过程更容易。Vault 将接受来自我提供的非秘密值的 JSON 的秘密键值对。
-
vault kv put secrets/packer/win10x64 @vault-win10x64-vars.json
-
vault kv get secrets/packer/win10x64

-
vault kv patch secrets/packer/win10x64 winrm_username=vagrant
- 设置 WinRM 使用的用户名
-
vault kv patch secrets/packer/win10x64 winrm_password=vagrant
- 设置 WinRM 使用的密码
-
vault kv get secrets/win10x64

为 Packer 编写 Windows 版本
将 Autounattend.xml 转换为 Autounattend.iso
在典型的 Windows 安装过程中,
将通过软盘设备提供。但是,正如我上面所说,Proxmox 不支持软盘设备。这个新的 Packer 功能提供了为 Windows VM 挂载多个 ISO 的能力,因此,我们必须将 XML 文件转换为 ISO。
-
git clone https://github.com/CptOfEvilMinions/BlogProjects/tree/master/packer-windows
-
cd BlogProjects/packer-windows
- 苹果系统
-
hdiutil makehybrid -o Autounattend.iso -hfs -joliet -iso -default-volume-name cidata <input_directory>
- 如果上面的命令成功运行,则应生成 Autounattend.iso
-
scp Autounattend.iso <用户名>@<proxmox>:<ISO 目录>/Autounattend.iso
-
- Linux
-
mkisofs -J -l -R -V "Label CD" -iso-level 4 -o Autounattend.iso <input_directory>
-
Packer 组合
变量
正如您从下面的屏幕截图中看到的,此 Packer 文件不包含任何机密。通过将 Vault 指定为秘密 Packer 的位置,它将与 Vault 联系。Vault 不仅包含敏感值,还可以包含用于标准化构建模板的值,例如 VM 名称、VM 模板描述、CPU 内核数以及分配 VM 模板的内存量。
- Proxmox
-
proxmox_url– 该值通过指定API的位置来指定Proxmox的位置
- 前任:
https://proxmox.local/api2/json
- 前任:
-
proxmox_host– 指定要在其上构建 VM 的 Proxmox 节点
-
proxmox_用户名– 指定有权创建 VM 的 Proxmox 用户名
-
proxmox_password– 指定一个有权创建 VM 的 Proxmox 密码
-
proxmox_skip_tls_verify– 指定 Packer 是否应验证服务 Proxmox 的 TLS
-
- WinRM
-
winrm_用户名– 指定用户名自动无人值守.xml创建默认用户的文件
-
winrm_password– 指定密码自动无人值守.xml创建默认用户的文件
-
- 虚拟机
-
虚拟机名称– 虚拟机模板名称
-
模板描述– 虚拟机模板说明
-
iso_file– 指定 ISO 在 Proxmox 集群上的位置
- 前任:
<proxmox 数据存储路径>:iso/<ISO 文件名>
- 前任:
本地:ISO / Fedora的-Server的DVD-x86_64- 29 -1.2.iso
- iso_file 上的 Packer 文档
- 前任:
-
vm_cpu_cores– 指定分配 VM 模板的 CPU 核数
-
vm_memory– 指定分配VM模板的内存量
-
vm_disk_size– 指定虚拟机模板的硬盘大小

-
打包机构建
-
export VAULT_TOKEN= `保险库令牌查找 --format=json | jq -r '.data.id'`
- 请求用户令牌并将其存储在 Packer 的环境变量中
-
打包器构建 win10x64-enterprise.json


本文介绍如何利用 Packer 1.6.3 版本的新特性,在 Proxmox 上部署带有自动安装配置的 Windows 虚拟机。鉴于 Proxmox 不支持虚拟软驱,文章详细展示了如何通过将 Autounattend.xml 文件转换成 ISO 并挂载的方式完成无人值守安装。

597

被折叠的 条评论
为什么被折叠?



