[libvirt] [PATCH v2 00/19] Enable proper use of systemd socket activation with libvirtd

Michal Privoznik mprivozn at redhat.com
Fri Jul 12 09:40:20 UTC 2019


On 7/11/19 4:07 PM, 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.
> 
> Changed in v2:
> 
>   - Merge 4 patches already ACKd by Jan
>   - Drop VIR_AUTOSTRUCT patch
>   - Fix patch ordering to be bisectable with "make check"
> 
> Daniel P. Berrangé (19):
>    rpc: ensure all sockets bind to same port when service is NULL
>    util: add APIs for facilitating use of systemd activation FDs
>    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
>    rpc: remove unused typedef for auto shutdown function callback
> 
>   libvirt.spec.in                               |  24 +-
>   src/libvirt_private.syms                      |   8 +-
>   src/libvirt_remote.syms                       |   6 +-
>   src/locking/lock_daemon.c                     | 121 ++---
>   src/logging/log_daemon.c                      | 121 ++---
>   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/virnetdaemon.h                        |   2 -
>   src/rpc/virnetserver.c                        | 162 +++++++
>   src/rpc/virnetserver.h                        |  26 ++
>   src/rpc/virnetserverservice.c                 | 238 ++++------
>   src/rpc/virnetserverservice.h                 |  24 +-
>   src/rpc/virnetsocket.c                        |  83 +++-
>   src/rpc/virnetsocket.h                        |   1 +
>   src/util/vircommand.c                         |  99 ----
>   src/util/vircommand.h                         |   2 -
>   src/util/virsystemd.c                         | 434 ++++++++++++++++++
>   src/util/virsystemd.h                         |  32 ++
>   src/util/virutil.c                            | 116 -----
>   src/util/virutil.h                            |   3 -
>   tests/commanddata/test24.log                  |   8 -
>   tests/commandtest.c                           |  58 ---
>   .../input-data-anon-clients.json              |  12 +-
>   .../output-data-admin-server-names.json       |  24 +-
>   tests/virnetdaemondata/output-data-admin.json |  24 +-
>   .../output-data-anon-clients.json             |  12 +-
>   .../output-data-client-auth-pending.json      |  12 +-
>   .../output-data-client-ids.json               |  12 +-
>   .../output-data-client-timestamp.json         |  12 +-
>   .../virnetdaemondata/output-data-initial.json |  12 +-
>   .../output-data-no-keepalive-required.json    |  24 +-
>   tests/virsystemdtest.c                        | 169 +++++++
>   40 files changed, 1464 insertions(+), 828 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
> 

Reviewed-by: Michal Privoznik <mprivozn at redhat.com>

Michal




More information about the libvir-list mailing list