Introduction
The Incus team is pleased to announce the release of Incus 6.16!
This release brings in a new storage driver, the ability to install Windows VMs without having to rely on a repacked ISO and support for temporary storage in containers.
As usual, you can try it for yourself online: Linux Containers - Incus - Try it online
Enjoy!
New features
TrueNAS storage driver
Incus can now use a remote TrueNAS storage server as a storage pool.
This behaves very similarly to the ZFS storage driver since that’s what TrueNAS uses, but rather than interacting with ZFS locally, the driver uses the TrueNAS API to perform the various actions remotely on the storage server and then relies on iSCSI to export those volumes from the TrueNAS server and connect them on the Incus server.
As a remote storage driver (alongside Ceph, Linstor and clustered LVM), this can be used to back clusters, allowing for seamless migration of instances between servers as no data needs to be moved.
NOTE: This relies on a pre-release version of TrueNAS Scale.
root@truenas-incus:~# incus storage create demo truenas source=test/demo truenas.host=192.0.2.10 truenas.api_key=MY-KEY truenas.allow_insecure=true
Storage pool demo created
root@truenas-incus:~# incus launch images:debian/13 d13 --storage demo
Launching d13
root@truenas-incus:~# incus list
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
| d13 | RUNNING | 10.2.165.159 (eth0) | fd42:a815:51cf:d4bb:1266:6aff:fe51:ae56 (eth0) | CONTAINER | 0 |
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
Documentation: TrueNAS - truenas - Incus documentation
USB CD-ROM handling for VMs
We’ve reworked our USB device setup for disk devices.
Rather than use the most basic USB mass storage driver as was done previously, we now directly set up some of the USB block transfer layer.
The main benefit from this is that attaching an ISO to a VM on the USB bus will now correctly result in a virtual CD-ROM drive being exposed to the VM.
With this, it’s now possible to attach the Windows install media and VirtIO driver media to a VM using io.bus=usb
and directly boot and install Windows without needing to rely on ISO repacking through distrobuilder
.
tmpfs
and tmpfs-overlay
disks for containers
Two new “special” disk sources are now supported for use by containers:
source=tmpfs:
source=tmpfs-overlay:
Both then support the following properties:
size
(size of the tmpfs layer)initial.uid
(Initial user for the mount)initial.gid
(Initial group for the mount)initial.mode
(Initial permissions for the mount)path
(Mount path for the disk)
This is particualrly useful for OCI containers where the container doesn’t have an editable /etc/fstab with an init system applying mounts on boot.
The tmpfs-overlay
variant allows keeping access to any pre-existing content at the mount path by having any addition/changes be stored in the tmpfs layer.
Documentation: Type: disk - Incus documentation
Configurable console behavior in the CLI
Expanding on the recently introduce set of default CLI configurations, we now have a few more configuration options to control console behavior:
console_type
(can be set tovga
orconsole
)console_spice_command
(can be set to a command, usingSOCKET
as the placeholder value for the socket path)
Those can be used to change the default console type within the CLI or even completely override the command to be run when attaching to a VGA console using SPICE.
Complete changelog
Here is a complete list of all changes in this release:
Full commit list
- incus/cmd/incus/config_template.go: Adding ls alias to list command
- incus/cmd/incus/snapshot.go: Adding ls alias to snapshot command
- incus/cmd/incus/storage_volume.go: Adding ls alias to list command
- incusd/instance/lxc: Fix handling of multiple USB device removal
- Translated using Weblate (German)
- incusd/device: Fix logic for checking if parent is a bridge in IsPhysicalWithBridge
- incusd/device/disk: Enable posix ACL support for virtiofsd
- incusd/os: Forward within cluster
- incusd/ip/neigh: Fix MAC filtering
- incusd: Move IncusOS detection to OS struct
- incusd/networks: Filter network list on Incus OS
- incusd/storage: Fix EnsureMountPath to avoid resetting permissions
- shared/tls: Ignore expiration date of trusted certificates
- incus: Replace IsNetworkName with IsInterfaceName
- shared/validate: Remove unused IsNetworkName
- shared/validate: Implement IsAPIName
- doc/installing: Update Ubuntu versions in Zabbly repository
- incusd: Consistently validate object names
- tests: Fix invalid image alias name
- tests: We no longer allow slashes in zones
- incusd/instance: Move migration.stateful check to CanLiveMigrate
- incusd/instance/qemu: Fix zero-value check regression
- internal/instance: Add volatile..io.bus
- incusd/device/disk: Refactor bus=XXX setting logic
- incusd/network/bridge: Always set DHCPv6 dns-server field
- incusd/device/disk: Revamp virtiofs+9p handling
- doc: Update metadata
- incusd/instance/qemu: Allocate ports for 9p and virtiofs
- incusd/instance/qemu: Fix typing regression
- incusd/instance/qemu: Make virtiofs shares fully hotpluggable and refactor 9p logic
- Make the agent aware of the actual FSType
- incus-agent: Remove dual mount type handling
- shared/scriptlet: Move scriptlet utils to shared
- internal/server/scriptlet: Update usages
- incusd/sys/os: Tweak IncusOS detection
- Translated using Weblate (Japanese)
- generate-database: Fix sqlite3 error detection
- incusd/database: Re-generate code
- incusd/instances: Improve instance creation errors
- incusd/storage_volumes: Fix error message
- incusd/instance/qemu: Fix vTPM on arm64 systems
- incus/console: Add default console command in configuration file
- incusd/storage/zfs: Use compression and large-blocks on backups
- incusd/apparmor: Add support for abi4.0
- incusd/networks: Only include Incus OS interfaces if not already listed
- incusd/networks: Tweak access control
- incusd/network/sriov: Fix spacing
- incusd/network: Pass request type to validator
- tests/openfga: Tweak check (user is able to see local interfaces)
- incusd/network/ovn: Don’t validate uplink network on server-specific notification
- incusd/network/bridge: Don’t require dnsmasq on link-local IPv6
- build(deps): bump actions/checkout from 4 to 5
- docs: Clarify type and scope of user.* config keys
- incusd/server/network: Fix update config regression
- tests/basic_usage: Improve auto-restart test loop
- api: storage_driver_truenas
- incusd/storage/truenas: Introduce TrueNAS driver
- docs: Update word list
- docs: Add TrueNAS storage driver
- tests: Add TrueNAS tests (and tweak testsuite)
- incusd/resources: Clean golangci-lint
- internal/usbid: Clean golangci-lint
- incusd/resources: Move usbid as sub-package
- incusd: Move resources package to shared package
- shared/resources: Restrict to Linux
- dhcp: stop 60s renew spam; request 51/58/59, derive sane T1, add jitter
- incus/file: Add some examples with stdin/stdout
- i18n: Update translation templates
- incusd/apparmor: Don’t use abi4.0
- incusd/config: Fix import shadowing
- Translated using Weblate (Portuguese)
- Fix typo and add clarity for project param
- incusd/instance/lxc: Avoid issues with nested containers and ping group range
- doc: Mention nft in Docker part of firewall doc
- doc: Tweak Docker recommendations
- incusd/instance/qemu: Ensure cdrom is always read-only
- incusd/instance/qmp: Use USB block transport to handle CD-ROM
- incusd/instance/qemu: Fix USB CDROM handling
- incus/dhcp: run DHCP on all container interfaces and aggregate DNS from all leases
- incusd/storage: Restrict setting description to global record
- incusd/main_forknet: Fix gofumpt
- incusd/network: Restrict setting description to global record
- incusd/networks: Set the description when completing the record
- incusd/project: Don’t empty global default profile on force deletion
- doc/requirements: Document minimum OVS/OVN versions
- lxd-to-incus: Handle typo in trigger name
- incus/dhcp: default routes and multiple DHCP clients for OCI containers
- incusd/instance_exec: Relax connection timeout
- incusd/network: Fix logic for UsedByInstanceDevices
- incusd/network/ovn: Support for directional port groups
- incusd/network/acl: Support for directional port groups
- Makefile: Bump Go to 1.24.0
- gomod: Update dependencies
- github: Disable go-swagger on Go 1.25+
- github: Disable Linstor tests for now
- incusd/instance/utils: Don’t fail instance startup due to incomplete CPU baseline
- incusd/patches: Migrate port groups to directional
- incusd/device/disk: Add tmpfs support for disk devices
- gomod: Update dependencies
- incusd/auth/tls: Don’t spam with warnings
- incusd/fsmonitor: Fix handler issue when flooded
- incusd/device/nic: Don’t apply MTU if none detected
- incusd/ip/tuntap: Fix handling of Master property
- incusd/network/ovn: Fix behavior when ACL name is used as match source
- incusd/network/acl: Fix behavior when ACL name is used as match source
- api: container_disk_tmpfs
- doc/device: Add documentation for tmpfs disk
- tests: Add test for tmpfs disk
- doc/installing: Update Debian install instructions
- shared/api: Add missing Description field to InstanceSnapshots
- incusd: Correctly fill in the instance snapshot description
- doc/rest-api: Refresh swagger YAML
- incusd/cluster: Don’t use the proxy for internal connections
Documentation
The Incus documentation can be found at:
Packages
There are no official Incus packages as Incus upstream only releases regular release tarballs. Below are some available options to get Incus up and running.
Installing the Incus server on Linux
Incus is available for most common Linux distributions. You’ll find detailed installation instructions in our documentation.
Homebrew package for the Incus client
The client tool is available through HomeBrew for both Linux and MacOS.
Chocolatey package for the Incus client
The client tool is available through Chocolatey for Windows users.
Winget package for the Incus client
The client tool is also available through Winget for Windows users.
https://winstall.app/apps/LinuxContainers.Incus
Support
Monthly feature releases are only supported up until the next release comes out. Users needing a longer support length and less frequent changes should consider using Incus 6.0 LTS instead.
Community support is provided at: https://discuss.linuxcontainers.org
Commercial support is available through: Zabbly - Incus services
Bugs can be reported at: GitHub · Where software is built