[libvirt] [PATCH v3 00/48] Split the libvirtd daemon into per-driver daemons
Christophe de Dinechin
dinechin at redhat.com
Tue Jul 30 09:05:25 UTC 2019
Daniel P. Berrangé writes:
> This is what all the driver refactoring I've done has been about
> enabling.
>
> We gain new daemons for each driver, for the primary virt drivers:
>
> virtlibxld
virtxend?
> virtlxcd
> virtqemud
> virtvboxd
> virtvzd
>
> And again for the secondary drivers
>
> virtinterfaced
> virtnetworkd
> virtnodedevd
> virtnwfilterd
> virtsecretd
> virtstoraged
>
> Finally to support IP connectivity, and also the legacy lbivirtd UNIX
> domain socket (for the old libvirt remote driver SSH tunnelling):
>
> virtproxyd
>
> The the sake of facilitating upgrades, the existing libvirtd still
> exists and works the same way it always has.
>
> You either run libvirtd, or you run the per-driver daemons, never both.
What happens if you run both?
(I'll try to figure out by reviewing the rest of the code and/or testing)
>
> The remote driver will look to see whether libvirtd is running to figure
> out whether to connect to libvirtd or the new per-driver daemons.
>
> When auto-spawning daemons for nonroot users, we default to spawning the
> per-driver daemons.
>
> This can be controlled with a UR parameter "?mode=direct|legacy|auto",
> where 'direct' means per-driver and 'legacy' means libvirtd (or indirect
> via virtproxyd if that's running).
>
> Changed in v3:
>
> - Add identity forwarding between daemons for polkit auth
> - Make virtxend sockets conditional on Xen kernel
> - Other misc review fixes
>
> Changed in v2:
>
> - Added systemd unit files for service & sockets, ensuring
> conflicts with libvirtd
> - Fixed proxy to actually handle probing of URIs (still not
> quite perfect)
> - Renamed virtlibxld to virtxend as "xen" is the user facing
> name of the URI
> - Lazy loading of secondary drivers, so connecting to virtqemud
> does't auto-spawn all secondary driver daemons, until a
> relevant API is actually invoked
> - Actually generated config files / augeas files per daemon
> - Abort daemon startup if driver fails to load
> - Many other fixes
>
> A few nice to have things, but not merge blocking
>
> - MAYBE make it possible to disable build of libvirtd, or of the per-driver
> daemons so downstream vendors can decide which to ship. Alternatively
> they can just not include the binary in the package file list ?
> - Tuning of the daemon defaults for worker threads to better suit
> the fact that we have per-driver daemons
> - More work on RPM packaging to allow install of per-driver daemosn
"daemons"
> without pulling in libvirtd too
>
> Daniel P. Berrangé (48):
> build: make augeas-gentest.pl write to stdout
> build: collapse rules adding augeas tests to CLEANFILES
> build: create all augeas test files in same dir as their source
> build: use a common rule for checking augeas test data files
> build: centralize rule for handling generated config files
> remote: stop trying to print help as giant blocks of text
> remote: conditionalize socket names in libvirtd daemon
> remote: conditionalize daemon name in libvirtd daemon
> remote: conditionalize driver loading in libvirtd daemon
> remote: conditionalize IP socket usage in libvirtd daemon
> build: use @CONFIG@ instead of ::CONFIG:: in augeas tests
> remote: conditionalize IP socket config in libvirtd.conf
> remote: conditionalize IP socket config in augeas definitions
> remote: refactor & rename variables for building libvirtd
> build: don't hardcode /etc in the config related files
> remote: reduce duplication in systemd unit file make rules into one
> remote: conditionalize systemd socket unit files
> remote: refactor how list of systemd unit files is built
> remote: in per-driver daemons ensure that state initialize succeeds
> remote: introduce virtproxyd daemon to handle IP connectivity
> secret: introduce virtsecretd daemon
> network: introduce virtnetworkd daemon
> interface: introduce virtinterfaced daemon
> storage: introduce virtstoraged daemon
> nodedev: introduce virtnodedevd daemon
> nwfilter: introduce virtnwfilterd daemon
> libxl: introduce virtxend daemon
> qemu: introduce virtqemud daemon
> lxc: introduce virtlxcd daemon
> vbox: introduce virtvboxd daemon
> bhyve: introduce virtbhyved daemon
> vz: introduce virtvzd daemon
> admin: add ability to connect to the per-driver daemon sockets
> remote: get rid of bogus ATTRIBUTE_UNUSED annotation client param
> remote: change generated methods to not directly access connection
> remote: fix lock ordering mistake in event registration
> remote: change hand written methods to not directly access connection
> remote: open secondary drivers via remote driver if needed
> remote: handle autoprobing of driver within virtproxyd
> remote: use enum helpers for parsing remote driver transport
> remote: refactor the code for choosing the UNIX socket path
> remote: enable connecting to the per-driver daemons
> api: introduce virConnectSetIdentity for pasing uid, gid, selinux info
> util: change identity class attribute names
> util: make generic identity accessors private
> util: storage identity attrs as virTypedParameter internally
> util: allow identity to be imported/exported as typed parameters
> remote: pass identity across to newly opened daemons
>
> .gitignore | 62 +-
> build-aux/augeas-gentest.pl | 22 +-
> docs/remote.html.in | 18 +
> include/libvirt/libvirt-host.h | 75 +
> libvirt.spec.in | 91 ++
> m4/virt-driver-remote.m4 | 15 +
> src/Makefile.am | 30 +-
> src/access/viraccessdriverpolkit.c | 12 +-
> src/admin/admin_server.c | 10 +-
> src/admin/admin_server_dispatch.c | 9 +
> src/bhyve/Makefile.inc.am | 55 +-
> src/bhyve/bhyve_driver.c | 10 +-
> src/bhyve/test_libvirtd_bhyve.aug.in | 2 +-
> src/driver-hypervisor.h | 7 +
> src/driver-state.h | 8 +-
> src/driver.h | 2 +
> src/interface/Makefile.inc.am | 62 +
> src/interface/interface_backend_netcf.c | 8 +-
> src/interface/interface_backend_udev.c | 4 +-
> src/interface/virtinterfaced.service.in | 24 +
> src/libvirt-admin.c | 32 +-
> src/libvirt-host.c | 51 +
> src/libvirt.c | 42 +-
> src/libvirt_internal.h | 1 +
> src/libvirt_private.syms | 29 +-
> src/libvirt_public.syms | 1 +
> src/libvirt_remote.syms | 1 +
> src/libxl/Makefile.inc.am | 80 +-
> src/libxl/libxl_driver.c | 10 +-
> src/libxl/test_libvirtd_libxl.aug.in | 2 +-
> src/libxl/virtxend.service.in | 26 +
> src/locking/Makefile.inc.am | 77 +-
> src/locking/test_libvirt_lockd.aug.in | 2 +-
> src/locking/test_libvirt_sanlock.aug.in | 2 +-
> src/locking/test_virtlockd.aug.in | 2 +-
> src/locking/virtlockd.service.in | 2 +-
> src/logging/Makefile.inc.am | 23 +-
> src/logging/test_virtlogd.aug.in | 2 +-
> src/logging/virtlogd.service.in | 2 +-
> src/lxc/Makefile.inc.am | 77 +-
> src/lxc/lxc_driver.c | 12 +-
> src/lxc/test_libvirtd_lxc.aug.in | 2 +-
> src/lxc/virtlxcd.service.in | 40 +
> src/network/Makefile.inc.am | 61 +
> src/network/bridge_driver.c | 4 +-
> src/network/virtnetworkd.service.in | 25 +
> src/node_device/Makefile.inc.am | 62 +
> src/node_device/node_device_hal.c | 12 +-
> src/node_device/node_device_udev.c | 8 +-
> src/node_device/virtnodedevd.service.in | 24 +
> src/nwfilter/Makefile.inc.am | 62 +
> src/nwfilter/nwfilter_driver.c | 12 +-
> src/nwfilter/virtnwfilterd.service.in | 24 +
> src/qemu/Makefile.inc.am | 76 +-
> src/qemu/qemu_driver.c | 8 +-
> src/qemu/test_libvirtd_qemu.aug.in | 2 +-
> src/qemu/virtqemud.service.in | 40 +
> src/remote/Makefile.inc.am | 285 ++--
> src/remote/libvirtd-admin.socket.in | 15 +-
> src/remote/libvirtd-ro.socket.in | 15 +-
> src/remote/libvirtd-tcp.socket.in | 13 +-
> src/remote/libvirtd-tls.socket.in | 13 +-
> src/remote/{libvirtd.aug => libvirtd.aug.in} | 26 +-
> .../{libvirtd.conf => libvirtd.conf.in} | 60 +-
> src/remote/libvirtd.service.in | 2 +-
> src/remote/libvirtd.socket.in | 11 +-
> src/remote/remote_daemon.c | 302 ++--
> src/remote/remote_daemon.h | 13 +
> src/remote/remote_daemon_config.c | 47 +-
> src/remote/remote_daemon_config.h | 10 +-
> src/remote/remote_daemon_dispatch.c | 1354 ++++++++++-------
> src/remote/remote_driver.c | 424 ++++--
> src/remote/remote_driver.h | 4 -
> src/remote/remote_protocol.x | 18 +-
> src/remote/test_libvirtd.aug.in | 24 +-
> src/remote/virtproxyd.service.in | 24 +
> src/remote_protocol-structs | 8 +
> src/rpc/gendispatch.pl | 96 +-
> src/rpc/virnetserverclient.c | 24 +-
> src/rpc/virnetserverclient.h | 2 +
> src/secret/Makefile.inc.am | 62 +
> src/secret/secret_driver.c | 8 +-
> src/secret/virtsecretd.service.in | 24 +
> src/storage/Makefile.inc.am | 61 +
> src/storage/storage_driver.c | 8 +-
> src/storage/virtstoraged.service.in | 26 +
> src/util/viridentity.c | 483 +++---
> src/util/viridentity.h | 87 +-
> src/vbox/Makefile.inc.am | 62 +
> src/vbox/virtvboxd.service.in | 25 +
> src/vz/Makefile.inc.am | 62 +
> src/vz/virtvzd.service.in | 25 +
> src/vz/vz_driver.c | 14 +-
> tests/viridentitytest.c | 97 +-
> tests/virnetserverclienttest.c | 45 +-
> tools/libvirt-guests.service.in | 2 +-
> 96 files changed, 3642 insertions(+), 1703 deletions(-)
> create mode 100644 src/interface/virtinterfaced.service.in
> create mode 100644 src/libxl/virtxend.service.in
> create mode 100644 src/lxc/virtlxcd.service.in
> create mode 100644 src/network/virtnetworkd.service.in
> create mode 100644 src/node_device/virtnodedevd.service.in
> create mode 100644 src/nwfilter/virtnwfilterd.service.in
> create mode 100644 src/qemu/virtqemud.service.in
> rename src/remote/{libvirtd.aug => libvirtd.aug.in} (89%)
> rename src/remote/{libvirtd.conf => libvirtd.conf.in} (92%)
> create mode 100644 src/remote/virtproxyd.service.in
> create mode 100644 src/secret/virtsecretd.service.in
> create mode 100644 src/storage/virtstoraged.service.in
> create mode 100644 src/vbox/virtvboxd.service.in
> create mode 100644 src/vz/virtvzd.service.in
>
> --
> 2.21.0
--
Cheers,
Christophe de Dinechin (IRC c3d)
More information about the libvir-list
mailing list