diff --git a/0001-systemd-Decouple-the-starting-and-stopping-of-rpcbin.patch b/0001-systemd-Decouple-the-starting-and-stopping-of-rpcbin.patch new file mode 100644 index 0000000..9035b0a --- /dev/null +++ b/0001-systemd-Decouple-the-starting-and-stopping-of-rpcbin.patch @@ -0,0 +1,49 @@ +From 4fabfcd082069a16ea8769b9ea9344fc15011366 Mon Sep 17 00:00:00 2001 +From: Steve Dickson +Date: Mon, 9 Nov 2015 11:28:30 -0500 +Subject: [PATCH] systemd: Decouple the starting and stopping of + rpcbind/nfs-server + +Commit b98f2af15 introduced a regression that cause the +starting and stop of rpcbind and the nfs-server to +be depended on each other + +The starting of the NFS server should start rpcbind +but bring rpcbind down should not bring the NFS +server down. + +Signed-off-by: Steve Dickson +--- + systemd/nfs-server.service | 2 +- + systemd/rpc-statd.service | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/systemd/nfs-server.service b/systemd/nfs-server.service +index 12b02f26f9ce..317e5d689767 100644 +--- a/systemd/nfs-server.service ++++ b/systemd/nfs-server.service +@@ -1,7 +1,7 @@ + [Unit] + Description=NFS server and services + DefaultDependencies=no +-Requires= network.target proc-fs-nfsd.mount rpcbind.service ++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 +diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service +index 14604d783ddf..f16ea425dc77 100644 +--- a/systemd/rpc-statd.service ++++ b/systemd/rpc-statd.service +@@ -3,7 +3,7 @@ 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 ++After=network.target nss-lookup.target rpcbind.service + + PartOf=nfs-utils.service + +-- +2.8.2 + diff --git a/0002-systemd-unit-files-fix-up-dependencies-on-rpcbind.patch b/0002-systemd-unit-files-fix-up-dependencies-on-rpcbind.patch new file mode 100644 index 0000000..f84d1fb --- /dev/null +++ b/0002-systemd-unit-files-fix-up-dependencies-on-rpcbind.patch @@ -0,0 +1,131 @@ +From 91da135f243d6f87fcea8b8a3ce28a589917b0e4 Mon Sep 17 00:00:00 2001 +From: NeilBrown +Date: Mon, 2 May 2016 08:54:13 -0400 +Subject: [PATCH] systemd unit files: fix up dependencies on rpcbind. + +The dependencies on rpcbind have been changed a few times and I think +they are still wrong. So I'll go into some detail to justify this +change. + +Firstly: rpcbind.target rpcbind.socket or rpcbind.service? + +The systemd documentation talks about targets as "synchronization +points" and likens them to SysV init run levels. Run levels are about +ordering but not dependencies. + +The systemd.special man page describes rpcbind.target as intended +explicitly for ordering sysvinit scripts, with "After=" dependencies. + +So while I think it is valid to use rpcbind.target for ordering +(before/after) it shouldn't be used for dependencies (Wants/Requires). +The rpcbind.target file included in systemd does not "Require" the +actual service, so requiring rpcbind.target itself is pointless. + +I think we shouldn't use rpcbind.target at all. Leave it for sysvinit +synchronization. + +So: .socket or .service? + +I think nfs only needs the socket to be active. On first connection +the service will be started. But nfs does not need to wait for the +service to start, only the socket. So I think we should exclusively +use rpcbind.socket. + +Next: Wants or Requires. + +rpc.statd definitely Requires rpcbind. It needs to register to be +useful, and without rpcbind it cannot register. + +nfs-server does not necesarily require rpcbind. Specifically if +configured for NFSv4 only, nfs-server will work quite happily without +rpcbind. + +Someone with an NFSv4 only setup who wants rpcbind to not run can use + systemctl mask rpcbind.socket +to ensure it never runs. +So nfs-server should only "Wants: rpcbind.socket". +I think + Commit: 4fabfcd08206 ("systemd: Decouple the starting and stopping of +rpcbind/nfs-server") +should have changed "Requires" to "Wants" rather than "server" to +"target" +to fix the dependency problem. + +Finally: After? + +It only makes sense to declare an ordering relation as "After:" +something that will actually be started. If "foo.service" is not part +of the systemd transaction, then "After: foo.service" has no effect. +So having: + Requires: rpcbind.target + After: rpcbind.socket + +doesn't make much sense unless there is some relationship between +rpcbind.target and rpcbind.socket, and there is no general guarantee +of that (though what individual distros do, I don't know). +So the "After" should match the "Wants" or "Requires". + +It might make sense to + Requires: rpcbind.socket + After: rpcbind.target + +as it is reasonable to assume that rpcbind.target will be ordered with +rpcbind.socket, but as we can use rpcbind.socket explictly, that is +clearer. + +So my conclusion is that nfs-server should: + Wants: rpcbind.socket + After: rpcbind.socket + +and rpc-statd should + Requires: rpcbind.socket + After: rpcbind.socket + +which is what this patch puts into effect. + +Signed-off-by: NeilBrown +Signed-off-by: Steve Dickson +--- + systemd/nfs-server.service | 5 +++-- + systemd/rpc-statd.service | 4 ++-- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/systemd/nfs-server.service b/systemd/nfs-server.service +index 317e5d689767..2ccdc6344cd5 100644 +--- a/systemd/nfs-server.service ++++ b/systemd/nfs-server.service +@@ -1,13 +1,14 @@ + [Unit] + Description=NFS server and services + DefaultDependencies=no +-Requires= network.target proc-fs-nfsd.mount rpcbind.target ++Requires= network.target proc-fs-nfsd.mount + Requires= nfs-mountd.service ++Wants=rpcbind.socket + Wants=rpc-statd.service nfs-idmapd.service + Wants=rpc-statd-notify.service + + After= local-fs.target +-After= network.target proc-fs-nfsd.mount rpcbind.service nfs-mountd.service ++After= network.target proc-fs-nfsd.mount rpcbind.socket nfs-mountd.service + After= nfs-idmapd.service rpc-statd.service + Before= rpc-statd-notify.service + +diff --git a/systemd/rpc-statd.service b/systemd/rpc-statd.service +index f16ea425dc77..a02f5c41a424 100644 +--- a/systemd/rpc-statd.service ++++ b/systemd/rpc-statd.service +@@ -2,8 +2,8 @@ + 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.service ++Requires=nss-lookup.target rpcbind.socket ++After=network.target nss-lookup.target rpcbind.socket + + PartOf=nfs-utils.service + +-- +2.8.2 + diff --git a/nfs-utils.changes b/nfs-utils.changes index 214476b..65d097b 100644 --- a/nfs-utils.changes +++ b/nfs-utils.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue May 24 22:27:14 UTC 2016 - nfbrown@suse.com + +- 0001-systemd-Decouple-the-starting-and-stopping-of-rpcbin.patch + 0002-systemd-unit-files-fix-up-dependencies-on-rpcbind.patch + Fix systemd dependencies to ensure rpcbind is started when needed. + (bsc#975265) + ------------------------------------------------------------------- Thu Apr 21 23:40:59 UTC 2016 - neilb@suse.com diff --git a/nfs-utils.spec b/nfs-utils.spec index cd1e090..5269d83 100644 --- a/nfs-utils.spec +++ b/nfs-utils.spec @@ -66,6 +66,8 @@ Patch4: 0001-mount.nfs-hide-EBUSY-errors.patch Patch5: 0001-close-the-syslog-fd-in-daemon_init.patch Patch6: 0001-mount.nfs-trust-the-exit-status-of-start_statd.patch Patch7: 0001-mount-run-START_STATD-fully-as-root.patch +Patch8: 0001-systemd-Decouple-the-starting-and-stopping-of-rpcbin.patch +Patch9: 0002-systemd-unit-files-fix-up-dependencies-on-rpcbind.patch Suggests: python-base @@ -124,6 +126,8 @@ This package contains additional NFS documentation. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 +%patch9 -p1 cp %{S:6} .