Whamcloud - gitweb
LU-9439 scripts: lnet systemd service 25/26925/10
authorGiuseppe Di Natale <dinatale2@llnl.gov>
Wed, 21 Dec 2016 21:38:04 +0000 (16:38 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 17 May 2017 07:40:19 +0000 (07:40 +0000)
Create an lnet systemd service which properly
brings lnet up and down.

Test-Parameters: trivial
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Change-Id: I584827dbb1fc4e0999b7f107bb4250678b7b68e8
Reviewed-on: https://review.whamcloud.com/26925
Tested-by: Jenkins
Reviewed-by: Ned Bass <bass6@llnl.gov>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre.spec.in
lustre/autoconf/lustre-core.m4
lustre/scripts/Makefile.am
lustre/scripts/systemd/.gitignore [new file with mode: 0644]
lustre/scripts/systemd/Makefile.am [new file with mode: 0644]
lustre/scripts/systemd/lnet.service.in [new file with mode: 0644]

index 6c41c9f..03f8480 100644 (file)
@@ -12,6 +12,7 @@
 %bcond_without manpages
 %bcond_without shared
 %bcond_without static
+%bcond_with    systemd
 
 %if %{without servers}
     # --without servers overrides --with {ldiskfs|zfs}
        %endif
 %endif
 
+# Generic enable switch for systemd
+%if %{with systemd}
+%define _systemd 1
+%endif
+
+# RHEL >= 7 comes with systemd
+%if 0%{?rhel} >= 7
+%define _systemd 1
+%endif
+
+# Fedora >= 15 comes with systemd, but only >= 18 has
+# the proper macros
+%if 0%{?fedora} >= 18
+%define _systemd 1
+%endif
+
+# opensuse >= 12.1 comes with systemd, but only >= 13.1
+# has the proper macros
+%if 0%{?suse_version} >= 1310
+%define _systemd 1
+%endif
+
 Summary: Lustre File System
 Name: %{lustre_name}
 Version: %{version}
@@ -130,6 +153,13 @@ BuildRequires: redhat-rpm-config
 %endif
 %endif
 
+%if 0%{?_systemd}
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+BuildRequires: systemd
+%endif
+
 %description
 Userspace tools and files for the Lustre file system.
 
@@ -240,13 +270,18 @@ ln lustre/ChangeLog ChangeLog-lustre
 ln lnet/ChangeLog ChangeLog-lnet
 
 %build
-
 # Set an explicit path to our Linux tree, if we can.
 cd $RPM_BUILD_DIR/lustre-%{version}
 # override %optflags so that the vendor's overzealous flags don't create
 # build failures
 %define optflags -g -O2 -Werror
 
+%if 0%{?_systemd}
+    %define systemd --with-systemdsystemunitdir=%{_unitdir}
+%else
+    %define systemd --with-systemdsystemunitdir=no
+%endif
+
 CONFIGURE_ARGS="%{?configure_args}"
 if [ -n "$CONFIGURE_ARGS" ]; then
        # make sure %%kdir and %%kobjdir are not in the configure arguments
@@ -276,6 +311,7 @@ fi
        %{!?with_zfs:--without-zfs} \
        %{!?with_lnet_dlc:--disable-dlc} \
        %{!?with_manpages:--disable-manpages} \
+       %{systemd} \
        --with-linux=%{kdir} \
        --with-linux-obj=%{kobjdir} \
        --with-kmp-moddir=%{kmoddir}/%{name}
@@ -318,6 +354,11 @@ echo '%{_sysconfdir}/ha.d/resource.d/Lustre.ha_v2' >>lustre.files
 echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
 %endif
 
+# systemd is on redhat, fedora, and suse
+%if 0%{?_systemd}
+echo '%{_unitdir}/lnet.service' >>lustre.files
+%endif
+
 %if %{_vendor}=="redhat"
 # The following scripts are Red Hat specific
 %if %{with servers}
@@ -325,7 +366,11 @@ echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
 echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
 echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
 %endif
+
+%if 0%{!?_systemd:1}
 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
+%endif
+
 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
 %endif
 
@@ -467,6 +512,21 @@ echo '%{_sbindir}/wiretest' >>lustre-tests.files
 %doc lustre-iokit/stats-collect/README.iokit-lstats
 %endif
 
+%post
+%if 0%{?_systemd}
+%systemd_post lnet.service
+%endif
+
+%preun
+%if 0%{?_systemd}
+%systemd_preun lnet.service
+%endif
+
+%postun
+%if 0%{?_systemd}
+%systemd_postun_with_restart lnet.service
+%endif
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 rm -rf %{_tmppath}/kmp
index 7ad54f3..9a89cae 100644 (file)
@@ -2903,6 +2903,23 @@ AC_MSG_RESULT([$enable_pgstat_track])
 AS_IF([test "x$enable_pgstat_track" = xyes],
        [AC_DEFINE([CONFIG_DEBUG_PAGESTATE_TRACKING], 1,
                [enable page state tracking code])])
+
+PKG_PROG_PKG_CONFIG
+AC_MSG_CHECKING([systemd unit file directory])
+AC_ARG_WITH([systemdsystemunitdir],
+       [AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
+               [Directory for systemd service files])],
+       [], [with_systemdsystemunitdir=auto])
+AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"],
+       [def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
+       AS_IF([test "x$def_systemdsystemunitdir" = "x"],
+               [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
+               [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
+               with_systemdsystemunitdir=no],
+       [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
+AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
+       [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
+AC_MSG_RESULT([$with_systemdsystemunitdir])
 ]) # LC_CONFIGURE
 
 #
@@ -2922,6 +2939,7 @@ AM_CONDITIONAL(GSS_KEYRING, test x$enable_gss_keyring = xyes)
 AM_CONDITIONAL(GSS_PIPEFS, test x$enable_gss_pipefs = xyes)
 AM_CONDITIONAL(GSS_SSK, test x$enable_ssk = xyes)
 AM_CONDITIONAL(LIBPTHREAD, test x$enable_libpthread = xyes)
+AM_CONDITIONAL(HAVE_SYSTEMD, test "x$with_systemdsystemunitdir" != "xno")
 ]) # LC_CONDITIONALS
 
 #
@@ -3003,6 +3021,7 @@ lustre/ptlrpc/gss/autoMakefile
 lustre/quota/Makefile
 lustre/quota/autoMakefile
 lustre/scripts/Makefile
+lustre/scripts/systemd/Makefile
 lustre/tests/Makefile
 lustre/tests/mpi/Makefile
 lustre/utils/Makefile
index 9664b45..9267a81 100644 (file)
 # These are scripts that are generated from .in files
 genscripts = lc_modprobe lc_net lc_hb lc_cluman lc_md lc_lvm lustre_start
 
+SUBDIRS = systemd
+
 sbin_SCRIPTS = lustre_rmmod ko2iblnd-probe
 
 if RHEL
 initdir = $(sysconfdir)/init.d
-init_SCRIPTS  = lnet lsvcgss
+init_SCRIPTS  = lsvcgss
+
+if !HAVE_SYSTEMD
+init_SCRIPTS += lnet
+endif
+
 if SERVER
 init_SCRIPTS += lustre
 endif
diff --git a/lustre/scripts/systemd/.gitignore b/lustre/scripts/systemd/.gitignore
new file mode 100644 (file)
index 0000000..6b7e55e
--- /dev/null
@@ -0,0 +1,2 @@
+/Makefile.in
+/lnet.service
diff --git a/lustre/scripts/systemd/Makefile.am b/lustre/scripts/systemd/Makefile.am
new file mode 100644 (file)
index 0000000..0fe8057
--- /dev/null
@@ -0,0 +1,26 @@
+# These are scripts that are generated from .in files
+genunitfiles = lnet.service
+sysconfigdir = $(sysconfdir)/sysconfig
+
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = lnet.service
+endif
+
+EXTRA_DIST = $(addsuffix .in,$(genunitfiles))
+
+CLEANFILES = $(genunitfiles)
+
+$(genunitfiles): %: %.in
+if BUILD_DLC
+       sed -e 's,@sbindir\@,$(sbindir),g' \
+           -e 's,@sysconfigdir\@,$(sysconfigdir),g' \
+           -e 's,@sysconfdir\@,$(sysconfdir),g' \
+           -e 's,@BUILD_DLC_TRUE\@,,g' \
+           -e 's,@BUILD_DLC_FALSE\@,\#,g' $< > $@
+else
+       sed -e 's,@sbindir\@,$(sbindir),g' \
+           -e 's,@sysconfigdir\@,$(sysconfigdir),g' \
+           -e 's,@sysconfdir\@,$(sysconfdir),g' \
+           -e 's,@BUILD_DLC_TRUE\@,\#,g' \
+           -e 's,@BUILD_DLC_FALSE\@,,g' $< > $@
+endif
diff --git a/lustre/scripts/systemd/lnet.service.in b/lustre/scripts/systemd/lnet.service.in
new file mode 100644 (file)
index 0000000..1da1503
--- /dev/null
@@ -0,0 +1,23 @@
+[Unit]
+Description=lnet management
+
+Requires=network-online.target
+After=network-online.target
+
+ConditionPathExists=!/proc/sys/lnet/
+
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStart=@sbindir@/modprobe lnet
+@BUILD_DLC_FALSE@ExecStart=@sbindir@/lctl network up
+@BUILD_DLC_FALSE@ExecStart=@sbindir@/lustre_routes_config @sysconfdir@/lnet_routes.conf
+@BUILD_DLC_TRUE@ExecStart=@sbindir@/lnetctl lnet configure
+@BUILD_DLC_TRUE@ExecStart=@sbindir@/lnetctl import < @sysconfigdir@/lnet.conf
+ExecStop=@sbindir@/lustre_rmmod ptlrpc
+@BUILD_DLC_FALSE@ExecStop=@sbindir@/lctl network down
+@BUILD_DLC_TRUE@ExecStop=@sbindir@/lnetctl lnet unconfigure
+ExecStop=@sbindir@/lustre_rmmod libcfs ldiskfs
+
+[Install]
+WantedBy=multi-user.target