Install Windows 11 on Incus

Download Windows 11 installation ISO

Download W11

On this page generate a download link by clicking “Download now” under “Download Windows 11 Disk Image (ISO) for x64 devices”. Select your product language and click “Confirm”. Right-click the “64-bit Download” button and copy the link, which will look something like https://software.download.prss.microsoft.com/dbazure/Win11_24H2_Dutch_x64.iso\XXXXXXXXXXXXXXXXXXXXX.

On your Incus server, use curl -O to download the Windows installation ISO.

curl -O https://software.download.prss.microsoft.com/dbazure/Win11_24H2_Dutch_x64.iso\XXXXXXXXXXXXXXXXXXXXX

In order to run well on Incus, Windows 11 requires a few extra drivers. Distrobuilder can be used to add and repack the Windows drivers into the install ISO.

Install Distrobuilder

sudo apt install incus-extras libwin-hivex-perl wimtools

Repack Windows

sudo distrobuilder repack-windows --windows-arch amd64 --windows-version w11 Win11_24H2_Dutch_x64.iso Win11_24H2_Dutch_x64.incus.iso

INFO   [2025-03-18T10:09:16+01:00] Mounting Windows ISO to dir: "/var/cache/distrobuilder.482489562/source" 
INFO   [2025-03-18T10:09:16+01:00] Downloading drivers ISO                      
INFO   [2025-03-18T10:09:44+01:00] Mounting driver ISO to dir "/var/cache/distrobuilder.482489562/drivers" 
INFO   [2025-03-18T10:09:45+01:00] Mounting                                      idx="1:Microsoft Windows PE (amd64)" wim=boot.wim
INFO   [2025-03-18T10:09:45+01:00] Modifying                                     idx="1:Microsoft Windows PE (amd64)" wim=boot.wim
INFO   [2025-03-18T10:09:45+01:00] Unmounting                                    idx="1:Microsoft Windows PE (amd64)" wim=boot.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/boot.wim (image 1)
Using LZX compression with 12 threads
Archiving file data: 21 MiB of 21 MiB (100%) done
INFO   [2025-03-18T10:09:55+01:00] Mounting                                      idx="2:Microsoft Windows Setup (amd64)" wim=boot.wim
INFO   [2025-03-18T10:09:55+01:00] Modifying                                     idx="2:Microsoft Windows Setup (amd64)" wim=boot.wim
INFO   [2025-03-18T10:09:55+01:00] Unmounting                                    idx="2:Microsoft Windows Setup (amd64)" wim=boot.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/boot.wim (image 2)
Using LZX compression with 12 threads
Archiving file data: 20 MiB of 20 MiB (100%) done
INFO   [2025-03-18T10:09:56+01:00] Mounting                                      idx="1:Windows 11 Home" wim=install.wim
INFO   [2025-03-18T10:09:56+01:00] Modifying                                     idx="1:Windows 11 Home" wim=install.wim
INFO   [2025-03-18T10:09:57+01:00] Unmounting                                    idx="1:Windows 11 Home" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 1)
Using LZX compression with 12 threads
Archiving file data: 83 MiB of 83 MiB (100%) done
INFO   [2025-03-18T10:11:11+01:00] Mounting                                      idx="2:Windows 11 Home N" wim=install.wim
INFO   [2025-03-18T10:11:11+01:00] Modifying                                     idx="2:Windows 11 Home N" wim=install.wim
INFO   [2025-03-18T10:11:12+01:00] Unmounting                                    idx="2:Windows 11 Home N" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 2)
Using LZX compression with 12 threads
Archiving file data: 78 MiB of 78 MiB (100%) done
INFO   [2025-03-18T10:11:16+01:00] Mounting                                      idx="3:Windows 11 Education" wim=install.wim
INFO   [2025-03-18T10:11:16+01:00] Modifying                                     idx="3:Windows 11 Education" wim=install.wim
INFO   [2025-03-18T10:11:17+01:00] Unmounting                                    idx="3:Windows 11 Education" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 3)
Using LZX compression with 12 threads
Archiving file data: 80 MiB of 80 MiB (100%) done
INFO   [2025-03-18T10:11:21+01:00] Mounting                                      idx="4:Windows 11 Education N" wim=install.wim
INFO   [2025-03-18T10:11:21+01:00] Modifying                                     idx="4:Windows 11 Education N" wim=install.wim
INFO   [2025-03-18T10:11:22+01:00] Unmounting                                    idx="4:Windows 11 Education N" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 4)
Using LZX compression with 12 threads
Archiving file data: 76 MiB of 76 MiB (100%) done
INFO   [2025-03-18T10:11:26+01:00] Mounting                                      idx="5:Windows 11 Pro" wim=install.wim
INFO   [2025-03-18T10:11:26+01:00] Modifying                                     idx="5:Windows 11 Pro" wim=install.wim
INFO   [2025-03-18T10:11:27+01:00] Unmounting                                    idx="5:Windows 11 Pro" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 5)
Using LZX compression with 12 threads
Archiving file data: 83 MiB of 83 MiB (100%) done
INFO   [2025-03-18T10:11:31+01:00] Mounting                                      idx="6:Windows 11 Pro N" wim=install.wim
INFO   [2025-03-18T10:11:31+01:00] Modifying                                     idx="6:Windows 11 Pro N" wim=install.wim
INFO   [2025-03-18T10:11:32+01:00] Unmounting                                    idx="6:Windows 11 Pro N" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 6)
Using LZX compression with 12 threads
Archiving file data: 79 MiB of 79 MiB (100%) done
INFO   [2025-03-18T10:11:38+01:00] Mounting                                      idx="7:Windows 11 Pro Education" wim=install.wim
INFO   [2025-03-18T10:11:38+01:00] Modifying                                     idx="7:Windows 11 Pro Education" wim=install.wim
INFO   [2025-03-18T10:11:39+01:00] Unmounting                                    idx="7:Windows 11 Pro Education" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 7)
Using LZX compression with 12 threads
Archiving file data: 75 MiB of 75 MiB (100%) done
INFO   [2025-03-18T10:11:43+01:00] Mounting                                      idx="8:Windows 11 Pro Education N" wim=install.wim
INFO   [2025-03-18T10:11:43+01:00] Modifying                                     idx="8:Windows 11 Pro Education N" wim=install.wim
INFO   [2025-03-18T10:11:44+01:00] Unmounting                                    idx="8:Windows 11 Pro Education N" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 8)
Using LZX compression with 12 threads
Archiving file data: 71 MiB of 71 MiB (100%) done
INFO   [2025-03-18T10:11:48+01:00] Mounting                                      idx="9:Windows 11 Pro for Workstations" wim=install.wim
INFO   [2025-03-18T10:11:49+01:00] Modifying                                     idx="9:Windows 11 Pro for Workstations" wim=install.wim
INFO   [2025-03-18T10:11:50+01:00] Unmounting                                    idx="9:Windows 11 Pro for Workstations" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 9)
Using LZX compression with 12 threads
Archiving file data: 75 MiB of 75 MiB (100%) done
INFO   [2025-03-18T10:11:53+01:00] Mounting                                      idx="10:Windows 11 Pro N for Workstations" wim=install.wim
INFO   [2025-03-18T10:11:54+01:00] Modifying                                     idx="10:Windows 11 Pro N for Workstations" wim=install.wim
INFO   [2025-03-18T10:11:55+01:00] Unmounting                                    idx="10:Windows 11 Pro N for Workstations" wim=install.wim
Committing changes to /var/cache/distrobuilder.482489562/overlay/sources/install.wim (image 10)
Using LZX compression with 12 threads
Archiving file data: 76 MiB of 76 MiB (100%) done
INFO   [2025-03-18T10:11:58+01:00] Generating new ISO                           
INFO   [2025-03-18T10:13:34+01:00] Umount dir "/var/cache/distrobuilder.482489562/drivers" 
INFO   [2025-03-18T10:13:34+01:00] Umount dir "/var/cache/distrobuilder.482489562/source" 
INFO   [2025-03-18T10:13:34+01:00] Removing cache directory

