Introduction

The LXD team would like to announce the release of LXD 6.4!

This is the fourth feature release in the 6.x series.

It includes many new features and improvements.

Thank you to everyone who contributed to this release!

New features and highlights

New snap track for the 6.x series

With the recent announcement that the MicroCloud snap’s latest/stable channel is due to be closed in preference to series specific tracks (e.g. 2/stable for the current LTS and the yet-to-be-released 3/stable for the next series) the LXD snap is aligning by also using series specific tracks.

As such the 6.x series will now be published into both latest/stable and 6/stable.

The per-feature release tracks (e.g 6.x/stable) will no longer be created.
However snap updates can still be controlled.

The 6/stable channel will continue to follow the LXD 6.x series as it progresses from a feature release series into an LTS release in 2026.

There are no plans currently for LXD’s latest/stable channel to be closed, however we would encourage you to install from a series specific track so that your systems are not on a forever rolling release, and instead remain with particular series until manually switched.

snap refresh lxd --channel=6/stable

A reminder that the current LTS series for LXD is available from the 5.21/stable snap channel.

New backup metadata format

The backup.yaml file that contains the instance (and its related) configuration has changed to a new v2 format. This replaces references to “container” with “instance” and supports recording the configuration of attached volumes.

LXD still supports importing backups made with the older format as well as optionally exporting in the older format too.

When exporting an instance, the specific version to use can be provided using the --export-version flag:

lxc export v1 --export-version 2

The same applies when exporting a custom storage volume:

lxc storage volume export pool1 vol1 --export-version 2

This allows exporting in the older version 1 format that is compatible with importing into older LXD servers.

API extension: backup_metadata_version

Extended support for --all-projects flag in CLI (from Incus)

Support for listing entities from all projects using the --all-projects flag has been added to the lxc storage bucket list, lxc network acl list, lxc network list CLI commands.

API extensions:

Skip restoring instances during cluster member restore

Sometimes after performing cluster member evacuation via lxc cluster evacuate and performing maintenance on a cluster member it may not be desirable or not possible to restore the evacuated instances back to the cluster member that was evacuated.

However one may still want to bring that cluster member back online so that it can be used for new workloads or be a target for evacuees from other members in the future.

To accommodate this the lxc cluster restore command now takes a “skip” value for the --action flag. This restores only the cluster member status without starting local instances or migrating back evacuated instances.

API extension: clustering_restore_skip_mode

Cluster groups usage tracking and deletion protection

A new used_by field has been added to the API response for a cluster group. Deletion of a cluster group is now disallowed if the cluster group is referenced by project configuration (see restricted.cluster.groups).

API extension: clustering_groups_used_by

Override snapshot profiles on copy option

Added an API request option to specify that a snapshot’s target profile on an instance copy to should be inherited from the target instance. This fixes an issue when using the lxc copy --no-profiles flag.

API extension: override_snapshot_profiles_on_copy

Container BPF delegation

Added new security.delegate_bpf.* group of options in order to support eBPF delegation using BPF Token mechanism. See Privilege delegation using BPF Token for more information.

API extension: container_bpf_delegation

Device filesystem UUID in Resources API

Added a new field called device_fs_uuid that containers the respective filesystem UUID of each disk and partition indicating whether or not a filesystem is located on the device.

API extension: resources_device_fs_uuid

Start up and shutdown improvements

In this release there has been a focus on start up and shutdown improvements, including:

Earlier signalling to instances during LXD shutdown

Previously LXD would wait up to core.shutdown_timeout minutes (defaulting to 5) for running operations to finish before starting the instance shutdown process.

When the shutdown process eventually starts it signals to each of the instances asking them to shutdown cleanly, and then after boot.host_shutdown_timeout seconds (defaulting to 30) the instance would be force stopped.

However this was problematic because a single running operation (such as lxc exec) on a single instance would be sufficient to delay signalling to all other instances to shutdown until core.shutdown_timeout had elapsed. This results in it taking longer for LXD to cleanly shutdown.

Instead now LXD will identify instances that have no running operations and signal for them to shutdown immediately whilst waiting for operations on other instances to complete.

The boot.stop.priority shutdown ordering is still respected.

Support early shutdown when cluster not available

LXD now supports shutting down when it is not able to connect to other cluster members.
Previously LXD would get stuck in a connect loop and would need to be forcefully stopped.
However now when signalling to the LXD process (by way of systemctl stop snap.lxd.daemon) the connection loop will be aborted and the daemon will shutdown normally.

Wait for storage pools and networks to be ready

LXD supports starting up with only partial storage pools and networks being operational.
This is useful when there are environmental changes that required manual intervention to correct.

However sometimes, especially with automation, it is useful to be able to wait for LXD to report that all storage pools and networks are operational before starting to interact with the LXD API.

To support this the lxd waitready command now supports 2 new flags; --network and --storage which respectively wait for networks and storage pools to become ready.

These can be used separately or together alongside the --timeout flag to place a cap on the time spent waiting.

Removal of lxc-to-lxd tool

The legacy lxc-to-lxd tool has now been removed.

UI updates

Add SSH keys to instances

When creating an instance in the UI, you can now add SSH keys to it. The keys will be applied by cloud-init on boot. Alternatively you can create a profile with SSH keys and apply it to multiple instances.

image

Create TLS identity and simpler onboarding experience

On TLS identity creation, you can apply groups with permissions for the new identity.

The onboarding process was simplified. It now relies on a single client certificate file download to import into the local browser. Trusting the client certificate on the server now relies on trust tokens. This removes the need to download multiple files that can be mixed up and you don’t have to upload to the server in order to get started.

Network ACL support

You can create and manage Network ACLs directly in the UI. The network overview page shows ACLs applied to the network and allows changing the applied ACLs.

Instances from all projects

A new page in the UI lists all instances on a LXD server or cluster, from all projects the current user has access to.

Project creation with default network

On project creation, select a default network for the new default profile in the new project.

Instance export configurable

Additional options on exporting an instance are now available in the UI.

image

Disk and CPU metrics for instances

Memory and root filesystem usage graphs can be enabled as optional columns of the instance list.

Additional disk metrics and CPU usage are now available on the instance detail page.

Improved experience for users with restricted permissions

Users with restricted permissions will see all available actions in the UI. Interactions that the user has no permission to will be grayed out and a reason is available on hover.

Improved storage on clusters

Displaying pool usage on a per cluster member basis for storage pools that are local, like the directory or ZFS drivers. For cluster wide storage pools like ceph, there will be a single usage graph.

Snap packaging dependency updates

  • lxd-ui: Bump to 0.17
  • lxc: Bump to lxc-6.0.4.
  • lxcfs: Bump to lxcfs-6.0.4.
  • criu: Bump to v4.1.
  • nvidia-container-toolkit: Bump to v1.17.7.
  • nvidia-container: Bump to v1.17.17.
  • qemu: Bump to import/1%8.2.2+ds-0ubuntu1.7.
  • zfs: Bump to zfs-2.3.2.
  • go: Bump to 1.24.2

Complete changelog

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

Full commit list
  • lxd/instance/drivers/qemu: Fix QMP arguments typing
  • lxd/instance/drivers/qemu: QEMU device naming consistency
  • lxd/instance/drivers/qemu: Fix device_id warning on 9.2.x
  • lxd/instance/drivers/qemu: Set O_DIRECT when passing in FDs
  • lxc/file: Use the file extension of the edited file for the temp file, to help with syntax highlighting
  • lxd/instance/drivers/qemu: Replace unnecessary fmt.Sprintf with concatenation
  • lxd/instance/drivers/qemu: Check type assertions
  • lxd/instance/drivers/lxc: Decorate errors
  • lxd/storage/drivers/lvm: Remove nesting & improve clarity
  • lxd/storage/drivers/lvm: Count LV activation separate from mounts
  • build(deps): bump tags.cncf.io/container-device-interface/specs-go
  • lxd/db/cluster: Add StoragePoolVolumeType newtype
  • lxd/db/cluster: Add StoragePoolVolumeContentType newtype
  • lxd/db: Validate newtypes from DB
  • lxd/storage: Use StoragePoolVolumeType
  • lxd/db: Use StoragePoolVolumeType for query params
  • lxd/project: Use StoragePoolVolumeType
  • lxd/device: Use StoragePoolVolumeType
  • lxd/instance/drivers: Use StoragePoolVolumeType.Name
  • lxd: Use StoragePoolVolumeType
  • lxd/db: Use StoragePoolVolumeContentType
  • lxd/storage: Use StoragePoolVolumeContentType
  • lxd/storage: Replace VolumeTypeNameToDBType with StoragePoolVolumeTypeFromName
  • lxd: Replace VolumeTypeNameToDBType with StoragePoolVolumeTypeFromName
  • lxd/storage: Replace VolumeContentTypeNameToContentType
  • lxd/device/disk: Replace VolumeContentTypeNameToContentType
  • lxd: Replace VolumeContentTypeNameToContentType
  • lxd/db/test: Use StoragePoolVolumeType
  • lxd/test: Fix misused ContentType constant
  • lxd/storage: Take advantage of type safety guarantee
  • lxd/storage: Remove unneeded error checks
  • lxd/device: Remove unneeded error checks
  • lxd: Remove uneeded error checks
  • lxd: Fix linter errors
  • tests/suites/network.sh: Add test for fetching bridge info
  • lxd: start BGP listener after networks are set up
  • github: Wait for microovn to be ready before bootstrapping the cluster
  • lxd/storage/drivers/lvm: Decrement activation refcount when not deactivating
  • lxd/db/cluster: Rename StorageVolumeType Name → String
  • lxd/db: Use StoragePoolVolume{Content}Type.String
  • lxd/instance/drivers/qemu: Implicitly convert VolumeType
  • lxd/storage: Use StoragePoolVolume{Content}Type.String
  • lxd/device: Use VolumeType String() method
  • doc: add oidc configuration for ory hydra howto
  • lxd/bgp: Rework start/stop logic
  • tests: Check starting BGP listener in network forward tests
  • tests: Simplify getting bgpIP in network forward test
  • doc: Adds clustering_groups_used_by API extension.
  • shared/api: Add used-by field to cluster group.
  • doc/rest-api: Refresh swagger YAML
  • lxd/db: Remove ClusterGroupToAPI function.
  • lxd/db/cluster: Add GetClusterGroupUsedBy function.
  • lxd/db/cluster: Update (*ClusterGroup).ToAPI to return used by.
  • lxd: Fix make usage in cluster APIs.
  • lxd: Return cluster group used-by on GET requests.
  • lxd: Prevent cluster group deletion when referenced by a project.
  • test/suites: Test that a cluster group cannot be deleted when referenced by a project.
  • deps: switch to github.com/moby/sys/capability
  • github: add actions/require-gha-pinning
  • github: require all GHA to be pinned
  • github: pin actions/setup-node@v4 to v4.3.0’s SHA
  • lxd/api_project: Fix condition checking associated profiles in projectIsEmpty
  • lxd: Fix untrusted TLS identity POST endpoint description.
  • doc/rest-api: Refresh swagger YAML
  • gomod: Update dependencies
  • docs: add oidc configuration with keycloak
  • test: check deleting non-empty project fails in test_clustering_storage
  • github: fix regex allow list for local actions
  • lxd/bgp: Fix comment
  • lxd/network/driver/ovn: Don’t run bgpSetup twice
  • lxd/network/driver/physical: Do full start following change of parent
  • lxd/cloudinit: Update comment to reflect support for none value
  • shared/validate: Support none for cloud-init.ssh-keys.*
  • lxd/storage/drivers/pure: Unmap volume when connection is freshly created
  • doc/cloud-init: Document none SSH key
  • lxd/network/driver_bridge: add “/” back into fanAddress() output
  • lxd/storage/drivers/ceph: Apply OSD pool settings in its own func
  • lxd/storage/drivers/ceph: Persist ceph.osd.pg_num changes
  • lxd/storage/drivers/ceph: Reject update of immutable options
  • Makefile: ignore Go toolchain when building
  • github: check that binaries are compiled with Go minimum version
  • doc/howto/oidc_keycloak: minor revisions
  • lxd/network/driver/common: Handle missing BGP peer
  • lxd/main_checkfeature: add bpf_token kernel feature detection logic
  • lxd/main_forkmount: bpffs mount with delegation support
  • lxd/api_internal: add start-host instance hook
  • lxd/instance/lxc: add security.delegate_bpf support
  • lxd/instance/instancetype/instance: add security.delegate_bpf* config options
  • doc: add explanation page about security.delegate_bpf and friends
  • api: add bpf_delegation API extension
  • doc: Update metadata
  • lxd/main_forkmount: Fix linter error
  • doc: hard-code additional link titles
  • build(deps): bump actions/setup-go from 5.3.0 to 5.4.0
  • build(deps): bump actions/cache from 4.2.2 to 4.2.3
  • build(deps): bump github/codeql-action from 3.28.11 to 3.28.12
  • build(deps): bump actions/download-artifact from 4.1.9 to 4.2.1
  • build(deps): bump actions/upload-artifact from 4.6.1 to 4.6.2
  • build(deps): bump github.com/miekg/dns from 1.1.63 to 1.1.64
  • golangci-lint: Migrate .golangci to v2.0.0 format
  • Makefile: Add explicit version for golangci-lint
  • golangci-lint: Inline nolint for deep-exit in lxd/api_cluster.go
  • lxd/response: Remove deprecated deadcode linter from nolint exclusions
  • lxd: Replace deprecated gosimple linter with staticcheck for inline nolint exclusion
  • lxd: Fix linter errors in lxd/api_cluster.go
  • golangci-lint: Add staticcheck exclusion for ST1005
  • lxd: Fix linter errors in lxd/main_recover.go
  • client/util: add legacyCurvesOnly param to tlsHTTPClient()
  • client/connection: use legacyCurvesOnly for simplestreams connections
  • github: add bug report issue form
  • github: add config file for issue templates
  • lxd/firewall/drivers/driver/nftables: Fix regression in nftables port range rules
  • lxc: Fix QF1004 staticcheck and use ReplaceAll instead
  • lxd: Fix QF1007 staticcheck and check condition in assignment
  • lxd/instance/drivers: Fix QF1007 staticcheck and check condition in assignment
  • lxd/instances/drivers: Fix QF1003 staticcheck and use switch statement
  • lxd/instances/drivers: Fix QF1008 staticcheck and remove embedded field
  • lxd/instances/drivers: Fix QF1009 staticcheck and use time.Equal
  • lxd/instance: Fix QF1001 staticcheck by applying De Morgan’s law
  • lxd/storage: Fix QF1003 staticcheck and use switch statement
  • doc: add google analytics consent banner
  • github: add feature request issue form
  • doc: add localhost:8080 to linkcheck_ignore
  • doc/api-extensions: add doc reference link to container_bpf_delegation
  • lxd/api_internal: use logger with context in internalContainerOn* hooks
  • lxd/instance/drivers: Use full device name in device_id
  • meta/instance-types: drop now unused instance types
  • lxd/db/cluster: create admin group with server admin permission on install WD-20464
  • doc: annotations when integrated in microcloud docs only
  • api: Add override_snapshot_profiles_on_copy extension
  • shared/api: Add OverrideSnapshotProfiles to InstanceSource
  • doc/rest-api: Refresh swagger YAML
  • client: Add OverrideSnapshotProfiles to InstanceCopyArgs
  • lxc/copy: Set snapshots to receive target profiles with --no-profiles
  • lxd: Fix profile on instance snapshot copy
  • shared/api: Add OverrideSnapshotProfiles to InstancePost
  • doc/rest-api: Refresh swagger YAML
  • lxc/move: Set snapshots to receive target profiles with --no-profiles
  • lxd: Fix profile of instance snapshots on server-side instance move
  • test/suites/container_move: Improve test for server-side instance move with snapshot and profile assigned
  • test/suites/snapshots: Add test for copy of instance with snapshots and profile assigned into new project
  • add steps to verify lxd host support for vms
  • github: run LXD UI tests on ubuntu-24.04 runners
  • Makefile: drop version check on shellcheck (0.8.0 is old anyway)
  • test/suites/storage_volume_initial_config: quote variables
  • Makefile: be less verbose when checking lint scripts
  • test/suites/container_devices_proxy: use IPv4 variant of socat listener
  • test/suites/pki: drop support for pkitool
  • test/suites/pki: create vars file to silence warning
  • test/suites/pki: use ECDSA instead of RSA
  • test: Fix deprecated chown syntax
  • test/suites/storage: modern xfs can only handle 300MiB or more disks
  • test/suites/storage_driver_ceph: modern xfs can only handle 300MiB or more disks
  • test/suites/storage_driver_pure: align xfs min size comment with other tests
  • test/main: report ceph status on failure
  • lxd/instance/drivers/lxc: reduce log level when unable to get disk usage
  • lxd/instance/drivers/lxc: reduce log level when unable to get volume disk usage
  • lxd/instance/drivers/qemu: reduce log level when unable to get disk usage
  • lxd/instance/drivers: Device serial with a max lenght of 36
  • update: how-to-manage-storage-pools-update
  • lxd: Fix request body struct in swagger doc.
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/drivers/ceph: Fix import of iso images smaller than 512B
  • test/storage_volume_import: Test with unaligned image sizes
  • lxd/instance/drivers/qemu: Fix NUMA node binding with simple CPU count
  • build(deps): bump github/codeql-action from 3.28.12 to 3.28.13
  • Makefile: Bump go min to 1.23.7
  • Makefile: Pin tags.cncf.io/container-device-interface to v0.8.1
  • gomod: Update dependencies
  • lxd/operations: Replace waitForOperations by pendingInstanceOperations
  • lxd/daemon: fix linter warning (QF1001: could apply De Morgan's law (staticcheck))
  • lxd/daemon_storage: refactor daemonStorageVolumesUnmount
  • lxd/instances: utility functions used for by the refactored instancesShutdown function
  • lxd/instances: Refactor instancesShutdown
  • daemon: Refactor daemon.Stop method with new instances shutdown logic
  • lxd/operations: Add internal operationWaitHandler API handler logic.
  • test/includes: various helper functions for the LXD shutdown sequence tests
  • test: Add lxd shutdown sequence tests
  • lxd/storage/drivers/lvm: Correct comment
  • lxd/storage/drivers/lvm: Move log message to after unmount
  • lxd/storage/drivers/lvm: Use UnmountVolumeSnapshot for snapshot volume
  • lxd/storage/drivers/lvm: Factor out volume mount logic
  • lxd/storage/drivers/lvm: Factor out volume unmount logic
  • lxd/storage/drivers/lvm: Only unmount on deletion when mounted
  • lxd/storage/drivers/lvm: Use ReplaceAll (staticcheck)
  • lxd/storage/drivers/lvm: Use Split (staticcheck)
  • lxd/storage/drivers/lvm: Use tagged switch (staticcheck)
  • test/suites: Test container volume activation
  • lxd/db/cluster: Delete unused instance ToAPI method.
  • lxd/db/cluster: Remove cluster_test package.
  • client: Fix lint error (revive: unused-parameter).
  • lxc: Fix lint error (revive: unused-parameter).
  • lxd/db/cluster: Fix lint error (revive: unused-parameter).
  • lxd/instance/drivers: Fix lint error (revive: unused-parameter).
  • lxd/storage: Fix lint error (revive: unused-parameter).
  • lxd: Fix lint error (revive: unused-parameter).
  • lxd: Fix lint error (revive: early-return).
  • lxd/db/cluster: Fix unique constraint test.
  • test/godeps: Update dep lists
  • lxc: Fix linter error (staticcheck).
  • github: add ‘Feature’ type to feature request template/form
  • github: add ‘Bug’ type to bug report template/form
  • github: replace ‘container’ with ‘instance’ in bug report template/form
  • docs: add scripted grafana setup WD-20339 for recent LXD-UI 0.16 onwards
  • lxd/instance: Don’t enforce device/config validation on snapshots
  • lxd/device/cdi: ubuntu core: add mesa-2404 contents to config search paths
  • lxd/instances: Adds missing project context to logging in instancesShutdown
  • lxd/instances: Uses instance level contextual logger in instancesShutdown
  • lxd/instances: Logs failure to update instance volatile.last_state.power during shutdown
  • lxd/daemon: Reduce scope of shutdown context and dont use for storage unmount context
  • lxd/instances: Add repeat log message every 10s when waiting for instance operations to finish in instancesShutdown
  • test/suites/migration: Add test for config override for migration of instance with snapshot
  • lxc/move: Set snapshots to receive target profiles with --profile
  • lxc/copy: Set snapshots to receive target profiles with --profile
  • test/suites/snapshots: Add test for move of instance with snapshots into new project with new profile
  • lxd/main_forkproxy: Improve variable naming consistency in genericRelay function
  • lxd/main_forkproxy: Rework genericRelay function to support half-closed TCP connections
  • tests: Add container proxy device test for half-closed TCP connections
  • lxd/device/tpm: use %q format specifier in fmt.Errorf
  • lxd/storage/drivers/ceph: use %q format specifier in fmt.Errorf
  • lxd/storage/drivers/cephfs: use %q format specifier in fmt.Errorf
  • lxd/storage/drivers/zfs: use %q format specifier in fmt.Errorf
  • lxd/storage/drivers/zfs: check ZFS kmod version earlier
  • lxd/storage/drivers/zfs: suggest zfs.external if in snap and ZFS tools are missing
  • test/lint/godeps: allow updating lists
  • test/lint/godeps: improve messages
  • Makefile: add update-godeps target
  • lxd/network: Improve network priority in networkStartup
  • lxd/network: Fix linter errors
  • test/suites/backup: On cephfs add sync calls after file push
  • github: enable code coverage for client tests
  • github: merge multi-arch lxc client build
  • lxd/db/cluster/open: Return api.StatusError from checkClusterIsUpgradable
  • lxd/db/cluster/open: Improve error messages in checkClusterIsUpgradable
  • lxd/db/cluster/open/test: Update tests
  • lxd/db/schema/errors: Removes unneeded ErrGracefulAbort error
  • lxd/db/schema/schema: Plumbs api.StatusError returned from s.check in Ensure
  • lxd/db/db: Handle api.StatusErrors returned from EnsureSchema in OpenCluster
  • lxd/daemon: Handle api.StatusError returned from db.OpenCluster
  • lxd/cluster/membership: Updates cluster.EnsureSchema usage in Join
  • lxd/db/schema/schema/test: Update tests
  • lxd/db/db: Linter fix
  • lxd/db/schema/schema: Linter fix
  • lxd/db/node: Align error messages in NodeIsOutdated
  • lxd/db/node: Use passed context in nodes function
  • lxd/api/cluster: Only get failure domains during recursive mode for clusterNodesGet
  • lxd/cluster/upgrade: Replace node with member in MaybeUpdate
  • test: Fix typo in clustering tests
  • lxd/db/node: Updates ToAPI to correctly account for status in comparison to other member version
  • lxd/api/cluster: Update clusterNodeGet to use updated ToAPI function
  • lxd/api/cluster: Updates updateClusterNode to use updated ToAPI function
  • lxd/scriptlet/instance/placement: Updates InstancePlacementRun to use updated ToAPI function
  • lxd/db/node: Removes unnecessary function GetNodeMaxVersion
  • test/suites/clustering: Fix clustering_upgrade test
  • test/suites/clustering: Adds clustering_downgrade test
  • github: Enable clustering_upgrade tests
  • doc: Force white background for swagger API
  • lxd/db/cluster/open: Update comments in checkClusterIsUpgradable
  • lxd/instance/drivers/driver/qemu: Fix regression when hotplugging virtio-blk drives in addDriveConfig
  • api: Add resources_device_fs_uuid extension
  • shared/api: Add DeviceFSUUID field to disks and partitions
  • lxd/storage/block: Move GetDisksByID to prevent import cycle
  • lxd/storage/block: Move the DevDiskByID const
  • lxd/storage/block: Add DiskFSUUID
  • lxd/resources: Populate the DeviceFSUUID fields for disks and partitions
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/drivers: Use block.DiskFSUUID instead
  • lxd/storage/drivers: Apply De Morgan’s law (staticcheck)
  • shared: Use ReplaceAll (staticcheck)
  • build(deps): bump tiobe/tics-github-action from 3.3.0 to 3.4.0
  • build(deps): bump actions/dependency-review-action from 4.5.0 to 4.6.0
  • build(deps): bump github.com/mattn/go-sqlite3 from 1.14.24 to 1.14.27
  • build(deps): bump github/codeql-action from 3.28.13 to 3.28.14
  • build(deps): bump golang.org/x/sys from 0.31.0 to 0.32.0
  • build(deps): bump golang.org/x/text from 0.23.0 to 0.24.0
  • lxd/storage/block: Fix DiskFSUUID for pristine disks
  • build(deps): bump golang.org/x/crypto from 0.36.0 to 0.37.0
  • github: fix macos client build due to mkdir -p
  • github: Go coverage options need to be last for go test
  • build(deps): bump golang.org/x/oauth2 from 0.28.0 to 0.29.0
  • lxd/device/disk: Fix attachment of ceph instance volumes in default project
  • lxd/device/config/device/runconfig: Moves DevSource types
  • lxd/device/device/utils/unix: deviceConfig.DevSourcePath usage
  • lxd/device/disk: deviceConfig.DevSourcePath usage
  • lxd/device/gpu/physical: deviceConfig.DevSourcePath usage
  • lxd/instance/drivers/driver: deviceConfig.DevSourcePath usage
  • lxd/storage/pool/interface: Change MountInfo to return a deviceConfig.DevSource rather than string DiskPath
  • lxd/instance/drivers/driver/qemu: mountInfo.DevSource usage
  • lxd/storage/backend/lxd: Update MountInstance* to return mountInfo.DevSource
  • lxd/storage/utils: Updates InstanceDiskBlockSize to use mountInfo.DevSource
  • lxd/device/device/utils/unix: Linter fix in unixDeviceAttributes
  • lxd/device/disk: Linter fix in validateConfig
  • lxd/device/disk: Linter fix in storagePoolVolumeAttachShift
  • lxd/device/disk: Linter fix in generateVMConfigDrive
  • Revert “github: fix macos client build due to mkdir -p
  • github: don’t hardcode the runner home in GOCOVERDIR
  • Makefile: bump golangci-lint version to 2.0.2
  • lxd: Log warning if Loki server is unreachable during init process
  • github: only keep shellcheck report artifacts for 1 day
  • github: only keep coverage report artifacts for 1 day
  • github: only keep documentation artifacts for 5 days
  • Revert “lxd/ubuntu-pro: Change Ubuntu Pro directory.”
  • Makefile: Add auto-commit for make update-auth
  • lxd/storage: Move volumeDetermineNextSnapshotName to storage
  • lxd/storage: Lock operation before creating DB record
  • lxd/storage/utils: Update volumeIsUsedByDevice’s arguments
  • lxd/device/disk: Minor simplification
  • lxd/storage: Use IsSnapshot instead of GetParentAndSnapshotName
  • lxd/storage/utils: Fix import format (gci)
  • client: Update client functions in lxd_cluster.go to construct URLs using api.NewURL() and replace HTTP method literals with constants from http package
  • lxd/storage: Log a warning if syncing a container volume fails
  • lxd/storage: Flush writes before custom volume snapshot
  • doc: update spellcheck custom wordlist
  • doc/rest-api: update put vs patch
  • lxd/storage: Fix instance path on SyncFS
  • doc/reference/instance-options: clarify wording about volatile key manipulation
  • lxd/device/disk: Avoid duplicate iso9660 logic by not creating a new mount var in startVM
  • lxd/device/disk: Ensure mountPoolVolume() is called even when using Qemu’s librbd ceph client in startVM
  • test/includes/storage: unset core.storage_buckets_address in delete_object_storage_pool()
  • build(deps): bump github/codeql-action from 3.28.14 to 3.28.15
  • build(deps): bump actions/setup-node from 4.3.0 to 4.4.0
  • build(deps): bump github.com/openfga/openfga from 1.8.8 to 1.8.9
  • build(deps): bump golang.org/x/tools from 0.31.0 to 0.32.0
  • build(deps): bump github.com/miekg/dns from 1.1.64 to 1.1.65
  • Makefile: Pin github.com/go-jose/go-jose/v4@v4.0.5
  • gomod: Update dependencies
  • lxc/file: Linter fixes
  • lxd/network: Linter fixes
  • lxd/patches: Linter fixes
  • lxd/project/limits/permissions: Linter fixes
  • lxd/storage/volumes: Linter fix
  • lxd: Check groups in restricted.cluster.target.
  • lxd: Filter cluster group used by URLs.
  • test/suites: Test restricted/fine-grained clients can’t view projects via used-by URLs.
  • lxd/instance/drivers/driver/lxc: Trigger schedule rebalance after DB changes made
  • lxd/instance/drivers/driver/qemu: Update comments
  • Amended documentation with a better way to setup DNS-resolving LXD containers from the host machine.
  • doc: Update manage storage volumes
  • doc: use redirects_map.py to store redirects
  • lxd: Fix regression that prevents listing members in non-recursive mode
  • lxd/instance/drivers/driver/qemu: Add link to qemu commit related to disk serial length
  • test/suites/clustering: Check recursive and non-recursive mode when listing cluster members
  • doc/custom/conf: Ignore link checking of https://www.schlachter.tech/solutions/pongo2-template-engine/
  • test/suites/clustering: fix typo (s/firth/fifth/)
  • github: rework how GOCOVERDIR is handled
  • api: Add backup_metadata_version extension
  • shared/api: Add BackupMetadataVersion type
  • lxd/backup/config: Add DefaultMetadataVersion const
  • lxd/backup/config: Add MaxMetadataVersion const
  • lxd/backup/config: Add new keys and mark outdated ones as deprecated
  • lxd/backup/config: Add new utility functions to retrieve pools and vols
  • lxd/backup: Add new helper to upgrade and downgrade the backup config schema
  • lxd: Use the new config format keys
  • lxd/backup: Use the new config format keys
  • lxd/instance/drivers: Use the new config format keys
  • lxd/instance: Use the new config format keys
  • lxd/storage: Use the new config format keys
  • lxd/migration: Add new index header version 2
  • lxd/storage: Upgrade or downgrade the migration config metadata
  • shared/api: Add BackupVersion to InstanceBackupsPost
  • lxc: Allow setting the backup version when exporting instances
  • lxd/storage/interface: Allow passing backup file version
  • lxd/storage/backend: Modify function signatures to allow passing backup format version
  • lxd: Pass the backup format version when creating instance backups
  • lxd: Fall back to the original (old) backup format when exporting instances
  • lxd/instance/drivers: Update invocations of UpdateInstanceBackupFile
  • lxd/storage: Update invocations of UpdateInstanceBackupFile
  • lxd/storage: Downgrade instance backup file only in the last step
  • shared/api: Add BackupVersion to StoragePoolVolumeBackupsPost
  • lxc: Allow setting the backup version when exporting custom storage volumes
  • lxd: Fall back to the original (old) backup format when exporting custom storage volumes
  • lxd: Pass the backup format version when creating custom storage volume backups
  • lxd/migration: Linter fixes
  • lxd: Fix error messages
  • doc: Document new --export-version flag for backup creation
  • shared/api: Add new BackupMetadataVersionRange field to server environment
  • lxd: Add BackupMetadataVersionRange to server environment
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates.
  • i18n: Update translations.
  • test: Add yq as dependency
  • test/suites: Add test_backup_metadata
  • lxd/backup/config: Set DefaultMetadataVersion to 2 for LXD 6.x onwards
  • lxc: Add note about export version for LXD 6.x onwards
  • i18n: Update translation templates (LXD 6.x only)
  • i18n: Update translations (LXD 6.x only)
  • lxd/network/driver/bridge: Validate forwards for collisions with OVN ranges
  • lxd/network/driver/ovn: Validate forwards & load balancers for collisions with OVN
  • shared/network: Add ParseNetworks function
  • lxd/network/driver/common: Add validateRoutes function
  • lxd/network/driver/physical: Validate ip routes for existing forwards
  • lxd/network/driver/bridge: Validate ip routes for existing forwards
  • lxd/device/nic/ovn: Add validateExternalRoutes function
  • lxd/device/nic/ovn: Fix linter errors
  • test: Expand OVN tests
  • lxd/devlxd: Rename devlxd to devLXD
  • lxd/dameon: Rename devlxd to devLXD
  • lxd/response: Rename devlxd response to devLXD
  • lxd/devlxd: Regroup vSock and devLXD functions
  • lxd/devlxd: Add devLXD security config key constants
  • lxd/devlxd: Introduce devLXD API endpoints
  • lxd/devlxd: Remove http.Writer from handler func
  • lxd/request: Add devLXD instance context key
  • lxd/devlxd: Rename instance variable
  • lxd/devlxd: Pass request instance using request context
  • lxd/devlxd: Set devLXD authentication method in handleFunc
  • lxd/devlxd: Handle panic recovery
  • lxd/devlxd: Handle security flags
  • lxd/devlxd: Remove no longer needed method checks
  • lxd/devlxd: Apply de morgan’s law in check (linter)
  • lxd/api_devlxd: Fix func name (linter)
  • lxd/api_{devlxd,vsock}: Add comments to hoist funcs
  • lxd/devlxd_test: Improve error message and test url
  • lxd-agent: Rename devlxd to devLXD
  • lxd-agent/response: Rename devlxd to devLXD response
  • lxd-agent: Modernize for loop
  • lxd-agent: Add render function to devLXD response
  • lxd-agent: Refactor devLXD API handling
  • lxd-agent: Remove http writer from handler function
  • lxd-agent: Remove unnecessary method checks
  • lxd-agent: Remove unnecessary config filter
  • lxd-agent: Handle nil response
  • client/interfaces: Add DevLXDServer interface
  • shared/api: Add public DevLXD response
  • shared/api/response: Improve response helper function comments
  • client/devlxd: Scaffolding for devLXD client
  • client/connection: Add functions for connecting to devLXD
  • client/devlxd: Add internal RawQuery function
  • client/devlxd: Add state endpoints
  • client/devlxd: Add devices endpoint
  • client/devlxd: Add metadata endpoint
  • client/devlxd: Add Ubuntu Pro endpoint
  • client/devlxd: Handle websockets
  • client/events: Introduce EventListenerManager
  • client/devlxd: Add events endpoint
  • client/devlxd: Add image export
  • client/devlxd: Add config endpoint
  • lxd/ucred: Prevent potential panic by using empty type assertion
  • lxd/api_devlxd: Prevent potential panic by safely asserting connection type
  • test/godeps: Add new client deps
  • test/godeps: Add new lxc config deps
  • test/devlxd-client: Use devlxd client instead of raw http
  • lxd/cluster/events: Omit type from variable declaration (linter)
  • lxd/instances_put: Preallocate arrays (linter)
  • lxd/instance_state: Drop else when previous block returns (linter)
  • lxd/images: Apply De Morgan’s law (linter)
  • lxd/images: Use tagged switch (linter)
  • lxd/daemon_images: Use tagged switch (linter)
  • lxd/instance_instance_types: Use tagged switch (linter)
  • lxd/instances_get: Use tagged switch (linter)
  • lxd/project/permissions: Use split instead of splitN (linter)
  • lxd/storage_pools: Merge conditional assignment (linter)
  • github: fix GOCOVERAGE boolean values
  • github: switch to ubuntu-24.04 runners for security workflow
  • github: switch to ubuntu-24.04 runners for triage workflow
  • test/suites/basic: init a small empty container to test CPU/mem limits
  • test/suites/basic: use shell comparison for last_used_at tests
  • test/suites/basic: test using alias with slashes
  • doc: Update create a network
  • test/includes/lxd: chmod the lxddir in spawn_lxd()
  • test/suites: stop chmod’ing the lxddir as spawn_lxd() does it
  • doc/howto/instances_configure: add more device config info
  • doc/howto/network_acls: copyedit updates to intro
  • doc/howto/network_acls: add list ACLs section
  • doc/howto/network_acls: add show ACL section
  • doc/howto/network_acls: move ACL name requirements to own section
  • doc/howto/network_acls: update create via CLI section and add ref target
  • doc/howto/network_acls: add API tab to create section
  • doc/howto/network_acls: add reference target for ACL properties
  • doc/howto/network_acls: update intro to ACL rules section
  • doc/howto/network_acls: update how to add rules
  • doc/howto/network_acls: update how to remove rules
  • doc/howto/network_acls: add section on how to edit rules
  • doc/howto/network_acls: update section on rule ordering
  • doc/howto/network_acls: add reference target for rule properties
  • doc/howto/network_acls: update intro for using rule selectors
  • doc/howto/network_acls: update subject name selectors section
  • doc/howto/network_acls: update network subject selectors section
  • doc/howto/network_acls: update log traffic section
  • doc/howto/network_acls: bridge limitations section copyedits
  • doc/howto/network_acls: default actions section intro copyedits
  • doc/howto/network_acls: add CLI/API steps for network default actions
  • doc/howto/network_acls: add CLI/API steps for NIC default actions
  • doc/howto/network_acls: add delete an ACL section
  • doc/howto/network_acls: add additional properties section
  • doc/howto/network_acls: update assign section and add ref target
  • doc/howto/network_acls: update assign to network section
  • doc/howto/network_acls: update assign to NIC section
  • doc/howto/network_acls: update rename ACL section
  • doc/howto/network_acls: add edit other properties section and CLI tab
  • doc/howto/network_acls: add edit other properties section’s API tab
  • doc/howto/network_acls: add example to edit other properties section’s API tab
  • doc/howto/network_acls: add edit custom keys section
  • doc/howto/network_acls: add example to edit custom keys section
  • Change Cloud Init “user” to “users”
  • doc/cloud-init: Update network example to v2
  • doc/idmap: Clarify subuid/subgid configuration
  • build(deps): bump github.com/mattn/go-sqlite3 from 1.14.27 to 1.14.28
  • build(deps): bump github.com/go-acme/lego/v4 from 4.22.2 to 4.23.1
  • lxd/backup/config: Add dedicated struct for Buckets
  • lxd/storage: Use new format when defining backup struct
  • lxc: Add getExportVersion func
  • lxc: Use getExportVersion for instances and custom storage volumes
  • lxd/storage: Try downgrading the config before vol mount
  • Makefile: update golangci-lint to 2.1.2
  • lxd/lxd-metadata: reorder Go imports
  • lxd/device/cdi/spec_unsupported: reorder Go imports
  • lxd/lxd-metadata: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • shared/simplestreams/products: use tagged switch instead of if/else
  • lxc/action: use tagged switch instead of if/else
  • lxc/config_trust: use tagged switch instead of if/else
  • lxc/auth: use tagged switch instead of if/else
  • lxc/info: use tagged switch instead of if/else
  • lxc/monitor: use tagged switch instead of if/else
  • lxc/network_acl: use tagged switch instead of if/else
  • lxc/network_peer: use tagged switch instead of if/else
  • lxd-migrate: use tagged switch instead of if/else
  • lxd/cgroup/abstraction: use tagged switch instead of if/else
  • lxd/db/generate/db/method: use tagged switch instead of if/else
  • lxd/device/nic_bridged: use tagged switch instead of if/else
  • lxd/device/unix_common: use tagged switch instead of if/else
  • lxd/device/unix_hotplug: use tagged switch instead of if/else
  • lxd/device/usb: use tagged switch instead of if/else
  • lxd/firewall/drivers/xtables: use tagged switch instead of if/else
  • lxd/instance/drivers/driver_qemu_bus: use tagged switch instead of if/else
  • lxd/instance/drivers/driver_qemu_templates: use tagged switch instead of if/else
  • lxd/instance/drivers/load: use tagged switch instead of if/else
  • lxd/instance/drivers/qmp/monitor: use tagged switch instead of if/else
  • lxd/loki: use tagged switch instead of if/else
  • lxd/main_init_interactive: use tagged switch instead of if/else
  • lxd/migration/migration_volumes: use tagged switch instead of if/else
  • lxd/network/acl/firewall: use tagged switch instead of if/else
  • lxd/network/acl/driver_common: use tagged switch instead of if/else
  • lxd/resources/network_ethtool: use tagged switch instead of if/else
  • lxd/storage/drivers/btrfs_volumes: use tagged switch instead of if/else
  • lxd/storage/drivers/ceph_volumes: use tagged switch instead of if/else
  • lxd/storage/drivers/poweflex_utils: use tagged switch instead of if/else
  • lxd/storage/drivers/poweflex_volumes: use tagged switch instead of if/else
  • lxd/storage/drivers/pure_volumes: use tagged switch instead of if/else
  • lxd/storage/drivers/zfs_volumes: use tagged switch instead of if/else
  • lxd/storage/drivers/utils_ceph: use tagged switch instead of if/else
  • lxd/storage/pool_load: use tagged switch instead of if/else
  • lxd/storage: use tagged switch instead of if/else
  • lxd/subprocess/proc: use tagged switch instead of if/else
  • lxd/subprocess/proc: use tagged switch instead of if/else
  • lxc/image: Apply De Morgan’s law (staticcheck)
  • lxc/list: Apply De Morgan’s law (staticcheck)
  • lxd/db/network_forwards: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • lxd/db/network_load_balancers: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • lxd/db/schema/update: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • lxd/db/storage_buckets: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • lxd/db/storage_pools: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • lxd/main_netcat: use fmt.Fprintf() instead of WriteString(fmt.Sprintf())
  • shared/filter/match: Apply De Morgan’s law (staticcheck)
  • lxd/instance_get: Apply De Morgan’s law (staticcheck)
  • lxc/list: Use strings.ReplaceAll instead (staticcheck)
  • lxc/main_aliases: Use strings.ReplaceAll instead (staticcheck)
  • lxc/warning: Use strings.ReplaceAll instead (staticcheck)
  • lxd/apparmor/apparmor: Use strings.ReplaceAll instead (staticcheck)
  • lxd/apparmor/archive: Use strings.ReplaceAll instead (staticcheck)
  • lxd/apparmor/instance: Use strings.ReplaceAll instead (staticcheck)
  • lxd/auth/generate/main: Use strings.ReplaceAll instead (staticcheck)
  • lxd/db/generate/db/mapping: Use strings.ReplaceAll instead (staticcheck)
  • lxd/db/generate/db/method: Use strings.ReplaceAll instead (staticcheck)
  • lxd/db/generate/db/parse: Use strings.ReplaceAll instead (staticcheck)
  • lxd/db/generate/db/stmt: Use strings.ReplaceAll instead (staticcheck)
  • lxd/device/nic_bridged: Use strings.ReplaceAll instead (staticcheck)
  • lxd/device/nic_ipvlan: Use strings.ReplaceAll instead (staticcheck)
  • lxd/device/nic_routed: Use strings.ReplaceAll instead (staticcheck)
  • lxd/instance/drivers/qemu_metrics: Use strings.ReplaceAll instead (staticcheck)
  • lxd/ip/route: Use strings.ReplaceAll instead (staticcheck)
  • lxd/storage/drivers/ceph_volumes: Use strings.ReplaceAll instead (staticcheck)
  • lxd/storage/filesystem/fs: Use strings.ReplaceAll instead (staticcheck)
  • lxd/main_netcat: unexport command and run funcs
  • lxd/main: netcatCmd.command func was unexported
  • lxc/action: merge conditional assignment into var declaration (staticcheck)
  • lxc/config_trust: merge conditional assignment into var declaration (staticcheck)
  • lxd/network/acl/driver_common: merge conditional assignment into var declaration (staticcheck)
  • lxd/storage/drivers/btrfs_volumes: remove embedded field Volume from selector (staticcheck)
  • lxd/storage/drivers/ceph_volumes: remove embedded field Volume from selector (staticcheck)
  • lxd/storage/drivers/pure_volumes: remove embedded field Volume from selector (staticcheck)
  • lxc/main_aliases: ignore prealloc suggestion
  • lxd/auth/generate/main: preallocate entityType slice
  • shared/filter/match: early return from if (revive)
  • lxc/main_aliases: use named results (revive)
  • lxd/instance/drivers/qemu_bus: use named results (revive)
  • lxd/ip/route: avoid deprecated shared.Runcommand
  • shared/filter/match: verify type cast results (revive)
  • lxd/subprocess/proc: drop struct tag of unexported fields of Process struct
  • lxd/subprocess: unexport some fields of Process struct
  • lxd/firewall/drivers/nftables: unexport some fields of nftGenericItem struct
  • lxd/storage/drivers/pure_util: unexport statusCode field of pureError struct
  • api: Add storage_buckets_all_projects extension
  • shared/api: Add Project field to StorageBucket struct
  • client: Add GetStoragePoolBucketsAllProjects function
  • lxc/storage_bucket: Add all-projects flag to list command
  • lxd/db: Fill StorageBucket struct Project field
  • lxd/storage_buckets: Add support for all-projects flag
  • doc/rest-api: Refresh swagger YAML
  • tests: Add storage list --all-projects authorization tests
  • lxd/db: Fix lint error (staticcheck - QF1012)
  • i18n: Update translation templates.
  • i18n: Update translations.
  • doc/initialize: update maas anchor link
  • client: Use http package HTTP method constants
  • client: Fix lint error (staticcheck - QF1008)
  • lxc/query: Use http package HTTP method constants
  • lxd/cluster: Use http package HTTP method constants
  • lxd/instance/drivers: Use http package HTTP method constants
  • lxd/loki: Use http package HTTP method constants
  • lxd: Use http package HTTP method constants
  • lxd: Fix lint error (revive - unchecked-type-assertion)
  • lxd: Fix lint error (revive - exported)
  • lxd: Fix lint error (revive - useless-break)
  • lxd-user/callhook: Use http package HTTP method constants
  • shared: Use http package HTTP method constants
  • shared/simplestreams: Use http package HTTP method constants
  • lxd-agent: Use http package HTTP method constants
  • lxd/devlxd: Enable access to GET devlxd/1.0 endpoint without security.devlxd flag
  • lxd/response: Fix devLXD in comments
  • api: Add network_acls_all_projects extension
  • shared/api: Add Project field to NetworkACL struct
  • client: Add GetNetworkACLsAllProjects function
  • lxc/network_acl: Add all-projects flag to list command
  • lxd/db: Add GetNetworkACLsAllProjects
  • lxd/network/acl: Set Project field
  • lxd/network_acls: Add support for all-projects flag
  • doc/rest-api: Refresh swagger YAML
  • tests: Add tests for listing network ACLs across all projects
  • tests: Update network acl tests
  • tests: Replace use of wc -l = 0 in favor of equating empty string to network acl list test
  • tests: Add network acl list --all-projects tests to authorization tests
  • tests: Add additional network zone list --all-projects test to authorization tests
  • tests: Add TLS restrictions tests for network ACLs
  • i18n: Update translation templates.
  • i18n: Update translations.
  • lxd/db/generate/db/lex: replace more fmt.Sprintf() (perfsprint)
  • lxd/db/generate/db/method: use strings.ReplaceAll()
  • lxd/db/generate/db/method: replace more fmt.Sprintf() (perfsprint)
  • lxd/db/generate/db/method: replace more fmt.Sprintf() (perfsprint)
  • lxd/storage/drivers/powerflex_utils: replace more fmt.Sprintf() (perfsprint)
  • lxd/util/net: replace more fmt.Sprint() (perfsprint)
  • lxd/network/openvswitch/ovn: replace more fmt.Sprint() (perfsprint)
  • lxd/network/openvswitch/ovs: replace more fmt.Sprint() (perfsprint)
  • lxd/network/openvswitch/ovs: use strings.Split() instead (staticcheck)
  • lxd/network/physical: replace more fmt.Sprint() (perfsprint)
  • lxd/network/driver_ovn: replace more fmt.Sprint() (perfsprint)
  • lxd/cluster/membership: Improve error in Handover
  • lxd/db/cluster/open: Improve error in EnsureSchema
  • lxd/api/cluster: Improve errors, logging and comments
  • lxd/cluster/gateway: Simplify Shutdown() indenting
  • lxd/networks: Adds check for DB cluster in networkShutdown
  • lxd/cluster/gateway: Fix ineffectual assignment of err
  • lxd-user: Linter fixes
  • lxd: Linter fixes
  • lxd/main/forkfile: Linter fixes
  • lxd/daemon: Get state first in Stop before triggering shutdown
  • lxd/daemon: Handle missing DB connection when shutting down instances in Stop
  • lxd/daemon: Load local config before setting up dqlite gateway
  • lxd/daemon: Add clustering config sense check during init
  • github: workaround LP 504 error with PPAs
  • lxd: Use api.NewURL() to construct network-acl result urls
  • lxd/device/disk: simplify vmVirtiofsdPaths()
  • api: Add networks_all_projects extension
  • shared/api: Add Project field to Network struct
  • client: Add GetNetworksAllProjects function
  • lxc/network: Add all-projects flag to list command
  • lxd/db: Add GetNetworksAllProjects function
  • lxd/networks: Add support for all-projects flag
  • tests: Add network list --all-projects authorization tests
  • doc/rest-api: Refresh swagger YAML
  • tests: Add TLS restrictions test for listing networks
  • i18n: Update translation templates.
  • i18n: Update translations.
  • lxd: Pass *Daemon to expireLogsTask rather than long lived state
  • lxd: Retrieve fresh state for expireLogs task
  • lxd/storage/drivers/zfs_volumes: use shared.VarPath() to join path components
  • lxd/storage/drivers/btrfs_volumes: stop looking for subvol ID once found
  • lxd-agent/state: replace strings.SplitN() by strings.Cut()
  • lxd-agent/state: do not report IPv6 address starting with 127 as being local
  • lxd-agent/state: micro-optimise scope evaluation
  • lxd-agent/state: micro-optimise family evaluation
  • lxd/network/openvswitch/ovn: simplify turning IP into CIDR notation (avoid fmt.Sprint())
  • shared/api/instance: simplify GetParentAndSnapshotName() that is essentially a wrapper for strings.Cut()
  • lxd/network/openvswitch/ovs: use --columns with ovs-vsctl
  • lxd/network/openvswitch/ovn: use --columns with ovn-nbctl
  • lxd/db: Replace use of queryScan function with query.Scan function
  • lxd/db: Remove unused queryScan function
  • api: On file push to containers, only change uid/gid if it fits within uidmap range
  • lxd/instance_file: static analysis fixes
  • test: Add test for file push of a file owned by uid outside of container range
  • lxd: Pass d.State func to task functions launched by daemon
  • lxd/api/internal: Always exit with non-error status if shutdown has been triggered manually in internalShutdown
  • lxd/main/daemon: Always exit with non-error status code when stop signal is received
  • lxd/networks: Rename networkShutdown to networkingStop
  • lxd/daemon: Call networkingStop()
  • lxd/api/cluster: Call networkingStop()
  • lxd/device: Only remove GPU CDI device files for device being started
  • github: actions/install-lxd-runtimedeps only install yq if not there already
  • github: use libselinux-dev is a virtual package on Jammy+
  • test/main: check for setfattr
  • api: Improve logging on file push
  • lxd/resources/usb: the vendor ID is 16-bit by definition
  • lxd/resources/usb: the product ID is 16-bit by definition
  • lxd/resources/usb: the class ID is 8-bit by definition
  • lxd/resources/usb: the subclass ID is 8-bit by definition
  • lxd/storage: Add storageStop
  • lxd/daemon: Call storageStop()
  • lxd/db/db: Improve handling of closingCtx in OpenCluster
  • lxd/daemon: Pass shutdownCtx to db.OpenCluster
  • lxd/daemon: Add startStop lock for init() and Stop()
  • lxd/daemon: Don’t populate d.db.Cluster until global database is fully initialised
  • lxd/daemon: Improve logging
  • lxc/config: Add method to override default connection arguments.
  • lxc: Update calls to GetInstanceServerWithTransportWrapper.
  • lxd/main/daemon: Rework cmdDaemon.run() to allow shutdown during start up
  • lxd/daemon: Remove stop handling on error
  • lxd/cluster: Adds context support to WaitUpgradeNotification
  • lxd/cluster/heartbeat/test: Fix State for Bootstrap to indicate server is clustered
  • lxd/daemon: Update d.gateway.WaitUpgradeNotification usage with context
  • lxc/config: Make the images remote static.
  • build(deps): bump github.com/minio/minio-go/v7 from 7.0.90 to 7.0.91
  • build(deps): bump github.com/NVIDIA/nvidia-container-toolkit
  • build(deps): bump github/codeql-action from 3.28.15 to 3.28.16
  • build(deps): bump actions/download-artifact from 4.2.1 to 4.3.0
  • doc: Move contributing out of “Getting Started”
  • lxc: Add generalised functions for comparing top-level resources.
  • lxc: Refactor cluster group completion.
  • lxc: Refactor cluster member completion.
  • lxc: Refactor instance completion.
  • lxc: Refactor network ACL completion.
  • lxc: Refactor network completion.
  • lxc: Refactor network zone completion.
  • lxc: Refactor profile completion.
  • lxc: Update project flag completion to attempt to use the correct remote.
  • lxc: Refactor project completions.
  • lxc: Refactor storage pool completions.
  • lxd/main/waitready: No need to call /1.0 repeatedly in waitready
  • lxc: Update cmpRemotes to use filters.
  • lxc: Update calls to cmpRemotes.
  • lxd/db/query/retry: Improve readability with early return
  • Remove Rican7/retry dependency
  • gomod: Removes Rican7/retry dependency
  • lxc: Refactor cmpInstancesAndSnapshots.
  • lxc: Add completion for lxc snapshot.
  • lxc: Add completion for lxc restore.
  • lxc: Fix completion for lxc rename.
  • lxc: Remove cmpImageFingerprintsFromRemote.
  • lxc: Allow suggesting only instance remotes when comparing images.
  • lxc: Update calls to cmpImages.
  • lxc: Refactor file completion.
  • lxc: Add completion for lxc import.
  • lxc: Add completion for lxc export.
  • lxc: Remove unused completion func in lxc file delete.
  • lxc: Prevent file completion for all commands that haven’t explicitly set it.
  • gomod: Update dependencies
  • Makefile: fix typo in .PHONY target name
  • Makefile: bump golangci-lint to v2.1.5
  • lxc: Add configOptionAppender function.
  • lxc: Refactor cmpServerSetKeys.
  • lxc: Refactor cmpServerAllKeys.
  • lxc: Don’t complete server configuration when comparing instance configuration.
  • lxc: Refactor instance configuration completion.
  • lxc: Refactor cmpInstanceAllDevices.
  • lxc: Add completions for device subtypes.
  • lxc: Refactor cmpInstanceAllDeviceOptions.
  • lxc: Update lxc config command with refactored completions.
  • lxc: Update lxc config device command with refactored completions.
  • lxc: Update lxc profile set command with refactored completions.
  • lxc/completion: Use strings.HasPrefix over strings.Contains.
  • lxc/completion: use strings.HasPrefix() to check for default remote name
  • lxd: Use UTC as reference for snapshot expiry
  • api: Add clustering_restore_skip_mode API extension
  • shared/api: Fix extension typo (clustering_evacuate_modeclustering_evacuation_mode)
  • lxd: Update restoreClusterMember to migrate back remote instances only when not in skip mode
  • lxc/cluster: Add --action flag and skip mode to lxc cluster restore command
  • lxc/cluster: Update lxc cluster evacuate description
  • client: Add extension check for clustering_restore_skip_mode
  • test/suites: cluster restore test with --skip flag
  • i18n: Update translation templates.
  • i18n: Update translations.
  • lxd/daemon: Make d.gateway.Cluster available even if OpenCluster returns with PreconditionFailed
  • lxd/main/waitready: Increase waitready poll time
  • test/suites/snapshots: Make expiry test more concrete
  • test/suites/storage_snapshots: Make expiry test more concrete
  • lxd/network/driver/bridge: Kill DNS services before removing interfaces in Stop()
  • lxd: Always set the expiry date for snapshots
  • lxd/query: Allow running manual queries against LXD without hitting /1.0
  • test/suites: Check snapshot expiry zero value in recursive list mode if unset
  • lxd: Add wait parameter to /internal/ready endpoint and use it in lxd waitready command
  • lxd/daemon: Sync DB dir on shutdown
  • lxd/api/internal: Don’t leave request go routine running if client disconnects in internalShutdown
  • lxd/storage/drivers: Skip GPT alt‐header move on non-GPT disks (handle sgdisk exits 2 & 3)
  • shared/ws/upgrader: Adds StartKeepAlive function
  • lxd/instance/exec: Switch to ws.StartKeepAlive in Connect
  • lxd/instance/exec: Improve comments
  • client/lxd/instances: Lose unnecessary var definition in ConsoleInstance
  • client/lxd/instances: Consume server generated websocket pings on Console* control connections
  • lxd/instance/console: Send server-side initiated websocket keepalives
  • lxd/storage: Improve error message wording in CreateInstanceFromConversion
  • lxd/node: Add link to debug_address config doc
  • doc: Update metadata
  • lxd/api/internal: Switch to configurable timeout parameter in internalWaitReady
  • lxd/main/waitready: Rework cmdWaitready to use contexts and server-side timeout support
  • lxd/events/connections: use nil payload on websocket.PingMessage
  • shared/ws/upgrader: use nil payload on websocket.PingMessage
  • lxd/events/connections: remove embedded field Conn from selector (staticcheck)
  • doc: Document core.debug_address debugging
  • lxd/events/connections: avoid shadowing builtin function close (revive)
  • lxd/events/connections: add comments to exported funcs
  • doc: update admonitions for microcloud integrated docs
  • lxd/instance_put: Use proper status for error
  • lxd/main/waitready: Use uint64 for flag timeout for consistency with server side
  • Makefile: bump GOMIN to 1.24.2 for OpenFGA update
  • doc/requirements: Go min is now 1.24.2
  • Revert “Makefile: Pin github.com/go-jose/go-jose/v4@v4.0.5
  • gomod: Update dependencies
  • github: bump allowed size for lxd-agent
  • test/godeps: Update client deps
  • test/godeps: Update lxc-config deps
  • test/godeps: Update lxd-agent deps
  • test/godeps: Update shared-api deps
  • lxd/db/query/marshal: unused, drop
  • client/simplestreams_images: avoid deprecated shared.RunCommand()
  • lxd/rsync/rsync: avoid deprecated shared.RunCommand()
  • lxd/storage/block/discard: avoid deprecated shared.RunCommand()
  • lxd/rsync/rsync: avoid shadowing builtin min
  • lxd/db/schema/query: avoid shadowing builtin new
  • fuidshift: unexport some funcs
  • lxc-to-lxd: unexport some funcs
  • client/lxd_oidc: remove embedded field Token from selector (staticcheck)
  • lxd/dnsmasq/dhcpalloc/dhcpalloc: move condition evaluation (staticcheck)
  • lxd/dnsmasq/dnsmasq: use strings.Split() (staticcheck)
  • lxd/ip/link: remove embedded field Link from selector (staticcheck)
  • lxd/network/network_utils: use strings.Split() (staticcheck)
  • shared/api/url: remove embedded field URL from selector (staticcheck)
  • lxd/refcount/refcount_test: remove unneeded type specifier (staticcheck)
  • lxd/migration/migration_volumes: use api.NewStatusError()
  • shared/cmd/ask: avoid shadowing builtin min and max
  • lxd/ip/addr: avoid deprecated shared.RunCommand()
  • lxd/ip/class: avoid deprecated shared.RunCommand()
  • lxd/storage/s3/miniod/admin: avoid deprecated shared.RunCommand()
  • shared/logger/types: use any instead of interface{} (revive)
  • lxd/device/gpu_sriov: preallocate parentPCIAddresses
  • lxd-migrate: unexport some funcs
  • lxd/main: unexport some funcs
  • lxd/main_forklimits: early return on error
  • shared/cmd/ask: ignore suggestion to apply De Morgan’s law
  • lxd/scriptlet/load: ignore starlark.SourceProgram deprecation
  • lxd/db/migration: check type cast results
  • lxd/idmap/idmapset_linux: avoid unnessary string formatting when logging
  • golangci-lint: exclude lxd/idmap/idmapset_linux.go for now
  • shared/json: drop unused GetInt()
  • lxd/warnings: remove tautological check
  • shared/json: use %q for quoted strings
  • shared/json: add comment for exported type and funcs
  • shared/json: rework GetString() for early return (revive)
  • shared/json: rework GetMap() for early return (revive)
  • shared/json: rework GetBool() for early return (revive)
  • lxc-to-lxd/utils: use errors.New() (perfsprint)
  • lxd/main_migratedumpsuccess: use errors.New() (perfsprint)
  • lxd/db/migration: use %q specifier to quote entity
  • golangci-lint: enable testifylint
  • golangci-lint: disable testifylint float-compare and require-error
  • shared/util_test: compare the expected and actual dates
  • shared/util_test: remove useless re-assignment
  • *_test: reverse actual and expected values (testify)
  • *_test: use assert.Empty() (testifylint)
  • *_test: use proper functions for bool comparisons (testifylint)
  • *_test: use NoError for error nil checks (testifylint)
  • *_test: simplify len checks (testifylint)
  • lxc/cluster: Improve error when evacuating offline member
  • lxd/db/cluster/update_test: use require.ErrorAs() (testifylint)
  • lxd/instance_test: don’t use fmt.Errorf() to report about test failures
  • lxd/db/cluster/update_test: drop now unused errors import
  • *_test: use assert.Positive() where applicable (testifylint)
  • lxd/db/cluster/update_test: use assert.Nil() (testifylint)
  • lxd/auth/drivers/tls_test: simplify assertion checks (testifylint)
  • lxd/util/net_test: use assert.NoError() in goroutine
  • lxc/utils_properties_test: replace interface{} by any (revive)
  • lxc/utils_properties_test: ignore type cast checks in tests
  • github: Add KEV matching to security alerts
  • lxc: Add completions for lxc monitor.
  • lxc: Add completions for lxc rebuild.
  • lxc: Completions for init and launch second arguments (instance remotes).
  • test/suites: Add tests for CLI completions.
  • lxd/db/generate: Add errors package import.
  • lxd-generate: Remove fmt.Errorf occurrences without formatting.
  • lxd/db/cluster: Run make update-schema.
  • client/devlxd: use errors.New() (perfsprint)
  • client/devlxd_images: use errors.New() (perfsprint)
  • client/events: use errors.New() (perfsprint)
  • client/lxd: use errors.New() (perfsprint)
  • client/lxd_auth: use errors.New() (perfsprint)
  • client/lxd_certificates: use errors.New() (perfsprint)
  • client/lxd_containers: use errors.New() (perfsprint)
  • client/lxd_events: use errors.New() (perfsprint)
  • client/lxd_images: use errors.New() (perfsprint)
  • client/lxd_instances: use errors.New() (perfsprint)
  • client/lxd_oidc: use errors.New() (perfsprint)
  • client/lxd_storage_volumes: use errors.New() (perfsprint)
  • client/operations: use errors.New() (perfsprint)
  • client/simplestreams: use errors.New() (perfsprint)
  • client/simplestreams_images: use errors.New() (perfsprint)
  • client/util: use errors.New() (perfsprint)
  • fuidshift/main_shift: use errors.New() (perfsprint)
  • lxc-to-lxd/main_migrate: use errors.New() (perfsprint)
  • lxc-to-lxd/main_netcat: use errors.New() (perfsprint)
  • lxc/auth: use errors.New() (perfsprint)
  • lxc/config/errors: use errors.New() (perfsprint)
  • lxc/config/remote: use errors.New() (perfsprint)
  • lxc/file: use errors.New() (perfsprint)
  • lxc/image: use errors.New() (perfsprint)
  • lxc/move: use errors.New() (perfsprint)
  • lxc/network_forward: use errors.New() (perfsprint)
  • lxc/network_load_balancer: use errors.New() (perfsprint)
  • lxc/storage_volume: use errors.New() (perfsprint)
  • lxd-agent/events: use errors.New() (perfsprint)
  • lxd-agent/exec: use errors.New() (perfsprint)
  • lxd-agent/server: use errors.New() (perfsprint)
  • lxd-migrate/main_migrate: use errors.New() (perfsprint)
  • lxd-migrate/main_netcat: use errors.New() (perfsprint)
  • lxd-migrate/utils: use errors.New() (perfsprint)
  • lxd-user/lxd: use errors.New() (perfsprint)
  • lxd-user/main_callhook: use errors.New() (perfsprint)
  • lxd-user/main_daemon: use errors.New() (perfsprint)
  • lxd/api_1.0: use errors.New() (perfsprint)
  • lxd/api_cluster: use errors.New() (perfsprint)
  • lxd/api_devlxd: use errors.New() (perfsprint)
  • lxd/api_internal: use errors.New() (perfsprint)
  • lxd/api_internal_recover: use errors.New() (perfsprint)
  • lxd/api_project: use errors.New() (perfsprint)
  • lxd/apparmor/instance: use errors.New() (perfsprint)
  • lxd/archive/archive: use errors.New() (perfsprint)
  • lxd/auth/drivers/authorization: use errors.New() (perfsprint)
  • lxd/auth/drivers/common: use errors.New() (perfsprint)
  • lxd/auth/drivers/openfga: use errors.New() (perfsprint)
  • lxd/auth/oidc/oidc: use errors.New() (perfsprint)
  • lxd/backup: use errors.New() (perfsprint)
  • lxd/backup/backup_config_utils: use errors.New() (perfsprint)
  • lxd/backup/backup_utils: use errors.New() (perfsprint)
  • lxd/backup/config/backup_config: use errors.New() (perfsprint)
  • lxd/bgp/errors: use errors.New() (perfsprint)
  • lxd/bgp/server: use errors.New() (perfsprint)
  • lxd/certificate/type: use errors.New() (perfsprint)
  • lxd/certificates: use errors.New() (perfsprint)
  • lxd/cgroup/abstraction: use errors.New() (perfsprint)
  • lxd/cgroup/errors: use errors.New() (perfsprint)
  • lxd/cgroup/load: use errors.New() (perfsprint)
  • lxd/cluster/config/config: use errors.New() (perfsprint)
  • lxd/cluster/gateway: use errors.New() (perfsprint)
  • lxd/cluster/heartbeat: use errors.New() (perfsprint)
  • lxd/cluster/membership: use errors.New() (perfsprint)
  • lxd/cluster/notify_test: use errors.New() (perfsprint)
  • lxd/cluster/recover: use errors.New() (perfsprint)
  • lxd/cluster/tls: use errors.New() (perfsprint)
  • lxd/cluster/upgrade: use errors.New() (perfsprint)
  • lxd/config/map: use errors.New() (perfsprint)
  • lxd/config/map_test: use errors.New() (perfsprint)
  • lxd/config/schema: use errors.New() (perfsprint)
  • lxd/config/schema_internal_test: use errors.New() (perfsprint)
  • lxd/convert_instance: use errors.New() (perfsprint)
  • lxd/daemon: use errors.New() (perfsprint)
  • lxd/daemon_images: use errors.New() (perfsprint)
  • lxd/daemon_storage: use errors.New() (perfsprint)
  • lxd/db/cluster: use errors.New() (perfsprint)
  • lxd/db/cluster/certificates: use errors.New() (perfsprint)
  • lxd/db/cluster/entities: use errors.New() (perfsprint)
  • lxd/db/cluster/identities: use errors.New() (perfsprint)
  • lxd/db/cluster/open: use errors.New() (perfsprint)
  • lxd/db/db: use errors.New() (perfsprint)
  • lxd/db/errors: use errors.New() (perfsprint)
  • lxd/db/freshschema/main: use errors.New() (perfsprint)
  • lxd/db/generate/db: use errors.New() (perfsprint)
  • lxd/db/generate/lex/parse: use errors.New() (perfsprint)
  • lxd/db/generate/root: use errors.New() (perfsprint)
  • lxd/db/images: use errors.New() (perfsprint)
  • lxd/db/instances: use errors.New() (perfsprint)
  • lxd/db/migration: use errors.New() (perfsprint)
  • lxd/db/network_forwards: use errors.New() (perfsprint)
  • lxd/db/network_load_balancers: use errors.New() (perfsprint)
  • lxd/db/networks: use errors.New() (perfsprint)
  • lxd/db/node: use errors.New() (perfsprint)
  • lxd/db/openfga/openfga: use errors.New() (perfsprint)
  • lxd/db/query/count: use errors.New() (perfsprint)
  • lxd/db/query/objects: use errors.New() (perfsprint)
  • lxd/db/query/transaction_test: use errors.New() (perfsprint)
  • lxd/db/raft: use errors.New() (perfsprint)
  • lxd/db/schema/query: use errors.New() (perfsprint)
  • lxd/db/schema/schema: use errors.New() (perfsprint)
  • lxd/db/schema/schema_test: use errors.New() (perfsprint)
  • lxd/db/storage_buckets: use errors.New() (perfsprint)
  • lxd/db/storage_pools: use errors.New() (perfsprint)
  • lxd/db/storage_volume_snapshots: use errors.New() (perfsprint)
  • lxd/db/storage_volumes: use errors.New() (perfsprint)
  • lxd/db/warnings: use errors.New() (perfsprint)
  • lxd/device/cdi/configure: use errors.New() (perfsprint)
  • lxd/device/cdi/spec: use errors.New() (perfsprint)
  • lxd/device/device_load: use errors.New() (perfsprint)
  • lxd/device/device_utils_disk: use errors.New() (perfsprint)
  • lxd/device/device_utils_infiniband: use errors.New() (perfsprint)
  • lxd/device/device_utils_network: use errors.New() (perfsprint)
  • lxd/device/device_utils_unix: use errors.New() (perfsprint)
  • lxd/device/device_utils_unix_events: use errors.New() (perfsprint)
  • lxd/device/disk: use errors.New() (perfsprint)
  • lxd/device/errors: use errors.New() (perfsprint)
  • lxd/device/gpu_mdev: use errors.New() (perfsprint)
  • lxd/device/gpu_mig: use errors.New() (perfsprint)
  • lxd/device/gpu_physical: use errors.New() (perfsprint)
  • lxd/device/gpu_sriov: use errors.New() (perfsprint)
  • lxd/device/infiniband_physical: use errors.New() (perfsprint)
  • lxd/device/infiniband_sriov: use errors.New() (perfsprint)
  • lxd/device/nic_bridged: use errors.New() (perfsprint)
  • lxd/device/nic_ipvlan: use errors.New() (perfsprint)
  • lxd/device/nic_macvlan: use errors.New() (perfsprint)
  • lxd/device/nic_ovn: use errors.New() (perfsprint)
  • lxd/device/nic_p2p: use errors.New() (perfsprint)
  • lxd/device/nic_physical: use errors.New() (perfsprint)
  • lxd/device/nic_routed: use errors.New() (perfsprint)
  • lxd/device/nic_sriov: use errors.New() (perfsprint)
  • lxd/device/pci: use errors.New() (perfsprint)
  • lxd/device/pci/pci: use errors.New() (perfsprint)
  • lxd/device/proxy: use errors.New() (perfsprint)
  • lxd/device/tpm: use errors.New() (perfsprint)
  • lxd/device/unix_common: use errors.New() (perfsprint)
  • lxd/device/unix_hotplug: use errors.New() (perfsprint)
  • lxd/device/usb: use errors.New() (perfsprint)
  • lxd/dnsmasq/dhcpalloc/dhcpalloc: use errors.New() (perfsprint)
  • lxd/endpoints/endpoints: use errors.New() (perfsprint)
  • lxd/endpoints/listeners/starttls: use errors.New() (perfsprint)
  • lxd/endpoints/socket: use errors.New() (perfsprint)
  • lxd/endpoints/vsock: use errors.New() (perfsprint)
  • lxd/events/events: use errors.New() (perfsprint)
  • lxd/firewall/drivers/drivers_nftables: use errors.New() (perfsprint)
  • lxd/firewall/drivers/drivers_util: use errors.New() (perfsprint)
  • lxd/firewall/drivers/drivers_xtables: use errors.New() (perfsprint)
  • lxd/fsmonitor/drivers/errors: use errors.New() (perfsprint)
  • lxd/identities: use errors.New() (perfsprint)
  • lxd/idmap/idmapset_linux: use errors.New() (perfsprint)
  • lxd/images: use errors.New() (perfsprint)
  • lxd/instance/drivers/driver_common: use errors.New() (perfsprint)
  • lxd/instance/drivers/driver_lxc: use errors.New() (perfsprint)
  • lxd/instance/drivers/driver_qemu: use errors.New() (perfsprint)
  • lxd/instance/drivers/driver_qemu_cmd: use errors.New() (perfsprint)
  • lxd/instance/drivers/driver_qemu_metrics: use errors.New() (perfsprint)
  • lxd/instance/drivers/load: use errors.New() (perfsprint)
  • lxd/instance/drivers/qmp/commands: use errors.New() (perfsprint)
  • lxd/instance/drivers/qmp/errors: use errors.New() (perfsprint)
  • lxd/instance/drivers/qmp/monitor: use errors.New() (perfsprint)
  • lxd/instance/drivers/uefi/uefi: use errors.New() (perfsprint)
  • lxd/instance/instance_errors: use errors.New() (perfsprint)
  • lxd/instance/instance_utils: use errors.New() (perfsprint)
  • lxd/instance/instancetype/instance: use errors.New() (perfsprint)
  • lxd/instance/instancetype/instance_type: use errors.New() (perfsprint)
  • lxd/instance/operationlock/operationlock: use errors.New() (perfsprint)
  • lxd/instance_backup: use errors.New() (perfsprint)
  • lxd/instance_console: use errors.New() (perfsprint)
  • lxd/instance_delete: use errors.New() (perfsprint)
  • lxd/instance_exec: use errors.New() (perfsprint)
  • lxd/instance_file: use errors.New() (perfsprint)
  • lxd/instance_get: use errors.New() (perfsprint)
  • lxd/instance_logs: use errors.New() (perfsprint)
  • lxd/instance_metadata: use errors.New() (perfsprint)
  • lxd/instance_patch: use errors.New() (perfsprint)
  • lxd/instance_post: use errors.New() (perfsprint)
  • lxd/instance_put: use errors.New() (perfsprint)
  • lxd/instance_rebuild: use errors.New() (perfsprint)
  • lxd/instance_sftp: use errors.New() (perfsprint)
  • lxd/instance_snapshot: use errors.New() (perfsprint)
  • lxd/instance_state: use errors.New() (perfsprint)
  • lxd/instance_uefi_vars: use errors.New() (perfsprint)
  • lxd/instances_get: use errors.New() (perfsprint)
  • lxd/instances_post: use errors.New() (perfsprint)
  • lxd/ip/link: use errors.New() (perfsprint)
  • lxd/loki/loki: use errors.New() (perfsprint)
  • lxd/maas/controller: use errors.New() (perfsprint)
  • lxd/main_activateifneeded: use errors.New() (perfsprint)
  • lxd/main_callhook: use errors.New() (perfsprint)
  • lxd/main_cluster: use errors.New() (perfsprint)
  • lxd/main_daemon: use errors.New() (perfsprint)
  • lxd/main_forkconsole: use errors.New() (perfsprint)
  • lxd/main_forkdns: use errors.New() (perfsprint)
  • lxd/main_forklimits: use errors.New() (perfsprint)
  • lxd/main_forkmigrate: use errors.New() (perfsprint)
  • lxd/main_forkstart: use errors.New() (perfsprint)
  • lxd/main_forksyscallgo: use errors.New() (perfsprint)
  • lxd/main_forkzfs: use errors.New() (perfsprint)
  • lxd/main_import: use errors.New() (perfsprint)
  • lxd/main_init: use errors.New() (perfsprint)
  • lxd/main_init_auto: use errors.New() (perfsprint)
  • lxd/main_init_interactive: use errors.New() (perfsprint)
  • lxd/main_manpage: use errors.New() (perfsprint)
  • lxd/main_netcat: use errors.New() (perfsprint)
  • lxd/main_recover: use errors.New() (perfsprint)
  • lxd/main_shutdown: use errors.New() (perfsprint)
  • lxd/main_sql: use errors.New() (perfsprint)
  • lxd/migrate_instance: use errors.New() (perfsprint)
  • lxd/migrate_storage_volumes: use errors.New() (perfsprint)
  • lxd/migration/wsproto: use errors.New() (perfsprint)
  • lxd/migration_connection: use errors.New() (perfsprint)
  • lxd/network/acl/acl_ovn: use errors.New() (perfsprint)
  • lxd/network/acl/acl_validation: use errors.New() (perfsprint)
  • lxd/network/acl/driver_common: use errors.New() (perfsprint)
  • lxd/network/driver_bridge: use errors.New() (perfsprint)
  • lxd/network/driver_common: use errors.New() (perfsprint)
  • lxd/network/driver_ovn: use errors.New() (perfsprint)
  • lxd/network/driver_physical: use errors.New() (perfsprint)
  • lxd/network/errors: use errors.New() (perfsprint)
  • lxd/network/network_utils: use errors.New() (perfsprint)
  • lxd/network/network_utils_sriov: use errors.New() (perfsprint)
  • lxd/network/openvswitch/ovn: use errors.New() (perfsprint)
  • lxd/network/openvswitch/ovs: use errors.New() (perfsprint)
  • lxd/network/zone/zone: use errors.New() (perfsprint)
  • lxd/network_acls: use errors.New() (perfsprint)
  • lxd/network_zones: use errors.New() (perfsprint)
  • lxd/networks: use errors.New() (perfsprint)
  • lxd/operations: use errors.New() (perfsprint)
  • lxd/operations/operations: use errors.New() (perfsprint)
  • lxd/patches: use errors.New() (perfsprint)
  • lxd/profiles: use errors.New() (perfsprint)
  • lxd/profiles_utils: use errors.New() (perfsprint)
  • lxd/project/limits/permissions: use errors.New() (perfsprint)
  • lxd/project/project: use errors.New() (perfsprint)
  • lxd/resources/cpu: use errors.New() (perfsprint)
  • lxd/resources/gpu: use errors.New() (perfsprint)
  • lxd/response/upgrade: use errors.New() (perfsprint)
  • lxd/rsync/rsync: use errors.New() (perfsprint)
  • lxd/scriptlet/instance_placement: use errors.New() (perfsprint)
  • lxd/scriptlet/load/load: use errors.New() (perfsprint)
  • lxd/storage/backend_lxd: use errors.New() (perfsprint)
  • lxd/storage/block/discard: use errors.New() (perfsprint)
  • lxd/storage/block/utils: use errors.New() (perfsprint)
  • lxd/storage/connectors/connector_sdc: use errors.New() (perfsprint)
  • lxd/storage/connectors/utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_btrfs: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_btrfs_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_btrfs_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_ceph: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_ceph_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_ceph_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_cephfs: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_cephfs_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_cephobject: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_cephobject_buckets: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_common: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_dir_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_dir_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_lvm: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_lvm_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_lvm_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_powerflex_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_pure: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_pure_util: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_zfs: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_zfs_utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/driver_zfs_volumes: use errors.New() (perfsprint)
  • lxd/storage/drivers/errors: use errors.New() (perfsprint)
  • lxd/storage/drivers/generic_vfs: use errors.New() (perfsprint)
  • lxd/storage/drivers/utils: use errors.New() (perfsprint)
  • lxd/storage/drivers/utils_ceph: use errors.New() (perfsprint)
  • lxd/storage/drivers/volume: use errors.New() (perfsprint)
  • lxd/storage/drivers/volume_test: use errors.New() (perfsprint)
  • lxd/storage/errors: use errors.New() (perfsprint)
  • lxd/storage/filesystem/fs: use errors.New() (perfsprint)
  • lxd/storage/s3/policy: use errors.New() (perfsprint)
  • lxd/storage/utils: use errors.New() (perfsprint)
  • lxd/storage_buckets: use errors.New() (perfsprint)
  • lxd/storage_pools: use errors.New() (perfsprint)
  • lxd/storage_volumes: use errors.New() (perfsprint)
  • lxd/storage_volumes_backup: use errors.New() (perfsprint)
  • lxd/storage_volumes_snapshot: use errors.New() (perfsprint)
  • lxd/subprocess/errors: use errors.New() (perfsprint)
  • lxd/subprocess/proc: use errors.New() (perfsprint)
  • lxd/task/schedule: use errors.New() (perfsprint)
  • lxd/task/task_test: use errors.New() (perfsprint)
  • lxd/template/chroot: use errors.New() (perfsprint)
  • lxd/ucred/ucred: use errors.New() (perfsprint)
  • lxd/util/http: use errors.New() (perfsprint)
  • lxd/util/kernel: use errors.New() (perfsprint)
  • lxd/util/net: use errors.New() (perfsprint)
  • lxd/util/random: use errors.New() (perfsprint)
  • lxd/util/version: use errors.New() (perfsprint)
  • lxd/warnings: use errors.New() (perfsprint)
  • lxd/warnings/warnings: use errors.New() (perfsprint)
  • shared/api/operation: use errors.New() (perfsprint)
  • shared/archive: use errors.New() (perfsprint)
  • shared/cancel/http: use errors.New() (perfsprint)
  • shared/cert: use errors.New() (perfsprint)
  • shared/cmd/cancel: use errors.New() (perfsprint)
  • shared/cmd/sort_test: use errors.New() (perfsprint)
  • shared/cmd/table: use errors.New() (perfsprint)
  • shared/cmd/table_test: use errors.New() (perfsprint)
  • shared/filter/clause: use errors.New() (perfsprint)
  • shared/filter/match: use errors.New() (perfsprint)
  • shared/ioprogress/reader: use errors.New() (perfsprint)
  • shared/network: use errors.New() (perfsprint)
  • shared/network_ip: use errors.New() (perfsprint)
  • shared/simplestreams/products: use errors.New() (perfsprint)
  • shared/tcp/tcp_timeouts: use errors.New() (perfsprint)
  • shared/trust/hmac_argon2: use errors.New() (perfsprint)
  • shared/usbid/parse: use errors.New() (perfsprint)
  • shared/util: use errors.New() (perfsprint)
  • shared/util_linux: use errors.New() (perfsprint)
  • shared/validate/validate: use errors.New() (perfsprint)
  • test/mini-oidc/storage/storage: use errors.New() (perfsprint)
  • lxd/response/swagger: annotate individual strucs for nolint:unused
  • lxd/auth/oidc: Use hkdf from stdlib.
  • lxd/network/driver_bridge: use strings.Cut() instead of strings.Split()
  • lxd/network/driver_bridge: replace fmt.Sprintf() by string concatenations (perfsprint)
  • lxd/network/driver_bridge: replace fmt.Sprintf() with strconv.FormatUint()
  • lxd/network/driver_bridge: replace fmt.Sprint() with strconv.Itoa()
  • test/main: add iptables to required commands
  • test/main: add /bin/busybox to required commands
  • test/main: only umount dev if needed
  • test/main: remove TEST_DIR
  • test/includes/lxd: ignore empty/missing daemons file
  • test/suites/clustering: use smaller containers in clustering_metrics()
  • test/suites/clustering: add clustering_fan()
  • test/main: run clustering_fan test
  • Revert “lxd/response/swagger: annotate individual strucs for nolint:unused”
  • lxd/response/swagger: silence noise from unused linter
  • build(deps): bump github/codeql-action from 3.28.16 to 3.28.17
  • lxc/network_allocations: use strconv.FormatBool() (perfsprint)
  • lxd/api_1.0: use strconv.FormatBool() (perfsprint)
  • lxd/device/device_utils_network: use strconv.FormatBool() (perfsprint)
  • lxd/device/nic_ipvlan: use strconv.FormatBool() (perfsprint)
  • lxd/device/nic_macvlan: use strconv.FormatBool() (perfsprint)
  • lxd/device/nic_physical: use strconv.FormatBool() (perfsprint)
  • lxd/device/nic_routed: use strconv.FormatBool() (perfsprint)
  • lxd/instance/drivers/driver_lxc: use strconv.FormatBool() (perfsprint)
  • lxd/main_init_interactive: use strconv.FormatBool() (perfsprint)
  • lxd/storage/drivers/driver_btrfs_utils: use strconv.FormatBool() (perfsprint)
  • lxd/storage/drivers/driver_pure_util: use strconv.FormatBool() (perfsprint)
  • client/lxd_images: use hex.EncodeToString() (perfsprint)
  • lxd/apparmor/apparmor: use hex.EncodeToString() (perfsprint)
  • lxd/daemon_images: use hex.EncodeToString() (perfsprint)
  • lxd/images: use hex.EncodeToString() (perfsprint)
  • lxd/util/http: use hex.EncodeToString() (perfsprint)
  • shared/util: use hex.EncodeToString() (perfsprint)
  • lxc/cluster_group: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/console: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/list: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/network: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/network_acl: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/network_forward: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/network_load_balancer: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/network_zone: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/profile: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/project: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/remote: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxc/warning: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd-benchmark/benchmark/report: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd-benchmark/benchmark/util: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd-user/lxd: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd-user/proxy: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/api_devlxd: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/archive/archive: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/daemon: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/db/cluster/open_test: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/cdi/configure: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/device_utils_network: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/device_utils_unix: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/gpu: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/gpu_sriov: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/infiniband_physical: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/infiniband_sriov: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_bridged: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_ovn: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_p2p: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_physical: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_routed: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/nic_sriov: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/proxy: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/device/usb: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/devices: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/firewall/drivers/drivers_util: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/firewall/drivers/drivers_xtables: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/instance/drivers/driver_lxc: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/instance/drivers/driver_qemu_templates: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/instance_file: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/instance_instance_types: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/ip/link: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/main_init_interactive: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/network/driver_ovn: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/network/network_utils: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/network/network_utils_sriov: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/network/openvswitch/ovn: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/network/zone/zone: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/project/limits/permissions: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/scriptlet/starlark_test: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_btrfs_volumes: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_cephfs_volumes: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_lvm: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_powerflex_volumes: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_pure_volumes: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_zfs: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_zfs_utils: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/driver_zfs_volumes: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/drivers/generic_vfs: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/filesystem/fs: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/storage/utils: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/util/net: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/util/random: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • shared/simplestreams/products: use strconv funcs to replace fmt.Sprint{,f}() (perfsprint)
  • lxd/init: do not use fmt.Sprint() on strings (perfsprint)
  • lxd/lxd-metadata/lxd_metadata: do not use fmt.Sprint() on strings (perfsprint)
  • client/lxd_network_zones: use string concatenation where possible (perfsprint)
  • client/lxd_networks: use string concatenation where possible (perfsprint)
  • client/lxd_storage_pools: use string concatenation where possible (perfsprint)
  • client/lxd_warnings: use string concatenation where possible (perfsprint)
  • client/simplestreams_images: use string concatenation where possible (perfsprint)
  • lxc-to-lxd/main_migrate: use string concatenation where possible (perfsprint)
  • lxc-to-lxd/transfer: use string concatenation where possible (perfsprint)
  • lxd-migrate/main_migrate: use string concatenation where possible (perfsprint)
  • lxd-migrate/transfer: use string concatenation where possible (perfsprint)
  • lxd-migrate/utils: use string concatenation where possible (perfsprint)
  • lxd/auth/generate/main: use string concatenation where possible (perfsprint)
  • lxd/config/errors: use string concatenation where possible (perfsprint)
  • lxd/daemon_images: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_certificate: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_cluster_group: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_cluster_member: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_container: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_identity: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_identity_provider_group: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_image: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_image_alias: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_instance: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_instance_backup: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_instance_snapshot: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_network: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_network_acl: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_network_zone: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_operation: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_profile: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_project: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_storage_bucket: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_storage_pool: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_storage_volume: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_storage_volume_backup: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/entity_type_storage_volume_snapshot: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/identity_provider_groups: use string concatenation where possible (perfsprint)
  • lxd/db/cluster/update_test: use string concatenation where possible (perfsprint)
  • lxd/db/generate/db/method: use string concatenation where possible (perfsprint)
  • lxd/db/generate/db/stmt: use string concatenation where possible (perfsprint)
  • lxd/db/generate/file/write: use string concatenation where possible (perfsprint)
  • lxd/db/generate/lex/lang: use string concatenation where possible (perfsprint)
  • lxd/db/migration: use string concatenation where possible (perfsprint)
  • lxd/db/storage_pools: use string concatenation where possible (perfsprint)
  • lxd/device/device_utils_usb_events: use string concatenation where possible (perfsprint)
  • lxd/device/gpu_mdev: use string concatenation where possible (perfsprint)
  • lxd/device/gpu_mig: use string concatenation where possible (perfsprint)
  • lxd/device/infiniband_physical: use string concatenation where possible (perfsprint)
  • lxd/device/infiniband_sriov: use string concatenation where possible (perfsprint)
  • lxd/device/nic_bridged: use string concatenation where possible (perfsprint)
  • lxd/device/nic_ipvlan: use string concatenation where possible (perfsprint)
  • lxd/device/nic_macvlan: use string concatenation where possible (perfsprint)
  • lxd/device/nic_ovn: use string concatenation where possible (perfsprint)
  • lxd/device/nic_physical: use string concatenation where possible (perfsprint)
  • lxd/device/nic_routed: use string concatenation where possible (perfsprint)
  • lxd/device/pci/pci: use string concatenation where possible (perfsprint)
  • lxd/device/proxy: use string concatenation where possible (perfsprint)
  • lxd/device/tpm: use string concatenation where possible (perfsprint)
  • lxd/devlxd_test: use string concatenation where possible (perfsprint)
  • lxd/endpoints/network_test: use string concatenation where possible (perfsprint)
  • lxd/instance: use string concatenation where possible (perfsprint)
  • lxd/instance/drivers/driver_common: use string concatenation where possible (perfsprint)
  • lxd/instance/drivers/driver_qemu_bus: use string concatenation where possible (perfsprint)
  • lxd/instance/instance_utils: use string concatenation where possible (perfsprint)
  • lxd/instance_instance_types: use string concatenation where possible (perfsprint)
  • lxd/maas/controller: use string concatenation where possible (perfsprint)
  • lxd/main_forkdns: use string concatenation where possible (perfsprint)
  • lxd/main_migratedumpsuccess: use string concatenation where possible (perfsprint)
  • lxd/main_shutdown: use string concatenation where possible (perfsprint)
  • lxd/main_test: use string concatenation where possible (perfsprint)
  • lxd/network/acl/acl_firewall: use string concatenation where possible (perfsprint)
  • lxd/network/acl/acl_ovn: use string concatenation where possible (perfsprint)
  • lxd/network/acl/driver_common: use string concatenation where possible (perfsprint)
  • lxd/network/driver_ovn: use string concatenation where possible (perfsprint)
  • lxd/network/network_utils: use string concatenation where possible (perfsprint)
  • lxd/network/network_utils_sriov: use string concatenation where possible (perfsprint)
  • lxd/network/openvswitch/ovn: use string concatenation where possible (perfsprint)
  • lxd/network_allocations: use string concatenation where possible (perfsprint)
  • lxd/operations: use string concatenation where possible (perfsprint)
  • lxd/patches: use string concatenation where possible (perfsprint)
  • lxd/resources/gpu: use string concatenation where possible (perfsprint)
  • lxd/resources/storage: use string concatenation where possible (perfsprint)
  • lxd/rsync/rsync: use string concatenation where possible (perfsprint)
  • lxd/scriptlet/instance_placement: use string concatenation where possible (perfsprint)
  • lxd/storage/connectors/connector_nvme: use string concatenation where possible (perfsprint)
  • lxd/storage/drivers/driver_ceph_utils: use string concatenation where possible (perfsprint)
  • lxd/storage/drivers/driver_ceph_volumes: use string concatenation where possible (perfsprint)
  • lxd/storage/drivers/driver_cephfs: use string concatenation where possible (perfsprint)
  • lxd/storage/drivers/driver_common: use string concatenation where possible (perfsprint)
  • lxd/storage/s3/miniod/admin: use string concatenation where possible (perfsprint)
  • shared/osarch/release_test: use string concatenation where possible (perfsprint)
  • lxc/cluster: use errors.New() (perfsprint)
  • lxd/instance/drivers/load: use error.Error() (perfsprint)
  • lxd/instances: use error.Error() (perfsprint)
  • lxd/main_forkcoresched: use errors.New()
  • lxd/main_forkexec: use errors.New()
  • lxd/storage/quota/projectquota: use errors.New()
  • lxd/main_forkmount: use errors.New()
  • lxd/main_forknet: use errors.New()
  • lxd/linux/socket_linux_cgo: use strconv.FormatInt()
  • lxd/idmap/shift_linux: use errors.New()
  • lxd/main_forksyscall: use errors.New()
  • lxd/main_forkuevent: use errors.New()
  • lxd/main_forkproxy: use errors.New()
  • lxd/main_forkproxy: use strconv.FormatUint()
  • shared/netutils/network_linux_cgo: use strconv.FormatUint()
  • shared/netutils/network_linux_cgo: use errors.New()
  • lxd/seccomp/seccomp: use errors.New()
  • lxd/seccomp/seccomp: use string concatenation
  • lxd/seccomp/seccomp: avoid unneeded fmt.Sprintf()
  • lxd/seccomp/seccomp: use strconvFormatUint() to convert from _Ctype___u32 to string
  • lxd/seccomp/seccomp: fix format
  • lxd/seccomp/seccomp: use strconv.Itoa() for int->string
  • lxd/seccomp/seccomp: use strconv.FormatInt() for int64->string
  • golangci-lint: enable perfsprint linter
  • lxd/devlxd_test: gci
  • lxd/util/net: gci
  • shared/simplestreams/products: gci
  • lxd/db/cluster/open_test: gci
  • lxd/instances: gci
  • lxd/main_test: gci
  • lxd/linux/socket_linux_cgo: drop = nil from declaration of var
  • lxd: unexport command and run funcs
  • lxd/main_fork*: add trailing dot to comment
  • lxd/idmap/shift_linux: add trailing dot to comments
  • lxd/device/gpu: ignore suggestion to apply De Morgan’s law
  • lxd/linux/socket_linux_cgo: don’t comment constants from C
  • lxd/linux/socket_linux_cgo: add comments to exported funcs
  • lxd/idmap/shift_linux: stop godot from wanting a trailing dot
  • lxd: Don’t persist vol users inside DB transaction in storagePoolVolumeUpdateUsers
  • lxd/storage: Add PoolUsedByInstanceDevices
  • lxd/storage: Update instance config file when pool gets updated
  • test/suites/backup: Test the on disk backup file in backup_metadata
  • lxd/instance: Pass pointer time snapshot expiry
  • lxd/instance/drivers: Pass pointer time to internal snapshot funcs
  • lxd/instance: Retrieve default expiry closer to snapshot creation
  • lxd: Pass nil time in autoCreateInstanceSnapshots
  • lxd/storage: Pass pointer time snapshot expiry
  • lxd/storage: Retrieve default expiry closer to snapshot creation
  • lxd: Pass nil time in autoCreateCustomVolumeSnapshots
  • test/suites: Revert comparing creation/expiry dates without microseconds
  • lxd/device: Skip address conflict validation for instance NIC rename
  • tests: Add tests for bridged NIC device renaming
  • tests: Initialize instances with SMALL_ROOT_DISK in bridged NIC container device tests
  • tests: Launch instance with SMALL_ROOT_DISK in bridged NIC container device tests
  • github: Update repo of lp-snap-build
  • shared/entity: Add a requiresLocation method to typeInfo.
  • shared/entity: Only set the target parameter if location is required.
  • shared/entity: Test target parameter is removed from normalised instance URLs.
  • doc: Update storage volumes > Create an instance [WD-21423]
  • lxd: Add response forwarding for remote targets to storagePoolVolumeSnapshotsTypeGet
  • tests: Add test to clustering_storage for creating and viewing storage volume snapshots
  • lxd/storage: Check instance size during migration
  • lxd/storage: Fix migration error due to rounding
  • lxd/storage: Reword error message in CreateInstanceFromMigration for consistency with conversion API
  • doc: update absolute URL link to MicroCloud docs
  • update absolute URL links to LXD docs
  • doc: use double instead of single quotes around relatedlinks
  • doc/howto/snap: update snap store proxy to enterprise store
  • shared/cancel: Reworks Canceller to be an interface and avoid using internal context.WithCancel
  • lxd/daemon: Update cancel.Canceller usage
  • lxd/daemon: Change shutdownCtx to a cancel.Canceller
  • lxd/events: Update cancel.Canceller usage
  • lxd/instance/exec: Update cancel.Canceller usage
  • lxd/instance/exec: Use sync.OnceFunc for conciseness
  • lxd/operations: Update cancel.Canceller usage
  • lxd/storage/s3/miniod: Update cancel.Canceller usage
  • lxd/loki: Switch to cancel.Canceller
  • lxd/patches/test: Update cancel.Canceller usage
  • lxd/auth/drivers: Log access denials where OpenFGA couldn’t find the requested tuple.
  • lxd: Update instance permissions on move.
  • test/suites: Update clustering move tests to use fine-grained auth.
  • doc/migration: remove reference to howto/migrate_from_lxc
  • doc/instances: remove reference to howto/migrate_from_lxc
  • doc/howto/migrate_from_lxc: delete doc about lxc-to-lxd tool
  • test/main: stop calling lxc_to_lxd test
  • test/suites/lxc-to-lxd: stop testing lxc-to-lxd
  • Makefile: stop building lxc-to-lxd
  • gitignore: remove lxc-to-lxd
  • github: stop pulling lxc-utils in actions/install-lxd-builddeps
  • github: replace lxc-utils by liblxc-common in actions/install-lxd-runtimedeps
  • lxc-to-lxd: remove code
  • lxc/storage_volume: Improve error messages for lxc storage volume export
  • lxc/config_device: Improve error message when attempting to set instance device from profile
  • i18n: Update translation templates.
  • i18n: Update translations.
  • doc/ref/userns-idmap: add info about lxd snap
  • lxd/db: Move GetImageSource and ImageSourceProtocol to db/cluster
  • lxd/db/cluster/images: Adds ToAPI()
  • lxd/db/images: Updates GetImageByFingerprintPrefix to use ToAPI
  • lxd/db/images: Updates GetImageFromAnyProject to use ToAPI
  • lxd/db/images: Removes unused imageFillProfiles and imageFill functions
  • doc: remove unused topical migration landing page
  • doc: rename move_instances to instances_migrate, update links/redirect
  • doc: use migrate wording to describe moving instances between servers
  • doc: Update Storage docs - Move or Copy a Volume
  • doc: Updates outdated UI image screenshots + optimises [WD-21424]
  • lxd/device/nic/bridged: Handle invalid configuration
  • lxd/db/cluster/images: Only populate UpdateImageSource if source is found in ToAPI()
  • lxd/db/cluster/images: Update GetImageSource to return pointer to image
  • lxd/images: Updated GetImageSource usage
  • build(deps): bump actions/setup-go from 5.4.0 to 5.5.0
  • build(deps): bump actions/dependency-review-action from 4.6.0 to 4.7.0
  • build(deps): bump golang.org/x/tools from 0.32.0 to 0.33.0
  • build(deps): bump github.com/miekg/dns from 1.1.65 to 1.1.66
  • build(deps): bump github.com/vishvananda/netlink from 1.3.0 to 1.3.1
  • build(deps): bump github.com/osrg/gobgp/v3 from 3.36.0 to 3.37.0
  • doc/howto/instances_migrate: add related topics list
  • github: improve efficiency of lxc/lxd-agent bin size checks
  • test/main: rsync is a required dependency
  • test/main: try to set GOPATH if not done already
  • test/main: verify that other users can access all parent dirs of the test dir
  • test/includes/lxd: bail early in panic_checker if no daemons file exist
  • test/suites/exec: use smaller sleep when checking back on ops
  • lxd: Add target request forwarding to storagePoolVolumeTypeCustomBackupsGet
  • lxd: Consolidate function calls into one database transaction in storagePoolVolumeTypeCustomBackupsPost
  • github: only check lxc/lxd-agent bin sizes of not built for coverage
  • staticcheck.conf: add dedicated config to ignore ST1005
  • lxd/seccomp: avoid int overflow in process count
  • shared/util_linux: avoid int overflow in terminal SetSize()
  • lxd: Disallow deletion of server certificates.
  • test/suites: Test that server certificates can’t be deleted.
  • tests: Switch clustering test subnet
  • Makefile: add dqlite target (deps calls it)
  • Makefile: prepare for more deps
  • Makefile: simplify how dqlite is updated
  • Makefile: add liblxc target
  • Makefile: check that liblxc.so is linked against some critically important libs
  • Makefile: call liblxc target as part of make deps
  • doc/installing: replace liblxc1 & liblxc-dev packages by tools to build their equivalent
  • github: update actions/install-lxd-builddeps to not use lxc daily PPA
  • github: update actions/install-lxd-builddeps to explicitly depend on python3-venv
  • doc/installing: python3-venv is a build requirement (for the docs)
  • github: add libapparmor-dev to actions/install-lxd-builddeps
  • doc/installing: libapparmor-dev is needed to build liblxc
  • github: update actions/install-lxd-runtimedeps to not use lxc daily PPA
  • github: include liblxc dependencies for system tests
  • github: add PKG_CONFIG_PATH to list of env vars preserved for unit tests
  • github: make runner’s home executable and set sub{uid,gid}
  • github: remove unneeded liblxc build deps from actions/install-lxd-builddeps
  • tests: Fix command not found error
  • lxd: Replace use of shared.ValueInSlice with slices.Contains
  • shared: Replace use of ValueInSlice with slices.Contains
  • shared: Delete ValueInSlice (unused)
  • Makefile: Pin github.com/olekukonko/tablewriter@v0.0.5 due to breaking API in later versions
  • gomod: Update dependencies
  • build(deps): bump github.com/minio/minio-go/v7 from 7.0.91 to 7.0.92
  • build(deps): bump github/codeql-action from 3.28.17 to 3.28.18
  • build(deps): bump actions/dependency-review-action from 4.7.0 to 4.7.1
  • doc: add info about Ubuntu Pro for instances
  • lxd/storage/drivers/driver_cephobject: Fix typo in error
  • test: Use jq raw output
  • test: Check for min and max metadata versions
  • lxd/daemon: Add network and storage pool cancellers
  • lxd/state: Add Update(Network|Storage)Ready funcs
  • lxd: Notify the daemon if all networks and storage pools are ready
  • lxd/api_internal: Extend the ready endpoint to allow waiting for networks and storage pool
  • lxd/main_waitready: Allow waiting for networks and storage pools to be ready
  • util/http: Improve etag error message to guide towards a solution
  • github: ask codeql to check actions themselves
  • github: stop ignoring .github/ dir for CodeQL scans
  • Revert “lxd/storage: Add PoolUsedByInstanceDevices”
  • Revert “lxd/storage: Update instance config file when pool gets updated”
  • Revert “test/suites/backup: Test the on disk backup file in backup_metadata”
  • test/includes/setup: don’t abort pipelines early with grep -q
  • test/suites/backup: don’t abort pipelines early with grep -q
  • test/suites/basic: don’t abort pipelines early with grep -q
  • test/suites/clustering: don’t abort pipelines early with grep -q
  • test/suites/clustering_instance_placement_scriptlet: don’t abort pipelines early with grep -q
  • test/suites/clustering_move: don’t abort pipelines early with grep -q
  • test/suites/concurrent: use safer grep patterns
  • test/suites/concurrent: don’t abort pipelines early with grep -q
  • test/suites/config: don’t abort pipelines early with grep -q
  • test/suites/config: avoid antipattern grep -v
  • test/suites/container_devices_nic_bridged_filtering: don’t abort pipelines early with grep -q
  • test/suites/database: don’t abort pipeline early with grep -q
  • test/suites/deps: don’t abort pipeline early with grep -q
  • test/suites/devlxd: don’t abort pipelines early with grep -q
  • test/suites/filemanip: don’t abort pipeline early with grep -q
  • test/suites/image: don’t abort pipelines early with grep -q
  • test/suites/image_acl: don’t abort pipelines early with grep -q
  • test/suites/image_auto_update: don’t abort pipelines early with grep -q
  • test/suites/image_prefer_cached: don’t abort pipelines early with grep -q
  • test/suites/image_profiles: don’t abort pipelines early with grep -q
  • test/suites/init_auto: don’t abort pipelines early with grep -q
  • test/suites/init_interactive: don’t abort pipelines early with grep -q
  • test/suites/init_preseed: don’t abort pipelines early with grep -q
  • test/suites/migration: don’t abort pipelines early with grep -q
  • test/suites/network: don’t abort pipelines early with grep -q
  • test/suites/projects: don’t abort pipelines early with grep -q
  • test/suites/remote: don’t abort pipelines early with grep -q
  • test/suites/serverconfig: don’t abort pipelines early with grep -q
  • test/suites/snapshots: don’t abort pipelines early with grep -q
  • test/suites/sql: don’t abort pipeline early with grep -q
  • test/suites/storage_driver_ceph: don’t abort pipelines early with grep -q
  • test/suites/storage_driver_zfs: don’t abort pipelines early with grep -q
  • test/suites/storage_local_volume_handling: don’t abort pipelines early with grep -q
  • test/suites/storage_snapshots: don’t abort pipelines early with grep -q
  • test/suites/storage_volume_import: don’t abort pipelines early with grep -q
  • test/suites/tls_restrictions: don’t abort pipelines early with grep -q
  • test/suites/warnings: don’t abort pipelines early with grep -q
  • test/includes/lxd: remove dead code to kill lxc-monitord
  • test/suites: Add waitready
  • test/suites/backup: ignore failures when inspecting expected error messages
  • test/suites/basic: avoid antipattern grep -v
  • test/suites/basic: fix activateifneeded test after unsetting boot.autostart
  • test/suites/basic: avoid lxd activateifneeded failures due to LXD being shutdown
  • test/suites/clustering: simplify config check
  • test/suites/clustering: use shell comparison for member listing
  • test/suites/init_interactive: avoid printf
  • test/suites/init_preseed: avoid printf
  • test/suites/network: use safer grep patterns
  • test/suites/network: simplify busybox’s udhcpc6 test
  • test/suites/network: avoid antipattern grep -v
  • test/suites/remote: improve awk patterns
  • test/suites/remote: use safer grep patterns
  • test/suites/remote: ignore failure due to bad token when inspecting expected error message
  • test/suites/remote: echo what’s going on in remote_admin
  • test/suites/remote: avoid grep -v antipattern
  • test/suites/tls_restrictions: don’t abort on expected failure from curl
  • test/suites/metrics: remove unneeded sudo call
  • test/suites/network: remove unneeded sudo call
  • test/suites/storage_driver_dir: remove unneeded sudo calls
  • test/suites/storage_buckets: roAccessKey cannot get the info
  • test/main: catch errors in pipelines
  • lxd/storage/s3/miniod: use net.JoinHostPort()
  • lxd-migrate/utils: use net.JoinHostPort()
  • test/main: improve LXD_INSPECT=1 by spawning an interactive shell
  • test/main: highlight the failed test function
  • test/main: drop test_ from from fallback description
  • test/includes/lxd: if DEBUG is not set, return 0 in panic_checker()
  • doc/faq: add troubleshooting tips for GPU pass-through
  • doc: add related topics for gpu devices
  • github: update TICS’ CGO_CFLAGS for liblxc dep
  • github: add LD_RUN_PATH env var to TICS
  • github: update TICS env to run LXD daemon
  • github: update LXD UI e2e env to run LXD daemon
  • github: make runner home listable by others in LXD UI e2d
  • github: remove unneeded vars setting in LXD UI e2e tests
  • github: simplify env var settup and invocation of npx
  • Makefile: add env target to export useful vars
  • Makefile: remove broken lookup for system PKG_CONFIG_PATH
  • github: limit PKG_CONFIG_PATH to just what’s needed
  • lxd/seccomp: allow unprivileged whiteout creation
  • lxd/storage/backend: Ensure storage bucket config is applied during bucket activation
  • lxd/db/networks: Add GetNetworksNodeParent function
  • lxd/network/driver/physical: Improve checkParentUse function for clustered mode
  • Apply suggestions from code review
  • test/main: avoid accidental re-execution from inside LXD_INSPECT session
  • test/main: tweak LXD_INSPECT=1 welcome text and prompt
  • test/suites/network_forward: improve grep patterns
  • test/suites/network_acl: fix indentation
  • test/suites/network_acl: improve grep patterns
  • test/suites/network_acl: use variable destination address
  • test/suites/network_acl: verify firewall rules
  • lxd/network/driver/physical: Change signature of checkParentUse function
  • test: Expand clustering network test
  • lxd/db/cluster: Switch order of entity type check in GetEntityURLs
  • lxd/device: Switch order of nesting check in UnixDeviceCreate
  • lxd/device: Move slice creation out of loop in UnixDeviceCreate
  • lxd: Simplify check in promptConfirmation
  • lxd/migration: Move slice creation out of loop in TypesToHeader
  • lxd/network: Move slice creation out of loop in NIC bridge Validate
  • lxd: Move slice creation out of loop in networkAllocationsGet
  • lxd/project: Switch order of checks in NetworkAllowed
  • shared: Move slice creation out of loop in ParseLXDFileHeaders
  • lxd/storage/drivers/zfs: Fix block-backed storage bucket validation
  • test: Add storage bucket tests
  • test/suites/clustering: check network statuses with full line patterns
  • Makefile: use consistent syntax to reference variables
  • Makefile: don’t use recursion when deleting old archive file in make dist
  • Makefile: simplify how HEAD hash is extracted
  • Makefile: include liblxc in tarball produced by make dist
  • Makefile: have make dist produce reproducible archives
  • test/deps/import-busybox: try to use LXD snap unix socket if available
  • github: remove unused tests-snap workflow
  • github: create test instance before LXD UI e2e tests
  • github: tune disk perf early on in LXD UI e2e tests
  • github: provide a default TARGET profile for playwright
  • github: allow skipping static-analysis and unit-tests on manually triggered test runs
  • test/main: Add timeout to ceph status command
  • lxd: Update the users in storagePoolVolumeTypePostRename after the actual volume rename
  • test/suites/clustering: Remove testing for false positives due to bug in LXD
  • shared/api: Add missing ‘version’ struct tag
  • doc/rest-api: Refresh swagger YAML
  • Makefile: bump golangci-lint to v2.1.6
  • golangci: enable musttag linter from now on
  • Makefile: use git rev-parse HEAD to get current commit hash
  • Makefile: use git rev-parse HEAD for dqlite and liblxc
  • gomod: Update dependencies
  • test/godeps: Update client deps
  • test/godeps: Update lxc-config deps
  • test/godeps: Update lxd-agent deps
  • github: do not reclaim disk space during cluster tests
  • github: make sure the LXD snap is purged before installing microceph
  • github: use caching in actions/download-minio
  • github: split env vars update from building LXD deps
  • github: cache dqlite/liblxc deps
  • lxd/backup/config: Add missing struct tags (musttag)
  • lxd/migration: Add missing struct tags (musttag)
  • shared/api: Add missing struct tags (musttag)
  • test/backends: cosmetic changes
  • test/backends: use a variable for the pool name
  • test/includes/check: test explicitly for non-emptiness
  • test/includes/lxd: remove unneeded shellcheck ignores
  • test/includes/storage: test explicitly for non-emptiness
  • test/lint/godeps: double quote variable
  • test/lint/newline-after-block: double quote variable
  • test/suites/backup: add default case
  • test/suites/exec: replace inconsistent variable use by x1
  • test/suites/clustering: double quote variables
  • test/suites/clustering_move: double quote variable
  • test/suites/container_devices_nic_bridged_filtering: double quote variable
  • test/suites/container_devices_nic_bridged: improve grep patterns
  • test/suites/container_devices_nic_bridged: double quote variables
  • test/suites/container_devices_nic_ipvlan: avoid grep -v verdict when checking for volatile NIC cleanup
  • test/suites/container_devices_nic_ipvlan: improve grep patterns
  • test/suites/container_devices_nic_ipvlan: double quote variables
  • test/suites/container_devices_nic_p2p: double quote variables
  • test/suites/container_devices_nic_p2p: avoid grep -v verdict when checking for volatile NIC cleanup
  • test/suites/container_devices_nic_p2p: improve grep patterns
  • test/suites/container_devices_proxy: double quote variables
  • test/suites/container_devices_proxy: improve grep patterns
  • test/suites/container_local_cross_pool_handling: use shell comparisons
  • test/suites/container_local_cross_pool_handling: silence shellcheck SC2248
  • test/suites/container_move: double quote variables
  • test/suites/devlxd: double quote variables
  • test/suites/fdleak: double quote variable
  • test/suites/filemanip: double quote variable
  • test/suites/syslog: double quote variable
  • test/suites/tls_restrictions: double quote variables
  • test/suites/storage_local_volume_handling: silence shellcheck SC2248
  • shellcheck: enable some optional checks
  • doc/installing: split long apt install lines
  • doc/installing: split build, run and test deps properly
  • doc/installing: mention that make deps pulls dqlite and liblxc
  • test/main: msgmerge and msgfmt (gettext) are build-deps, not used in tests
  • test/main: xz is required by test/deps/import-busybox
  • github: gettext is not needed for running LXD
  • github: curl is not needed for building LXD
  • github: add libs needed to build dqlite
  • github: sort build-deps
  • github: sort runtime-deps
  • lxd/idmap: Add missing struct tags (musttag)
  • lxd/backup/config: Revert linter fixes and use legacy tags instead
  • doc: Update Network docs - Configure networks [WD-22189]
  • Makefile: reuse GOPATH variable
  • Makefile: export default values for make env
  • Makefile: add make tics
  • Release LXD 6.4

Downloads

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
7 Likes

LXD 6.4 is currently available in the 6/candidate snap channel for consideration, and will be moved to the 6/stable channel soon.

1 Like

Start up and shutdown improvements

Thats neat!

Are there any plans to move towards a more async platform? We’ve noticed LXD hangs when it is busy with an operation sometimes and the cli/api/ui is not responsive until that operation is done. Been like this for years so we’ve grown used to it but to have this “fixed” would be lovely.

Though that would probably require a big rewrite :confused:

Very happy with some of these changes! Most of the UI changes were requested by me, now we can finally use them in our stable environments :slight_smile:

The operations concept in some of LXD’s API endpoints allows for the client to disconnect whilst it runs in the background, or wait synchronously for it to complete.

Other API endpoints are synchronous only so the client has to wait for a response.

However LXD should not lock up/block if an operation or synchronous API request is ongoing, so if you have specific reproducers of this then please do log a GH issue.

We are also looking at extensions to the operations concept to allow for multiple operations to be started in the background and for the client (e.g UI) to be able to see how they are progressing.

Thanks!

1 Like

@tomp
I have the following issue running LXD 6.4 on Arch Linux. I use latest version of QEMU (10.0.0) and cannot start any VM, the command fails with following error:

Error: Failed to run: forklimits limit=memlock:unlimited:unlimited fd=3 fd=4 fd=5 -- /usr/bin/qemu-system-x86_64 -S -name postgresql -uuid 342a96c1-2e53-427d-85b3-42555a17eb10 -daemonize -cpu host,hv_passthrough -nographic -serial chardev:console -nodefaults -no-user-config -sandbox on,obsolete=deny,elevateprivileges=allow,spawn=allow,resourcecontrol=deny -readconfig /var/log/lxd/postgresql/qemu.conf -spice unix=on,disable-ticketing=on,addr=/var/log/lxd/postgresql/qemu.spice -pidfile /var/log/lxd/postgresql/qemu.pid -D /var/log/lxd/postgresql/qemu.log -smbios type=2,manufacturer=Canonical Ltd.,product=LXD -runas nobody: qemu-system-x86_64: -runas: invalid option

It looks like that’s because -runas option was deprecated and removed from QEMU 10. There is the same problem in Incus Unable to run incus with unprivileged user with qemu 10 · Issue #1870 · lxc/incus · GitHub and it was fixed (see PR attachet to that issue). While I’m waiting for the fix of that problem in LXD, is it possible to somehow remove this option from the command LXD runs when starting a VM without recompiling it?

I tried to downgrade QEMU to 9.2.3, but now I’m getting the following error:

Error: Failed setting up device via monitor: Failed adding block device for disk device "root": Failed adding block device: Failed to find file descriptor with matching flags=0x2

I googled for exiting solutions and found only the following thread https://discuss.linuxcontainers.org/t/incus-6-5-incus-vm-not-starting-in-cluster/21538, which is quite unhelpful for me

UPD. Downgrading to QEMU 9.0.2 solved the issue (version 9.1 have the same problem), but this is a bad solution, because it’s too old version which breaks some of the system dependencies and is no longer supported

Hi @igormahov please can you report this issue along with the links to the potential fixes as a Github issue over at GitHub · Where software is built

Thanks!

1 Like

LXD 6.4 is now rolled out to 6/stable and is progressively rolling out to latest/stable snap channels.

1 Like