[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] systemd: add xen systemd service and module files



commit 015330004ec6f6658aa454aec301cad6083a87df
Author:     Luis R. Rodriguez <mcgrof@xxxxxxxx>
AuthorDate: Wed Jul 30 09:40:03 2014 -0700
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Mon Aug 4 14:58:24 2014 +0100

    systemd: add xen systemd service and module files

    This adds the systemd xen service / module files and integrates
    support into the build system.

    This goes in with AX_AVAILABLE_SYSTEMD() which will enable
    systemd if development libraries have been found on your
    build system. If you don't have systemd on target systems
    for binaries built with systemd then the binary will not
    work, you must explicitly disable systemd support if you
    do not want to build systemd support.

    When systemd libraries are present only systems that
    have booted into systemd go through the systemd initialization,
    otherwise the SysVinit is used.

    These are originally based on the Fedora systemd files.

    Changes made from Fedora's systemd files:

      * split sockets into two files to claim different permissions
      * Use /bin/sh -c exec to for a simple launcher implementation
      * enables systemd socket activation for C xenstored and Ocaml
        oxenstored
      * use sd_notify(), so change the service to Type=notify, because of
        this we remove the PIDFile specification as we don't care for it, and 
let
        systemd do its magic for us, this also means we don't have to fork
        so we use --no-fork with systemd
      * defines a modules-load.d, its original source file will be shared
        between systemd and old init systems
      * simplify service files with ConditionVirtualization=xen which uses
        the built in systemd virtualization backend detection, these
        service files will not be available to start on systems that do not
        boot with xen as a hypervisor
      * use autoconf to replace @variable@ paths for us which piggy
        backs on top of the latest autoconf changes to xen
      * removes oxenstored service file in favor of a system variable which
        controls which which xentored to use at run time, we avoid multiple
        service files this way.
      * simplifies startup to not require polling on the sockets
        as initial socket management is handled by systemd, we just
        take on the socket later once anything pokes at it, a simple nc -U
        (as root) on any of the sockets files can activate the service for 
example.
        Anything queued up will be sent to us once we start. Socket activation
        should in theory also let us dynamically switch between xenstores but 
more
        importantly we could upgrade xenstored while keeping all active
        socket communication queued up, but in order to take advantage of
        this we eventually would need to remove the requirement of not being
        able to bring down the xenstored. Even though active sockets are
        supported since most libxl communication doesn't triggger a check
        on the unix socket first administrators are encouraged to enable
        the xenstored.service to triggger an initialization of the xenstored
        upon bring up. Some systems also never use unix sockets for
        communication with the xenstored and as such active sockets will
        not be used there.
      * allow for xenstored configuration through *either* of these
        configuration files:
        - /etc/sysconfig/xenstored
        - /etc/default/xenstored
        The /etc/default/xenstored will let debian based systems do
        the same, while SUSE/OpenSUSE/Fedora/RedHat can keep on chugging
        with sysconfig. We leave these files all commented out by default
        though given that for systemd we want to encourage not using them.
      * ensures we create the run directory as most systems will likely
        be using a tmpfs for run dirs for the pid files
      * Some systems define the selinux context in the systemd Option for the
        /var/lib/xenstored tmpfs:
        Options=mode=755,context="system_u:object_r:xenstored_var_lib_t:s0"
        For the upstream version we remove that and let systems specify the
        context on their system /etc/default/xenstored or 
/etc/sysconfig/xenstored
        $XENSTORED_MOUNT_CTX variable, with a default to none.
      * takes advantage of the shared xendomains helper for the xendomains
        service
      * Add the new dom0 that gets kicked off for disk backend access into
        its own systemd service associated to xen

    We end up with these systemd files:

    General requirements:

      * proc-xen.mount
      * var-lib-xenstored.mount

    xenstored:

      * xenstored.service
      * xenstored.socket
      * xenstored_ro.socket
      * xenconsoled.service
      * xen-qemu-dom0-disk-backend.service.in

    Optional:

      * xendomains.service
      * xen-watchdog.service

    As for integration with xen, we house keep all the systemd files
    under a new directory tools/hotplug/Linux/systemd/ and will be targeted
    by default when building on Linux systems if systemd development
    libraries are present at build time.

    The systemd files will be sanitized for meta @VARIABLES@ upon
    configuration and installed upon the install target. Systems that
    do not use systemd can still get systemd service unit files installed
    if the build system enabled systemd support, this however does not
    mandate a requirement of having systemd libraries present. Old init
    scripts are always installed.

    If you don't specify a prefix you will end up with the services
    files under /usr/local/lib/systemd/system/ by default, and systemd
    modules-load.d conf files under /usr/local/lib/modules-load.d/ which
    systemd does look for (although it seems this is not documented).

    Distributions are expected to provide their /usr/ prefix to end up in
    the more generic location upon distribution install at
    /usr/lib/systemd/system/ and /usr/lib/modules-load.d/ respectively.

    Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
    Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
    Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
    Cc: Jan RÄ?korajski <baggins@xxxxxxxxxxxxx>
    Cc: M A Young <m.a.young@xxxxxxxxxxxx>
    Cc: Jacek Konieczny <jajcus@xxxxxxxxxx>
    Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx
    Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxx>
    Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
    [ ijc -- ran autogen.sh ]
