As a regular reader on Hacker News (HN), I saw IncusOS pop up in my feed.
It looked like a good candidate to try in my homelab.
I had a little bit of free time during the long holidays, so I wanted to give it a try.
I thought IncusOS was just another distro specialising in running Incus.
Just like Proxmox, it would use Debian underneath and have a suite of software packaged in a nice ISO.
That way, you could boot directly from it and install as normal.
Boys, I was wrong.
You need to create the ISO by yourself using one of the following options:
- Using the web customiser tool
- Or using the flasher tool built from Golang
As a Golang developer, I chose option 2, but the flasher tool failed to compile!
Alright, option 1 then.
The web customiser tool requires you to enter information about the physical machine that you want to install on, like the NIC name or hardware address.
I didn’t have those handy with me.
I needed to boot up the machine to look up these details.
Next, should I create an ISO file or an .img file? Hmm…
Let’s try the ISO file for now.
I put the downloaded ISO onto my Ventoy USB stick.
Booted the machine into Ventoy and selected the Incus entry.
Failed to boot :(.
So this ISO was not a bootable ISO. Fair enough.
Let’s try the .img file and then burn it to a separate USB stick using Balena Etcher.
Booted the machine again, but it could not boot either.
As it turned out, my Lenovo Tiny PC M710q was too old for IncusOS.
So the only option left for me was to give up on IncusOS.
I had to set up Debian 13 on my machine and then install Incus on that.
This is where the fun began :D.
I needed to take the machine out of the rack and plug it into my desktop so that I could see the installation instructions on the screen.
The machine could not connect to the internet during the installation.
So I had to download and use the “offline” ISO from the Debian website instead of the netinst ISO.
After the Debian installation finished, I plugged the machine back into the rack.
I hooked up the power and network cables and booted it up.
I could not connect to the machine even though I had set up the correct IP and netmask.
Then I remembered something important: this machine was on the “management” VLAN.
Right! So I copied the VLAN setup from my existing Debian machines and adapted it to the newly provisioned machine.
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp0s31f6
iface enp0s31f6 inet manual
auto vmbr0
iface vmbr0 inet manual
bridge-ports enp0s31f6
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
# VLAN 90
auto vmbr0.90
iface vmbr0.90 inet static
address 192.168.90.21/24
gateway 192.168.90.1
dns-nameservers 192.168.90.1
I still could not ping it, and the machine could not ping the gateway either.
Checked the list of interfaces on the machine:
ip addr
There were no bridges or interfaces in the output.
It was time to consult our LLM overlords!
I asked the free Gemini first.
It suggested that maybe the 8021q kernel module was not installed/loaded and that I needed to install the vlan package.
But the machine could not connect to the internet!
I needed to download the deb file from one of the Debian mirrors, copy it to the USB stick, plug it in and install it locally:
dpkg -i *.deb
Still did not work!
Later I found out that bridge-utils was not installed either (head-scratching).
That was why there were no bridges created after bootup.
Let’s ping the gateway again.
Still no luck, with the error: Destination Host Unreachable
I consulted the LLM overlord again, this time with Claude Code (paid subscription).
It suggested that I had VLAN filtering enabled on my bridge.
I disabled the VLAN filter temporarily and then I could ping the gateway. Hooray!
I told Claude Code that I was using Debian instead of Proxmox.
It somehow thought that I was using Proxmox, maybe from the network config stanza I gave it earlier.
Then it suggested using ifupdown2 instead of ifupdown (who would have thought of that).
apt install ifupdown2
Reboot and the machine can ping the gateway and connect to the internet. It was a rough start for my Incus journey.
PS:
There are a few useful commands to help troubleshooting the problems.
List all the VLAN allows on each bridge:
bridge vlan show
Check whether VLAN filtering is on for a particular bridge (replace bridge-name with your bridge name):
cat /sys/class/net/<bridge-name>/bridge/vlan_filtering