LXD 5.18 has been released


The LXD team is very excited to announce the release of LXD 5.18!

This release includes three of our roadmap items for this cycle; bundled documentation, configuration metadata API, and the ability to pass OVN logs to Loki. The snap package also includes custom fixes to the upstream EDK2 firmware used with virtual machines to restore booting of VMs on ARM machines.


New features and highlights

Bundled documentation web site in snap package

The documentation website is normally available online at LXD Documentation is now also bundled with the LXD snap package and LXD is able to serve it over its normal HTTPS socket.

This has the advantage that the documentation will match the version of the LXD server you are using.

To access the bundled documentation you must be using the snap package and set the core.https_address setting:

lxc config set core.https_address

Then you can browse to to access the bundled documentation website. You may get a certificate warning if you have not added the LXD server’s certificate to your browser’s/operating system’s trust store.

Configuration metadata API for documentation generation

There is now a /1.0/metadata/configuration API endpoint that returns metadata about the available configuration options in LXD. Right now this just returns options for server, cluster and instance. However we plan to expand this soon.

This new API is being used to automatically generate parts of our documentation to ensure that the settings referenced in the documentation match what is in LXD itself.

Receive OVN logs into LXD and Loki

LXD now has the ability to receive syslog messages via an optional syslog unixgram socket.
This allows for OVN to be configured to send its logs into LXD.

This allows for viewing the OVN logs across all cluster members using the normal LXD API or CLI tooling, such as lxc monitor --pretty, and it also means they can be optionally passed into Loki via LXD’s existing integration.

For now this new syslog socket only accepts messages in the OVN log format.

For an example of how to set this up please see Send OVN logs to LXD.

All projects support for lxc operation list

It is now possible to list all ongoing operations across all projects using:

lxc operation list --all-projects

Default support for ubuntu-minimal remotes in lxc

The ubuntu-minimal and ubuntu-minimal-daily remotes are now included with the lxc command by default.

This completes the full suite of official Ubuntu remotes to accompany the existing ubuntu and ubuntu-daily remotes.

So now it is possible to launch an instance using these remotes, for example:

lxc launch ubuntu-minimal:22.04 c1

Complete changelog

Here is a complete list of all changes in this release:

