[SRU] nfsd doesn't start if exports depend on mount

Bug #1871214 reported by Rodrigo Barbieri
14
This bug affects 1 person
Affects Status Importance Assigned to Milestone
nfs-utils (Ubuntu)
Fix Released
Medium
Rodrigo Barbieri
Bionic
Won't Fix
Medium
Rodrigo Barbieri
Eoan
Won't Fix
Medium
Rodrigo Barbieri
Focal
Fix Released
Medium
Rodrigo Barbieri
Groovy
Fix Released
Medium
Rodrigo Barbieri

Bug Description

Reproduced in Bionic and Focal, packages 1:1.3.4-2.1ubuntu5.2 and 1:1.3.4-2.5ubuntu3 respectively.

Steps to reproduce:

1) Set up a ISCSI client to a 1GB+ volume, mount it in /data and set fstab to mount at boot
2) Create a folder in /data like /data/dir1 and set up /etc/exports to export it
3) Reboot
4) Notice nfs-server does not start. Check journalctl and see it was because of "exportfs -r" returning -1 because /data/dir1 is not available.

In Xenial (1:1.2.8-9ubuntu12.2), exportfs always returns 0, so this bug is not present there.

This can be workaroundable in two ways:

1) Editing nfs-server.service and adding "-" in "ExecStartPre=/usr/sbin/exportfs -r" to be "ExecStartPre=-/usr/sbin/exportfs -r". This will retain xenial behavior.

2) Editing nfs-server.service and removing "Before=remote-fs-pre.target" and adding "RequiresMountsFor=/data". This will cause the systemd service load ordering to change, and nfs-server will wait for /data to be available.

#2 is the upstream approach with commit [0] where this new comment identifies mount dependencies and automatically sets up RequiresMountFor.

[0] http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=4776bd0599420f9d073c9e2601ed438062dccd19

=======================================================================

[Impact]

Users attempting to export folders from iSCSI or any remote mounted filesystem will experience their exports not being available at system start up, requiring workarounds or manual intervention.

[Test case]

1. Reproducing the bug:

1a. Set up a ISCSI client to a 1GB+ volume
1b. Format /dev/<device> using mkfs.xfs
1c. Mount it in /data and set fstab as follows to mount at boot

UUID="<uuid_from_blkid>" /data xfs defaults,auto,_netdev 0 0

1d. Create a folder in /data like /data/dir1 and set permissions as follows

chmod 777 /data/dir1
chown nobody:nogroup /data/dir1

1e. Set up /etc/exports as follows to export it

/data/dir1 *(rw,async,root_squash,subtree_check)

1f. Reboot
1g. Notice nfs-server does not start. Running "showmount -e" displays error.

2. No cleanup necessary

3. Install the updated package that contains the fix

4. Confirming the fix:

4a. Reboot
4b. Notice nfs-server starts sucessfully, "showmount -e" displays the exports.

[Regression Potential]

Regression potential is minimal. The dependency commit only moves code around and the actual fix only introduces an external systemd-generator without changing actual pre-existing code.

I tested and confirmed that the fix introduced [0] also covers the fix removed [1], so there should not be any regression on this particular code change as well.

[1] http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=1e41488f428cd36b200b48b84d31446e38dfdc50

[Other Info]

description: updated
tags: added: sts
summary: - nfsd doesn't start if exports depend on mount
+ [SRU] nfsd doesn't start if exports depend on mount
Changed in nfs-utils (Ubuntu):
assignee: nobody → Rodrigo Barbieri (rodrigo-barbieri2010)
status: New → Fix Committed
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

This problem is addressed by commit [0] which requires [1] to compile.

I have created a test package with those changes and confirmed the issue is addressed.

[0] http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=4776bd0599420f9d073c9e2601ed438062dccd19

[1] http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commitdiff;h=0386fc1757838a096ae318347bc0bbd3ba94570b

description: updated
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

debdiff for focal

Changed in nfs-utils (Ubuntu Focal):
status: New → In Progress
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

debdiff for groovy

tags: added: sts-sponsor-dgadomski
Revision history for this message
Dariusz Gadomski (dgadomski) wrote :

Rodrigo, I have tried to make it work using --with-systemd flag passed in d/rules, but every time I make a fix something else backfires. I doubt it has ever been used before.

As a sidenote: we are lagging a lot behind upstream (they're at 2.4.4 already, we're at 1.3.4 and so is Debian). But we can't fix this for f anymore.

I discussed this with ddstreet and we need to get Debian opinion on this. What could be tried is one of the following (for example):
1) debian/nfs-kernel-server.install should install from debian/tmp/lib/system/systemd-generators, and systemd/Makefile.am should pull genexec_PROGRAM Sout of INSTALL_SYSTEMD and also change /usr/lib/systemd/systemd-generators to /lib/...
or
2) use the build location to install from in nfs-kernel-server.install, and update systemd/Makefile.am to only build (not install) the generator, like:

 if INSTALL_SYSTEMD
+genexec_PROGRAMS = nfs-server-generator
 install-data-hook: $(unit_files)
  mkdir -p $(DESTDIR)/$(unitdir)
  cp $(unit_files) $(DESTDIR)/$(unitdir)
+else
+noinst_PROGRAMS = nfs-server-generator
 endif

I'm going to offer a MR to Debian and see what they say about it.

Revision history for this message
Dariusz Gadomski (dgadomski) wrote :
Dan Streetman (ddstreet)
Changed in nfs-utils (Ubuntu Groovy):
status: Fix Committed → In Progress
Changed in nfs-utils (Ubuntu Eoan):
status: New → In Progress
Changed in nfs-utils (Ubuntu Bionic):
status: New → In Progress
Changed in nfs-utils (Ubuntu Focal):
assignee: nobody → Rodrigo Barbieri (rodrigo-barbieri2010)
Changed in nfs-utils (Ubuntu Eoan):
assignee: nobody → Rodrigo Barbieri (rodrigo-barbieri2010)
Changed in nfs-utils (Ubuntu Bionic):
assignee: nobody → Rodrigo Barbieri (rodrigo-barbieri2010)
importance: Undecided → Medium
Changed in nfs-utils (Ubuntu Eoan):
importance: Undecided → Medium
Changed in nfs-utils (Ubuntu Focal):
importance: Undecided → Medium
Changed in nfs-utils (Ubuntu Groovy):
importance: Undecided → Medium
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package nfs-utils - 1:1.3.4-2.5ubuntu4

---------------
nfs-utils (1:1.3.4-2.5ubuntu4) groovy; urgency=medium

  [ Rodrigo Barbieri ]
  * d/p/fix-start-ordering-1.patch,
    d/p/fix-start-ordering-2.patch,
    d/p/fix-start-ordering-3.patch,
    d/nfs-kernel-server.install:
    - Fix systemd service start ordering (LP: #1871214)

 -- Dariusz Gadomski <email address hidden> Thu, 28 May 2020 17:45:23 -0400

Changed in nfs-utils (Ubuntu Groovy):
status: In Progress → Fix Released
Revision history for this message
Timo Aaltonen (tjaalton) wrote : Please test proposed package

Hello Rodrigo, or anyone else affected,

Accepted nfs-utils into focal-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/nfs-utils/1:1.3.4-2.5ubuntu3.1 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, what testing has been performed on the package and change the tag from verification-needed-focal to verification-done-focal. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-focal. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance for helping!

N.B. The updated package will be released to -updates after the bug(s) fixed by this package have been verified and the package has been in -proposed for a minimum of 7 days.

Changed in nfs-utils (Ubuntu Focal):
status: In Progress → Fix Committed
tags: added: verification-needed verification-needed-focal
Revision history for this message
Robie Basak (racb) wrote :

IMHO an SRU is not justified here. The code changes are substantial ("only moving code around" hardly makes it low risk as the risk of unexpected interactions is the same) and affected users in Bionic and Eoan especially are unlikely to have new affected deployments and existing deployments are likely already worked around. I don't see the benefit to SRU this to existing users, particularly in Bionic and Eoan. So I am declining to accept this SRU for Bionic and Eoan.

However, as Timo has already accepted this into Focal I'll let that proceed, and if other SRU team members want to accept this into Bionic and Eoan they can do so.

Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

Hello Robie,

While I investigated this issue, I found workarounds #1 and #2 as you can see in the description section. I also found the upstream fix which is the proper implementation of workaround #2 (workaround #2 per se wouldn't be backportable, hence it needs a "generator" to be dynamic). I understand that the fix is a bit complex for a bionic SRU, therefore an alternative could be workaround #1.

I tested workaround #1 within the scope of the bug and also a few corner cases that came to my mind, and I can test it more extensively to ensure it is safe for a bionic SRU. What do you think about it? Do you think workaround #1 could be SRU'ed into bionic?

Just to add a bit more context to it: in xenial exportfs always returns 0, regardless of any error or what happens, therefore nfsd is always run and is never prevented from running by exportfs failing. This is why the bug doesn't happen in xenial. The motivation that led to exportfs return value changing was so it could be properly scripted (as far as I can tell, it was quite a controversial change, reverted and added back, see [1]). Given that for the SRU of workaround #1 we would be changing just the systemd file to add a "-" to ExecStartPre, the previous (xenial) behavior is maintained in the system boot case, but it could still return != 0 when scripted. The impact is also minor and easier to revert (it is a one-liner)

Also, one of the corner cases that I investigated is that, in the xenial behavior, the export can be created by nfsd even though the path is not available. At boot time, the export would be available a few seconds later when the path is available. Anyone trying to mount the path in that short time window will not succeed (or ever if the path fails to be mounted). In xenial, you can end up in the same situation manually by setting up an export that doesn't exist, not necessarily having to be set up at boot time, as this workflow is not prevented at all.

[1] http://git.linux-nfs.org/?p=steved/nfs-utils.git;a=history;f=utils/exportfs/exportfs.c;h=a04a78984a6e4eac4321ca9cafcf5a3bace0486c;hb=HEAD

description: updated
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :
tags: added: verification-done verification-done-focal
removed: verification-needed verification-needed-focal
Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

Performed validation according to test case, attached output, updated tags

Revision history for this message
Robie Basak (racb) wrote :

I've just finished speaking to Rodrigo about Bionic and Eoan. We think that a different resolution for Bionic and Eoan might be more suitable, and Rodrigo will investigate this. In the meantime, I'll leave the current uploads for Bionic and Eoan in the queue in case we decide to use them after all, but until we decide, please hold them in the queue.

Changed in nfs-utils (Ubuntu Bionic):
status: In Progress → Incomplete
Changed in nfs-utils (Ubuntu Eoan):
status: In Progress → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package nfs-utils - 1:1.3.4-2.5ubuntu3.1

---------------
nfs-utils (1:1.3.4-2.5ubuntu3.1) focal; urgency=medium

  [ Rodrigo Barbieri ]
  * d/p/fix-start-ordering-1.patch,
    d/p/fix-start-ordering-2.patch,
    d/p/fix-start-ordering-3.patch,
    d/nfs-kernel-server.install:
    - Fix systemd service start ordering (LP: #1871214)

 -- Dariusz Gadomski <email address hidden> Fri, 29 May 2020 08:32:24 +0200

Changed in nfs-utils (Ubuntu Focal):
status: Fix Committed → Fix Released
Revision history for this message
Łukasz Zemczak (sil2100) wrote : Update Released

The verification of the Stable Release Update for nfs-utils has completed successfully and the package is now being released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

Revision history for this message
Rodrigo Barbieri (rodrigo-barbieri2010) wrote :

After speaking to Robie and the customer, we will not be pursuing the SRU further back to eoan and bionic at this moment. Changing those to "Won't Fix".

Changed in nfs-utils (Ubuntu Eoan):
status: Incomplete → Won't Fix
Changed in nfs-utils (Ubuntu Bionic):
status: Incomplete → Won't Fix
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.