From afdaac552004aa553336a1775ed047896701b4e9 Mon Sep 17 00:00:00 2001 From: Andreas Henriksson Date: Tue, 28 Jun 2016 02:05:16 +0200 Subject: [PATCH] Import Debian patch 1:1.2.8-9.1 --- debian/changelog | 64 +++ debian/control | 6 +- debian/nfs-common.install | 7 + debian/nfs-common.links | 1 + debian/nfs-kernel-server.install | 4 + debian/nfs-kernel-server.links | 2 + debian/nfs-utils_env.sh | 23 ++ .../patches/00git-start-statd-systemd.patch | 27 ++ debian/patches/00git-systemd-units.patch | 385 ++++++++++++++++++ .../23-systemd-relax-dependencies.patch | 122 ++++++ debian/patches/24-systemd-pipefs_in_run.patch | 92 +++++ debian/patches/25-systemd-daemon-paths.patch | 24 ++ .../26-systemd-server-before-client.patch | 28 ++ ...-systemd-enable-with-systemctl-statd.patch | 66 +++ debian/patches/series | 7 + debian/rules | 5 + debian/tests/control | 4 + debian/tests/local-server-client | 65 +++ 18 files changed, 929 insertions(+), 3 deletions(-) create mode 100644 debian/nfs-utils_env.sh create mode 100644 debian/patches/00git-start-statd-systemd.patch create mode 100644 debian/patches/00git-systemd-units.patch create mode 100644 debian/patches/23-systemd-relax-dependencies.patch create mode 100644 debian/patches/24-systemd-pipefs_in_run.patch create mode 100644 debian/patches/25-systemd-daemon-paths.patch create mode 100644 debian/patches/26-systemd-server-before-client.patch create mode 100644 debian/patches/27-systemd-enable-with-systemctl-statd.patch create mode 100644 debian/tests/control create mode 100644 debian/tests/local-server-client diff --git a/debian/changelog b/debian/changelog index c00a735..05a2cce 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,67 @@ +nfs-utils (1:1.2.8-9.1) unstable; 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. + + All of the above Closes: #796637 + + Additional changes while at it: + + [ Andreas Henriksson ] + * 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: ..." + + [ Martin Pitt ] + * Drop obsolete versioned initscripts dependency. (Closes: #804990) + + -- Andreas Henriksson Tue, 28 Jun 2016 02:05:16 +0200 + nfs-utils (1:1.2.8-9) unstable; urgency=medium * debian/patches/22-mountd-fix-segfault-in-add_name-with-newer-gcc- diff --git a/debian/control b/debian/control index 51b1a11..f98ea5d 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Priority: standard Section: net Maintainer: Debian kernel team Uploaders: Anibal Monsalve Salazar , Ben Hutchings , Steve Langasek -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=kernel/nfs-utils.git 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 @@ -32,7 +32,7 @@ Homepage: http://nfs.sourceforge.net/ Package: nfs-common Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, rpcbind, adduser, ucf, lsb-base (>= 1.3-9ubuntu3), initscripts (>= 2.88dsf-13.3), libtirpc1 (>= 0.2.4) +Depends: ${shlibs:Depends}, ${misc:Depends}, rpcbind, adduser, ucf, lsb-base (>= 1.3-9ubuntu3), libtirpc1 (>= 0.2.4) Recommends: python Suggests: open-iscsi, watchdog Provides: nfs-client diff --git a/debian/nfs-common.install b/debian/nfs-common.install index d194540..75e2112 100644 --- a/debian/nfs-common.install +++ b/debian/nfs-common.install @@ -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 --git a/debian/nfs-common.links b/debian/nfs-common.links index d84465d..bbd3227 100644 --- a/debian/nfs-common.links +++ b/debian/nfs-common.links @@ -3,3 +3,4 @@ usr/share/man/man8/statd.8 usr/share/man/man8/rpc.statd.8 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 --git a/debian/nfs-kernel-server.install b/debian/nfs-kernel-server.install index 7359d34..4773a65 100644 --- a/debian/nfs-kernel-server.install +++ b/debian/nfs-kernel-server.install @@ -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 --git a/debian/nfs-kernel-server.links b/debian/nfs-kernel-server.links index 94322c2..58ea738 100644 --- a/debian/nfs-kernel-server.links +++ b/debian/nfs-kernel-server.links @@ -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 --git a/debian/nfs-utils_env.sh b/debian/nfs-utils_env.sh new file mode 100644 index 0000000..d48eb51 --- /dev/null +++ b/debian/nfs-utils_env.sh @@ -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 --git a/debian/patches/00git-start-statd-systemd.patch b/debian/patches/00git-start-statd-systemd.patch new file mode 100644 index 0000000..6da8857 --- /dev/null +++ b/debian/patches/00git-start-statd-systemd.patch @@ -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 --git a/debian/patches/00git-systemd-units.patch b/debian/patches/00git-systemd-units.patch new file mode 100644 index 0000000..dea2b14 --- /dev/null +++ b/debian/patches/00git-systemd-units.patch @@ -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 --git a/debian/patches/23-systemd-relax-dependencies.patch b/debian/patches/23-systemd-relax-dependencies.patch new file mode 100644 index 0000000..b397cce --- /dev/null +++ b/debian/patches/23-systemd-relax-dependencies.patch @@ -0,0 +1,122 @@ +From 314a5003a27d2a654d117c40714739e6aa3b7092 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +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 --git a/debian/patches/24-systemd-pipefs_in_run.patch b/debian/patches/24-systemd-pipefs_in_run.patch new file mode 100644 index 0000000..4e312a1 --- /dev/null +++ b/debian/patches/24-systemd-pipefs_in_run.patch @@ -0,0 +1,92 @@ +Description: systemd: Mount rpc_pipefs in /run instead of /var/lib/nfs/ +Author: Martin Pitt +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 --git a/debian/patches/25-systemd-daemon-paths.patch b/debian/patches/25-systemd-daemon-paths.patch new file mode 100644 index 0000000..d9f3b99 --- /dev/null +++ b/debian/patches/25-systemd-daemon-paths.patch @@ -0,0 +1,24 @@ +Description: Adjust program paths in systemd units +Author: Martin Pitt +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 --git a/debian/patches/26-systemd-server-before-client.patch b/debian/patches/26-systemd-server-before-client.patch new file mode 100644 index 0000000..bec4b8e --- /dev/null +++ b/debian/patches/26-systemd-server-before-client.patch @@ -0,0 +1,28 @@ +From d8c1fcce6d06aa062315a47134e8e3b364cb0700 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +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 --git a/debian/patches/27-systemd-enable-with-systemctl-statd.patch b/debian/patches/27-systemd-enable-with-systemctl-statd.patch new file mode 100644 index 0000000..1b0497a --- /dev/null +++ b/debian/patches/27-systemd-enable-with-systemctl-statd.patch @@ -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 +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 --git a/debian/patches/series b/debian/patches/series index 8c74c78..2211877 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -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 --git a/debian/rules b/debian/rules index 5cff5ce..215401d 100755 --- a/debian/rules +++ b/debian/rules @@ -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 --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 0000000..dea3f82 --- /dev/null +++ b/debian/tests/control @@ -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 --git a/debian/tests/local-server-client b/debian/tests/local-server-client new file mode 100644 index 0000000..549ab0c --- /dev/null +++ b/debian/tests/local-server-client @@ -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 <> /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 -- 2.39.5