When LXD No Longer Belongs to the Community
If you’ve ever managed an Ubuntu server cluster, LXD is likely a familiar name. However, Canonical’s move to reclaim control of LXD and switch to a new license has sparked a wave of migration. Many sysadmins, myself included, have struggled with automatic LXD Snap updates that hung virtual network cards at 2 AM without any way to dive deep into the code.
In a staging environment, I once saw a container lose connectivity entirely after a buggy Snap update. At that moment, I realized the system needed a more stable solution—one that stays true to the open-source spirit and doesn’t rely on a closed ecosystem. That’s why Incus was born.
Why Incus is the Top Choice Today?
Incus is a fork of LXD created by the original developers. After six months of real-world operation, I’ve summarized three reasons why Incus stands out:
- Goodbye Snap: Incus uses traditional .deb packages. You have full control over updates, with no more concerns about Snap’s complex mount mechanism consuming resources or causing file system errors.
- Lightweight and Fast: Based on real benchmarks, an idle Incus container consumes only about 50-70MB of RAM. This is significantly lower than running a traditional VM (which typically requires at least 1GB of RAM for the OS).
- Centralized Management: You can manage both Containers (lightweight like Docker but with their own systemd) and Virtual Machines (VMs) using a single set of commands.
Which Option is Right for Your System?
Before diving into the installation, let’s look at common virtualization options on Ubuntu 24.04:
- Docker: Great for microservices but difficult to run a full OS with its own crontab or SSH.
- Pure KVM/QEMU: Excellent performance, but manual network (bridge) configuration is error-prone and time-consuming.
- Incus: The perfect middle ground. You get container boot times under 1 second and the security isolation of a VM when needed.
Incus Installation Process on Ubuntu 24.04
Here are the steps I deployed on a server cluster powered by AMD EPYC processors. This process ensures the highest stability for production environments.
Step 1: Configure the Zabbly Repository
Incus is currently not available in the default Ubuntu repos. We will use the Zabbly repository, maintained by Stéphane Graber—the former LXD project leader.
# Install support tools
sudo apt update
sudo apt install -y curl gpg
# Add the automatic repo configuration script
sudo curl -fsSL https://pkgs.zabbly.com/get/incus-stable.sh | sudo bash
This script will automatically detect Ubuntu 24.04 (Noble Numbat) to load the correct source list. You don’t need to worry about version mismatches.
Step 2: Installation and Permissions
Installation now takes only a few seconds:
sudo apt update
sudo apt install -y incus
To manage Incus without constantly typing sudo, add your user to the administration group:
sudo usermod -aG incus-admin $USER
newgrp incus-admin
Step 3: System Initialization (Incus Init)
This is where you decide your system’s performance. Run the following command:
incus admin init
Important Notes:
– Storage: Prioritize zfs if you need ultra-fast snapshot capabilities (under 1 second).
– Network Bridge: Select yes to create incusbr0. This is the bridge that allows containers to access the internet.
– Fan Overlay: Select no if you are only running on a single server.
Step 4: Create Your First Container
Test the power of Incus by initializing an Ubuntu 24.04 instance:
# Launch a container named 'app-server'
incus launch images:ubuntu/24.04 app-server
# Check the list
incus list
Typically, a container will be ready in about 1.5 seconds. If you want to run a full Virtual Machine (VM) to install a custom kernel, simply add the --vm flag to the launch command.
Real-world Operational Experience
After using Incus for a long time, I’ve gathered some essential tips for optimizing your system:
- Enable Web UI: Incus has a very professional UI. You can activate it during
initto manage resources visually via port 8443. - Snapshots are Lifesavers: Before editing Nginx config files or databases, run
incus snapshot create app-server backup-1. If something breaks, it only takes 2 seconds to rollback. - Resource Limits: To prevent a single container from hogging the host’s CPU, set hard limits from the start:
incus config set app-server limits.memory 4GB
incus config set app-server limits.cpu 4
Switching from LXD to Incus is more than just a name change. It’s about reclaiming control over your virtualization system. Incus runs smoothly, stably, and most importantly, it is completely transparent. If you’re planning an upgrade to Ubuntu 24.04, go ahead and remove LXD to start fresh with Incus.

