From: Giuseppe Di Natale Date: Wed, 21 Dec 2016 21:38:04 +0000 (-0500) Subject: LU-9439 scripts: lnet systemd service X-Git-Tag: 2.9.58~16 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=32d1a1c5d610d054ad4609c1cf332172e8310805 LU-9439 scripts: lnet systemd service Create an lnet systemd service which properly brings lnet up and down. Test-Parameters: trivial Signed-off-by: Giuseppe Di Natale Change-Id: I584827dbb1fc4e0999b7f107bb4250678b7b68e8 Reviewed-on: https://review.whamcloud.com/26925 Tested-by: Jenkins Reviewed-by: Ned Bass Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- diff --git a/lustre.spec.in b/lustre.spec.in index 6c41c9f..03f8480 100644 --- a/lustre.spec.in +++ b/lustre.spec.in @@ -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} @@ -93,6 +94,28 @@ %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 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 7ad54f3..9a89cae 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -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 diff --git a/lustre/scripts/Makefile.am b/lustre/scripts/Makefile.am index 9664b45..9267a81 100644 --- a/lustre/scripts/Makefile.am +++ b/lustre/scripts/Makefile.am @@ -35,11 +35,18 @@ # 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 index 0000000..6b7e55e --- /dev/null +++ b/lustre/scripts/systemd/.gitignore @@ -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 index 0000000..0fe8057 --- /dev/null +++ b/lustre/scripts/systemd/Makefile.am @@ -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 index 0000000..1da1503 --- /dev/null +++ b/lustre/scripts/systemd/lnet.service.in @@ -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