Skip to content
  • Stefan Hajnoczi's avatar
    qga: add systemd socket activation support · 26de2296
    Stefan Hajnoczi authored
    AF_UNIX and AF_VSOCK listen sockets can be passed in by systemd on
    startup.  This allows systemd to manage the listen socket until the
    first client connects and between restarts.  Advantages of socket
    activation are that parallel startup of network services becomes
    possible and that unused daemons do not consume memory.
    
    The key to achieving this is the LISTEN_FDS environment variable, which
    is a stable ABI as shown here:
    https://www.freedesktop.org/wiki/Software/systemd/InterfacePortabilityAndStabilityChart/
    
    
    
    We could link against libsystemd and use sd_listen_fds(3) but it's easy
    to implement the tiny LISTEN_FDS ABI so that qemu-ga does not depend on
    libsystemd.  Some systems may not have systemd installed and wish to
    avoid the dependency.  Other init systems or socket activation servers
    may implement the same ABI without systemd involvement.
    
    Test as follows:
    
      $ cat ~/.config/systemd/user/qga.service
      [Unit]
      Description=qga
    
      [Service]
      WorkingDirectory=/tmp
      ExecStart=/path/to/qemu-ga --logfile=/tmp/qga.log --pidfile=/tmp/qga.pid --statedir=/tmp
    
      $ cat ~/.config/systemd/user/qga.socket
      [Socket]
      ListenStream=/tmp/qga.sock
    
      [Install]
      WantedBy=default.target
    
      $ systemctl --user daemon-reload
      $ systemctl --user start qga.socket
      $ nc -U /tmp/qga.sock
    
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: default avatarDaniel P. Berrange <berrange@redhat.com>
    Signed-off-by: default avatarMichael Roth <mdroth@linux.vnet.ibm.com>
    26de2296