Full commit list
  • doc: directly link to config options
  • doc: fix breaking build
  • doc: update woke URL and add a target to the Makefile
  • doc: update Contribution section
  • doc: add instructions for documenting configuration options
  • lxd/auth/rbac: Fix regression
  • doc/manpages: add the man pages to the docs
  • doc: exclude manpages from automatic doc checks
  • doc: link lxc commands to man pages
  • doc: add manpages to topical navigation
  • lxd/storage/zfs: Fix version handling
  • shared/version: Show parsed version on failure
  • lxc: Un-hide lxc pause command
  • lxc: Un-hide lxc init command
  • doc: unpin Sphinx version
  • lxc: Un-hide lxc monitor command
  • lxc: Un-hide lxc query command
  • doc: add a way to link to Swagger sections
  • doc/instances: add API instructions
  • scripts/bash/lxd-client: fix completion to work for non-default projects
  • scripts/bash/lxd-client: use parentheses around grep -E alternations
  • scripts/bash/lxd-client: don’t propose “(current)” as valid project
  • doc: don’t check validity of GitHub anchors
  • doc: add guide about virt-v2v
  • doc: link to manpages
  • lxd: Use instance lock when updating instance
  • shared/util: use LC_ALL instead of LANG in RunCommandCLocale()
  • github: Initial foray into using Canonical’s test runners
  • metadata: add entity metadata key, update lxddoc to lxdmeta and default to defaultdesc
  • lxd-metadata: fixes to generate JSON and sort .txt values at every levels
  • lxd-metadata: Update unit test with the new JSON structure
  • lxd/metadata: initial metadata/configuration.json
  • update .gitignore to not ignore doc/config_options.txt anymore
  • doc: Add initial doc/config_options.txt file
  • doc: update documentation to mention the cluster-cluster group and lxdmeta:generate
  • doc: remove useless readthedoc hook
  • lxd/resources: Use lshw if DMI is not available
  • lxd/config: Add ubuntu-minimal and ubuntu-minimal-daily remotes
  • docs: Add description of ubuntu-minimal remote image servers
  • zfs: Disallow block.* settings for regular custom block volumes
  • test: Check that custom block volumes cannot set block.*
  • makefile: add update-metadata to generate JSON documentation and .TXT config options to the source
  • test/lint: Add metadata-up-to-date.sh to ensure commit has the latest metadata and doc config options
  • lxd: New API endpoint to expose JSON generated metadata configuration
  • api: Add metadata_configuration API extension
  • doc: generate rest-api.yaml
  • doc: Updates routed nic how-to to use pass netplan config via stdin.
  • doc: exclude doctrees from the documentation output
  • doc: move header CSS into a separate file
  • doc: move color variables into a CSS file
  • lxd/resources: Use RunCommandCLocale when calling lshw
  • drivers: Use StatusError to ensure error code consistency
  • doc: hide toctree for man pages
  • doc: pin Sphinx version again
  • instance_exec: Add contraint validation
  • lxd/cgroup/abstraction: skip loop devices from cgroup2’s io.stat
  • lxd/cgroup/abstraction: skip loop devices from cgroup1’s blkio.throttle.{io_service_bytes_recursive,io_serviced_recursive}
  • doc/zfs: remove limitation
  • Makefile: fix “tags” target and don’t make it PHONY
  • Makefile: don’t use xargs in “tags” target
  • test/lint/metadata: don’t use fifo to diff before and after files
  • test/lint/metadata: use unified diff output and don’t abort if diff returns non-0
  • Update storage_volumes.md
  • btrfs: Mention detected FS on detection error
  • lxd/device/disk: Refactor CanHotPlug
  • lxd/device/disk: Check that filesytem disks being attached to VMs have a mount path inside guest
  • lxd/device/disk: Removes unused sourceIsDir function
  • lxd: serve documentation on the /documentation/ endpoint
  • doc: general documentation on how to access the LXD documentation
  • Merge branch ‘canonical:main’ into patch-1
  • Update storage_volumes.md
  • storage/drivers/ceph: Differentiate between a true non-existent OSD pool and a Ceph internal issue
  • Update storage_volumes.md
  • build(deps): bump actions/checkout from 3 to 4
  • doc: add information about LXD 4.0 EOL
  • Makefile: check shellcheck's version only if present
  • shared/cmd/ask: Add Asker type with CLI helpers as methods
  • lxd: Setup global Asker for lxd commands
  • lxc: Setup global Asker for lxc commands
  • lxd-migrate: Setup global Asker for lxd-migrate commands
  • doc/instances: add UI instructions
  • doc/zfs: document that some features require ZFS 2.2
  • gomod: Dependency updates
  • gomod: Pin some dependencies for compatibility with Go 1.18
  • lxd-agent: Skip when already mounted
  • lxd/instance/qemu: Fix bootorder when using -kernel
  • Revert “test/storage_local_volume_handling: use a smaller ISO file”
  • Revert “test/storage_volume_import: use smaller ISO files”
  • github: Adds CODEOWNERS file
  • lxd/apparmor/instance/qemu: Allow /etc/machine-id
  • Makefile: Allow setting custom version
  • lxd/instance/qemu: Avoid old -bios syntax
  • actions: Test LXD tarball is produced correctly
  • test/main: report disk usage (df -h) prior to actually cleaning up
  • test/backends/ceph: lower OSD pg_num to 8
  • github: action runners already have snapd installed
  • github: remove core20 to reclaim some space in the rootfs
  • github: use the whole ephemeral disk as ceph OSD
  • github: instruct curl to fail on error when downloading gotip
  • lxd/network/openvswitch/ovn: Add function to retrieve all logical switch port IPs
  • lxd/network/driver_ovn: Fix OVN leases not showing static ips
  • lxd/device/nic_ovn: Use all allocated IPs as dynamic when static IP is not set for a device
  • lxd/network/driver_ovn: Remove redundant InstanceDevicePortDynamicIPs function
  • github: bail if the rootfs and the ephemeral one are on the same disk
  • lxd-agent: Validate fields only for CPU info
  • doc/storage: clarify that block.* options are for filesystem volumes
  • lxd/storage/drivers/btrfs: Use command instead of walking dir to get subvolumes
  • lxd/auth: Exit goroutine if RBAC has been disabled
  • shared/simplestreams/products: Adds support for incus.tar.xz items
  • shared/validate: names starting with a digit are valid
  • test/basic: 12test is now a valid instance name
  • test/basic: test invalid instance name with a period
  • lxd: Revert server config if it cannot be set
  • doc/faq: add info about VPN cgroup1 issues
  • lxd/device/device/utils/network: Improve error handling and messaging in networkSRIOVRestoreVF
  • test/network: test DNS resolution of instance names
  • github: dnsutils pulls bind9-dnsutils since 20.04
  • lxd: Return http 429 on repeated shutdowns
  • lxd: Fix type field formatting
  • lxd/cluster/config: add a long desc to loki.api.url
  • lxd/metadata: add a long desc to loki.api.url
  • doc/config_options: add a long desc to loki.api.url
  • doc/api-extensions: explain the expected format of loki.api.url
  • doc: Update docs on loki.api.url
  • lxd/storage/drivers/driver_zfs_volumes: Disallow setting zfs.block_mode for VM block volumes
  • lxd/main/forknet: Remove altname if preventing rename of NIC interface
  • lxd: Add syslog listener
  • shared/api: Add new EventTypeOVN
  • config: Add core.syslog_socket
  • lxd: Setup syslog listener
  • events: Include EventTypeOVN when querying events
  • config: Allow ovn value in loki.types setting
  • loki: Handle OVN events
  • events: Add event type ovn to internal listener
  • doc: Extend wordlist
  • api: Add syslog_socket API extension
  • doc/howto: Explain how to use core.syslog_socket for OVN
  • Update metadata
  • test: Add syslock socket test
  • lxd/drivers/zfs: supported zfs versions all have “compress” support
  • lxd/drivers/zfs: supported zfs versions all have “volmode=none”
  • lxd/drivers/zfs_utils: drop slow path for unsupported zfs 0.6 in setDatasetProperties()
  • grafana: add Loki logs section with lifecycle and logging events
  • lxc/operation.go: Add missing flag all-projects for command operation list
  • i18n: Update translation templates
  • shared/api/event: Add support for OVN logs in lxc monitor --pretty
  • docs: Improve OVN syslog integration setup steps


The release tarballs can be found on our download page.

Binary builds are also available for:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc

LXD 5.18 is now available in the latest/candidate snap channel and will be rolled out to stable users next week.

1 Like

LXD 5.18 is now progressively rolling out to the latest/stable channel.

1 Like