Need help running distrobuilder inside an incus container

I am unfortunately getting this error trying to run distrobuilder to repack a windows ISO inside of an ubuntu/noble container:

ubuntu@fleet-catfish:~$ sudo distrobuilder repack-windows --windows-arch=amd64 Win11_24H2_26100.3915_x64.iso Win11_24H2_26100.3915_x64.incus.iso 
INFO   [2025-05-08T08:09:38Z] Mounting Windows ISO to dir: "/var/cache/distrobuilder.2629349285/source" 
mount: /var/cache/distrobuilder.2629349285/source: permission denied.
       dmesg(1) may have more information after failed mount system call.
Error: Failed to mount "Win11_24H2_26100.3915_x64.iso" at "/var/cache/distrobuilder.2629349285/source": exit status 32
ERROR  [2025-05-08T08:09:38Z] Failed running distrobuilder                  err="Failed to mount \"Win11_24H2_26100.3915_x64.iso\" at \"/var/cache/distrobuilder.2629349285/source\": exit status 32"
INFO   [2025-05-08T08:09:38Z] Removing cache directory

I saw an old thread here that mentioned you have to mount the /dev/loop devices in the container, which I have done (i got a different error before, now it is just permission denied):

ubuntu@fleet-catfish:~$ ls -lah /dev/loop*
brw-rw---- 1 root disk  7,   0 May  8 07:55 /dev/loop0
brw-rw---- 1 root disk  7,   1 May  8 07:55 /dev/loop1
brw-rw---- 1 root disk  7,   2 May  8 07:55 /dev/loop2
brw-rw---- 1 root disk  7,   3 May  8 07:55 /dev/loop3
brw-rw---- 1 root disk  7,   4 May  8 07:55 /dev/loop4
brw-rw---- 1 root disk  7,   5 May  8 07:55 /dev/loop5
brw-rw---- 1 root disk  7,   6 May  8 07:55 /dev/loop6
brw-rw---- 1 root disk  7,   7 May  8 07:55 /dev/loop7
crw-rw---- 1 root disk 10, 237 May  8 07:55 /dev/loop-control

/dev/loop:
total 8.0K
drwxr-xr-x 2 root root  200 May  8 07:55 .
drwxr-xr-x 8 root root  680 May  8 07:55 ..
brw-rw---- 1 root disk 7, 0 May  8 07:55 0
brw-rw---- 1 root disk 7, 1 May  8 07:55 1
brw-rw---- 1 root disk 7, 2 May  8 07:55 2
brw-rw---- 1 root disk 7, 3 May  8 07:55 3
brw-rw---- 1 root disk 7, 4 May  8 07:55 4
brw-rw---- 1 root disk 7, 5 May  8 07:55 5
brw-rw---- 1 root disk 7, 6 May  8 07:55 6
brw-rw---- 1 root disk 7, 7 May  8 07:55 7

My container config is the following:

architecture: x86_64
config:
  image.architecture: amd64
  image.description: Ubuntu noble amd64 (20250507_07:42)
  image.os: Ubuntu
  image.release: noble
  image.requirements.cgroup: v2
  image.serial: "20250507_07:42"
  image.type: squashfs
  image.variant: default
  volatile.base_image: 55c43261431fde958dedb48d5e79db5077149e94eb621c9a3fe4312a0c30e01c
  volatile.cloud-init.instance-id: a9048647-b259-49bc-8a52-a60143bdfc9f
  volatile.eth0.host_name: veth7339cf0d
  volatile.eth0.hwaddr: 10:66:6a:ea:74:62
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
  volatile.last_state.ready: "false"
  volatile.uuid: 01c470be-aceb-409b-a881-a85f13df8a0f
  volatile.uuid.generation: 01c470be-aceb-409b-a881-a85f13df8a0f
devices:
  downloads:
    path: /mnt/Downloads
    shift: "true"
    source: REDACTED
    type: disk
  loop-control:
    gid: "6"
    required: "true"
    source: /dev/loop-control
    type: unix-char
    uid: "0"
  loop0:
    gid: "6"
    required: "true"
    source: /dev/loop0
    type: unix-block
    uid: "0"
  loop1:
    gid: "6"
    required: "true"
    source: /dev/loop1
    type: unix-block
    uid: "0"
  loop2:
    gid: "6"
    required: "true"
    source: /dev/loop2
    type: unix-block
    uid: "0"
  loop3:
    gid: "6"
    required: "true"
    source: /dev/loop3
    type: unix-block
    uid: "0"
  loop4:
    gid: "6"
    required: "true"
    source: /dev/loop4
    type: unix-block
    uid: "0"
  loop5:
    gid: "6"
    required: "true"
    source: /dev/loop5
    type: unix-block
    uid: "0"
  loop6:
    gid: "6"
    required: "true"
    source: /dev/loop6
    type: unix-block
    uid: "0"
  loop7:
    gid: "6"
    required: "true"
    source: /dev/loop7
    type: unix-block
    uid: "0"
  loopsub0:
    gid: "6"
    required: "true"
    source: /dev/loop/0
    type: unix-block
    uid: "0"
  loopsub1:
    gid: "6"
    required: "true"
    source: /dev/loop/1
    type: unix-block
    uid: "0"
  loopsub2:
    gid: "6"
    required: "true"
    source: /dev/loop/2
    type: unix-block
    uid: "0"
  loopsub3:
    gid: "6"
    required: "true"
    source: /dev/loop/3
    type: unix-block
    uid: "0"
  loopsub4:
    gid: "6"
    required: "true"
    source: /dev/loop/4
    type: unix-block
    uid: "0"
  loopsub5:
    gid: "6"
    required: "true"
    source: /dev/loop/5
    type: unix-block
    uid: "0"
  loopsub6:
    gid: "6"
    required: "true"
    source: /dev/loop/6
    type: unix-block
    uid: "0"
  loopsub7:
    gid: "6"
    required: "true"
    source: /dev/loop/7
    type: unix-block
    uid: "0"
ephemeral: false
profiles:
- default
stateful: false
description: ""

My OS is Alpine edge, I am running Incus 6.0.4. Any help is appreciated!

Welcome!

The process of repacking an image with distrobuilder is such, that requires access to loop devices. By default the protections for containers do not allow access to those devices.

It might be possible to work around those restrictions through trial and error, or perhaps make the container privileged.

The alternative is to create a virtual machine with a Linux distribution. By default, VMs in Incus get 10GB of disk space. Once you create the VM, you can increase the size (around 30GB should be OK for those 6GB Windows ISOs; 6GB for the ISO, 6GB for the unpacked, and 6GB for the new ISO) with incus config device override mydistrobuilderVM root size=30GiB and restart the VM.

Thanks, I’ll try with a VM!