Weekly status for the week of the 21st of June to the 27th of June.
Introduction
This past week has seen a new feature added to LXD for volume management between projects, as well as another fix for the changes introduced by the LXD core20 base snap change, and several other improvements and bug fixes.
Moving our IRC presence to Libera Chat
Our IRC (live chat) channels have moved from Freenode over to Libera Chat.
You can now find us in #lxc
and #lxc-dev
on irc.libera.chat
.
A web chat client can be found here: Kiwi IRC
The LXD team is hiring
The LXD team at Canonical is currently looking for a Go software engineer to join our distributed team of engineers. We’re looking for candidates anywhere in Europe or the Americas!
All LXD positions are 100% remote with some travel for internal events and conferences.
LXD
New features:
- It is now possible to move custom storage volumes between projects by using the
--target-project
flag with thelxc storage volume copy
andlxc storage volume move
commands.
Improvements:
- Lifecycle events have been extended and normalised across LXD.
- VMs now check that the host is compatible (supports KVM and vsock) before allowing them to be created. This prevents accidentally migrating a VM onto a host that doesn’t support it.
- Using the
--pretty
flag is now supported forlxc monitor
operation events. - When using VMs on the ZFS storage driver with snapshots, it was found that due to the fresh copy of the LXD agent that is added to the VM’s config drive on each boot, when combined with the COW behaviour of snapshots, it would quickly cause the VM’s config volume quota to be exceeded after a few snapshots were taken. We have limited the impact of this issue by only copying the
lxd-agent
binary to the VM’s config drive if the source has changed in size or last change date.
Bug fixes:
- An issue that would cause a
proxy
device’sforkproxy
process to be left behind after the container had stopped when trying to concurrently start a container while it was shutting down has been fixed. The fix was two pronged. First, LXD no longer writes theforkproxy
PID file to disk until the process has been confirmed to have started successfully. This prevents orphaned processes from being left behind if the device fails to start due to a conflicting listener address. Previously writing out the new PID file too soon prevented the old process from being stopped if the conflicting start up had got as far as trying to start the proxy device. Further more we have improved the locking used during a container-initiated shutdown to prevent concurrent start up attempts. - The
bridged
NIC IP filtering and MAC filtering features have been restored after an issue with theebtables
in thecore20
snap package. - Invalid sub command usage in
lxc
now returns an error.
Dqlite (Go bindings)
The recently added snapshot parameters feature has been added to go-dqlite, and an improvement to the way the cluster.yaml file is written to disk, using atomic renames, in an attempt to avoid leaving partially written files has been added.
Youtube channel
We’ve started a Youtube channel with live streams covering LXD releases and its use in the wider ecosystem.
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 to report this week
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.
- Distrobuilder Windows support
- Virtual networks in LXD
- Various kernel work
- Stable release work for LXC, LXCFS and LXD
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
- Move/copy storage volumes between projects
- Refactor lifecycle event handling into lxd/lifecycle
- Rename cluster column pending to state
- Instance: Add KVM module check for VMs
- –pretty support for lxc monitor operation events
- Proxy: Don’t write out pid file until process has started OK
- lxd/include: include sys/wait.h in macro.h
- Instance exec and console lifecycle events
- Instance file push/pull/delete lifecycle events
- Instance: Make operation lock usage for Start, Stop and Shutdown consistent across lxc and qemu drivers
- instance backup export lifecycle event
- Profile CRUD lifecycle events
- Firewall: Don’t use ebtables --concurrent flag
- Return error on invalid subcommand instead of usage message
- project CRUD lifecycle events
- Instance: Improve error logging in restartCommon
- Instance: Don’t fully regenerate VM config driver on start in generateConfigShare
- Fix godqlite build
- Fix crash when listener is nil
- lxd/instance: Fix snapshot etag
- Add requestors for all lifecycle events
- Fix up lifecycle event context fields
- Revert “client: Only retry target addresses if initial connection fails”
- lxd/storage: Handled nil config map
LXC
- Nothing to report this week
LXCFS
- Nothing to report this week
Distrobuilder
- Update errors
- sources/centos: Add more GPG keys
- sources/oracle: Run yum with --skip-broken
- Refactor managers
- Drop apt-transport-https (transitional since 18.04)
- sources/oracle: Fix aarch64 build
- Avoid systemd generator to break systemd-networkd connections
Dqlite (RAFT library)
- Nothing to report this week
Dqlite (database)
- Nothing to report this week
Dqlite (Go bindings)
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
- Nothing to report this week
Snap
- xtables: Re-introduce ethertypes/protocols
- lxd: Tweak build flags for dqlite
- lxd: Cherry-pick upstream bugfixes