---
 .gitignore                                         |    5 +
 Makefile                                           |    6 +-
 README                                             |   16 +
 config/Tools.mk.in                                 |    6 +
 m4/README.source                                   |    8 +
 m4/systemd.m4                                      |  123 +++++++
 tools/config.h.in                                  |    3 +
 tools/configure                                    |  352 +++++++++++++++++++-
 tools/configure.ac                                 |   11 +
 tools/hotplug/Linux/Makefile                       |    8 +-
 tools/hotplug/Linux/systemd/Makefile               |   67 ++++
 tools/hotplug/Linux/systemd/proc-xen.mount.in      |    9 +
 .../Linux/systemd/var-lib-xenstored.mount.in       |   13 +
 .../systemd/xen-qemu-dom0-disk-backend.service.in  |   22 ++
 .../hotplug/Linux/systemd/xen-watchdog.service.in  |   13 +
 tools/hotplug/Linux/systemd/xenconsoled.service.in |   20 ++
 tools/hotplug/Linux/systemd/xendomains.service.in  |   16 +
 tools/hotplug/Linux/systemd/xenstored.service.in   |   27 ++
 tools/hotplug/Linux/systemd/xenstored.socket.in    |   11 +
 tools/hotplug/Linux/systemd/xenstored_ro.socket.in |   11 +
 tools/ocaml/xenstored/Makefile                     |    5 +
 tools/xenstore/Makefile                            |    6 +
 22 files changed, 752 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index f1d1b9c..6d725aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -353,3 +353,8 @@ tools/xenstore/xenstore-watch
 docs/txt/misc/*.txt
 docs/txt/man/*.txt
 docs/figs/*.png
+
+tools/hotplug/Linux/systemd/*.conf
+tools/hotplug/Linux/systemd/*.mount
+tools/hotplug/Linux/systemd/*.socket
+tools/hotplug/Linux/systemd/*.service
diff --git a/Makefile b/Makefile
index 41dabbf..580df64 100644
--- a/Makefile
+++ b/Makefile
@@ -216,8 +216,12 @@ uninstall:
        rm -f  $(D)$(CONFIG_DIR)/udev/rules.d/xen-backend.rules
        rm -f  $(D)$(CONFIG_DIR)/udev/rules.d/xend.rules
        rm -f  $(D)$(SYSCONFIG_DIR)/xendomains
+       rm -f  $(D)$(SBINDIR)/xendomains
        rm -f  $(D)$(SYSCONFIG_DIR)/xencommons
-       rm -rf $(D)/var/run/xen* $(D)/var/lib/xen*
+       rm -f  $(D)$(XEN_SYSTEMD_DIR)/*.service
+       rm -f  $(D)$(XEN_SYSTEMD_DIR)/*.mount
+       rm -f  $(D)$(XEN_SYSTEMD_MODULES_LOAD)/*.conf
+       rm -rf $(D)$(XEN_RUN_DIR)* $(D)/var/lib/xen*
        make -C tools uninstall
        rm -rf $(D)/boot/tboot*

diff --git a/README b/README
index 7c27fbb..81bf938 100644
--- a/README
+++ b/README
@@ -72,6 +72,7 @@ disabled at compile time:
     * cmake (if building vtpm stub domains)
     * markdown
     * figlet (for generating the traditional Xen start of day banner)
+    * systemd daemon development files

 Second, you need to acquire a suitable kernel for use in domain 0. If
 possible you should use a kernel provided by your OS distributor. If
@@ -161,6 +162,21 @@ change take effect.
 [1] http://wiki.xen.org/wiki/XenStoreReference
 [2] http://wiki.xen.org/wiki/Xenstored

+Systemd support
+===============
+
+If you have systemd development packages installed you can build binaries
+with systemd support. Systemd support is enabled by default if you have
+systemd development libraries present. If you want to force enable systemd to
+ensure you build binaries with systemd support you can use the --enable-systemd
+flag. Likewise if you want to force disable systemd you can use:
+
+       ./configure --disable-systemd
+
+For more details refer to the xen xenstored systemd wiki page [3].
+
+[3] http://wiki.xen.org/wiki/Xenstored#xenstored_systemd_support
+
 Python Runtime Libraries
 ========================

diff --git a/config/Tools.mk.in b/config/Tools.mk.in
index 748cc69..974e28e 100644
--- a/config/Tools.mk.in
+++ b/config/Tools.mk.in
@@ -63,6 +63,12 @@ CONFIG_BLKTAP2      := @blktap2@
 CONFIG_VTPM         := @vtpm@
 CONFIG_QEMUU_EXTRA_ARGS:= @EXTRA_QEMUU_CONFIGURE_ARGS@

+CONFIG_SYSTEMD      := @systemd@
+SYSTEMD_CFLAGS      := @SYSTEMD_CFLAGS@
+SYSTEMD_LIBS        := @SYSTEMD_LIBS@
+XEN_SYSTEMD_DIR     := @SYSTEMD_DIR@
+XEN_SYSTEMD_MODULES_LOAD := @SYSTEMD_MODULES_LOAD@
+
 #System options
 ZLIB                := @zlib@
 CONFIG_LIBICONV     := @libiconv@
diff --git a/m4/README.source b/m4/README.source
index 8922ea0..21850a6 100644
--- a/m4/README.source
+++ b/m4/README.source
@@ -26,3 +26,11 @@ Date:   Mon Feb 3 15:59:18 2014 -0800
     With the newly added glib.mk, some of the noinst_* variables need to use
     += in the evaluation to avoid multiple definition warnings from
     automake.
+
+systemd.m4
+==========
+
+systemd.m4 was contributed to by Luis R. Rodriguez <mcgrof@xxxxxxxxxxxxxxxx>,
+its current home project can be found at:
+
+https://github.com/mcgrof/funk-systemd
diff --git a/m4/systemd.m4 b/m4/systemd.m4
new file mode 100644
index 0000000..760bbad
--- /dev/null
+++ b/m4/systemd.m4
@@ -0,0 +1,123 @@
+# systemd.m4 - Macros to check for and enable systemd          -*- Autoconf -*-
+#
+# Copyright (C) 2014 Luis R. Rodriguez <mcgrof@xxxxxxxx>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+dnl Some optional path options
+AC_DEFUN([AX_SYSTEMD_OPTIONS], [
+       AC_ARG_WITH(systemd, [  --with-systemd          set directory for 
systemd service files],
+               SYSTEMD_DIR="$withval", SYSTEMD_DIR="")
+       AC_SUBST(SYSTEMD_DIR)
+
+       AC_ARG_WITH(systemd, [  --with-systemd-modules-load          set 
directory for systemd modules load files],
+               SYSTEMD_MODULES_LOAD="$withval", SYSTEMD_MODULES_LOAD="")
+       AC_SUBST(SYSTEMD_MODULES_LOAD)
+])
+
+AC_DEFUN([AX_ENABLE_SYSTEMD_OPTS], [
+       AX_ARG_DEFAULT_ENABLE([systemd], [Disable systemd support])
+       AX_SYSTEMD_OPTIONS()
+])
+
+AC_DEFUN([AX_ALLOW_SYSTEMD_OPTS], [
+       AX_ARG_DEFAULT_DISABLE([systemd], [Enable systemd support])
+       AX_SYSTEMD_OPTIONS()
+])
+
+AC_DEFUN([AX_CHECK_SYSTEMD_LIBS], [
+       AC_CHECK_HEADER([systemd/sd-daemon.h], [
+           AC_CHECK_LIB([systemd-daemon], [sd_listen_fds], 
[libsystemddaemon="y"])
+       ])
+       AS_IF([test "x$libsystemddaemon" = x], [
+           AC_MSG_ERROR([Unable to find a suitable libsystemd-daemon library])
+       ])
+
+       PKG_CHECK_MODULES([SYSTEMD], [libsystemd-daemon])
+       dnl pkg-config older than 0.24 does not set these for
+       dnl PKG_CHECK_MODULES() worth also noting is that as of version 208
+       dnl of systemd pkg-config --cflags currently yields no extra flags yet.
+       AC_SUBST([SYSTEMD_CFLAGS])
+       AC_SUBST([SYSTEMD_LIBS])
+
+       AS_IF([test "x$SYSTEMD_DIR" = x], [
+           dnl In order to use the line below we need to fix upstream systemd
+           dnl to properly ${prefix} for child variables in
+           dnl src/core/systemd.pc.in but this is a bit complex at the
+           dnl moment as they depend on another rootprefix, which can vary
+           dnl from prefix in practice. We provide our own definition as we
+           dnl *know* where systemd will dump this to, but this does limit
+           dnl us to stick to a non custom systemdsystemunitdir, to work
+           dnl around this we provide the additional configure option
+           dnl --with-systemd where you can specify the directory for the unit
+           dnl files. It would also be best to just extend the upstream
+           dnl pkg-config  pkg.m4 with an AC_DEFUN() to do this neatly.
+           dnl SYSTEMD_DIR="`$PKG_CONFIG --define-variable=prefix=$PREFIX 
--variable=systemdsystemunitdir systemd`"
+           SYSTEMD_DIR="\$(prefix)/lib/systemd/system/"
+       ], [])
+
+       AS_IF([test "x$SYSTEMD_DIR" = x], [
+           AC_MSG_ERROR([SYSTEMD_DIR is unset])
+       ], [])
+
+       dnl There is no variable for this yet for some reason
+       AS_IF([test "x$SYSTEMD_MODULES_LOAD" = x], [
+           SYSTEMD_MODULES_LOAD="\$(prefix)/lib/modules-load.d/"
+       ], [])
+
+       AS_IF([test "x$SYSTEMD_MODULES_LOAD" = x], [
+           AC_MSG_ERROR([SYSTEMD_MODULES_LOAD is unset])
+       ], [])
+])
+
+AC_DEFUN([AX_CHECK_SYSTEMD], [
+       dnl Respect user override to disable
+       AS_IF([test "x$enable_systemd" != "xno"], [
+            AS_IF([test "x$systemd" = "xy" ], [
+               AC_DEFINE([HAVE_SYSTEMD], [1], [Systemd available and enabled])
+                       systemd=y
+                       AX_CHECK_SYSTEMD_LIBS()
+           ],[systemd=n])
+       ],[systemd=n])
+])
+
+AC_DEFUN([AX_CHECK_SYSTEMD_ENABLE_AVAILABLE], [
+       AC_CHECK_HEADER([systemd/sd-daemon.h], [
+           AC_CHECK_LIB([systemd-daemon], [sd_listen_fds], [systemd="y"])
+       ])
+])
+
+dnl Enables systemd by default and requires a --disable-systemd option flag
+dnl to configure if you want to disable.
+AC_DEFUN([AX_ENABLE_SYSTEMD], [
+       AX_ENABLE_SYSTEMD_OPTS()
+       AX_CHECK_SYSTEMD()
+])
+
+dnl Systemd will be disabled by default and requires you to run configure with
+dnl --enable-systemd to look for and enable systemd.
+AC_DEFUN([AX_ALLOW_SYSTEMD], [
+       AX_ALLOW_SYSTEMD_OPTS()
+       AX_CHECK_SYSTEMD()
+])
+
+dnl Systemd will be disabled by default but if your build system is detected
+dnl to have systemd build libraries it will be enabled. You can always force
+dnl disable with --disable-systemd
+AC_DEFUN([AX_AVAILABLE_SYSTEMD], [
+       AX_ALLOW_SYSTEMD_OPTS()
+       AX_CHECK_SYSTEMD_ENABLE_AVAILABLE()
+       AX_CHECK_SYSTEMD()
+])
diff --git a/tools/config.h.in b/tools/config.h.in
index 40f3d1c..2a0ae48 100644
--- a/tools/config.h.in
+++ b/tools/config.h.in
@@ -42,6 +42,9 @@
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H

+/* Systemd available and enabled */
+#undef HAVE_SYSTEMD
+
 /* Define to 1 if you have the <sys/eventfd.h> header file. */
 #undef HAVE_SYS_EVENTFD_H

