Error on start inside incus: secure boot is not enabled

Hi all,
i followed the instructions to run IncusOS inside incus, but it won’t work

system check error: secure boot is not enabled

Incus version 6.17 on VoidLinux.

incus info --show-log IncusOS
Name: IncusOS
Description:
Status: RUNNING
Type: virtual-machine
Architecture: x86_64
PID: 5693
Created: 2025/11/08 16:15 CET
Last Used: 2025/11/08 16:18 CET
Started: 2025/11/08 16:18 CET

Operating System:
  OS: IncusOS
  OS Version: 202511070055
  Kernel Version: 6.17.6-zabbly+
  Hostname: localhost
  FQDN: localhost

Resources:
  Processes: 10
  CPU usage:
    CPU usage (in seconds): 10
  Memory usage:
    Memory (current): 373.35MiB
  Network usage:
    enp5s0:
      Type: broadcast
      State: DOWN
      Host interface: tapd7e39b43
      MAC address: 10:66:6a:f3:f9:6b
      MTU: 1500
      Bytes received: 0B
      Bytes sent: 0B
      Packets received: 0
      Packets sent: 0
      IP addresses:
    lo:
      Type: loopback
      State: UP
      MTU: 65536
      Bytes received: 626B
      Bytes sent: 626B
      Packets received: 8
      Packets sent: 8
      IP addresses:
        inet:  127.0.0.1/8 (local)
        inet6: ::1/128 (local)

Log:

My best regards

There’s likely some issue with the OVMF firmware on VoidLinux.

gibmat@futurfusion:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 13 (trixie)
Release:        13
Codename:       trixie
gibmat@futurfusion:~$ incus version
Client version: 6.0.4
Server version: 6.0.4

gibmat@futurfusion:~$ incus storage volume import default Downloads/IncusOS_202511070055.iso IncusOS_202511070055.iso --type=iso
gibmat@futurfusion:~$ incus init --empty --vm IncusOS \
    -c security.secureboot=false \
    -c limits.cpu=1 \
    -c limits.memory=4GiB \
    -d root,size=50GiB
incus config device add IncusOS vtpm tpm
incus config device add IncusOS boot-media disk pool=default source=IncusOS_202511070055.iso boot.priority=10
Creating IncusOS
Device vtpm added to IncusOS
Device boot-media added to IncusOS
gibmat@futurfusion:~$ incus start IncusOS
gibmat@futurfusion:~$ incus stop IncusOS
gibmat@futurfusion:~$ incus config device remove IncusOS boot-media
Device boot-media removed from IncusOS
gibmat@futurfusion:~$ incus start IncusOS

gibmat@futurfusion:~$ ./incus admin os show
WARNING: The IncusOS API and configuration is subject to change

environment:
  hostname: daa24d2c-0468-4e6b-8f8c-49a533e4d02c
  os_name: IncusOS
  os_version: "202511070055"

Yeah, the edk2 driver is selecting a non-Secure Boot OVMF file: incus/internal/server/instance/drivers/edk2/driver_edk2.go at main · lxc/incus · GitHub

This works for me as a temporary hack:

mv /usr/share/qemu/edk2-x86_64-code.fd /usr/share/qemu/edk2-x86_64-code.fd.bak
ln -s /usr/share/qemu/edk2-x86_64-secure-code.fd /usr/share/qemu/edk2-x86_64-code.fd

Yeah, most likely scenario is that this distribution doesn’t ship a Secure Boot enabled firmware at all.

It should be possible to confirm that theory by doing:

  • incus launch images:debian/13 test-d13 --vm -c security.secureboot=true
  • Wait for VM to boot
  • incus exec d13 -- dmesg | grep -i secure

This should normally show:

stgraber@castiana:~$ incus exec test-d13 -- dmesg | grep -i secure
[    0.000000] Kernel is locked down from EFI Secure Boot; see man kernel_lockdown.7
[    0.000000] secureboot: Secure boot enabled
[    1.229895] integrity: Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'

If it doesn’t, then your distribution either doesn’t ship a Secure Boot firmware at all, or it ships it under a name which Incus doesn’t recognize. If the latter, it’s an easy fix to the Incus code to make it work.

Oh, good catch!

Feeling like sending an Incus PR to put the secureboot versions high in the generic list too? We still want generic to support cases with no secboot handling so those must stay, but it should prefer secboot enabled firmware.

Its also broken with the same error trying to run in a LXD VM with the settings advised on IncusOS docs. Ive tried messing with security.csm but that doesn’t help. Appreciated this isn’t an LXD forum anymore but I cant really understand why it would work in one and not the other (though I admit I haven’t checked for any special differences in LXD & Incus and struggle to believe there would be any)

That’s definitely odd. I’d have expected the same security.secureboot=false to work on LXD unless they’ve changed the way EDK2 is built since I’ve left…

Basically what you want is for a Secure Boot enabled kernels but not have the Microsoft keys loaded. If security.secureboot=false doesn’t achieve that, try with security.secureboot=true but then go into the firmware/BIOS menu by hitting ESC during boot and see if you can use a setting in there to put it into Setup Mode.

I did experiment with both 5.X and 6.X with the settings in various states;

I either get this;

or with security.secureboot=false

Then

Then when “reboot into firmware” (secureboot is disabled, but prety confused at this point)

(sidenote: Incus docs say “requires secure boot” then your VM docs are like “disable secureboot”, im sure technically there is a difference between the two- but its somewhat confusing for the layman)

Yeah, security.secureboot controls whether the default keys (Microsoft’s) are loaded or not. So we need it set to false to give us a clean slate that we can populate with our keys (therefore preventing any other OS from being booted).

I’ve sent doc/getting-started/install/incus: Tweak wording by stgraber · Pull Request #519 · lxc/incus-os · GitHub to tweak the wording even more in the docs.

1 Like

I’m testing with LXD in a VM now to see if I can make it work.

The PK failure you see on screen is pretty odd, there’s definitely something different and quite likely wrong with the firmware build over there…

1 Like

Short version, with LXD’s current firmware, you need to do the enrollment completely by hand, similar to what you have to do on a physical server.

For that, follow the Incus instructions but hit ESC early in boot so you can get in the UEFI firmware menu, then go to the Secure Boot section, select Custom mode and then import all the keys from the install media one by one.

@amikhalitsyn @tomp any idea why the UEFI firmware in LXD behaves weirdly?
Not being able to perform full key enrollment through systemd-boot seems a bit problematic :slight_smile:

Sorry for not digging far enough, of course be super cool if that was auto-done but not Incus devs problem these days of course. Thank you for the video I’ll try this tomorrow. I expect I’ll have a php-lib up for IncusOS API this week (assuming the vid is correct, which I have 0 doubts about)

Make sure to include a stability warning similar to what we have at the top of REST API - IncusOS documentation

The API and CLI are both still in flux and don’t yet have the level of backward compatibility that folks have come to expect from Incus itself.

That said we’re getting pretty close and we’ve got a bunch of stuff hitting various part of the API these days, so minor changes may still happen but major re-shuffles are unlikely at this point.

I’ll be sure to add the warning and try to keep up with the changes.

Looking forward to IncusOS + TrueNas hitting stable, If you could lobby “Veeam” to integrate with LXD/Incus (“lxus” (lexus) as I like to call it), id basically die happy.

On my system the test fails.

[    0.000000] secureboot: Secure boot disabled

With @gibmat’s temporary hack I didn’t get the error, but IncusOs won’t start anyway (stuck at IncusOS starting)

Did you check both text and graphical (VGA) console?

In the LXD case above the text console was also stuck at IncusOS starting but the VGA console showed the install screen just fine.

Yeah, the IncusOS + TrueNAS Scale 24.10 with the new truenas storage driver is really a nice combo for quickly building clusters with flexible storage.

For Veeam, I’ve not looked into it too closely directly but at FuturFusion we’ve been dealing with quite a lot of different backup and disaster recovery solutions. It’s a market that’s kinda overcrowded these days to the point where I don’t think we have two customers using the same solution right now…

This makes it basically impractical to spend significant resources on any one of them right now to get perfect deep integration with them. So we’ve mostly been dealing with one-off API bridges, basically a script that can talk to both the Incus backup API and to the backup system.

I see that Veeam has support for providing a backed up S3 endpoint. That’d be the first thing I’d try to play with as Incus’ backup API supports backing up to an S3 compatible bucket. If that works, then all you really need is something telling Incus to backup each instance to that S3 bucket, then let the backup system handle the retention of that data.

Again, it’s not the ideal deep integration we’d love to see, but until we have a bunch of customers all using the same platform, it’s hard to spend the engineering time needed for deep integration, whether on our end or on the backup solution provider’s end.

(And unlike other pieces of our stack where folks are happy to use whatever we recommend, backup systems are usually pretty set in stone, so we can’t just tell everyone to switch to a particular one)

Ah and I know that at least @bensmrs has been looking at improving the snapshot and backup features of Incus. We’ve been exchanging some ideas of what can be done to get better retention policies for snapshots and then looking at how to have those snapshots get synced externally to another Incus system.

That’s a bit different from full on backups (where the target system isn’t Incus) but it’s another piece of the puzzle towards improving the data safety and disaster recovery story.

Its a nice feature but I’m really after the integration with tape backups (yes physical tapes), Veeam is quite a nice backup solution covering quite alot of eventualities. I understand is heavily used with VMware but you’ll have far wider exposure than me so I might have just been sold by a sales person.

Totally get it, its supports promox right now - and Incus support ZFS delegation, it might be hackable, but I’m speculating, maybe I’ll find some time to try and bodge it (though I think I need special licenses).

I know you wont want to be seen to recomenend anything and I fully expect the answer to this to be “wait and see :wink:” but… Any standouts so far? I’ve nearly worked out my migration path form VMware for everything except backups, I have to point at “LXDMosaic” but its just more “I wrote it” which isn’t suitable for large environments.