Windows Image Guide - TekMonksGitHub/kloudust GitHub Wiki
๐ช Building Windows Images for Kloudust โ Step-by-Step Guide
This guide walks you through creating a Windows image optimized for Tekmonks Kloudust, using cloudbase-init
and other preparation steps including sysprep, disk preparation, and final image conversion.
โ Prerequisites
- Windows OS (e.g., Windows 11) installed from an ISO image. Kloudust can be used to create this via the ISO image option in the
createVM
command. - Administrator access
- Internet access to download tools
- QEMU tools installed (for
qemu-img
) - Sysprep compatibility (BitLocker must be handled)
1. Install Cloudbase-Init
Download and install the 64-bit Cloudbase-Init MSI package.
- Ensure that the user running the installation is part of the
Administrators
group. - Choose default options during installation.
- Do not select the โLocalSystem serviceโ option.
2. Configure Cloudbase-Init
Modify the following configuration files:
cloudbase-init.conf
๐ [DEFAULT]
username=Admin
groups=Administrators
inject_user_password=true
config_drive_raw_hhd=false
config_drive_cdrom=true
config_drive_vfat=false
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
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
metadata_services=cloudbaseinit.metadata.services.nocloudservice.NoCloudConfigDriveService
plugins=cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
cloudbase-init-unattend.conf
๐ [DEFAULT]
username=Admin
groups=Administrators
inject_user_password=true
config_drive_raw_hhd=false
config_drive_cdrom=true
config_drive_vfat=false
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=COM1,115200,N,8
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
metadata_services=cloudbaseinit.metadata.services.nocloudservice.NoCloudConfigDriveService
plugins=cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin
stop_service_on_exit=false
allow_reboot=false
3. Disk Preparation
๐ Disable BitLocker (Required for Sysprep)
manage-bde -off C:
Wait until the decryption process is complete:
manage-bde -status
Reference: Dell KB: BitLocker prevents Sysprep in 24H2
๐ฝ Delete Recovery Partition
To avoid issues with disk resizing in the cloud:
Follow the guide on OpenMetal documentation to safely delete the recovery partition.
4. System Settings
๐ก๏ธ Set Execution Policy
Open PowerShell as Administrator:
Set-ExecutionPolicy Unrestricted
๐๏ธ Remove Problematic Appx Packages
These packages may block sysprep. Remove them:
Remove-Appxpackage -AllUsers Microsoft.LanguageExperiencePacken-GB_26100.24.38.0_neutral__8wekyb3d8bbwe
Remove-Appxpackage -AllUsers Microsoft.WidgetsPlatformRuntime_1.6.2.0_x64__8wekyb3d8bbwe
Remove-Appxpackage -AllUsers Microsoft.WidgetsPlatformRuntime_1.6.8.0_x64__8wekyb3d8bbwe
Remove-Appxpackage -AllUsers Microsoft.OneDriveSync_25075.420.2.0_neutral__8wekyb3d8bbwe
Unattend.xml
๐ Edit Ensure the following entry is set to avoid device reinstalls:
<PersistAllDeviceInstalls>false</PersistAllDeviceInstalls>
5. Account Cleanup
๐ค Remove Custom Accounts
You can either use lusrmgr.msc
to delete custom accounts or run:
@echo off
set LOGDIR=%~dp0\..\log
net user [username] /delete > "%LOGDIR\rmdefacct.log" 2>&1
rmdir /s/q c:\users\[username] >> "%LOGDIR\rmdefacct.log" 2>&1
6. Sysprep the Image
Navigate to the Cloudbase config directory:
cd 'C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\'
Run Sysprep:
C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /unattend:Unattend.xml
7. Convert the Final Image
Use qemu-img
to compress the image into QCOW2 format:
qemu-img convert -O qcow2 ./win11master.qcow2 ./win11master.img
This compressed image is now ready to be uploaded to Kloudust.
โ Summary
Step | Description |
---|---|
Install Cloudbase-Init | Use default settings, avoid LocalSystem |
Disk Prep | Disable BitLocker, delete recovery partition |
Configure Init Files | cloudbase-init.conf and unattend.conf as above |
Cleanup | Remove Appx packages, custom users |
Sysprep | With Unattend.xml and generalize the image |
Convert | Create compressed .qcow2 format |