diff --git a/tools/configure b/tools/configure
index 08d6a05..7c9bbca 100755
--- a/tools/configure
+++ b/tools/configure
@@ -624,6 +624,11 @@ ac_includes_default="\

 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+SYSTEMD_LIBS
+SYSTEMD_CFLAGS
+SYSTEMD_MODULES_LOAD
+SYSTEMD_DIR
+systemd
 libiconv
 PTYFUNCS_LIBS
 PTHREAD_LIBS
@@ -791,6 +796,8 @@ with_system_seabios
 with_system_ovmf
 with_extra_qemuu_configure_args
 with_xenstored
+enable_systemd
+with_systemd
 '
       ac_precious_vars='build_alias
 host_alias
@@ -821,7 +828,9 @@ PKG_CONFIG
 PKG_CONFIG_PATH
 PKG_CONFIG_LIBDIR
 glib_CFLAGS
-glib_LIBS'
+glib_LIBS
+SYSTEMD_CFLAGS
+SYSTEMD_LIBS'


 # Initialize some variables set by options.
@@ -1453,6 +1462,7 @@ Optional Features:
                           for Linux or NetBSD x86, otherwise off)
   --enable-rombios        Enable ROMBIOS, (DEFAULT is on if qemu-traditional
                           is enabled, otherwise off)