Import the VM into the Incus storage pool, so it can be easily reused

incus storage volume import <pool> <path-to-image.iso> iso-volume --type=iso

E.g.

incus storage volume import default Win11_24H2_Dutch_x64.incus.iso Win11_24H2_Dutch_x64 --type=iso

Initialise the Incus Windows VM

Create an empty Incus VM with at least 2 CPUs, 4GiB of memory and 60GiB of disk space.

incus init w11 --empty --vm -c limits.cpu=6 -c limits.memory=16GiB -d root,size=512GiB

Add a virtual TPM device, which W11 requires

incus config device add win11vm vtpm tpm path=/dev/tpm0

(Optional): Enable audio support

incus config set w11 raw.qemu -- "-device intel-hda -device hda-duplex -audio spice"

Add the ISO to the VM

incus config device add w11 Win11_24H2_Dutch_x64 disk pool=<pool> source=Win11_24H2_Dutch_x64 boot.priority=10

E.g.

incus config device add w11 Win11_24H2_Dutch_x64 disk pool=default source=Win11_24H2_Dutch_x64 boot.priority=10

Start the VM

incus start w11

View the VM

This step assumes you are using Incus on a system with a GUI enabled or are able to use X11 forwarding to view the GUI locally.

sudo apt install spice-client-gtk
incus console w11 --type=vga

When the VM initially starts, you need to be quite fast to be on time for the ISOs “Press any key to boot from DVD” message. When you’re late, the VM will try to boot from PXE instead. Force stop the VM using the -f flag, wait and restart in this case.

incus stop w11 -f

incus start w11

TODO: Access from UI

Not using a Microsoft account

By default, Microsoft now requires users to login with a Microsoft account. This behaviour can be disabled.

Press Shift+F10, possibly including Fn when on a laptop. In the command line, type OOBE\BYPASSNRO and press Enter. The system will restart. After the reboot, it wil be possible to create a local account.

Post installation: Remove the ISO from the VM

incus storage volume detach <pool> Win11_24H2_Dutch_x64 w11

E.g.

incus storage volume detach default Win11_24H2_Dutch_x64 w11

References