[libvirt] [PATCH 00/23] Enable proper use of systemd socket activation with libvirtd
Daniel P. Berrangé
berrange at redhat.com
Tue Jul 9 09:45:20 UTC 2019
Ping
On Thu, Jun 27, 2019 at 10:54:29AM +0100, Daniel P. Berrangé wrote:
> The libvirtd daemon has some support for systemd socket activation
> from:
>
> commit 27a7081c2968ca0d7fbd590629b5a5303851f4a3
> Author: Martin Kletzander <mkletzan at redhat.com>
> Date: Tue Jul 15 15:28:53 2014 +0200
>
> daemon: support passing FDs from the calling process
>
> First FD is the RW unix socket to listen on, second one (if
> applicable) is the RO unix socket.
>
> This was originally intended for use by the libvirt client when doing
> auto-spawning of libvirtd, but we later deleted that client side code
> in
>
> commit be78814ae07f092d9c4e71fd82dd1947aba2f029
> Author: Michal Privoznik <mprivozn at redhat.com>
> Date: Thu Apr 2 14:41:17 2015 +0200
>
> virNetSocketNewConnectUNIX: Use flocks when spawning a daemon
>
> We never added systemd socket units before as we need libvirtd to start
> on boot to perform autostart.
>
> It was recently pointed out by Lennart that these two features are not
> mutually exclusive though. Libvirtd can be set to start on boot, and
> also have socket unit files.
>
> The idea is that we start libvirtd on boot, perform autostart, and then
> libvirtd can exit if nothing is running. The socket unit files are then
> there to start it again when a mgmt app connects.
>
> This series implements that strategy. In doing so the current socket
> activation support was rewritten to be more flexible, able to cope with
> the admin socket and the TCP/TLS sockets, all passed in any order.
>
> NB, I don't believe I have got the RPM upgrade procedure right yet. As
> there are alot of scenario to test for upgrades, I need more validation
> of that. The series is long enough now though, that it would benefit
> from code review already
>
> This socket activation is also going to be important when we split out
> the daemons, as we will use the same libvirtd codebase for these new
> daemons, simply compiled with different options.
>
> Daniel P. Berrangé (23):
> locking,logging: put a strong dep from admin socket to main socket
> util: add helper API for getting UNIX path from socket address
> rpc: add helper API for getting UNIX path from socket object
> util: add VIR_AUTOSTRUCT for directly calling a struct free function
> util: add API for resolving socket service names
> util: add APIs for facilitating use of systemd activation FDs
> rpc: ensure all sockets bind to same port when service is NULL
> rpc: refactor RPC service constructors to share more code
> rpc: allow creating RPC service from an array of FDs
> rpc: avoid unlinking sockets passed in from systemd
> rpc: add helper APIs for adding services with systemd activation
> rpc: add API for checking whether an auth scheme is in use on a server
> remote: simplify libvirtd code for deciding if SASL auth is needed
> remote: fix handling of systemd activation wrt socket ordering
> rpc: remove unused API for creating services from FDs
> remote: add systemd socket units for UNIX/TCP sockets
> remote: make system libvirtd exit when idle via timeout
> remote: update config files to note usage wrt systemd socket
> activation
> util: remove code spawning with systemd activation env vars
> locking: convert lock daemon to use systemd activation APIs
> logging: convert log daemon to use systemd activation APIs
> util: move code for getting listen FDs into systemd module
> util: remove unused helper for getting UNIX socket path
>
> libvirt.spec.in | 24 +-
> src/libvirt_private.syms | 10 +-
> src/libvirt_remote.syms | 7 +-
> src/locking/lock_daemon.c | 121 +++----
> src/locking/virtlockd-admin.socket.in | 2 +
> src/logging/log_daemon.c | 121 +++----
> src/logging/virtlogd-admin.socket.in | 2 +
> src/remote/Makefile.inc.am | 35 +++
> src/remote/libvirtd-admin.socket.in | 15 +
> src/remote/libvirtd-ro.socket.in | 15 +
> src/remote/libvirtd-tcp.socket.in | 14 +
> src/remote/libvirtd-tls.socket.in | 14 +
> src/remote/libvirtd.conf | 31 ++
> src/remote/libvirtd.service.in | 16 +-
> src/remote/libvirtd.socket.in | 13 +
> src/remote/libvirtd.sysconf | 3 +-
> src/remote/remote_daemon.c | 255 +++++++--------
> src/rpc/virnetserver.c | 162 ++++++++++
> src/rpc/virnetserver.h | 26 ++
> src/rpc/virnetserverservice.c | 238 ++++++--------
> src/rpc/virnetserverservice.h | 24 +-
> src/rpc/virnetsocket.c | 93 ++++--
> src/rpc/virnetsocket.h | 2 +
> src/util/viralloc.h | 13 +
> src/util/vircommand.c | 99 ------
> src/util/vircommand.h | 2 -
> src/util/virsocketaddr.c | 93 ++++++
> src/util/virsocketaddr.h | 4 +
> src/util/virsystemd.c | 434 ++++++++++++++++++++++++++
> src/util/virsystemd.h | 30 ++
> src/util/virutil.c | 116 -------
> src/util/virutil.h | 3 -
> tests/commanddata/test24.log | 8 -
> tests/commandtest.c | 58 ----
> tests/virsystemdtest.c | 169 ++++++++++
> 35 files changed, 1490 insertions(+), 782 deletions(-)
> create mode 100644 src/remote/libvirtd-admin.socket.in
> create mode 100644 src/remote/libvirtd-ro.socket.in
> create mode 100644 src/remote/libvirtd-tcp.socket.in
> create mode 100644 src/remote/libvirtd-tls.socket.in
> create mode 100644 src/remote/libvirtd.socket.in
> delete mode 100644 tests/commanddata/test24.log
>
> --
> 2.21.0
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list