+  --enable-systemd        Enable systemd support (default is DISABLED)

 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1481,6 +1491,8 @@ Optional Packages:
                           ocaml dependencies resolved we'll enable the C
                           xenstored for you. If you ask for oxenstored we'll
                           complain until you resolve those dependencies
+  --with-systemd          set directory for systemd service files
+  --with-systemd-modules-load          set directory for systemd modules load 
files

 Some influential environment variables:
   CC          C compiler command
@@ -1516,6 +1528,10 @@ Some influential environment variables:
               path overriding pkg-config's built-in search path
   glib_CFLAGS C compiler flags for glib, overriding pkg-config
   glib_LIBS   linker flags for glib, overriding pkg-config
+  SYSTEMD_CFLAGS
+              C compiler flags for SYSTEMD, overriding pkg-config
+  SYSTEMD_LIBS
+              linker flags for SYSTEMD, overriding pkg-config

 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -2235,7 +2251,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu



-ac_config_files="$ac_config_files ../config/Tools.mk 
hotplug/Linux/init.d/xencommons.in hotplug/Linux/init.d/sysconfig.xencommons"
+ac_config_files="$ac_config_files ../config/Tools.mk 
hotplug/Linux/init.d/xencommons.in hotplug/Linux/init.d/sysconfig.xencommons 
hotplug/Linux/systemd/proc-xen.mount 
hotplug/Linux/systemd/var-lib-xenstored.mount 
hotplug/Linux/systemd/xenstored.socket 
hotplug/Linux/systemd/xenstored_ro.socket 
hotplug/Linux/systemd/xenstored.service 
hotplug/Linux/systemd/xenconsoled.service 
hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service 
hotplug/Linux/systemd/xendomains.service 
hotplug/Linux/systemd/xen-watchdog.service"

 ac_config_headers="$ac_config_headers config.h"

@@ -3626,6 +3642,42 @@ esac



+# systemd.m4 - Macros to check for and enable systemd          -*- Autoconf -*-
+#
+# Copyright (C) 2014 Luis R. Rodriguez <mcgrof@xxxxxxxx>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


 test "x$prefix" = "xNONE" && prefix=$ac_default_prefix
@@ -8333,6 +8385,293 @@ done

 fi # ! $rump

