Add template for Windows Server 2022
This commit is contained in:
132
ws2022/scripts/install-cloudbase-init.ps1
Normal file
132
ws2022/scripts/install-cloudbase-init.ps1
Normal 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 ==="
|
||||
Reference in New Issue
Block a user