Weekly status for the week of the 29th November to 5th of December.
Introduction
Last week LXD saw a lot of clean up and fixes done on its instance exec
command for both containers and VMs, as well improvements to the built-in authoritative DNS server. The go-dqlite
package also saw its v1.10.2 release.
LXD
Improvements:
- The built-in authoritative DNS server gained the ability to control whether or not to include DNS record entries for NAT enabled networks. This is controlled via the
network.nat
configuration option on a DNS zone, and defaults totrue
if not specified. - The DB generator has seen some improvements to remove the reference table views and various other clean ups.
- LXD will now log whether it has support in the kernel for idmapped mounts on start up.
Bug fixes:
- There was a raft of improvements, clean ups and fixes for the instance
exec
command, primarily focused on properly cleaning up sockets and file descriptors when an exec session finishes and improving the detection of disconnected clients in non-interactive sessions so that we don’t leave resources around if the client abruptly disconnects. The two main bugs fixed were:- For non-interactive container exec sessions, if the client disconnected the program remained running (potentially indefinitely). This has been fixed, whilst still allowing the client to close stdin before the program exits, but also reading from the stdout channel (which should never receive any data from the client, except a notification that the client has disconnected). If this occurs the program running inside the container is terminated.
- For VM websocket based exec sessions there was a pseudoterminal (PTY) being created on the LXD server and inside the VM guest (via the lxd-agent). Because the data channels between LXD and lxd-agent are websockets over vsock, some of the PTY based polling logic to detect closed channels wasn’t working on the LXD server, and so LXD was leaking PTY devices on the host. This has been fixed by removing the PTY being used on the LXD server and just relaying the data between the client and the lxd-agent’s PTY.
- For OVN NICs, the host OVS port is now deleted earlier during the instance shutdown process to avoid the situation where another failure can cause the OVS port to be left behind on the host. This can cause issues if the instance is then migrated to a different host in the same OVN network after being shutdown, as when it next starts there will be OVN conflicts as the multiple OVS ports exist for the same logical OVN port.
LXC
Bug fixes:
- When saving the config file to somewhere that’s not the container directory, we don’t need to create the container directory (and so don’t need the parent directory to exit).
- Fixed some compiler warnings.
- Use 2 sysfs instances for sys:mixed.
Distrobuilder
- Dropped support for Sabayon as the project has merged with Funtoo.
Dqlite (Go bindings)
- Improvements to the test suite when running with only loopback interface.
LXD Charm
- Remove unneeded passenv from tox.ini
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
- Generator: Refactor handling of reference tables.
- doc: clean up the content on the index page of the documentation
- Instance: Add more exec tests
- Instance: Detect disconnect of non-interactive exec stdout websocket and kill command
- lxc/exec: Always connect control websocket
- Instance: Rework VM exec to always expect control connection for websocket sessions
- Instance: Use exitErr.ExitCode function for containers
- Instance: Fix VM exec pts leak
- Increases recommended subuid and subgid ranges in machine setup.
- Instance: Adds ExitStatus() to properly extract exit status when a command is signaled from interactive session
- doc: css: temporary fixes for theme issues
- doc: Update Ceph docs with details for erasure coded pools
- Replace bionic with focal
- doc: add redirect to index.html
- Shared: Some minor tweaks
- lxd/device: Improves error message for custom storage volumes when shift is true.
- lxd: log basic idmapped mount support
- Instance: Adds non-websocket exec tests
- lxd/device: Fix golint
- Add
network.nat
property to zones - Instance: Make VM WaitForWS for lxd-agent exec explicit
- Instance: Clear up OVS integration bridge port earlier in stop sequence for OVN NICs
- Added link for installing.md
LXC
- api: ->save_config() doesn’t need to create container dir
- cgroups: fix compiler warning
- use 2 sysfs instances for sys:mixed
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)
LXD Charm
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
- Nothing to report this week