[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