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)