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

Bug#796637: [PATCH] nfs-utils package with systemd units from ubuntu



Hello!

I'm made an initial attempt at picking up the systemd related changes
from the ubuntu delta found via the https://tracker.debian.org/pkg/nfs-utils
page:

https://patches.ubuntu.com/n/nfs-utils/nfs-utils_1:1.2.8-9ubuntu11.patch

The resulting work is attached as nfs-utils-systemd-units-against-archive.patch
It has only been very lightly tested (installed in a systemd-powered
nspawn container with no real runtime testing).

(Please note that the ubuntu delta also contains other changes that seems
useful to include in Debian, but one step at a time I guess.)

Please also note that the nfs-utils packaging git repo seems to be
out of date. The attached patch is against the nfs-utils package
version in the debian archive.

I would very much appreciate help from anyone using nfs to test
this. Specially while running under sysvinit, to make sure there are
no regressions introduced there, but also under systemd.

HTH.

Regards,
Andreas Henriksson
diff -uriNp ../nfs-utils-1.2.8/debian/changelog nfs-utils-1.2.8/debian/changelog
--- ../nfs-utils-1.2.8/debian/changelog	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/changelog	2016-02-17 19:52:10.255936145 +0100
@@ -1,3 +1,58 @@
+nfs-utils (1:1.2.8-9.1) UNRELEASED; urgency=medium
+
+  Partial sync from ubuntu, included changes:
+
+  [ Martin Pitt ]
+  * Add 00git-start-statd-systemd.patch: Latest start-statd script from
+    1.3.2 to start rpc-statd.service under systemd.
+  * Add 23-systemd-pipefs_in_run.patch: systemd: Mount rpc_pipefs in /run instead of
+    /var/lib/nfs/, like in the upstart units.
+  * Add 24-systemd-daemon-paths.patch: Adjust program paths in systemd units.
+  * debian/nfs-kernel-server.links: Add nfs-kernel-server.service alias
+    symlink, to match SysV init script.
+  * Add 25-systemd-server-before-client.patch: Order NFS server before client,
+    to make mounting NFS shares from localhost work reliably.
+  * Add debian/nfs-utils_env.sh: Translate our /etc/default files into runtime
+    configuration for nfs-config.service.
+  * debian/nfs-{common,kernel-server}.install: Install systemd units.
+  * debian/rules: Enable/start systemd units. (LP: #1312976)
+
+  * Add autopkgtest for installing server and client on localhost, setting up
+    two exports, rebooting, and ensuring that the NFS mounts work.
+  * Add 23-systemd-relax-dependencies.patch: Stop depending on basic.target in
+    the daemons which still do; i. e. add DefaultDependencies=no. This makes
+    it possible to run NFS during early boot, helps if you e. g. have /var
+    on NFS, and avoids dependency cycles with rcS init.d scripts which depend
+    on $remote_fs. (LP: #1428487)
+  * Shift number prefixes of other systemd patches accordingly, and adjust
+    them to the above patch.
+
+  * 27-systemd-enable-with-systemctl-statd.patch: let the admin
+    enable/disable statd via systemd tools. (LP: #1428486)
+  * debian/rules: don't start statd by default (or it will trigger upstart
+    and systemd statd unit startup).
+  * debian/control, debian/*install: move nfs-utils.service to nfs-common
+    package. (LP: #1436304)
+
+  [ Steve Langasek ]
+  * Add a dependency on keyutils to nfs-common, so that idmapping will work
+    under systemd.  LP: #1449074.
+
+  Followup changes to complement merge from ubuntu:
+
+  [ Andreas Henriksson ]
+  * Restore anything related to nfs-common.init and nfs-common.default
+  * debian/nfs-common.links: Mask nfs-common init script with a symlink
+    to /dev/null to avoid using it under systemd.
+  * Explicitly set executable permissions on nfs-utils_env.sh helper
+    instead of relying on debian/nfs-utils_env.sh having correct
+    permissions in source directory.
+  * Make nfs-kernel-server depend on netbase since it needs /etc/services
+    for nfs-server to start (which is required for successful pkg install).
+    - Avoids "...unable to resolve ANYADDR:nfs to inet address: ..."
+
+ -- Andreas Henriksson <andreas@fatal.se>  Wed, 17 Feb 2016 19:06:29 +0100
+
 nfs-utils (1:1.2.8-9) unstable; urgency=medium
 
   * debian/patches/22-mountd-fix-segfault-in-add_name-with-newer-gcc-
diff -uriNp ../nfs-utils-1.2.8/debian/control nfs-utils-1.2.8/debian/control
--- ../nfs-utils-1.2.8/debian/control	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/control	2016-02-17 19:52:22.432296170 +0100
@@ -3,7 +3,7 @@ Priority: standard
 Section: net
 Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
 Uploaders: Anibal Monsalve Salazar <anibal@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Steve Langasek <vorlon@debian.org>
-Build-Depends: debhelper (>= 7), libwrap0-dev, libevent-dev, libnfsidmap-dev (>= 0.24), libkrb5-dev, libblkid-dev, libkeyutils-dev, pkg-config, libldap2-dev, libcap-dev, libtirpc-dev (>= 0.2.4-2~), libdevmapper-dev, dh-autoreconf, libmount-dev, libsqlite3-dev
+Build-Depends: debhelper (>= 7), libwrap0-dev, libevent-dev, libnfsidmap-dev (>= 0.24), libkrb5-dev, libblkid-dev, libkeyutils-dev, pkg-config, libldap2-dev, libcap-dev, libtirpc-dev (>= 0.2.4-2~), libdevmapper-dev, dh-autoreconf, libmount-dev, libsqlite3-dev, dh-systemd
 Standards-Version: 3.9.0
 Homepage: http://nfs.sourceforge.net/
 Vcs-Git: git://git.debian.org/kernel/nfs-utils.git
@@ -12,7 +12,7 @@ Vcs-Browser: http://git.debian.org/?p=ke
 Package: nfs-kernel-server
 Priority: optional
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, nfs-common (= ${binary:Version}), ucf, lsb-base (>= 1.3-9ubuntu3), libtirpc1 (>= 0.2.4)
+Depends: ${shlibs:Depends}, ${misc:Depends}, nfs-common (= ${binary:Version}), ucf, netbase, lsb-base (>= 1.3-9ubuntu3), libtirpc1 (>= 0.2.4), keyutils
 Provides: knfs, nfs-server
 Conflicts: knfs, nfs-server
 Replaces: knfs, nfs-server
diff -uriNp ../nfs-utils-1.2.8/debian/nfs-common.install nfs-utils-1.2.8/debian/nfs-common.install
--- ../nfs-utils-1.2.8/debian/nfs-common.install	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/nfs-common.install	2016-02-17 19:03:58.669585346 +0100
@@ -22,3 +22,10 @@ debian/tmp/var/lib/nfs/state
 debian/idmapd.conf usr/share/nfs-common/conffiles/
 debian/nfs-common.default usr/share/nfs-common/conffiles/
 debian/id_resolver.conf etc/request-key.d/
+debian/nfs-utils_env.sh /usr/lib/systemd/scripts/
+systemd/*.mount /lib/systemd/system
+systemd/*rpc*.service /lib/systemd/system
+systemd/nfs-config.service /lib/systemd/system
+systemd/nfs-idmapd.service /lib/systemd/system
+systemd/nfs-client.target /lib/systemd/system
+systemd/nfs-utils.service /lib/systemd/system
diff -uriNp ../nfs-utils-1.2.8/debian/nfs-common.links nfs-utils-1.2.8/debian/nfs-common.links
--- ../nfs-utils-1.2.8/debian/nfs-common.links	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/nfs-common.links	2016-02-17 19:03:58.669585346 +0100
@@ -3,3 +3,4 @@ usr/share/man/man8/statd.8 usr/share/man
 usr/share/man/man8/idmapd.8 usr/share/man/man8/rpc.idmapd.8
 usr/share/man/man8/sm-notify.8 usr/share/man/man8/rpc.sm-notify.8
 usr/share/man/man8/svcgssd.8 usr/share/man/man8/rpc.svcgssd.8
+/dev/null /lib/systemd/system/nfs-common.service
diff -uriNp ../nfs-utils-1.2.8/debian/nfs-kernel-server.install nfs-utils-1.2.8/debian/nfs-kernel-server.install
--- ../nfs-utils-1.2.8/debian/nfs-kernel-server.install	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/nfs-kernel-server.install	2016-02-17 19:03:58.673585468 +0100
@@ -7,3 +7,7 @@ debian/tmp/var/lib/nfs/etab
 debian/tmp/var/lib/nfs/rmtab
 debian/nfs-kernel-server.default /usr/share/nfs-kernel-server/conffiles/
 debian/etc.exports /usr/share/nfs-kernel-server/conffiles/
+systemd/nfs-blkmap.target /lib/systemd/system
+systemd/nfs-blkmap.service /lib/systemd/system
+systemd/nfs-mountd.service /lib/systemd/system
+systemd/nfs-server.service /lib/systemd/system
diff -uriNp ../nfs-utils-1.2.8/debian/nfs-kernel-server.links nfs-utils-1.2.8/debian/nfs-kernel-server.links
--- ../nfs-utils-1.2.8/debian/nfs-kernel-server.links	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/nfs-kernel-server.links	2016-02-17 19:03:58.673585468 +0100
@@ -1,2 +1,4 @@
 usr/share/man/man8/mountd.8 usr/share/man/man8/rpc.mountd.8
 usr/share/man/man8/nfsd.8 usr/share/man/man8/rpc.nfsd.8
+# provide match for SysV init script
+/lib/systemd/system/nfs-server.service /lib/systemd/system/nfs-kernel-server.service
diff -uriNp ../nfs-utils-1.2.8/debian/nfs-utils_env.sh nfs-utils-1.2.8/debian/nfs-utils_env.sh
--- ../nfs-utils-1.2.8/debian/nfs-utils_env.sh	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/nfs-utils_env.sh	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Create /run/sysconfig/nfs-utils from NFS' /etc/default/ files, for
+# nfs-config.service
+
+nfs_config=/etc/sysconfig/nfs
+[ -r /etc/default/nfs-common ] && . /etc/default/nfs-common
+[ -r /etc/default/nfs-kernel-server ] && . /etc/default/nfs-kernel-server
+
+mkdir -p /run/sysconfig
+{
+echo PIPEFS_MOUNTPOINT=/run/rpc_pipefs
+echo RPCNFSDARGS=\"$RPCNFSDOPTS ${RPCNFSDCOUNT:-8}\"
+echo RPCMOUNTDARGS=\"$RPCMOUNTDOPTS\"
+echo STATDARGS=\"$STATDOPTS\"
+echo RPCSVCGSSDARGS=\"$RPCSVCGSSDOPTS\"
+} > /run/sysconfig/nfs-utils
+
+# the following are supported by the systemd units, but not exposed in default files
+# echo SMNOTIFYARGS=\"$SMNOTIFYARGS\"
+# echo RPCIDMAPDARGS=\"$RPCIDMAPDARGS\"
+# echo RPCGSSDARGS=\"$RPCGSSDARGS\"
+# echo BLKMAPDARGS=\"$BLKMAPDARGS\"
+# echo GSS_USE_PROXY=\"$GSS_USE_PROXY\"
diff -uriNp ../nfs-utils-1.2.8/debian/patches/00git-start-statd-systemd.patch nfs-utils-1.2.8/debian/patches/00git-start-statd-systemd.patch
--- ../nfs-utils-1.2.8/debian/patches/00git-start-statd-systemd.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/00git-start-statd-systemd.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,27 @@
+Description: Latest start-statd script from 1.3.2 to start rpc-statd.service under systemd
+Origin: upstream, from 1.3.2
+
+Index: nfs-utils-1.2.8/utils/statd/start-statd
+===================================================================
+--- nfs-utils-1.2.8.orig/utils/statd/start-statd
++++ nfs-utils-1.2.8/utils/statd/start-statd
+@@ -1,9 +1,16 @@
+-#!/bin/bash -p
++#!/bin/sh
+ # nfsmount calls this script when mounting a filesystem with locking
+ # enabled, but when statd does not seem to be running (based on
+ # /var/run/rpc.statd.pid).
+ # It should run statd with whatever flags are apropriate for this
+ # site.
+-PATH=/sbin:/usr/sbin
+-exec rpc.statd --no-notify
++PATH="/sbin:/usr/sbin:/bin:/usr/bin"
++
++# First try systemd if it's installed.
++if [ -d /run/systemd/system ]; then
++    # Quit only if the call worked.
++    systemctl start rpc-statd.service && exit
++fi
+ 
++# Fall back to launching it ourselves.
++exec rpc.statd --no-notify
diff -uriNp ../nfs-utils-1.2.8/debian/patches/00git-systemd-units.patch nfs-utils-1.2.8/debian/patches/00git-systemd-units.patch
--- ../nfs-utils-1.2.8/debian/patches/00git-systemd-units.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/00git-systemd-units.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,385 @@
+Description: systemd units from upstream
+Origin: upstream, 1.3.2
+
+Index: nfs-utils-1.2.8/systemd/README
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/README
+@@ -0,0 +1,71 @@
++
++Notes about systemd unit files for nfs-utils.
++
++The unit files provided here should be sufficient for systemd
++to manage all daemons and related services provides by nfs-utils.
++
++They do *not* include any unit files for separate services such as
++rpc.rquotad (in the 'quota' package) or rpcbind.
++
++There are 4 units that can be 'enabled' or 'disabled' by systemctl, or
++by a suitable 'preset' setting:
++
++ nfs-server.service
++    If enabled, nfs service is started together with dependencies
++    such as mountd, statd, rpc.idmapd
++    This is a "service" file rather than a "target" (which is the
++    normal grouping construct) so that
++        systemctl start nfs-server
++    can work (if no type is given, ".service" is assumed).
++
++ nfs-client.target
++    If enabled, daemons needs for an nfs client are enabled.
++    This does *not* include rpc.statd.  the rpc-statd.service unit
++    is started by /usr/sbin/start-statd which mount.nfs will run
++    if statd is needed.
++
++ nfs-blkmap.target
++    If enabled, then blkmapd will be run when nfs-client.target is
++    started.
++
++Another special unit is "nfs-utils.service".  This doesn't really do
++anything, but exists so that other units may declare themselves as
++"PartOf" nfs-utils.service.
++The effect of this is that
++     systemctl restart nfs-utils
++will restart all nfs-utils daemons as maybe be required during
++software update.  It isn't possible to make
++     systemctl try-restart nfs-server nfs-client.target
++do this as some daemon are included in both, and rpc.statd would
++not be restarted if nfs-server were not active (as nfs-client doesn't
++Want it - it is started by mount.nfs running start-statd).
++
++It is possible that we should have an nfs-statd.target which can
++selectively enable statd being stared by -server and sm-notify
++being started by -server or -client.  That way it could be disabled
++completely on V4-only configurations.  Currently statd is always
++started on the server and sm-notify is always run if server or
++client is enabled.
++
++Stopping nfs-server will also stop rpc.mountd, and rpc.svcgssd.
++It cannot stop rpc.statd or rpc.gssd as they may be in use by the
++client and systemd cannot specify is two-pronged reverse dependency.
++(i.e. stop this unit if none of these units are running)
++
++Distro specific commandline configuration can be provided by
++installing a script /usr/lib/systemd/scripts/nfs-utils_env.sh
++This should write /run/sysconfig/nfs-utils based on configuration
++information such as in /etc/sysconfig/nfs or /etc/defaults/nfs.
++It is run once by nfs-config.service.
++
++rpc.gssd and rpc.svcgssd are assumed to be needed if /etc/krb5.keytab
++is present.
++If a site needs this file present but does not want the gss daemons
++running, it should create
++   /etc/systemd/system/rpc-gssd.service.d/01-disable.conf
++and
++   /etc/systemd/system/rpc-svcgssd.service.d/01-disable.conf
++
++containing
++   [Unit]
++   ConditionNull=false
+Index: nfs-utils-1.2.8/systemd/auth-rpcgss-module.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/auth-rpcgss-module.service
+@@ -0,0 +1,15 @@
++# We want to start gss-proxy on kernels that support it and rpc.svcgssd
++# on those that don't.  Those services check for support by checking
++# for existence of the path /proc/net/rpc/use-gss-proxy.  Before they
++# can perform that check, they need this module loaded.  (Unless
++# rpcsec_gss support is built directly into the kernel, in which case this
++# unit will fail.  But that's OK.)
++[Unit]
++Description=Kernel Module supporting RPCSEC_GSS
++Before=gssproxy.service rpc-svcgssd.service rpc-gssd.service
++Wants=gssproxy.service rpc-svcgssd.service rpc-gssd.service
++ConditionPathExists=/etc/krb5.keytab
++
++[Service]
++Type=oneshot
++ExecStart=/sbin/modprobe -q auth_rpcgss
+Index: nfs-utils-1.2.8/systemd/nfs-blkmap.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-blkmap.service
+@@ -0,0 +1,16 @@
++[Unit]
++Description=pNFS block layout mapping daemon
++DefaultDependencies=no
++Conflicts=umount.target
++After=var-lib-nfs-rpc_pipefs.mount
++Requires=var-lib-nfs-rpc_pipefs.mount
++
++Requisite=nfs-blkmap.target
++After=nfs-blkmap.target
++
++PartOf=nfs-utils.service
++
++[Service]
++Type=forking
++PIDFile=/var/run/blkmapd.pid
++ExecStart=/usr/sbin/blkmapd $BLKMAPDARGS
+Index: nfs-utils-1.2.8/systemd/nfs-blkmap.target
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-blkmap.target
+@@ -0,0 +1,8 @@
++[Unit]
++Description= PNFS blkmaping enablement.
++# If this target is enabled, then blkmapd will be started
++# as required.  If it is not enabled it won't.
++
++[Install]
++WantedBy=remote-fs.target
++WantedBy=multi-user.target
+\ No newline at end of file
+Index: nfs-utils-1.2.8/systemd/nfs-client.target
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-client.target
+@@ -0,0 +1,17 @@
++[Unit]
++Description=NFS client services
++Before=remote-fs-pre.target
++Wants=remote-fs-pre.target
++
++# Note: we don't "Wants=rpc-statd.service" as "mount.nfs" will arrange to
++# start that on demand if needed.
++Wants=nfs-blkmap.service rpc-statd-notify.service
++After=nfs-blkmap.service
++
++# GSS services dependencies and ordering
++Wants=auth-rpcgss-module.service
++After=rpc-gssd.service rpc-svcgssd.service gssproxy.service
++
++[Install]
++WantedBy=multi-user.target
++WantedBy=remote-fs.target
+Index: nfs-utils-1.2.8/systemd/nfs-config.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-config.service
+@@ -0,0 +1,7 @@
++[Unit]
++Description=Preprocess NFS configuration
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=/usr/lib/systemd/scripts/nfs-utils_env.sh
+Index: nfs-utils-1.2.8/systemd/nfs-idmapd.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-idmapd.service
+@@ -0,0 +1,14 @@
++[Unit]
++Description=NFSv4 ID-name mapping service
++Requires=var-lib-nfs-rpc_pipefs.mount
++After=var-lib-nfs-rpc_pipefs.mount
++
++BindsTo=nfs-server.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++Type=forking
++ExecStart=/usr/sbin/rpc.idmapd $RPCIDMAPDARGS
+Index: nfs-utils-1.2.8/systemd/nfs-mountd.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-mountd.service
+@@ -0,0 +1,14 @@
++[Unit]
++Description=NFS Mount Daemon
++Requires=proc-fs-nfsd.mount
++After=proc-fs-nfsd.mount
++After=network.target
++BindsTo=nfs-server.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++Type=forking
++ExecStart=/usr/sbin/rpc.mountd $RPCMOUNTDARGS
+Index: nfs-utils-1.2.8/systemd/nfs-server.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-server.service
+@@ -0,0 +1,33 @@
++[Unit]
++Description=NFS server and services
++Requires= network.target proc-fs-nfsd.mount rpcbind.target
++Requires= nfs-mountd.service
++Wants=rpc-statd.service nfs-idmapd.service
++Wants=rpc-statd-notify.service
++
++After= network.target proc-fs-nfsd.mount rpcbind.target nfs-mountd.service
++After= nfs-idmapd.service rpc-statd.service
++Before= rpc-statd-notify.service
++
++# GSS services dependencies and ordering
++Wants=auth-rpcgss-module.service
++After=rpc-gssd.service gssproxy.service rpc-svcgssd.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++
++Type=oneshot
++RemainAfterExit=yes
++ExecStartPre=/usr/sbin/exportfs -r
++ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS
++ExecStop=/usr/sbin/rpc.nfsd 0
++ExecStopPost=/usr/sbin/exportfs -au
++ExecStopPost=/usr/sbin/exportfs -f
++
++ExecReload=/usr/sbin/exportfs -r
++
++[Install]
++WantedBy=multi-user.target
+Index: nfs-utils-1.2.8/systemd/nfs-utils.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/nfs-utils.service
+@@ -0,0 +1,17 @@
++[Unit]
++Description=NFS server and client services
++# This service should never be stopped, only restarted.
++# When it is re-started, all other services which declare
++# themselves to be "PartOf" this service will also be
++# restarted. Thus
++#   systemctl restart nfs-utils
++# will restart all daemons which are part of nfs-utils
++# and which are running.  This is useful after a software
++# update.
++
++# This is a "service" rather than "target" so that we
++# don't need to say "systemctl restart nfs-utils.target".
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=/bin/true
+Index: nfs-utils-1.2.8/systemd/proc-fs-nfsd.mount
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/proc-fs-nfsd.mount
+@@ -0,0 +1,7 @@
++[Unit]
++Description=NFSD configuration filesystem
++
++[Mount]
++What=nfsd
++Where=/proc/fs/nfsd
++Type=nfsd
+Index: nfs-utils-1.2.8/systemd/rpc-gssd.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/rpc-gssd.service
+@@ -0,0 +1,19 @@
++[Unit]
++Description=RPC security service for NFS client and server
++DefaultDependencies=no
++Conflicts=umount.target
++Requires=var-lib-nfs-rpc_pipefs.mount
++After=var-lib-nfs-rpc_pipefs.mount
++
++ConditionPathExists=/etc/krb5.keytab
++
++PartOf=nfs-utils.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++
++Type=forking
++ExecStart=/usr/sbin/rpc.gssd $GSSDARGS
+Index: nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+@@ -0,0 +1,18 @@
++[Unit]
++Description=Notify NFS peers of a restart
++Requires=network-online.target
++After=network.target nss-lookup.target
++
++# if we run an nfs server, it needs to be running before we
++# tell clients that it has restarted.
++After=nfs-server.service
++
++PartOf=nfs-utils.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++Type=forking
++ExecStart=-/usr/sbin/sm-notify $SMNOTIFYARGS
+Index: nfs-utils-1.2.8/systemd/rpc-statd.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/rpc-statd.service
+@@ -0,0 +1,17 @@
++[Unit]
++Description=NFS status monitor for NFSv2/3 locking.
++DefaultDependencies=no
++Conflicts=umount.target
++Requires=nss-lookup.target rpcbind.target
++After=network.target nss-lookup.target rpcbind.target
++
++PartOf=nfs-utils.service
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++Type=forking
++PIDFile=/var/run/rpc.statd.pid
++ExecStart=/usr/sbin/rpc.statd --no-notify $STATDARGS
+Index: nfs-utils-1.2.8/systemd/rpc-svcgssd.service
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/rpc-svcgssd.service
+@@ -0,0 +1,19 @@
++[Unit]
++Description=RPC security service for NFS server
++Requires=var-lib-nfs-rpc_pipefs.mount
++After=var-lib-nfs-rpc_pipefs.mount
++PartOf=nfs-server.service
++PartOf=nfs-utils.service
++
++After=gssproxy.service
++ConditionPathExists=|!/run/gssproxy.pid
++ConditionPathExists=|!/proc/net/rpc/use-gss-proxy
++ConditionPathExists=/etc/krb5.keytab
++
++Wants=nfs-config.service
++After=nfs-config.service
++
++[Service]
++EnvironmentFile=-/run/sysconfig/nfs-utils
++Type=forking
++ExecStart=/usr/sbin/rpc.svcgssd $SVCGSSDARGS
+Index: nfs-utils-1.2.8/systemd/var-lib-nfs-rpc_pipefs.mount
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/var-lib-nfs-rpc_pipefs.mount
+@@ -0,0 +1,9 @@
++[Unit]
++Description=RPC Pipe File System
++DefaultDependencies=no
++Conflicts=umount.target
++
++[Mount]
++What=sunrpc
++Where=/var/lib/nfs/rpc_pipefs
++Type=rpc_pipefs
diff -uriNp ../nfs-utils-1.2.8/debian/patches/23-systemd-relax-dependencies.patch nfs-utils-1.2.8/debian/patches/23-systemd-relax-dependencies.patch
--- ../nfs-utils-1.2.8/debian/patches/23-systemd-relax-dependencies.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/23-systemd-relax-dependencies.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,122 @@
+From 314a5003a27d2a654d117c40714739e6aa3b7092 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Tue, 3 Mar 2015 16:42:28 +0100
+Subject: [PATCH] systemd: Relax dependencies of services
+
+Stop depending on basic.target in the daemons which still do; i. e. add
+DefaultDependencies=no. This makes it possible to run NFS during early boot,
+and helps if you e. g. have /var on NFS. We don't require much else than
+local-fs.
+---
+ systemd/auth-rpcgss-module.service | 1 +
+ systemd/nfs-config.service         | 2 ++
+ systemd/nfs-idmapd.service         | 3 ++-
+ systemd/nfs-mountd.service         | 3 ++-
+ systemd/nfs-server.service         | 2 ++
+ systemd/rpc-statd-notify.service   | 3 ++-
+ systemd/rpc-svcgssd.service        | 3 ++-
+ 7 files changed, 13 insertions(+), 4 deletions(-)
+
+Forwarded: http://www.spinics.net/lists/linux-nfs/msg49934.html
+
+diff --git a/systemd/auth-rpcgss-module.service b/systemd/auth-rpcgss-module.service
+index 0355e13..5241f7b 100644
+--- a/systemd/auth-rpcgss-module.service
++++ b/systemd/auth-rpcgss-module.service
+@@ -6,6 +6,7 @@
+ # unit will fail.  But that's OK.)
+ [Unit]
+ Description=Kernel Module supporting RPCSEC_GSS
++DefaultDependencies=no
+ Before=gssproxy.service rpc-svcgssd.service rpc-gssd.service
+ Wants=gssproxy.service rpc-svcgssd.service rpc-gssd.service
+ ConditionPathExists=/etc/krb5.keytab
+diff --git a/systemd/nfs-config.service b/systemd/nfs-config.service
+index 64010e6..7f65305 100644
+--- a/systemd/nfs-config.service
++++ b/systemd/nfs-config.service
+@@ -1,5 +1,7 @@
+ [Unit]
+ Description=Preprocess NFS configuration
++After=local-fs.target
++DefaultDependencies=no
+ 
+ [Service]
+ Type=oneshot
+diff --git a/systemd/nfs-idmapd.service b/systemd/nfs-idmapd.service
+index e84f8c8..df3dd9d 100644
+--- a/systemd/nfs-idmapd.service
++++ b/systemd/nfs-idmapd.service
+@@ -1,7 +1,8 @@
+ [Unit]
+ Description=NFSv4 ID-name mapping service
++DefaultDependencies=no
+ Requires=var-lib-nfs-rpc_pipefs.mount
+-After=var-lib-nfs-rpc_pipefs.mount
++After=var-lib-nfs-rpc_pipefs.mount local-fs.target
+ 
+ BindsTo=nfs-server.service
+ 
+diff --git a/systemd/nfs-mountd.service b/systemd/nfs-mountd.service
+index d908afe..8a39f3e 100644
+--- a/systemd/nfs-mountd.service
++++ b/systemd/nfs-mountd.service
+@@ -1,8 +1,9 @@
+ [Unit]
+ Description=NFS Mount Daemon
++DefaultDependencies=no
+ Requires=proc-fs-nfsd.mount
+ After=proc-fs-nfsd.mount
+-After=network.target
++After=network.target local-fs.target
+ BindsTo=nfs-server.service
+ 
+ Wants=nfs-config.service
+diff --git a/systemd/nfs-server.service b/systemd/nfs-server.service
+index b35e193..db801cb 100644
+--- a/systemd/nfs-server.service
++++ b/systemd/nfs-server.service
+@@ -1,10 +1,12 @@
+ [Unit]
+ Description=NFS server and services
++DefaultDependencies=no
+ Requires= network.target proc-fs-nfsd.mount rpcbind.target
+ Requires= nfs-mountd.service
+ Wants=rpc-statd.service nfs-idmapd.service
+ Wants=rpc-statd-notify.service
+ 
++After= local-fs.target
+ After= network.target proc-fs-nfsd.mount rpcbind.target nfs-mountd.service
+ After= nfs-idmapd.service rpc-statd.service
+ Before= rpc-statd-notify.service
+diff --git a/systemd/rpc-statd-notify.service b/systemd/rpc-statd-notify.service
+index a655445..a7e2f8e 100644
+--- a/systemd/rpc-statd-notify.service
++++ b/systemd/rpc-statd-notify.service
+@@ -1,7 +1,8 @@
+ [Unit]
+ Description=Notify NFS peers of a restart
++DefaultDependencies=no
+ Requires=network-online.target
+-After=network.target nss-lookup.target
++After=local-fs.target network.target nss-lookup.target
+ 
+ # if we run an nfs server, it needs to be running before we
+ # tell clients that it has restarted.
+diff --git a/systemd/rpc-svcgssd.service b/systemd/rpc-svcgssd.service
+index f7424b0..41177b6 100644
+--- a/systemd/rpc-svcgssd.service
++++ b/systemd/rpc-svcgssd.service
+@@ -1,7 +1,8 @@
+ [Unit]
+ Description=RPC security service for NFS server
++DefaultDependencies=no
+ Requires=var-lib-nfs-rpc_pipefs.mount
+-After=var-lib-nfs-rpc_pipefs.mount
++After=var-lib-nfs-rpc_pipefs.mount local-fs.target
+ PartOf=nfs-server.service
+ PartOf=nfs-utils.service
+ 
+-- 
+2.1.4
+
diff -uriNp ../nfs-utils-1.2.8/debian/patches/24-systemd-pipefs_in_run.patch nfs-utils-1.2.8/debian/patches/24-systemd-pipefs_in_run.patch
--- ../nfs-utils-1.2.8/debian/patches/24-systemd-pipefs_in_run.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/24-systemd-pipefs_in_run.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,92 @@
+Description: systemd: Mount rpc_pipefs in /run instead of /var/lib/nfs/
+Author: Martin Pitt <martin.pitt@ubuntu.com>
+Forwarded: No
+
+Index: nfs-utils-1.2.8/systemd/var-lib-nfs-rpc_pipefs.mount
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/var-lib-nfs-rpc_pipefs.mount
++++ /dev/null
+@@ -1,9 +0,0 @@
+-[Unit]
+-Description=RPC Pipe File System
+-DefaultDependencies=no
+-Conflicts=umount.target
+-
+-[Mount]
+-What=sunrpc
+-Where=/var/lib/nfs/rpc_pipefs
+-Type=rpc_pipefs
+Index: nfs-utils-1.2.8/systemd/nfs-blkmap.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/nfs-blkmap.service
++++ nfs-utils-1.2.8/systemd/nfs-blkmap.service
+@@ -2,8 +2,8 @@
+ Description=pNFS block layout mapping daemon
+ DefaultDependencies=no
+ Conflicts=umount.target
+-After=var-lib-nfs-rpc_pipefs.mount
+-Requires=var-lib-nfs-rpc_pipefs.mount
++After=run-rpc_pipefs.mount
++Requires=run-rpc_pipefs.mount
+ 
+ Requisite=nfs-blkmap.target
+ After=nfs-blkmap.target
+Index: nfs-utils-1.2.8/systemd/nfs-idmapd.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/nfs-idmapd.service
++++ nfs-utils-1.2.8/systemd/nfs-idmapd.service
+@@ -1,8 +1,8 @@
+ [Unit]
+ Description=NFSv4 ID-name mapping service
+ DefaultDependencies=no
+-Requires=var-lib-nfs-rpc_pipefs.mount
+-After=var-lib-nfs-rpc_pipefs.mount local-fs.target
++Requires=run-rpc_pipefs.mount
++After=run-rpc_pipefs.mount local-fs.target
+ 
+ BindsTo=nfs-server.service
+ 
+Index: nfs-utils-1.2.8/systemd/rpc-gssd.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-gssd.service
++++ nfs-utils-1.2.8/systemd/rpc-gssd.service
+@@ -2,8 +2,8 @@
+ Description=RPC security service for NFS client and server
+ DefaultDependencies=no
+ Conflicts=umount.target
+-Requires=var-lib-nfs-rpc_pipefs.mount
+-After=var-lib-nfs-rpc_pipefs.mount
++Requires=run-rpc_pipefs.mount
++After=run-rpc_pipefs.mount
+ 
+ ConditionPathExists=/etc/krb5.keytab
+ 
+Index: nfs-utils-1.2.8/systemd/rpc-svcgssd.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-svcgssd.service
++++ nfs-utils-1.2.8/systemd/rpc-svcgssd.service
+@@ -1,8 +1,8 @@
+ [Unit]
+ Description=RPC security service for NFS server
+ DefaultDependencies=no
+-Requires=var-lib-nfs-rpc_pipefs.mount
+-After=var-lib-nfs-rpc_pipefs.mount local-fs.target
++Requires=run-rpc_pipefs.mount
++After=run-rpc_pipefs.mount local-fs.target
+ PartOf=nfs-server.service
+ PartOf=nfs-utils.service
+ 
+Index: nfs-utils-1.2.8/systemd/run-rpc_pipefs.mount
+===================================================================
+--- /dev/null
++++ nfs-utils-1.2.8/systemd/run-rpc_pipefs.mount
+@@ -0,0 +1,9 @@
++[Unit]
++Description=RPC Pipe File System
++DefaultDependencies=no
++Conflicts=umount.target
++
++[Mount]
++What=sunrpc
++Where=/run/rpc_pipefs
++Type=rpc_pipefs
diff -uriNp ../nfs-utils-1.2.8/debian/patches/25-systemd-daemon-paths.patch nfs-utils-1.2.8/debian/patches/25-systemd-daemon-paths.patch
--- ../nfs-utils-1.2.8/debian/patches/25-systemd-daemon-paths.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/25-systemd-daemon-paths.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,24 @@
+Description: Adjust program paths in systemd units
+Author: Martin Pitt <martin.pitt@ubuntu.com>
+Forwarded: No
+
+Index: nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-statd-notify.service
++++ nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+@@ -16,4 +16,4 @@ After=nfs-config.service
+ [Service]
+ EnvironmentFile=-/run/sysconfig/nfs-utils
+ Type=forking
+-ExecStart=-/usr/sbin/sm-notify $SMNOTIFYARGS
++ExecStart=-/sbin/sm-notify $SMNOTIFYARGS
+Index: nfs-utils-1.2.8/systemd/rpc-statd.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-statd.service
++++ nfs-utils-1.2.8/systemd/rpc-statd.service
+@@ -14,4 +14,4 @@ After=nfs-config.service
+ EnvironmentFile=-/run/sysconfig/nfs-utils
+ Type=forking
+ PIDFile=/var/run/rpc.statd.pid
+-ExecStart=/usr/sbin/rpc.statd --no-notify $STATDARGS
++ExecStart=/sbin/rpc.statd --no-notify $STATDARGS
diff -uriNp ../nfs-utils-1.2.8/debian/patches/26-systemd-server-before-client.patch nfs-utils-1.2.8/debian/patches/26-systemd-server-before-client.patch
--- ../nfs-utils-1.2.8/debian/patches/26-systemd-server-before-client.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/26-systemd-server-before-client.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,28 @@
+From d8c1fcce6d06aa062315a47134e8e3b364cb0700 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martin.pitt@ubuntu.com>
+Date: Tue, 3 Mar 2015 10:45:38 +0100
+Subject: [PATCH] systemd: Order NFS server before client
+
+This makes mounting NFS shares from localhost work reliably, as you need to
+start the server before attempting (client) mounts, and conversely on shutdown
+need to unmount all shares before stopping the server to avoid hangs.
+---
+ systemd/nfs-server.service | 3 +++
+ 1 file changed, 3 insertions(+)
+
+Forwarded: http://www.spinics.net/lists/linux-nfs/msg49934.html
+
+Index: nfs-utils-1.2.8/systemd/nfs-server.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/nfs-server.service
++++ nfs-utils-1.2.8/systemd/nfs-server.service
+@@ -15,6 +15,9 @@ Before= rpc-statd-notify.service
+ Wants=auth-rpcgss-module.service
+ After=rpc-gssd.service gssproxy.service rpc-svcgssd.service
+ 
++# start/stop server before/after client
++Before=remote-fs-pre.target
++
+ Wants=nfs-config.service
+ After=nfs-config.service
+ 
diff -uriNp ../nfs-utils-1.2.8/debian/patches/27-systemd-enable-with-systemctl-statd.patch nfs-utils-1.2.8/debian/patches/27-systemd-enable-with-systemctl-statd.patch
--- ../nfs-utils-1.2.8/debian/patches/27-systemd-enable-with-systemctl-statd.patch	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/patches/27-systemd-enable-with-systemctl-statd.patch	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,66 @@
+Description: Let sysadmins enable/disable statd services
+ As the admin was able to control under upstart the statd services with
+ NEED_STATD in default conffiles, mirror this funcationality under systemd
+ by letting the user systemctl enable/disable statd services.
+Author: Didier Roche <didrocks@ubuntu.com>
+Bug-Ubuntu: https://launchpad.net/bugs/1428486
+Index: nfs-utils-1.2.8/systemd/nfs-server.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/nfs-server.service
++++ nfs-utils-1.2.8/systemd/nfs-server.service
+@@ -3,8 +3,7 @@ Description=NFS server and services
+ DefaultDependencies=no
+ Requires= network.target proc-fs-nfsd.mount rpcbind.target
+ Requires= nfs-mountd.service
+-Wants=rpc-statd.service nfs-idmapd.service
+-Wants=rpc-statd-notify.service
++Wants=nfs-idmapd.service
+ 
+ After= local-fs.target
+ After= network.target proc-fs-nfsd.mount rpcbind.target nfs-mountd.service
+Index: nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-statd-notify.service
++++ nfs-utils-1.2.8/systemd/rpc-statd-notify.service
+@@ -17,3 +17,6 @@ After=nfs-config.service
+ EnvironmentFile=-/run/sysconfig/nfs-utils
+ Type=forking
+ ExecStart=-/sbin/sm-notify $SMNOTIFYARGS
++
++[Install]
++WantedBy=nfs-client.target
+Index: nfs-utils-1.2.8/systemd/rpc-statd.service
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/rpc-statd.service
++++ nfs-utils-1.2.8/systemd/rpc-statd.service
+@@ -7,7 +7,7 @@ After=network.target nss-lookup.target r
+ 
+ PartOf=nfs-utils.service
+ 
+-Wants=nfs-config.service
++Wants=nfs-config.service rpc-statd-notify.service
+ After=nfs-config.service
+ 
+ [Service]
+@@ -15,3 +15,6 @@ EnvironmentFile=-/run/sysconfig/nfs-util
+ Type=forking
+ PIDFile=/var/run/rpc.statd.pid
+ ExecStart=/sbin/rpc.statd --no-notify $STATDARGS
++
++[Install]
++WantedBy=nfs-server.service
+Index: nfs-utils-1.2.8/systemd/nfs-client.target
+===================================================================
+--- nfs-utils-1.2.8.orig/systemd/nfs-client.target
++++ nfs-utils-1.2.8/systemd/nfs-client.target
+@@ -3,9 +3,7 @@ Description=NFS client services
+ Before=remote-fs-pre.target
+ Wants=remote-fs-pre.target
+ 
+-# Note: we don't "Wants=rpc-statd.service" as "mount.nfs" will arrange to
+-# start that on demand if needed.
+-Wants=nfs-blkmap.service rpc-statd-notify.service
++Wants=nfs-blkmap.service
+ After=nfs-blkmap.service
+ 
+ # GSS services dependencies and ordering
diff -uriNp ../nfs-utils-1.2.8/debian/patches/series nfs-utils-1.2.8/debian/patches/series
--- ../nfs-utils-1.2.8/debian/patches/series	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/patches/series	2016-02-17 19:04:16.802137668 +0100
@@ -1,3 +1,5 @@
+00git-start-statd-systemd.patch
+00git-systemd-units.patch
 21-no-more-var-run.patch
 01-sm-notify-in-sbin.patch
 02-524255-manpages.patch
@@ -8,3 +10,8 @@
 19-iscsiadm-path.patch
 20-remove-autogenerated-man.patch
 22-mountd-fix-segfault-in-add_name-with-newer-gcc-compi.patch 
+23-systemd-relax-dependencies.patch
+24-systemd-pipefs_in_run.patch
+25-systemd-daemon-paths.patch
+26-systemd-server-before-client.patch
+27-systemd-enable-with-systemctl-statd.patch
diff -uriNp ../nfs-utils-1.2.8/debian/rules nfs-utils-1.2.8/debian/rules
--- ../nfs-utils-1.2.8/debian/rules	2014-08-13 02:12:43.000000000 +0200
+++ nfs-utils-1.2.8/debian/rules	2016-02-17 19:44:12.553918527 +0100
@@ -54,7 +54,11 @@ binary-arch: build
 	dh_install -Xman --fail-missing
 	dh_installdocs -A
 	dh_installdocs -pnfs-common debian/README.Debian.nfsv4
+	dh_systemd_enable -p nfs-common nfs-client.target
+	dh_systemd_enable -p nfs-kernel-server nfs-server.service
 	dh_installinit -pnfs-common -R
+	dh_systemd_start -p nfs-common --restart-after-upgrade nfs-utils.service
+	dh_systemd_start -p nfs-kernel-server --restart-after-upgrade nfs-server.service
 	install -m 0755 debian/nfs-kernel-server.init debian/nfs-kernel-server/etc/init.d/nfs-kernel-server
 	install -m 0644 debian/nfs-common.bugcontrol debian/nfs-common/usr/share/bug/nfs-common/control
 	install -m 0755 debian/nfs-common.bugscript debian/nfs-common/usr/share/bug/nfs-common/script
@@ -67,6 +71,7 @@ binary-arch: build
 	dh_strip
 	dh_compress
 	dh_fixperms
+	chmod +x debian/nfs-common/usr/lib/systemd/scripts/nfs-utils_env.sh
 	chmod u+s debian/nfs-common/sbin/mount.nfs
 	dh_installdeb
 	dh_shlibdeps
diff -uriNp ../nfs-utils-1.2.8/debian/tests/control nfs-utils-1.2.8/debian/tests/control
--- ../nfs-utils-1.2.8/debian/tests/control	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/tests/control	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,4 @@
+Tests: local-server-client
+Depends: nfs-kernel-server
+# we need machine isolation as we need to modprobe stuff
+Restrictions: needs-root, isolation-machine, breaks-testbed
diff -uriNp ../nfs-utils-1.2.8/debian/tests/local-server-client nfs-utils-1.2.8/debian/tests/local-server-client
--- ../nfs-utils-1.2.8/debian/tests/local-server-client	1970-01-01 01:00:00.000000000 +0100
+++ nfs-utils-1.2.8/debian/tests/local-server-client	2016-02-17 19:03:58.673585468 +0100
@@ -0,0 +1,65 @@
+#!/bin/sh
+# install server and client, do some mounts, verify that it boots and works
+set -e
+
+if ! [ -x /tmp/autopkgtest-reboot ]; then
+    echo "SKIP: testbed does not support rebooting"
+    exit 0
+fi
+
+pre_boot_setup() {
+    # set up some exports
+    cat <<EOF >> /etc/exports
+/home localhost(rw,no_root_squash,no_subtree_check)
+/var/log/ localhost(ro,no_root_squash,subtree_check)
+EOF
+
+    # set up client mounts
+    mkdir -p /mnt/nfs_home /mnt/nfs_log
+    cat << EOF >> /etc/fstab
+localhost:/home /mnt/nfs_home nfs defaults,nofail 0 0
+localhost:/var/log /mnt/nfs_log nfs defaults,nofail 0 0
+EOF
+}
+
+fail() {
+    echo "FAIL: $1" >&2
+    exit 1
+}
+
+post_boot_tests() {
+    # ensure we have our mounts
+    mount | grep 'localhost:.*nfs_home' || fail "nfs_home not mounted"
+    mount | grep 'localhost:.*nfs_log' || fail "nfs_log not mounted"
+
+    # test that we can write to NFS export and get it in /home
+    [ ! -e /home/hello.txt ] || fail "/home/hello.txt already exists"
+    echo world > /mnt/nfs_home/hello.txt
+    sync
+    [ -e /home/hello.txt ] || fail "/home/hello.txt does not exist"
+    [ "$(cat /home/hello.txt)" = "world" ] || fail "/home/hello.txt has wrong contents"
+
+    # test that we can write to /home and get it in NFS
+    rm /home/hello.txt
+    sync
+    [ ! -e /mnt/nfs_home/hello.txt ] || fail "/mnt/nfs_home/hello.txt exists after removal"
+
+    # read-only, should fail
+    ! touch /mnt/nfs_log/pwned 2>/dev/null || fail "writing to r/o /mnt/nfs_log succeeded"
+
+    # our systemd jobs have a rather delicate dependency structure and run
+    # early; ensure that we did not run into any cycles
+    if [ -d /run/systemd/system ]; then
+        if journalctl | grep 'Found ordering cycle'; then
+            journalctl -p warning || true
+            fail "found ordering cycle in units"
+        fi
+    fi
+}
+
+if [ -z "$ADT_REBOOT_MARK" ]; then
+    pre_boot_setup
+    /tmp/autopkgtest-reboot boot1
+else
+    post_boot_tests
+fi

Reply to: