在Windows实现初始化工具叫做cloudbase-init。
作者: Cloudbase Solutions Srl
许可证: Apache 2.0
Proxmox VE对于Windows类型的虚拟机,提供了一个叫作configdrive2的元数据服务,务必先看下面链接,了解Proxmox VE在Cloudinit方面的实现。
佛西博客 - Proxmox VE与Cloud-init (buduanwang.vip)
在Windows客户机中安装好Cloudinit-base软件包之后,下次开机会从配置的元数据列表中,搜寻现有的元数据,在Proxmox VE 元数据服务就是configdrive2,因此,Cloudbase-init会读取cloudinit信息,从而自定义虚拟机。
目前PVE支持的元数据类型有User,Network。所以目前能办到的就是修改ip或者dns,新建用户,修改密码等基本功能。
一 修改PVE代码
看过上面的链接,你应该注意到,对于任何类型的os,PVE都会将用户密码进行加密,再写入到cloudinit驱动器中。
然而Windows就只识别明文密码。所以不修改代码,在用户创建这块就会存在问题。
这里有一个热爱ProxmoxVE的团队做出了一个修改代码的补丁,本文就是根据此方案,给大家分享。
GECO-IT-PUBLIC/Geco-Cloudbase-Init - Geco-Cloudbase-Init - Version Control System
安装git
apt update && apt install git -y
克隆库
PVE6和PVE7代码不一样,因此有2个补丁,先确认自己是哪个版本,在终端执行pveversion
如果是7,执行patch预检测
如果是6,执行patch预检测
当两条命令都出现,You can apply patch
那么就代表可以这个修改补丁。
修改代码
pve7执行
pve6执行
此时代码已经修改完成,需要重启一下PVE服务才能生效
systemctl restart pvedaemon.service
二 在虚拟机中安装Cloudbase-init
在ProxmoxVE创建一个虚拟机,系统类型务必选择Windows,并且添加一个串口设备。在模板创建完成之前,请勿添加cloudinit驱动器!
Windows版本的Cloudinit-base仅支持以下版本
Windows Server 2008
Windows Server 2008 R2
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Windows Server 2022
Windows 7, 8, 8.1, 10
建议使用Administrator用户进行系统部署。在计算机管理中,启用administrator用户,并切换。
下载cloudbase-init主程序:
Windows 64位:
https://cloudbase.it/downloads/CloudbaseInitSetup_x64.msi
Windows 32位:
https://cloudbase.it/downloads/CloudbaseInitSetup_x86.msi
注意!这里使用的Continuous 版本,因为GECO-IT说稳定版有些功能没有,不适合这个补丁。
如果要下载稳定版本,请前往:
Cloudbase-Init - Cloudbase Solutions
下载Geco-Cloudbase-Init程序,
访问下面链接
GECO-IT-PUBLIC/Geco-Cloudbase-Init - Geco-Cloudbase-Init - Version Control System
找到下载按钮,下载ZIP文件
2个文件下载好后,放到虚拟机桌面上
双击安装cloudinit-base,这里有几个选项需要注意:
如果没有出现COM1,那么本文可能不适合你。
安装完成之后,不要勾选2个东西,直接点击finish
解压Geco-Cloudbase-init包。
将里面的localscripts文件夹放置到
64位系统
C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
文件目录中
32位系统
C:\Program Files(x86)\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
最终如下
以管理员身份运行powershell
执行下面命令set-executionpolicy -executionpolicy unrestricted
开启运行脚本权限。
将Geco-Cloudbase-init包里的powershell文件夹中的2个文件,拖到命令窗口中运行。根据配置不同,有些报错,不必理会。
重启主机,可以在串口控制台看到如下消息。
那么从现在开始虚拟机Cloudbase-init组件便配置好了。
三:自定义Windows虚拟机
Cloudbase-init安装成功之后,你可以自由的安装软件,配置系统。
当一切结束之后,你需要确认2个方向。
将虚拟机作为域用户
请执行oobe
cd ‘C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf’ C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /unattend:Unattend.xml
直接使用
不通过oobe操作,也可以运行,只不过sid会一样,某些环境不允许sid一样
执行oobe之后,或者不执行,都需要关闭虚拟机。
四:添加Cloudinit驱动器
在虚拟机的硬件上,添加Cloudinit驱动器
随后配置相关信息。填写完成之后,点击重生成映像。
五:开机测试
开机之后,你可以打开串口控制台,查看调试信息。
因为Cloudinit-base会开机之后,初始化,所以请在开机之后,不要急着进系统,等待1-2分钟。
不出意外,可以看到登录界面有新建的用户。
使用设置的密码登录,会有个用户创建过程,
之后,检查网络和电脑名,我这里有个169ip,是因为设置的ip冲突了。
电脑名和虚拟机一致
如果再关机,将虚拟机重命名位citest2,重启虚拟机,虚拟机也变了个名字。
目前最基本的功能已达成,更加高级的应用,请自己参考WIKI
发表评论: