Switch from LXD to Incus

· 312 words · 2 minute read

While I use docker for most of my home lab activities, I like the option of running system containers or VMs and LXC gives a good way to do that. I previously used LXD but I don’t really like Canonical pushing their Snap packages everywhere so I thought i’d try out the fork Incus.

As I was previously running LXD, I had to remove that, install Incus and then for ease of use, install the LXD Web UI (which runs fine on Incus).

  • Remove LXD via snap command
    sudo apt remove --purge lxd

  • Install Incus from repositories. Ubuntu 24.04 and Debian 13 both include Incus packages in the standard repository. For instructions for other distributions, view the instructions here

  • Check that Incus is available via the network.

    • sudo incus config edit
    • Check that there is a config block similar to:
      config:
        core.https_address: '[::]:8443'
      
    • Save and close the file
  • Add repository for LXD-UI and installed. The LXD Web UI is currently not packaged in the standard interface, but one of the Incus developers Stéphane Graber has packaged them via Zabbly. As I didn’t need to install Incus this way, I downloaded the UI deb file directly from the package repository and installed it using dpkg.

  • Update systemd unit file to add INCUS_UI variable
    As the Incus package was installed from the distributions package repository it doesn’t have the environment variables set to load the User interface (the Zabbly packages do have these set). To set these the systemd unit file will need to be modified:

    • sudo systemctl edit incus

    • Add a section at the top (above the comments):

      [Service]
      Environment="INCUS_UI=/opt/incus/ui/"
      
    • Save and close the unit file

  • Restart Incus
    sudo systemctl restart incus

You should now be able to access https://:8443 from a computer on the same network and setup the certificates to login.