Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backports (stable-5.21) #14015

Merged
merged 116 commits into from
Aug 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
dbded0a
lxd/device/pci: Detect USB bus
stgraber Dec 29, 2023
b772e37
lxd/device/nic: Support USB parents for physical NICs in VMs
stgraber Dec 29, 2023
d1724a1
lxd/instance: Add new volatile keys
stgraber Dec 29, 2023
30c1f03
lxd/instance/qemu: Handle USB NIC hotremove
stgraber Dec 29, 2023
adfea9f
lxd/instance: lxdmeta for volatile usb NIC keys
MggMuggins Aug 9, 2024
9bcdd82
lxd/instance/drivers: Improve device ID generation
hamistao Aug 13, 2024
b79b0d4
lxd/instance/drivers: Update unit tests to fit character escaping
hamistao Aug 14, 2024
c1dbaaa
lxd/certificates: Disallow forward slashes and hyphen prefixes
kadinsayani Aug 14, 2024
72f29e7
lxc/storage_bucket: Avoid govet error `printf: non-constant format st…
gabrielmougard Aug 19, 2024
609cf95
doc/tutorial: integrate feedback for UI tutorial
ru-fu Aug 20, 2024
bcc5118
doc/instances: add anchor to allow linking to section
ru-fu Aug 21, 2024
8abcd2d
lxd/patches: Log the stage of patches being applied
tomponline Aug 21, 2024
4ad4ea8
lxd/patches: Fix patchesApply so that the specified stage takes effect
tomponline Aug 21, 2024
1f628ed
lxd/patches: Fix patchVMRenameUUIDKey so that it uses the correct fun…
tomponline Aug 21, 2024
8cc8e53
shared: Allow adding multiple names to certificate SAN
masnax Aug 21, 2024
c166b1c
lxd/patches: Updates selectedPatchClusterMember to use state.State
tomponline Aug 22, 2024
225ba71
lxd/patches: No-op patchStorageZfsUnsetInvalidBlockSettings
tomponline Aug 22, 2024
ccbee28
lxd/patches: Updates ZFS patches to use s.ServerClustered correctly
tomponline Aug 22, 2024
b53c38a
lxd/patches: Fix patchStorageRenameCustomISOBlockVolumesV2 to apply t…
tomponline Aug 22, 2024
d7d69cd
lxd: Fix network forward deletion entitlement.
markylaing Aug 2, 2024
4edfbf9
lxd/cluster: Enforce cluster join token name cannot be 'none'
roosterfish Aug 22, 2024
aa02f68
lxd/cluster: Enforce cluster member name cannot be 'none'
roosterfish Aug 22, 2024
7e73edd
lxd/device/nic/ovn: Remove legacy port name cleanup logic in Stop
tomponline Aug 8, 2024
9b0dd1c
lxd/device/nic/ovn: Don't call InstanceDevicePortStop anymore in Stop
tomponline Aug 8, 2024
623b6f1
lxd/network/driver/ovn: Move logic from InstanceDevicePortStop to Ins…
tomponline Aug 8, 2024
d45d459
lxd/device/nic/ovn: Remove InstanceDevicePortStop
tomponline Aug 8, 2024
4975974
lxd/network/driver/ovn: Remove InstanceDevicePortStop
tomponline Aug 8, 2024
65e2cde
lxd/device/nic/ovn: Removes last_state.ip_addresses logic
tomponline Aug 8, 2024
6c96a02
lxd/instance/instancetype: Removes last_state.ip_addresses definition
tomponline Aug 8, 2024
6d4591c
lxd/network/driver/ovn: Removes last_state.ip_addresses logic
tomponline Aug 8, 2024
79d0e35
doc: Update metadata
tomponline Aug 8, 2024
23d9d26
lxd/network/driver/ovn: Don't return unused port IPs from InstanceDev…
tomponline Aug 8, 2024
f6736c1
lxd/device/nic/ovn: Update InstanceDevicePortStart signature
tomponline Aug 8, 2024
3f334fa
lxd/device/nic/ovn: Call InstanceDevicePortStart when adding port
tomponline Aug 8, 2024
b4b4128
lxd/patches: Adds instance_remove_volatile_last_state_ip_addresses
tomponline Aug 21, 2024
3888dec
lxd/network/driver/ovn: Update comment
tomponline Aug 23, 2024
86f429f
shared/cmd: Allow a cmd asker to be created with a logger
gabrielmougard Aug 2, 2024
721f558
lxc/project: Fix govet error (`non-constant format string in call to …
gabrielmougard Aug 19, 2024
a572cad
lxc: fix `printf: non-constant format string in call to fmt.Fprintf (…
gabrielmougard Aug 23, 2024
92ea1ae
lxd: Handle effective projects for profiles.
markylaing Aug 7, 2024
476819b
lxd: Handle effective projects for networks.
markylaing Aug 7, 2024
9bb4aae
lxd: Handle effective projects for network zones.
markylaing Aug 7, 2024
86fa5a7
lxd/project: Add project helper for getting image effective project.
markylaing Aug 7, 2024
6219624
lxd: Handle effective projects for images.
markylaing Aug 7, 2024
1e5aceb
lxd/project: Fix lint errors (revive: confusing-results).
markylaing Aug 7, 2024
429fd0f
lxd/auth: Add comments to Authorizer interface.
markylaing Aug 7, 2024
798a421
lxd: Always use request project name in authorizer checks.
markylaing Aug 7, 2024
268c331
lxd/auth/drivers: Remove effective project check from TLS authorizer.
markylaing Aug 7, 2024
50455d4
lxd/auth/drivers: Handle effective projects in the OpenFGA driver.
markylaing Aug 7, 2024
20c0fbf
lxd/auth/drivers: Update comments on Authorizer method implementations.
markylaing Aug 7, 2024
b0fe7e3
test/includes: Add helper for setting up object storage pools.
markylaing Aug 8, 2024
6b90901
test/suites: Use storage pool helper in bucket tests.
markylaing Aug 8, 2024
9ce7c28
test/suites: Improve coverage of TLS restrictions tests.
markylaing Aug 8, 2024
6ca597c
test/suites: Test project feature interaction with fine-grained auth.
markylaing Aug 8, 2024
d64091c
doc/explanation: Add note about authorization and project isolation.
markylaing Aug 8, 2024
6b6de50
lxd/auth/drivers: Fix linter errors (govet: printf).
markylaing Aug 22, 2024
6918e2c
lxd: Fix linter errors (govet: printf).
markylaing Aug 22, 2024
fb18a8a
lxd: Fix linter error (staticcheck: SA1032).
markylaing Aug 22, 2024
ff58ee3
lxd: Add comment explaining behaviour of events websocket with effect…
markylaing Aug 22, 2024
22f7498
lxd: Fix invalid FileResponse on empty console log
MggMuggins Aug 22, 2024
136f253
lxc/console: Update docstring and output for `--show-log`
MggMuggins Aug 22, 2024
6f8d261
lxc/console: Fix linter errors
MggMuggins Aug 23, 2024
436fa0d
lxd/network: Implement State function for physical network driver
boltmark Aug 23, 2024
90c8aa6
test/suites: Add testing for physical network state get
boltmark Aug 23, 2024
8309354
tests: Add invalid certificate name tests
kadinsayani Aug 23, 2024
eb54069
lxd/recover: Add snapshot expiry when recovering instance snapshots
kadinsayani Aug 23, 2024
53821c1
build(deps): bump github.com/minio/minio-go/v7 from 7.0.75 to 7.0.76
dependabot[bot] Aug 26, 2024
67be82f
build(deps): bump github.com/zitadel/oidc/v3 from 3.27.0 to 3.28.2
dependabot[bot] Aug 26, 2024
97b597e
lxd: Disable networks during evacuation
Abhiram824 Apr 12, 2024
4d78aa8
lxd/storage/lvm: Properly handle activation during resize
stgraber Jul 19, 2024
735fca3
lxd/storage/lvm: Fix resize logic to conserve LV state
stgraber Aug 19, 2024
a338570
build(deps): bump github.com/vishvananda/netlink
dependabot[bot] Aug 27, 2024
a800104
shared/api: Handle invalid HTTP status codes.
markylaing Aug 27, 2024
83840e3
shared/api: Add new functions for instantiating a StatusError.
markylaing Aug 27, 2024
b364c16
lxd/auth/drivers: Use `api.NewGenericStatusError`.
markylaing Aug 27, 2024
07654b4
lxd: Wrap status errors in devlxd.
markylaing Aug 27, 2024
29e2858
lxd: Wrap SFTP upgrade error.
markylaing Aug 27, 2024
3341cad
lxd: Wrap project permission errors.
markylaing Aug 27, 2024
6ed767d
lxd/instance/drivers/qmp: Wrap block device removal error.
markylaing Aug 27, 2024
29599ad
lxc: Move translations out of format string.
markylaing Aug 27, 2024
104303e
lxc: Fix linter errors (govet: printf).
markylaing Aug 27, 2024
82bc4ee
lxd: Remove unused state argument from instancesShutdown
tomponline Aug 27, 2024
ff8f6ae
lxd/storage/drivers/driver/zfs/volumes: Don't use d.state.ShutdownCtx…
tomponline Aug 27, 2024
c26ae2e
doc/reference: Add warning about volatile keys.
markylaing Aug 27, 2024
26e2773
doc/guest-os-compatibility: add compatibility matrix with LXD 5.21
simondeziel Aug 26, 2024
eb9358c
doc/reference: link to guest OS compatibility
simondeziel Aug 27, 2024
f531812
doc: sort custom word list
simondeziel Aug 27, 2024
3cc6681
doc: add BLK, CSM, EOL, RDP and SELinux to custom word list
simondeziel Aug 27, 2024
4a1db19
lxd/device/device_utils_disk: remove unused IsBlockdev()
simondeziel Aug 27, 2024
868388b
tests: Add snapshot expiry date test to test_container_recover() in b…
kadinsayani Aug 27, 2024
cc3f6e8
lxc/network_load_balancer: add Example to create
awalvie Apr 26, 2024
e3ee609
lxc/network_load_balancer: fix go-vet linter
gabrielmougard Aug 26, 2024
319c1e1
lxd/device/gpu_physical: more explicit output values for `deviceNumSt…
gabrielmougard Aug 6, 2024
26f4a52
lxd/instance/drivers: Make `removeUnixDevices` a driver_common function
gabrielmougard Aug 7, 2024
155f3d6
api/shared/instance: Fix json and yaml key name for source disk size
MusicDin Aug 28, 2024
3ae56dd
doc: Update api definition
MusicDin Aug 28, 2024
c946524
lxd/apparmor/instance_lxc: allow procfs for unprivileged containers
mihalicyn Aug 28, 2024
c829ecd
lxd/apparmor: allow signals receiving
mihalicyn Aug 28, 2024
5da2990
lxc/storage_bucket: Add example for storage bucket create
awalvie May 3, 2024
5012228
client: Report source errors too on copy
stgraber Jul 26, 2024
5533b2e
doc/guest-os-compatibility: add SUSE 12 and 15
simondeziel Aug 28, 2024
b612aeb
client: Fix potential panic-causing type assertions
boltmark Aug 28, 2024
54957ee
lxd/storage_volumes_state: Handle unsupported response from drivers
stgraber Aug 20, 2024
4364a91
lxc/network_zone: Add example for create command
awalvie Apr 26, 2024
918db0f
lxc/network_zone: fix go-vet linter errors
gabrielmougard Aug 26, 2024
9365358
lxd/apparmor/instance_lxc: allow sysfs for unprivileged containers
mihalicyn Aug 29, 2024
2ca8038
doc: add SLES to custom word list
simondeziel Aug 29, 2024
a273076
lxd/main/init/interactive: asker.AskPasswordOnce usage
tomponline Aug 30, 2024
07e9fd8
i18n: Update translation templates
tomponline Aug 30, 2024
92ab2b1
gomod: Update dependencies
tomponline Aug 30, 2024
cd9b9ea
test/godeps: Update go deps list
tomponline Aug 30, 2024
bc49bce
doc/guest-os-compatibility: mention manual install from ISO
simondeziel Aug 29, 2024
88104cd
doc/guest-os-compatibility: Add Ubuntu 16.04 and 18.04
simondeziel Aug 29, 2024
e5d1324
doc/guest-os-compatibility: Add Ubuntu 18.04, 20.04 and 22.04
simondeziel Aug 29, 2024
4b1913f
doc: add ESM to custom word list
simondeziel Aug 29, 2024
4813faf
Makefile: Pin github.com/dell/[email protected]
tomponline Aug 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ ifneq "$(LXD_OFFLINE)" ""
exit 1
endif
go get -t -v -d -u ./...
go get github.com/dell/[email protected] # Due to pending testing of newer version
go get github.com/gorilla/[email protected] # Due to riscv64 crashes in LP
go mod tidy -go=$(GOMIN)