+
+
+
+# Check whether --enable-systemd was given.
+if test "${enable_systemd+set}" = set; then :
+  enableval=$enable_systemd;
+fi
+
+
+if test "x$enable_systemd" = "xno"; then :
+
+    ax_cv_systemd="n"
+
+elif test "x$enable_systemd" = "xyes"; then :
+
+    ax_cv_systemd="y"
+
+elif test -z $ax_cv_systemd; then :
+
+    ax_cv_systemd="n"
+
+fi
+systemd=$ax_cv_systemd
+
+
+
+
+# Check whether --with-systemd was given.
+if test "${with_systemd+set}" = set; then :
+  withval=$with_systemd; SYSTEMD_DIR="$withval"
+else
+  SYSTEMD_DIR=""
+fi
+
+
+
+
+# Check whether --with-systemd was given.
+if test "${with_systemd+set}" = set; then :
+  withval=$with_systemd; SYSTEMD_MODULES_LOAD="$withval"
+else
+  SYSTEMD_MODULES_LOAD=""
+fi
+
+
+
+
+
+       ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-daemon.h" 
"ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes; then :
+
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_listen_fds 
in -lsystemd-daemon" >&5
+$as_echo_n "checking for sd_listen_fds in -lsystemd-daemon... " >&6; }
+if ${ac_cv_lib_systemd_daemon_sd_listen_fds+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsystemd-daemon  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sd_listen_fds ();
+int
+main ()
+{
+return sd_listen_fds ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_systemd_daemon_sd_listen_fds=yes
+else
+  ac_cv_lib_systemd_daemon_sd_listen_fds=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 
$ac_cv_lib_systemd_daemon_sd_listen_fds" >&5
+$as_echo "$ac_cv_lib_systemd_daemon_sd_listen_fds" >&6; }
+if test "x$ac_cv_lib_systemd_daemon_sd_listen_fds" = xyes; then :
+  systemd="y"
+fi
+
+
+fi
+
+
+
+
+               if test "x$enable_systemd" != "xno"; then :
+
+            if test "x$systemd" = "xy" ; then :
+
+
+$as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h
+
+                       systemd=y
+
+       ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-daemon.h" 
"ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes; then :
+
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_listen_fds 
in -lsystemd-daemon" >&5
+$as_echo_n "checking for sd_listen_fds in -lsystemd-daemon... " >&6; }
+if ${ac_cv_lib_systemd_daemon_sd_listen_fds+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsystemd-daemon  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sd_listen_fds ();
+int
+main ()
+{
+return sd_listen_fds ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_systemd_daemon_sd_listen_fds=yes
+else
+  ac_cv_lib_systemd_daemon_sd_listen_fds=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 
$ac_cv_lib_systemd_daemon_sd_listen_fds" >&5
+$as_echo "$ac_cv_lib_systemd_daemon_sd_listen_fds" >&6; }
+if test "x$ac_cv_lib_systemd_daemon_sd_listen_fds" = xyes; then :
+  libsystemddaemon="y"
+fi
+
+
+fi
+
+
+       if test "x$libsystemddaemon" = x; then :
+
+           as_fn_error $? "Unable to find a suitable libsystemd-daemon 
library" "$LINENO" 5
+
+fi
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SYSTEMD" >&5
+$as_echo_n "checking for SYSTEMD... " >&6; }
+
+if test -n "$SYSTEMD_CFLAGS"; then
+    pkg_cv_SYSTEMD_CFLAGS="$SYSTEMD_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"libsystemd-daemon\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd-daemon" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$SYSTEMD_LIBS"; then
+    pkg_cv_SYSTEMD_LIBS="$SYSTEMD_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"libsystemd-daemon\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libsystemd-daemon") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_SYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd-daemon" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors 
--cflags --libs "libsystemd-daemon" 2>&1`
+        else
+               SYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs 
"libsystemd-daemon" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$SYSTEMD_PKG_ERRORS" >&5
+
+       as_fn_error $? "Package requirements (libsystemd-daemon) were not met:
+
+$SYSTEMD_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make 
sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SYSTEMD_CFLAGS
+and SYSTEMD_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+       SYSTEMD_CFLAGS=$pkg_cv_SYSTEMD_CFLAGS
+       SYSTEMD_LIBS=$pkg_cv_SYSTEMD_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+
+
+       if test "x$SYSTEMD_DIR" = x; then :
+
+                                                                               
                            SYSTEMD_DIR="\$(prefix)/lib/systemd/system/"
+
+fi
+
+       if test "x$SYSTEMD_DIR" = x; then :
+
+           as_fn_error $? "SYSTEMD_DIR is unset" "$LINENO" 5
+
+fi
+
+               if test "x$SYSTEMD_MODULES_LOAD" = x; then :
+
+           SYSTEMD_MODULES_LOAD="\$(prefix)/lib/modules-load.d/"
+
+fi
+
+       if test "x$SYSTEMD_MODULES_LOAD" = x; then :
+
+           as_fn_error $? "SYSTEMD_MODULES_LOAD is unset" "$LINENO" 5
+
+fi
+
+
+else
+  systemd=n
+fi
+
+else
+  systemd=n
+fi
+
+
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -9028,6 +9367,15 @@ do
     "../config/Tools.mk") CONFIG_FILES="$CONFIG_FILES ../config/Tools.mk" ;;
     "hotplug/Linux/init.d/xencommons.in") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/init.d/xencommons.in" ;;
     "hotplug/Linux/init.d/sysconfig.xencommons") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/init.d/sysconfig.xencommons" ;;
+    "hotplug/Linux/systemd/proc-xen.mount") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/proc-xen.mount" ;;
+    "hotplug/Linux/systemd/var-lib-xenstored.mount") 
CONFIG_FILES="$CONFIG_FILES hotplug/Linux/systemd/var-lib-xenstored.mount" ;;
+    "hotplug/Linux/systemd/xenstored.socket") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xenstored.socket" ;;
+    "hotplug/Linux/systemd/xenstored_ro.socket") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xenstored_ro.socket" ;;
+    "hotplug/Linux/systemd/xenstored.service") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xenstored.service" ;;
+    "hotplug/Linux/systemd/xenconsoled.service") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xenconsoled.service" ;;
+    "hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service") 
CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service" ;;
+    "hotplug/Linux/systemd/xendomains.service") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xendomains.service" ;;
+    "hotplug/Linux/systemd/xen-watchdog.service") CONFIG_FILES="$CONFIG_FILES 
hotplug/Linux/systemd/xen-watchdog.service" ;;
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;

   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
diff --git a/tools/configure.ac b/tools/configure.ac
index e74fe4b..f44b9f3 100644
--- a/tools/configure.ac
+++ b/tools/configure.ac
@@ -9,6 +9,15 @@ AC_CONFIG_FILES([
 ../config/Tools.mk
 hotplug/Linux/init.d/xencommons.in
 hotplug/Linux/init.d/sysconfig.xencommons
+hotplug/Linux/systemd/proc-xen.mount
+hotplug/Linux/systemd/var-lib-xenstored.mount
+hotplug/Linux/systemd/xenstored.socket
+hotplug/Linux/systemd/xenstored_ro.socket
+hotplug/Linux/systemd/xenstored.service
+hotplug/Linux/systemd/xenconsoled.service
+hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service
+hotplug/Linux/systemd/xendomains.service
+hotplug/Linux/systemd/xen-watchdog.service
 ])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_AUX_DIR([../])
@@ -59,6 +68,7 @@ m4_include([../m4/fetcher.m4])
 m4_include([../m4/ax_compare_version.m4])
 m4_include([../m4/paths.m4])
 m4_include([../m4/xenstored.m4])
+m4_include([../m4/systemd.m4])

 AX_XEN_EXPAND_CONFIG()

@@ -310,5 +320,6 @@ AC_CHECK_HEADERS([yajl/yajl_version.h sys/eventfd.h 
valgrind/memcheck.h utmp.h])

 fi # ! $rump

+AX_AVAILABLE_SYSTEMD()
 AC_OUTPUT()

diff --git a/tools/hotplug/Linux/Makefile b/tools/hotplug/Linux/Makefile
index 3d2d344..d5a9ed2 100644
--- a/tools/hotplug/Linux/Makefile
+++ b/tools/hotplug/Linux/Makefile
@@ -25,6 +25,8 @@ XEN_SCRIPTS += vscsi
 XEN_SCRIPTS += block-iscsi
 XEN_SCRIPTS += $(XEN_SCRIPTS-y)

+SUBDIRS-$(CONFIG_SYSTEMD) += systemd
+
 XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh
 XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh
 XEN_SCRIPT_DATA += block-common.sh
@@ -33,7 +35,7 @@ UDEV_RULES_DIR = $(CONFIG_DIR)/udev
 UDEV_RULES = xen-backend.rules $(UDEV_RULES-y)

 .PHONY: all
-all: $(XENCOMMONS_INITD)
+all: $(XENCOMMONS_INITD) subdirs-all

 $(XENCOMMONS_INITD): $(XEN_ROOT)/config/$(XEN_OS).modules 
$(XENCOMMONS_INITD).in
        $(XEN_ROOT)/tools/hotplug/Linux/update-modules.sh \
@@ -45,7 +47,7 @@ $(XENCOMMONS_INITD): $(XEN_ROOT)/config/$(XEN_OS).modules 
$(XENCOMMONS_INITD).in
 build: all

 .PHONY: install
-install: all install-initd install-scripts install-udev
+install: all install-initd install-scripts install-udev subdirs-install

 # See docs/misc/distro_mapping.txt for INITD_DIR location
 .PHONY: install-initd
@@ -83,4 +85,4 @@ install-udev:
        done

 .PHONY: clean
-clean:
+clean: subdirs-clean
diff --git a/tools/hotplug/Linux/systemd/Makefile 
b/tools/hotplug/Linux/systemd/Makefile
new file mode 100644
index 0000000..dc98b67
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/Makefile
@@ -0,0 +1,67 @@
+XEN_ROOT = $(CURDIR)/../../../..
+include $(XEN_ROOT)/tools/Rules.mk
+
+XEN_SYSTEMD_MODULES = xen.conf
+
+XEN_SYSTEMD_MOUNT =  proc-xen.mount
+XEN_SYSTEMD_MOUNT += var-lib-xenstored.mount
+
+XEN_SYSTEMD_SOCKET  = xenstored.socket
+XEN_SYSTEMD_SOCKET += xenstored_ro.socket
+
+XEN_SYSTEMD_SERVICE  = xenstored.service
+XEN_SYSTEMD_SERVICE += xenconsoled.service
+XEN_SYSTEMD_SERVICE += xen-qemu-dom0-disk-backend.service
+XEN_SYSTEMD_SERVICE += xendomains.service
+XEN_SYSTEMD_SERVICE += xen-watchdog.service
+
+ALL_XEN_SYSTEMD =      $(XEN_SYSTEMD_MODULES)  \
+                       $(XEN_SYSTEMD_MOUNT)    \
+                       $(XEN_SYSTEMD_SOCKET)   \
+                       $(XEN_SYSTEMD_SERVICE)
+
+.PHONY: all
+all:   $(ALL_XEN_SYSTEMD)
+
+.PHONY: clean
+clean:
+
+.PHONY: install
+install: $(ALL_XEN_SYSTEMD)
+       [ -d $(DESTDIR)$(XEN_SYSTEMD_DIR) ] || \
+               $(INSTALL_DIR) $(DESTDIR)$(XEN_SYSTEMD_DIR)
+       [ -d $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD) ] || \
+               $(INSTALL_DIR) $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD)
+       $(INSTALL_DATA) *.socket $(DESTDIR)$(XEN_SYSTEMD_DIR)
+       $(INSTALL_DATA) *.service $(DESTDIR)$(XEN_SYSTEMD_DIR)
+       $(INSTALL_DATA) *.mount $(DESTDIR)$(XEN_SYSTEMD_DIR)
+       $(INSTALL_DATA) *.conf $(DESTDIR)$(XEN_SYSTEMD_MODULES_LOAD)
+
+$(XEN_SYSTEMD_MODULES): $(XEN_ROOT)/config/$(XEN_OS).modules
+       @set -e ;                                                       \
+       IFS=''                                                          ;\
+       cat  $(XEN_ROOT)/config/$(XEN_OS).modules       | (             \
+               while read l ; do                                       \
+                       if echo $${l} | egrep -q "^#" ; then            \
+                               continue                                ;\
+                       fi                                              ;\
+                       if echo "$${l}" | egrep -q "\|" ; then          \
+                               m1=$${l%%|*}                            ;\
+                               m2=$${l#*|}                             ;\
+                               # Systemd modules-load.d lacks support  ;\
+                               # for module replacement options, we    ;\
+                               # need to add that support upstream but ;\
+                               # its best instead to ensure this file  ;\
+                               # is no longer needed. Some folks       ;\
+                               # however have reported issues with     ;\
+                               # some modules automatically loading    ;\
+                               # so we just load all necessary xen     ;\
+                               # modules and for replacements we load  ;\
+                               # the latest module                     ;\
+                               echo "$$m1" ;\
+                               echo "$$m2" ;\
+                       else                                            \
+                               echo "$$l"                              ;\
+                       fi                                              ;\
+               done                                                    \
+       ) > $@
diff --git a/tools/hotplug/Linux/systemd/proc-xen.mount.in 
b/tools/hotplug/Linux/systemd/proc-xen.mount.in
new file mode 100644
index 0000000..f0c4f3a
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/proc-xen.mount.in
@@ -0,0 +1,9 @@
+[Unit]
+Description=Mount /proc/xen files
+ConditionVirtualization=xen
+RefuseManualStop=true
+
+[Mount]
+What=xenfs
+Where=/proc/xen
+Type=xenfs
diff --git a/tools/hotplug/Linux/systemd/var-lib-xenstored.mount.in 
b/tools/hotplug/Linux/systemd/var-lib-xenstored.mount.in
new file mode 100644
index 0000000..44dfce8
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/var-lib-xenstored.mount.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=mount xenstore file system
+ConditionVirtualization=xen
+RefuseManualStop=true
+
+[Mount]
+Environment=XENSTORED_MOUNT_CTX=none
+EnvironmentFile=-/etc/sysconfig/xenstored
+EnvironmentFile=-/etc/default/xenstored
+What=xenstore
+Where=@XEN_LIB_STORED@
+Type=tmpfs
+Options=mode=755,context="$XENSTORED_MOUNT_CTX"
diff --git a/tools/hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service.in 
b/tools/hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service.in
new file mode 100644
index 0000000..8dbd110
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service.in
@@ -0,0 +1,22 @@
+[Unit]
+Description=qemu for xen dom0 disk backend
+Requires=proc-xen.mount var-lib-xenstored.mount xenstored.socket
+After=xenstored.service xenconsoled.service
+Before=xendomains.service libvirtd.service libvirt-guests.service
+RefuseManualStop=true
+ConditionVirtualization=xen
+
+[Service]
+Type=simple
+EnvironmentFile=-/etc/default/xenstored
+EnvironmentFile=-/etc/sysconfig/xenstored
+PIDFile=@XEN_RUN_DIR@/qemu-dom0.pid
+ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
+ExecStartPre=/bin/mkdir -p /var/run/xen
+ExecStart=@LIBEXEC@/qemu-system-i386 -xen-domid 0 \
+       -xen-attach -name dom0 -nographic -M xenpv -daemonize \
+       -monitor /dev/null -serial /dev/null -parallel /dev/null \
+       -pidfile @XEN_RUN_DIR@/qemu-dom0.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/tools/hotplug/Linux/systemd/xen-watchdog.service.in 
b/tools/hotplug/Linux/systemd/xen-watchdog.service.in
new file mode 100644
index 0000000..acb2b77
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xen-watchdog.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Xen-watchdog - run xen watchdog daemon
+Requires=proc-xen.mount
+After=proc-xen.mount xendomains.service
+ConditionVirtualization=xen
+
+[Service]
+Type=forking
+ExecStart=@SBINDIR@/xenwatchdogd 30 15
+KillSignal=USR1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/tools/hotplug/Linux/systemd/xenconsoled.service.in 
b/tools/hotplug/Linux/systemd/xenconsoled.service.in
new file mode 100644
index 0000000..15fad35
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xenconsoled.service.in
@@ -0,0 +1,20 @@
+[Unit]
+Description=Xenconsoled - handles logging from guest consoles and hypervisor
+Requires=xenstored.socket
+After=xenstored.service
+ConditionVirtualization=xen
+
+[Service]
+Type=simple
+Environment=XENCONSOLED_ARGS=
+Environment=XENCONSOLED_LOG=none
+Environment=XENCONSOLED_LOG_DIR=@XEN_LOG_DIR@/console
+EnvironmentFile=-/etc/default/xenconsoled
+EnvironmentFile=-/etc/sysconfig/xenconsoled
+PIDFile=@XEN_RUN_DIR@/xenconsoled.pid
+ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
+ExecStartPre=/bin/mkdir -p ${XENCONSOLED_LOG_DIR}
+ExecStart=@SBINDIR@/xenconsoled --pid-file @XEN_RUN_DIR@/xenconsoled.pid 
--log=${XENCONSOLED_LOG} --log-dir=${XENCONSOLED_LOG_DIR} $XENCONSOLED_ARGS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/tools/hotplug/Linux/systemd/xendomains.service.in 
b/tools/hotplug/Linux/systemd/xendomains.service.in
new file mode 100644
index 0000000..70ce7c0
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xendomains.service.in
@@ -0,0 +1,16 @@
+[Unit]
+Description=Xendomains - start and stop guests on boot and shutdown
+Requires=xenstored.socket
+After=xenstored.service xenconsoled.service
+ConditionVirtualization=xen
+
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
+ExecStart=-@LIBEXEC@/xendomains start
+ExecStop=@LIBEXEC@/xendomains stop
+ExecReload=@LIBEXEC@/xendomains restart
+
+[Install]
+WantedBy=multi-user.target
diff --git a/tools/hotplug/Linux/systemd/xenstored.service.in 
b/tools/hotplug/Linux/systemd/xenstored.service.in
new file mode 100644
index 0000000..4a9fcee
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xenstored.service.in
@@ -0,0 +1,27 @@
+[Unit]
+Description=The Xen xenstore
+Requires=xenstored_ro.socket xenstored.socket proc-xen.mount 
var-lib-xenstored.mount
+After=proc-xen.mount var-lib-xenstored.mount
+Before=libvirtd.service libvirt-guests.service
+RefuseManualStop=true
+ConditionVirtualization=xen
+
+[Service]
+Type=notify
+Environment=XENSTORED_ARGS=
+Environment=XENSTORED_ROOTDIR=@XEN_LIB_STORED@
+Environment=XENSTORED=@XENSTORED@
+EnvironmentFile=-/etc/default/xencommons
+EnvironmentFile=-/etc/sysconfig/xencommons
+ExecStartPre=/bin/grep -q control_d /proc/xen/capabilities
+ExecStartPre=-/bin/rm -f @XEN_LIB_STORED@/tdb*
+ExecStartPre=/bin/mkdir -p @XEN_RUN_DIR@
+ExecStart=/bin/sh -c "exec $XENSTORED --no-fork $XENSTORED_ARGS"
+ExecStartPost=-@BINDIR@/xenstore-write "/local/domain/0/name" "Domain-0"
+ExecStartPost=-@BINDIR@/xenstore-write "/local/domain/0/domid" 0
+
+[Install]
+WantedBy=multi-user.target
+Also=xenstored_ro.socket xenstored.socket
+Also=proc-xen.mount
+Also=var-lib-xenstored.mount
diff --git a/tools/hotplug/Linux/systemd/xenstored.socket.in 
b/tools/hotplug/Linux/systemd/xenstored.socket.in
new file mode 100644
index 0000000..461e4f4
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xenstored.socket.in
@@ -0,0 +1,11 @@
+[Unit]
+Description=xenstore socket
+ConditionVirtualization=xen
+
+[Socket]
+ListenStream=/var/run/xenstored/socket
+SocketMode=0600
+Service=xenstored.service
+
+[Install]
+WantedBy=sockets.target
diff --git a/tools/hotplug/Linux/systemd/xenstored_ro.socket.in 
b/tools/hotplug/Linux/systemd/xenstored_ro.socket.in
new file mode 100644
index 0000000..6ab5c28
--- /dev/null
+++ b/tools/hotplug/Linux/systemd/xenstored_ro.socket.in
@@ -0,0 +1,11 @@
+[Unit]
+Description=xenstore ro socket
+ConditionVirtualization=xen
+
+[Socket]
+ListenStream=/var/run/xenstored/socket_ro
+SocketMode=0660
+Service=xenstored.service
+
+[Install]
+WantedBy=sockets.target
diff --git a/tools/ocaml/xenstored/Makefile b/tools/ocaml/xenstored/Makefile
index 382a813..068e04a 100644
--- a/tools/ocaml/xenstored/Makefile
+++ b/tools/ocaml/xenstored/Makefile
@@ -3,6 +3,11 @@ OCAML_TOPLEVEL = $(CURDIR)/..
 include $(OCAML_TOPLEVEL)/common.make

 CFLAGS += -I$(XEN_ROOT)/tools/
+CFLAGS-$(CONFIG_SYSTEMD)  += $(SYSTEMD_CFLAGS)
+LDFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_LIBS)
+
+CFLAGS  += $(CFLAGS-y)
+LDFLAGS += $(LDFLAGS-y)

 OCAMLINCLUDE += \
        -I $(OCAML_TOPLEVEL)/libs/xb \
diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile
index 08460c8..48f1e96 100644
--- a/tools/xenstore/Makefile
+++ b/tools/xenstore/Makefile
@@ -9,6 +9,12 @@ CFLAGS += -I.
 CFLAGS += -I$(XEN_ROOT)/tools/
 CFLAGS += $(CFLAGS_libxenctrl)

+CFLAGS-$(CONFIG_SYSTEMD)  += $(SYSTEMD_CFLAGS)
+LDFLAGS-$(CONFIG_SYSTEMD) += $(SYSTEMD_LIBS)
+
+CFLAGS  += $(CFLAGS-y)
+LDFLAGS += $(LDFLAGS-y)
+
 CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm 
xenstore-chmod
 CLIENTS += xenstore-write xenstore-ls xenstore-watch

--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.