Weekly status for the week of the 30th May to the 5th June.
Introduction
Last week we continued our focus on stability that we’ve had over the last few weeks by continuing to work through our issues backlog (and any other issues we find along the way) expanding our test suite as we go.
LXD
Improvements:
- Reworked the VM qemu.conf file generation to have less repetition and be unit testable.
- Continued DB generator refactor to make loading the
UsedBy
information optional in order to avoid unnecessary queries. This week it was focused on making this optional for Profiles. - Add support for running LXD VMs inside LXD containers. This requires the following config:
lxc launch images:ubuntu/22.04 u22 -c security.nesting=true
lxc config device add u22 kvm unix-char source=/dev/kvm
lxc config device add u22 vhost-net unix-char source=/dev/vhost-net
lxc config device add u22 vhost-vsock unix-char source=/dev/vhost-vsock
Warning: Passing those character devices may significantly reduce or in some cases entirely nullify the normal security benefit of LXD containers. It’s fine for testing purposes but those devices generally expose you to system wide objects with no built-in namespacing support.
Bug fixes:
- Fixed excessive logging of event “Failed closing listener connection” error message (as this is a normal scenario).
- Fixed premature closing of migration socket on error which was preventing the error message from the target being returned to the caller.
- Fixed race conditions for accessing the operation state variable.
- Fixed issue with premature cleanup of container
forkfile
process which was intermittently preventing copying many files to a container. - Fixed an issue that was preventing instance refresh when previously running a file operation on an offline instance. We now ensure that forkfile is stopped on the target before attempting to perform a refresh of the instance’s root volume.
- Fixed an issue that was preventing VM restart when the ZFS subsystem was taking longer than 30s to flush I/O and disable the zvol when the VM was stopped by allowing more time for this to complete and holding the operation lock for up to 5 minutes.
- Fixed VM optimized migration on ZFS.
- Fixed an issue where the new event HTTP streaming connection was not consistently closed (compared to the websocket mode).
- Fixed an issue where LXD background tasks related to image management (updates, pruning etc) were sometimes running concurrently (especially at LXD start up time). This could cause some of the operations those tasks performed to conflict with each other. We now use a lock to prevent these tasks running concurrently.
- Wait for background task operations to finish before allowing the background task to be scheduled again. Otherwise we can end up with the same background task running concurrently.
- Fixed an issue where refreshing an existing custom volume that depending on its volume config to mount (such as when using LVM filesystem setting) was not working due to using the source volume config rather than the existing target volume config to mount.
- Fixed a regression in image unpack for squashfs files. We have now restored the logic that ignores unpack errors related to block or character devices, as these cannot be created inside a container. This was causing Ubuntu cloud image unpacking to fail as they include a pre-populated
/dev
directory which cannot be unpacked inside of a container as the creation of device nodes isn’t allowed. - Fixed
lxd-agent
exec handler EOF due to incorrect usage of operation state that is nil inlxd-agent
.
LXC
Improvements:
- Finish port to meson build system.
Distrobuilder
Bug fixes:
- Fixed some issues with the AlmaLinux 9 build template.
LXD Charm
Bug fixes:
- Added a timeout for sub-processes to avoid blocking forever.
- Fixed an issue that avoids trying to remove members that never joined the cluster.
YouTube videos
The LXD team is running a YouTube channel with live streams covering LXD releases and weekly videos on different aspects of LXD. You may want to give it a watch and/or subscribe for more content in the coming weeks.
Contribute to LXD
Ever wanted to contribute to LXD but not sure where to start?
We’ve recently gone through some effort to properly tag issues suitable for new contributors on Github: Easy issues for new contributors
Upcoming events
- Nothing planned currently.
Ongoing projects
The list below is feature or refactoring work which will span several weeks/months and can’t be tied directly to a single Github issue or pull request.
- Stable release work for LXC, LXCFS and LXD
- Convert LXC to use meson build system
- [LXD] Bidirectional vsock interface for VMs
- Dqlite disk-only operation mode
Upstream changes
The items listed below are highlights of the work which happened upstream over the past week and which will be included in the next release.
LXD
- Instance: Convert more qemu config templates
- Database Refactor: Profiles
- Operations: Fixes race conditions on status propery and improves some function names
- Events: Remove frequent
Failed closing listener connection
error - Instance: convert qemuCPU plus a few other simple templates
- Storage doc
- doc: fix version numbers in the version switcher
- lxd/instance/lxc: Stop forkfile on restore
- Storage: Don’t close migration socket on error
- Instance: convert remaining qemu templates
- doc: update info on how to grow a ZFS pool
- Instance: Fix ZFS tests with exclusive lock on refresh
- How to create a storage pool
- Instance: Allow 5 minutes for the root disk unmount process
- Instance: Final cleanup after refactoring qemu config building
- doc: storage: Clarify driver names
- lxd/storage/drivers/zfs: Fix VM migration
- Events: Consistently close connection on function exit
- Operations: Prevent image related background tasks from running concurrently and stepping on each other
- Storage: Custom volume migration fixes
- How to add storage volumes
- Restore unprivileged archive unpack behavior
- doc/howto/ovn: Fix incorrect config syntax
- Update /1.0/events API description
- doc: storage: clarification about sharing of storage volumes
- lxd/instance/qemu: Support running inside a LXD container
- lxd/operations: Fix crash on nil state
- chore: Set permissions for GitHub actions
LXC
LXCFS
- Nothing to report this week
Distrobuilder
Dqlite (RAFT library)
- Nothing to report this week
Dqlite (database)
- Nothing to report this week
Dqlite (Go bindings)
- Nothing to report this week
LXD Charm
- Add timeout to subprocess.run() to avoid blocking forever
- Don’t try to remove members that never joined the cluster
- CMRs
Distribution work
This section is used to track the work done in downstream Linux distributions to ship the latest LXC, LXD and LXCFS as well as work to get various software to work properly inside containers.
Ubuntu
- LXC 4.0.12 has been released to Ubuntu 20.04
- LXC 4.0.12 has been released to Ubuntu 21.10
Snap
- Nothing to report this week