1. 09 9月, 2019 1 次提交
    • D
      docs: remove devhelp API docs · 926b7b6e
      Daniel P. Berrangé 提交于
      We currently generate two completely separate API references for the
      libvirt public API. One at 'docs/html/' and one at 'docs/devhelp/'.
      Both are published on the website, but we only link to content in
      the 'docs/html/' pages.
      
      Both are installed in the libvirt-docs sub-RPM, with a full copy
      of the website including 'docs/html/' in /usr/share/docs/libvirt-docs,
      while the 'docs/devhelp/' content goes to /usr/share/gtk-doc/. The
      latter was broken for years until:
      
        commit ca6f6025
        Author: Andrea Bolognani <abologna@redhat.com>
        Date:   Fri May 10 14:54:52 2019 +0200
      
          docs: Introduce $(devhelphtml_generated)
      
          Our XSLT magic generates one Devhelp-compatible HTML file
          per documentation module, but so far we have only shipped
          and installed documentation for virterror.
      
          Now that we have $(modules), however, we can generate the
          list of files the same way we do for regular documentation
          and make sure we always ship and install everything.
      
      That this bug went unnoticed for so long is a sign of how few
      people are using the devhelp docs. The only commits to the devhelp
      code since it was first introduced have been fixing various build
      problems that hit.
      
      The only obvious difference between the two sets of docs is the CSS
      styling in use. Overall devhelp does not look compelling enough to
      justify having two duplicated sets of API docs. Eliminating it will
      reduce the amount of XSL code we are carrying in the tree which is
      an attractive benefit.
      Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      926b7b6e
  2. 04 9月, 2019 1 次提交
  3. 27 8月, 2019 4 次提交
  4. 09 8月, 2019 12 次提交
    • D
      remote: enable connecting to the per-driver daemons · b18c273a
      Daniel P. Berrangé 提交于
      Historically URIs handled by the remote driver will always connect to
      the libvirtd UNIX socket. There will now be one daemon per driver, and
      each of these has its own UNIX sockets to connect to.
      
      It will still be possible to run the traditional monolithic libvirtd
      though, which will have the original UNIX socket path.
      
      In addition there is a virproxyd daemon that doesn't run any drivers,
      but provides proxying for clients accessing libvirt over IP sockets, or
      tunnelling to the legacy libvirtd UNIX socket path.
      
      Finally when running inside a daemon, the remote driver must not reject
      connections unconditionally. For example, the QEMU driver needs to be
      able to connect to the network driver. The remote driver must thus be
      willing to handle connections even when inside the daemon, provided no
      local driver is registered.
      
      This refactoring enables the remote driver to be able to connect to the
      per-driver daemons. The URI parameter "mode" accepts the values "auto",
      "direct" and "legacy" to control which daemons are connected to.
      
      The client side libvirt.conf config file also supports a "remote_mode"
      setting which is used if the URI parameter is not set.
      
      If neither the config file or URI parameter set a mode, then "auto"
      is used, whereby the client looks to see which sockets actually exist
      right now.
      
      The remote driver will only ever spawn the per-driver daemons, or
      the legacy libvirtd. It won't ever try to spawn virtproxyd, as
      that is only there for IP based connectivity, or for access from
      legacy remote clients.
      
      If connecting to a remote host over any kind of ssh tunnel, for now we
      must assume only the legacy socket exists. A future patch will introduce
      a netcat replacement that is tailored for libvirt to make remote
      tunnelling easier.
      
      The configure arg '--with-remote-default-mode=legacy|direct' allows
      packagers to set a default at build time. If not given, it will default
      to legacy mode.
      
      Eventually the default will switch to direct mode. Distros can choose
      to do the switch earlier if desired. The main blocker is testing and
      suitable SELinux/AppArmor policies.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      b18c273a
    • D
      vbox: introduce virtvboxd daemon · 60ee70e9
      Daniel P. Berrangé 提交于
      The virtvboxd daemon will be responsible for providing the vbox API
      driver functionality. The vbox driver is still loaded by the main
      libvirtd daemon at this stage, so virtvboxd must not be running at
      the same time.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      60ee70e9
    • D
      lxc: introduce virtlxcd daemon · 23ab0f0b
      Daniel P. Berrangé 提交于
      The virtlxcd daemon will be responsible for providing the lxc API
      driver functionality. The lxc driver is still loaded by the main
      libvirtd daemon at this stage, so virtlxcd must not be running at
      the same time.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      23ab0f0b
    • D
      qemu: introduce virtqemud daemon · bb1021e3
      Daniel P. Berrangé 提交于
      The virtqemud daemon will be responsible for providing the qemu API
      driver functionality. The qemu driver is still loaded by the main
      libvirtd daemon at this stage, so virtqemud must not be running at
      the same time.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      bb1021e3
    • D
      libxl: introduce virtxend daemon · 12e30d1e
      Daniel P. Berrangé 提交于
      The virtxend daemon will be responsible for providing the libxl API
      driver functionality. The libxl driver is still loaded by the main
      libvirtd daemon at this stage, so virtxend must not be running at
      the same time.
      
      This naming is slightly different than other drivers. With the libxl
      driver, the user still has a 'xen:///system' URI, and we provide it
      in a libvirt-daemon-xen RPM, which pulls in a
      libvirt-daemon-driver-libxl RPM.
      
      Arguably we could rename the libxl driver to "xen" since it is the
      only xen driver we have these days, and that matches how we expose it
      to users in the URI naming.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      12e30d1e
    • D
      nwfilter: introduce virtnwfilterd daemon · 653ddc2e
      Daniel P. Berrangé 提交于
      The virtnwfilterd daemon will be responsible for providing the nwfilter API
      driver functionality. The nwfilter driver is still loaded by the main
      libvirtd daemon at this stage, so virtnwfilterd must not be running at
      the same time.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      653ddc2e
    • D
      nodedev: introduce virtnodedevd daemon · e4de8857
      Daniel P. Berrangé 提交于
      The virtnodedevd daemon will be responsible for providing the nodedev API
      driver functionality. The nodedev driver is still loaded by the main
      libvirtd daemon at this stage, so virtnodedevd must not be running at
      the same time.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      e4de8857
    • D
      storage: introduce virtstoraged daemon · e23d5b04
      Daniel P. Berrangé 提交于
      The virtstoraged daemon will be responsible for providing the storage API
      driver functionality. The storage driver is still loaded by the main
      libvirtd daemon at this stage, so virtstoraged must not be running at
      the same time.
      Reviewed-by: NChristophe de Dinechin <dinechin@redhat.com>
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      e23d5b04
    • D
      interface: introduce virtinterfaced daemon · 62d817a3
      Daniel P. Berrangé 提交于
      The virtinterfaced daemon will be responsible for providing the interface API
      driver functionality. The interface driver is still loaded by the main
      libvirtd daemon at this stage, so virtinterfaced must not be running at
      the same time.
      Reviewed-by: NChristophe de Dinechin <dinechin@redhat.com>
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      62d817a3
    • D
      network: introduce virtnetworkd daemon · 1c27cef1
      Daniel P. Berrangé 提交于
      The virtnetworkd daemon will be responsible for providing the network API
      driver functionality. The network driver is still loaded by the main
      libvirtd daemon at this stage, so virtnetworkd must not be running at
      the same time.
      Reviewed-by: NChristophe de Dinechin <dinechin@redhat.com>
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      1c27cef1
    • D
      secret: introduce virtsecretd daemon · d353d57f
      Daniel P. Berrangé 提交于
      The virtsecretd daemon will be responsible for providing the secret API
      driver functionality. The secret driver is still loaded by the main
      libvirtd daemon at this stage, so virtsecretd must not be running at
      the same time.
      Reviewed-by: NChristophe de Dinechin <dinechin@redhat.com>
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      d353d57f
    • D
      remote: introduce virtproxyd daemon to handle IP connectivity · b7ed8ce9
      Daniel P. Berrangé 提交于
      The libvirtd daemon provides the traditional libvirt experience where
      all the drivers are in a single daemon, and is accessible over both
      local UNIX sockets and remote IP sockets.
      
      In the new world we're having a set of per-driver daemons which will
      primarily be accessed locally via their own UNIX sockets.
      
      We still, however, need to allow for case of applications which will
      connect to libvirt remotely. These remote connections can be done as
      TCP/TLS sockets, or by SSH tunnelling to the UNIX socket.
      
      In the later case, the old libvirt.so clients will only know about
      the path to the old libvirtd socket /var/run/libvirt/libvirt-sock,
      and not the new driver sockets /var/run/libvirt/virtqemud-sock.
      
      It is also not desirable to expose the main driver specific daemons
      over IP directly to minimize their attack service.
      
      Thus the virtproxyd daemon steps into place, to provide TCP/TLS sockets,
      and back compat for the old libvirtd UNIX socket path(s). It will then
      forward all RPC calls made to the appropriate driver specific daemon.
      
      Essentially it is equivalent to the old libvirtd with absolutely no
      drivers registered except for the remote driver (and other stateless
      drivers in libvirt.so).
      
      We could have modified libvirtd so none of the drivers are registed
      to get the same end result. We could even add a libvirtd.conf parameter
      to control whether the drivers are loaded to enable users to switch back
      to the old world if we discover bugs in the split-daemon model. Using a
      new daemon though has some advantages
      
       - We can make virtproxyd and the virtXXXd per-driver daemons all
         have "Conflicts: libvirtd.service" in their systemd unit files.
         This will guarantee that libvirtd is never started at the same
         time, as this would result in two daemons running the same driver.
         Fortunately drivers use locking to protect themselves, but it is
         better to avoid starting a daemon we know will conflict.
      
       - It allows us to break CLI compat to remove the --listen parameter.
         Both listen_tcp and listen_tls parameters in /etc/libvirtd/virtd.conf
         will default to zero. Either TLS or TCP can be enabled exclusively
         though virtd.conf without requiring the extra step of adding --listen.
      
       - It allows us to set a strict SELinux policy over virtproxyd. For
         back compat the libvirtd policy must continue to allow all drivers
         to run. We can't easily give a second policy to libvirtd which
         locks it down. By introducing a new virtproxyd we can set a strict
         policy for that daemon only.
      
       - It gets rid of the weird naming of having a daemon with "lib" in
         its name. Now all normal daemons libvirt ships will have "virt"
         as their prefix not "libvirt".
      
       - Distros can more easily choose their upgrade path. They can
         ship both sets of daemons in their packages, and choose to
         either enable libvirtd, or enable the per-driver daemons and
         virtproxyd out of the box. Users can easily override this if
         desired by just tweaking which systemd units are active.
      
      After some time we can deprecate use of libvirtd and after some more
      time delete it entirely, leaving us in a pretty world filled with
      prancing unicorns.
      
      The main downside with introducing a new daemon, and with the
      per-driver daemons in general, is figuring out the correct upgrade
      path.
      
      The conservative option is to leave libvirtd running if it was
      an existing installation. Only use the new daemons & virtproxyd
      on completely new installs.
      
      The aggressive option is to disable libvirtd if already running
      and activate all the new daemons.
      Reviewed-by: NAndrea Bolognani <abologna@redhat.com>
      Reviewed-by: NChristophe de Dinechin <dinechin@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      b7ed8ce9
  5. 07 8月, 2019 1 次提交
    • D
      tools: split virt-login-shell into two binaries · 4feeb2d9
      Daniel P. Berrangé 提交于
      The virt-login-shell binary is a setuid program that takes
      no arguments. When invoked it looks at the invoking uid,
      resolves it to a username, and finds an LXC guest with the
      same name. It then starts the guest and runs the shell in
      side the namespaces of the container.
      
      Given this set of tasks the virt-login-shell binary needs
      to connect to libvirtd, make various other libvirt API calls.
      This is a problem for setuid binaries as various libraries
      that libvirt.so links to are not safe. For example, they have
      constructor functions which execute an unknown amount of code
      that can be influenced by env variables.
      
      For this reason virt-login-shell doesn't use libvirt.so,
      but instead links to a custom, cut down, set of source files
      sufficient to be a local client only.
      
      This introduces a problem for integrating glib2 into libvirt
      though, as once integrated, there would be no way to build
      virt-login-shell without an external dependancy on glib2 and
      this is definitely not setuid safe.
      
      To resolve this problem, we split the virt-login-shell binary
      into two parts. The first part is setuid and does almost
      nothing. It simply records the original uid+gid, and then
      invokes the virt-login-shell-helper binary. Crucially when
      it does this it completes scrubs all environment variables.
      It is thus safe for virt-login-shell-helper to link to the
      normal libvirt.so. Any things that constructor functions
      do cannot be influenced by user control env vars or cli
      args.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      4feeb2d9
  6. 27 7月, 2019 2 次提交
    • E
      backup: Introduce virDomainCheckpoint APIs · 0d44788f
      Eric Blake 提交于
      Introduce a bunch of new public APIs related to backup checkpoints.
      Checkpoints are modeled heavily after virDomainSnapshotPtr (both
      represent a point in time of the guest), although a snapshot exists
      with the intent of rolling back to that state, while a checkpoint
      exists to make it possible to create an incremental backup at a later
      time.  We may have a future hypervisor that can completely manage
      checkpoints without libvirt metadata, but the first two planned
      hypervisors (qemu and test) both always use libvirt for tracking
      metadata relations between checkpoints, so for now, I've deferred
      the counterpart of virDomainSnapshotHasMetadata for a separate
      API addition at a later date if there is ever a need for it.
      
      Note that until we allow snapshots and checkpoints to exist
      simultaneously on the same domain (although the actual prevention of
      this will be in a separate patch for the sake of an easier revert down
      the road), that it is not possible to branch out to create more than
      one checkpoint child to a given parent, although it may become
      possible later when we revert to a snapshot that coincides with a
      checkpoint.  This also means that for now, the decision of which
      checkpoint becomes the parent of a newly created one is the only
      checkpoint with no child (so while there are APIs for dealing with a
      current snapshot, we do not need those for checkpoints).  We may end
      up exposing a notion of a current checkpoint later, but it's easier to
      add stuff when proven needed than to blindly support it now and wish
      we hadn't exposed it.
      
      The following map shows the API relations to snapshots, with new APIs
      on the right:
      
      Operate on a domain object to create/redefine a child:
      virDomainSnapshotCreateXML          virDomainCheckpointCreateXML
      
      Operate on a child object for lifetime management:
      virDomainSnapshotDelete             virDomainCheckpointDelete
      virDomainSnapshotFree               virDomainCheckpointFree
      virDomainSnapshotRef                virDomainCheckpointRef
      
      Operate on a child object to learn more about it:
      virDomainSnapshotGetXMLDesc         virDomainCheckpointGetXMLDesc
      virDomainSnapshotGetConnect         virDomainCheckpointGetConnect
      virDomainSnapshotGetDomain          virDomainCheckpointGetDomain
      virDomainSnapshotGetName            virDomainCheckpiontGetName
      virDomainSnapshotGetParent          virDomainCheckpiontGetParent
      virDomainSnapshotHasMetadata        (deferred for later)
      virDomainSnapshotIsCurrent          (no counterpart, see note above)
      
      Operate on a domain object to list all children:
      virDomainSnapshotNum                (no counterparts, these are the old
      virDomainSnapshotListNames           racy interfaces)
      virDomainSnapshotListAllSnapshots   virDomainListAllCheckpoints
      
      Operate on a child object to list descendents:
      virDomainSnapshotNumChildren        (no counterparts, these are the old
      virDomainSnapshotListChildrenNames   racy interfaces)
      virDomainSnapshotListAllChildren    virDomainCheckpointListAllChildren
      
      Operate on a domain to locate a particular child:
      virDomainSnapshotLookupByName       virDomainCheckpointLookupByName
      virDomainSnapshotCurrent            (no counterpart, see note above)
      virDomainHasCurrentSnapshot         (no counterpart, old racy interface)
      
      Operate on a snapshot to roll back to earlier state:
      virDomainSnapshotRevert             (no counterpart, instead checkpoints
                                           are used in incremental backups via
      				     XML to virDomainBackupBegin)
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      0d44788f
    • E
      backup: Document new XML for checkpoints · d85842cf
      Eric Blake 提交于
      Prepare for new checkpoint APIs by describing the XML that will
      represent a checkpoint.  The checkpoint XML is modeled heavily after
      virDomainSnapshotPtr. See the docs for more details.
      
      Add testsuite coverage for some minimal uses of the XML (bare minimum,
      the sample from html, and a full dumpxml, and some counter-examples
      that should fail schema validation). Although use of the REDEFINE flag
      will require the <domain> subelement to be present, it is easier for
      most of the tests to provide counterpart output produced with the
      NO_DOMAIN flag (particularly since synthesizing a valid <domain>
      during testing is not trivial).
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NDaniel P. Berrangé <berrange@redhat.com>
      d85842cf
  7. 12 7月, 2019 1 次提交
  8. 21 6月, 2019 1 次提交
    • D
      remote: delete the avahi mDNS support · 5a148ce8
      Daniel P. Berrangé 提交于
      Libvirtd has long had integration with avahi for advertising libvirtd
      using mDNS when TCP/TLS listening is enabled. For a long time the
      virt-manager application had support for auto-detecting libvirtds
      on the local network using mDNS, but this was removed last year
      
        commit fc8f8d5d7e3ba80a0771df19cf20e84a05ed2422
        Author: Cole Robinson <crobinso@redhat.com>
        Date:   Sat Oct 6 20:55:31 2018 -0400
      
          connect: Drop avahi support
      
          Libvirtd can advertise itself over avahi. The feature is disabled by
          default though and in practice I hear of no one actually using it
          and frankly I don't think it's all that useful
      
          The 'Open Connection' wizard has a disproportionate amount of code
          devoted to this feature, but I don't think it's useful or worth
          maintaining, so let's drop it
      
      I've never heard of any other applications having support for using
      mDNS to detect libvirtd instances. Though it is theoretically possible
      something exists out there, it is clearly going to be a niche use case
      in the virt ecosystem as a whole.
      
      By removing avahi integration we can cut down the dependency chain for
      the basic libvirtd install and reduce our code maint burden.
      Reviewed-by: NJán Tomko <jtomko@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      5a148ce8
  9. 17 6月, 2019 1 次提交
  10. 03 6月, 2019 2 次提交
  11. 27 5月, 2019 4 次提交
  12. 20 5月, 2019 1 次提交
    • D
      rpm: remove dependancy from qemu to network/storage drivers · 06a61a20
      Daniel P. Berrangé 提交于
      The libvirt-daemon-driver-qemu RPM has historically had a hard
      dependency on the libvirt-daemon-driver-network and
      libvirt-daemon-driver-storage-core packages. This was because the QEMU
      driver would directly call into APIs that were part of these drivers.
      
      The dependency to the storage driver was eliminated in
      
        commit 064fec69
        Author: Daniel P. Berrangé <berrange@redhat.com>
        Date:   Thu Jan 25 09:35:46 2018 +0000
      
          storage: move storage file backend framework into util directory
      
      The dependency to the network driver was eliminated in
      
        commit 5b13570a
        Author: Daniel P. Berrangé <berrange@redhat.com>
        Date:   Thu Jan 25 09:35:47 2018 +0000
      
          conf: introduce callback registration for domain net device allocation
      
        commit 1438aea4
        Author: Daniel P. Berrangé <berrange@redhat.com>
        Date:   Thu Jan 25 09:35:48 2018 +0000
      
          conf: expand network device callbacks to cover bandwidth updates
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      06a61a20
  13. 13 5月, 2019 2 次提交
    • A
      examples: Install under $(docdir) · 4faaaa8b
      Andrea Bolognani 提交于
      Our build system doesn't currently install the various
      example programs provided along libvirt; however, both the
      upstream .spec file and the Debian packaging go out of
      their way to make sure these useful demos are included in
      the respective documentation packages.
      
      Moreover, doing so without help from the upstream build
      system is easy to get wrong: the libvirt-docs RPM package,
      for example, ends up missing one of the examples and
      including a bunch of empty .deps/ directories.
      
      Install the examples in $(docdir) as part of our regular
      procedure, so that users and downstreams don't have to do
      anything special about them.
      Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
      Acked-by: NMichal Privoznik <mprivozn@redhat.com>
      4faaaa8b
    • A
      docs: Install documentation under $(docdir) · 6716c997
      Andrea Bolognani 提交于
      At the moment we allow the user to specify exactly where
      they want the HTML documentation to be installed with an
      extreme level of precision through the --with-html-dir and
      --with-html-subdir configure options.
      
      Most of the time, of course, the user will stick with the
      default, that is $(datadir)/doc/$(PACKAGE)-$(VERSION)/html.
      
      So close to $(docdir)! Including the version number in
      the path, specifically, seems entirely unnecessary since
      different releases of libvirt are not going to be able to
      coexist on the same system anyway.
      
      Drop all these custom flexibilty for flexibilty's sake
      shenaningans in favor of the standard, well understood
      $(docdir).
      Signed-off-by: NAndrea Bolognani <abologna@redhat.com>
      Acked-by: NMichal Privoznik <mprivozn@redhat.com>
      6716c997
  14. 09 5月, 2019 1 次提交
  15. 01 5月, 2019 1 次提交
  16. 12 4月, 2019 1 次提交
  17. 27 3月, 2019 1 次提交
  18. 22 3月, 2019 2 次提交
  19. 21 3月, 2019 1 次提交