Expand Down
117 changes: 99 additions & 18 deletions client/lxd_instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,9 @@ func (r *ProtocolLXD) tryCreateInstance(req api.InstancesPost, urls []string, op
operation := req.Source.Operation

// Forward targetOp to remote op
chConnect := make(chan error, 1)
chWait := make(chan error, 1)

go func() {
success := false
var errors []remoteOperationResult
Expand Down Expand Up @@ -762,13 +765,35 @@ func (r *ProtocolLXD) tryCreateInstance(req api.InstancesPost, urls []string, op
break
}

if !success {
rop.err = remoteOperationError("Failed instance creation", errors)
if success {
chConnect <- nil
close(chConnect)
} else {
chConnect <- remoteOperationError("Failed instance creation", errors)
close(chConnect)

if op != nil {
_ = op.Cancel()
}
}
}()

if op != nil {
go func() {
chWait <- op.Wait()
close(chWait)
}()
}

go func() {
var err error

select {
case err = <-chConnect:
case err = <-chWait:
}

rop.err = err
close(rop.chDone)
}()

Expand Down Expand Up @@ -953,7 +978,12 @@ func (r *ProtocolLXD) CopyInstance(source InstanceServer, instance api.Instance,

targetSecrets := map[string]string{}
for k, v := range opAPI.Metadata {
targetSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

targetSecrets[k] = vStr
}

// Prepare the source request
Expand Down Expand Up @@ -981,7 +1011,12 @@ func (r *ProtocolLXD) CopyInstance(source InstanceServer, instance api.Instance,

sourceSecrets := map[string]string{}
for k, v := range opAPI.Metadata {
sourceSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

sourceSecrets[k] = vStr
}

// Relay mode migration
Expand All @@ -1001,7 +1036,12 @@ func (r *ProtocolLXD) CopyInstance(source InstanceServer, instance api.Instance,
// Extract the websockets
targetSecrets := map[string]string{}
for k, v := range targetOpAPI.Metadata {
targetSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

targetSecrets[k] = vStr
}

// Launch the relay
Expand Down Expand Up @@ -1243,9 +1283,16 @@ func (r *ProtocolLXD) ExecInstance(instanceName string, exec api.InstanceExecPos

value, ok := opAPI.Metadata["fds"]
if ok {
values := value.(map[string]any)
for k, v := range values {
fds[k] = v.(string)
values, ok := value.(map[string]any)
if ok {
for k, v := range values {
vStr, ok := v.(string)
if !ok {
continue
}

fds[k] = vStr
}
}
}

Expand All @@ -1260,7 +1307,12 @@ func (r *ProtocolLXD) ExecInstance(instanceName string, exec api.InstanceExecPos
outputs, ok := opAPI.Metadata["output"].(map[string]any)
if ok {
for k, v := range outputs {
outputFiles[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

outputFiles[k] = vStr
}
}

Expand Down Expand Up @@ -1992,7 +2044,12 @@ func (r *ProtocolLXD) CopyInstanceSnapshot(source InstanceServer, instanceName s

targetSecrets := map[string]string{}
for k, v := range opAPI.Metadata {
targetSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

targetSecrets[k] = vStr
}

// Prepare the source request
Expand Down Expand Up @@ -2020,7 +2077,12 @@ func (r *ProtocolLXD) CopyInstanceSnapshot(source InstanceServer, instanceName s

sourceSecrets := map[string]string{}
for k, v := range opAPI.Metadata {
sourceSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

sourceSecrets[k] = vStr
}

// Relay mode migration
Expand All @@ -2040,7 +2102,12 @@ func (r *ProtocolLXD) CopyInstanceSnapshot(source InstanceServer, instanceName s
// Extract the websockets
targetSecrets := map[string]string{}
for k, v := range targetOpAPI.Metadata {
targetSecrets[k] = v.(string)
vStr, ok := v.(string)
if !ok {
continue
}

targetSecrets[k] = vStr
}

// Launch the relay
Expand Down Expand Up @@ -2596,9 +2663,16 @@ func (r *ProtocolLXD) ConsoleInstance(instanceName string, console api.InstanceC

value, ok := opAPI.Metadata["fds"]
if ok {
values := value.(map[string]any)
for k, v := range values {
fds[k] = v.(string)
values, ok := value.(map[string]any)
if ok {
for k, v := range values {
vStr, ok := v.(string)
if !ok {
continue
}

fds[k] = vStr
}
}
}

Expand Down Expand Up @@ -2688,9 +2762,16 @@ func (r *ProtocolLXD) ConsoleInstanceDynamic(instanceName string, console api.In

value, ok := opAPI.Metadata["fds"]
if ok {
values := value.(map[string]any)
for k, v := range values {
fds[k] = v.(string)
values, ok := value.(map[string]any)
if ok {
for k, v := range values {
vStr, ok := v.(string)
if !ok {
continue
}

fds[k] = vStr
}
}
}

Expand Down
13 changes: 10 additions & 3 deletions doc/.custom_wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ balancers
benchmarking
BGP
BitLocker
BLK
bool
bootable
BPF
Expand All @@ -41,6 +42,7 @@ CPUs
CRIU
CRL
cron
CSM
CSV
CUDA
dataset
Expand All @@ -62,8 +64,10 @@ ECDSA
EiB
Eibit
endian
EOL
ES
ESA
ESM
ETag
failover
firmware
Expand All @@ -89,10 +93,10 @@ hotplugging
HTTPS
HWE
ICMP
IdP
idmap
idmapped
idmaps
IdP
incrementing
InfiniBand
init
Expand All @@ -112,9 +116,9 @@ KiB
kibi
Kibit
KVM
LogCLI
lookups
LoongArch
LogCLI
LRU
LV
LVM
Expand All @@ -133,8 +137,8 @@ MiB
Mibit
MicroCeph
MicroCloud
MinIO
MII
MinIO
MITM
MTU
Mullvad
Expand Down Expand Up @@ -190,6 +194,7 @@ qgroups
RADOS
RBAC
RBD
RDP
README
reconfiguring
requestor
Expand All @@ -208,6 +213,7 @@ SDS
SDT
SeaBIOS
Seccomp
SELinux
SEV
SFTP
SHA
Expand All @@ -216,6 +222,7 @@ SIGTERM
simplestreams
SKBPRIO
SLAAC
SLES
SMTP
Snapcraft
Solaris
Expand Down
9 changes: 9 additions & 0 deletions doc/explanation/projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,15 @@ To edit them, you must remove all instances first.
New features that are added in an upgrade are disabled for existing projects.
```

```{important}
In a multi-tenant environment, unless using {ref}`fine-grained-authorization`, all projects should have all features enabled.
Otherwise, clients with {ref}`restricted-tls-certs` are able to create, edit, and delete resources in the default project. This might affect other tenants.

For example, if project "foo" is created and `features.networks` is not set to true, then a restricted client certificate with access to "foo" can view, edit, and delete networks in the default project.

Conversely, if a client's permissions are managed via {ref}`fine-grained-authorization`, resources may be inherited from the default project but access to those resources is not automatically granted.
```

(projects-confined)=
## Confined projects in a multi-user environment

Expand Down
78 changes: 78 additions & 0 deletions doc/guest-os-compatibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
(guest-os-compatibility)=
# Guest OS compatibility

The following operating systems (OS) were tested as virtual machine guest running on top of on LXD `5.21/stable`. Each OS was tested by doing a manual installation using the official ISO as provided by the vendor.

OS vendor | OS version | OS support | [LXD agent](#lxd-agent) | VirtIO-SCSI | VirtIO-BLK | NVMe | CSM (BIOS) | UEFI | Secure Boot
:--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :---
CentOS | CentOS 6.10 [^1] | EOL | ❌ [^2] | ✅ | ❌ [^7] | 🟢 | ✅ | ❌ | ❌
CentOS | CentOS 7.9 | EOL | ❌ [^2] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
CentOS | CentOS 8.5 | EOL | 🟢 [^3] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
CentOS | CentOS 8-Stream | EOL | 🟢 [^3] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
CentOS | CentOS 9-Stream | Supported | 🟢 [^3] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Red Hat | RHEL 7.9 | EOL | ❌ [^2] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Red Hat | RHEL 8.10 | Supported | 🟢 [^3] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Red Hat | RHEL 9.4 | Supported | 🟢 [^3] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
SUSE | SLES 12 SP5 | Supported | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
SUSE | SLES 15 SP6 | Supported | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 14.04.6 LTS | EOL | ❌ [^8] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 16.04.7 LTS | ESM | ✅ [^9] | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 18.04.6 LTS | ESM | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 20.04.6 LTS | Supported | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 22.04.4 LTS | Supported | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Ubuntu | 24.04.1 LTS | Supported | ✅ | ✅ | 🟢 | 🟢 | 🟢 | ✅ | ✅
Windows | Server 2012 | Supported | ➖ | ✅ | 🟢 | ❌ | 🟢 | ✅ | ✅
Windows | Server 2016 | Supported | ➖ | ✅ | 🟢 | 🟢 [^4] | ❌ [^6] | ✅ | ✅
Windows | Server 2019 | Supported | ➖ | ✅ | 🟢 | 🟢 | ❌ [^6] | ✅ | ✅
Windows | Server 2022 | Supported | ➖ | ✅ | 🟢 | 🟢 | ❌ [^6] | ✅ | ✅
Windows | 10 22H2 | Supported | ➖ | ✅ | 🟢 | 🟢 | ❌ [^6] | ✅ | ✅
Windows | 11 23H2 [^5] | Supported | ➖ | ✅ | 🟢 | 🟢 | ❌ | ✅ | ✅

[^1]: No network support despite having VirtIO-NET module.
[^2]: Support for 9P or `virtiofs` not available. Note: CentOS 7 has a `kernel-plus` kernel with 9P support allowing LXD agent to work (with `selinux=0`).
[^3]: Requires disabling SELinux to allow LXD agent loading `virtiofs` configuration share.
[^4]: NVMe disks are visible but the installer lists all 255 namespaces slowing down the initialization.
[^5]: A virtual TPM is required.
[^6]: The OS installer hangs when booting in CSM/BIOS mode.
[^7]: The OS installer hangs when booting with VirtIO-BLK despite having VirtIO-BLK supported by the kernel.
[^8]: This Linux version does not use `systemd` which the LXD agent requires.
[^9]: Requires the HWE kernel (`4.15`) for proper `vsock` support which is required by the LXD agent.

Legend:
✅ : recommended
🟢 : supported
➖ : not applicable
❌ : not supported

## Notes

### LXD agent

The LXD agent provides the ability to execute commands inside of the virtual machine guest without relying on traditional access solution like secure shell (SSH) or Remote Desktop Protocol (RDP). This agent is only supported on Linux guests using `systemd`.

### CSM/BIOS boot

```bash
lxc config set v1 security.secureboot=false
lxc config set v1 security.csm=true
```

### Virtual TPM

```bash
lxc config device add v1 vtpm tpm path=/dev/tpm0
```

### VirtIO-BLK or NVMe

```bash
lxc config device override v1 root io.bus=virtio-blk
# or
lxc config device override v1 root io.bus=nvme
```

### Disconnect the ISO

```bash
lxc config device remove v1 iso
```
Loading
Loading