Add template for Windows Server 2022

This commit is contained in:
2026-03-07 10:45:46 +01:00
parent fc6efe6c64
commit 562e6413c5
5 changed files with 733 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
# install-cloudbase-init.ps1
# Packer provisioner: downloads, installs and configures Cloudbase-Init
# for Proxmox cloud-init (ConfigDrive metadata service).
$msiUrl = "https://cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi"
$msiPath = "C:\Windows\Temp\CloudbaseInitSetup.msi"
$cbDir = "C:\Program Files\Cloudbase Solutions\Cloudbase-Init"
# ---- Download ----
Write-Host "Downloading Cloudbase-Init..."
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$retries = 3
for ($i = 1; $i -le $retries; $i++) {
try {
Invoke-WebRequest -Uri $msiUrl -OutFile $msiPath -UseBasicParsing
break
} catch {
Write-Host "Download attempt $i failed: $_"
if ($i -eq $retries) { throw "Failed to download Cloudbase-Init after $retries attempts" }
Start-Sleep -Seconds 10
}
}
Unblock-File -Path $msiPath
# ---- Install (silent, Local System account) ----
Write-Host "Installing Cloudbase-Init..."
$proc = Start-Process msiexec.exe -ArgumentList "/i `"$msiPath`" /qn /norestart /l*v C:\Windows\Temp\cloudbase-install.log RUN_SERVICE_AS_LOCAL_SYSTEM=1" -Wait -PassThru
Write-Host "MSI exit code: $($proc.ExitCode)"
if ($proc.ExitCode -ne 0) {
# Dump the MSI log on failure
if (Test-Path "C:\Windows\Temp\cloudbase-install.log") {
Get-Content "C:\Windows\Temp\cloudbase-install.log" | Select-Object -Last 50
}
throw "Cloudbase-Init MSI install failed with exit code $($proc.ExitCode)"
}
# Wait for MSI to finish writing files
Start-Sleep -Seconds 15
# ---- Verify installation ----
Write-Host "Verifying Cloudbase-Init installation..."
# Check the service exists
$svc = Get-Service -Name "cloudbase-init" -ErrorAction SilentlyContinue
if (-not $svc) {
Write-Host "Service not found. Listing directory..."
if (Test-Path $cbDir) {
Get-ChildItem $cbDir -Recurse -Depth 2 | Select-Object FullName
} else {
Write-Host "$cbDir does not exist!"
}
throw "Cloudbase-Init service not found after install!"
}
Write-Host "Cloudbase-Init installed. Service status: $($svc.Status)"
Write-Host "Cloudbase-Init installed successfully."
# ---- cloudbase-init.conf (main service - runs on normal boot after sysprep) ----
$mainConf = @"
[DEFAULT]
username=Administrator
groups=Administrators
inject_user_password=true
config_drive_raw_hhd=true
config_drive_cdrom=true
config_drive_vfat=true
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
verbose=true
debug=true
log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
log_file=cloudbase-init.log
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
logging_serial_port_settings=
first_logon_behaviour=no
mtu_use_dhcp_config=true
ntp_use_dhcp_config=true
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
check_latest_version=false
plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,
cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,
cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,
cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin
metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService
"@
Write-Host "Writing cloudbase-init.conf..."
Set-Content -Path "$cbDir\conf\cloudbase-init.conf" -Value $mainConf -Encoding ASCII
# ---- cloudbase-init-unattend.conf (specialize phase on first boot after sysprep) ----
$unattendConf = @"
[DEFAULT]
username=Administrator
groups=Administrators
inject_user_password=false
config_drive_raw_hhd=true
config_drive_cdrom=true
config_drive_vfat=true
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
verbose=true
debug=true
log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
log_file=cloudbase-init-unattend.log
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
logging_serial_port_settings=
mtu_use_dhcp_config=false
ntp_use_dhcp_config=false
first_logon_behaviour=no
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
check_latest_version=false
plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,
cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,
cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin
metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService
allow_reboot=true
stop_service_on_exit=false
"@
Write-Host "Writing cloudbase-init-unattend.conf..."
Set-Content -Path "$cbDir\conf\cloudbase-init-unattend.conf" -Value $unattendConf -Encoding ASCII
# ---- Service configuration ----
Write-Host "Configuring Cloudbase-Init service..."
Set-Service -Name "cloudbase-init" -StartupType Automatic
# ---- Cleanup ----
Remove-Item $msiPath -Force -ErrorAction SilentlyContinue
Write-Host "=== Cloudbase-Init setup complete ==="