Installation

Preparation

A Linux server is required and Debian is fine, though you may prefer Ubuntu which is what the developers use. This is a light-weight solution and 4 cores and 4G RAM is all you need to get started.

You usually run out of RAM first. If you want to cluster and run Windows VMs, start with 16 Gigs.

The sweet spot for a small cluster is 3 nodes with 16G RAM. Though after a few years you’ll have a lot of sprawl and wish you had 32G. Avoid ceph for small scale. It’s complex and RAM intensive.

Networking

It’s a good idea to use the hosts file so cluster members can easily find each other. If you have more than one interface and want to use a dedicated network for cluster communication, this is a good place to start.

sudo sh -c 'cat <<EOF >> /etc/hosts

10.0.0.1     debian1
10.0.0.2     debian2
10.0.0.3     debian3
10.0.0.4     debian4

EOF'

Storage

Incus recommends an empty zfs or btrfs1 partition so that you can snapshot your VMs and containers. It’s not required, but useful. If you don’t have a spare disk, create an extra partition to your boot disk during the OS install.

I use /dev/sdb in this example. Wipe it and install the BTRFS programs, but let Incus handle the rest.

sudo wipefs -a /dev/sdb
sudo apt install btrfs-progs

Open File Limits

Running many containers can use up the default number of file handles. You should increase that on the host.

sudo vi /etc/security/limits.d/10-nofile.conf

# <domain>      <type>  <item>         <value>
*               soft    nofile         65535
*               hard    nofile         65535

sudo vi /etc/systemd/system.conf

DefaultLimitNOFILE=65535

# also increase the system wide file limits
sudo vi /etc/sysctl.d/99-limits.conf

fs.file-max = 200000

sudo reboot

Kernel (optional)

Your stock kernel from Debian is fine, but the current kernel is about 10% faster for some things (especially for ZFS at time or writing). It also happens that Stéphane Graber, the lead developer of Incus, as well as Linus Torvalds and others run the current kernel.

Though I’ve had several showstopping bugs on older hardware and it’s caused DKMS issues, so I recommend skipping this at this point.

But if you must, use a build forked directly from the torvalds/linux repo2.

Note

  • These kernels aren’t signed by a trusted distribution key, so you may need to turn off secure boot.
  • If you’re building DKMS modules, such as for linstore (and you’ll know if you are), you’ll have an extra step..
  • Stick with stock kernels if you don’t have IPMI or easy keyboard access to roll back a buggy kernel
sudo apt install -y curl gpg 

sudo mkdir -p /etc/apt/keyrings/

sudo curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc

sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-kernel-stable.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/kernel/stable
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc

EOF'

# This will take the kernel from 6.12 to 6.18 on trixie at the time of writting
sudo apt update
sudo apt -y install linux-zabbly

# Reboot to apply the new kernel
sudo reboot

Installation

You can install Incus from your distro’s repo, but Zabbly’s (from the lead developer’s company) is a bit newer.

As per https://github.com/zabbly/incus

# Add their key
# sudo apt install -y curl gpg 
sudo mkdir -p /etc/apt/keyrings/
sudo wget -O /etc/apt/keyrings/zabbly.asc https://pkgs.zabbly.com/key.asc
     
# Add the LTS repo, needed for the web user interface
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc

EOF'

# Then add the stable repo, to access the latest stable version of incus
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-stable.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/stable
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc

EOF'

Now you have a choice;

A Full Install - includes the Web UI and support for both containers and VMs

# A full install
sudo apt update
sudo apt -y install incus incus-ui-canonical

A Minimal Install - command line and only supports containers.

# A minimal install
sudo apt update
sudo apt -y install incus-base

The full install can add up to a gig of dependencies. If keeping it trim is important, start with a full install on just one node, and add the rest as needed. Both versions fully support clustering and all other features.

Next Steps

Install Incus on your other nodes, then start the configuration.


Last modified May 8, 2026: Fixed links (04b3f1e)