[PATCH 0/5 V1] exportd: The NFSv4 only mounting daemon.

Steve Dickson
2021-02-09T22:27:44Z

exportd is a daemon that will listen for only v4 mount upcalls.
The idea is to allow distros to build a v4 only package
which will have a much smaller footprint than the
entire nfs-utils package.

exportd uses no RPC code, which means none of the
code or arguments that deal with v3 was ported,
this again, makes the footprint much smaller.

The following options were ported:
* multiple threads
* state-directory-path option
* junction support (not tested)

The rest of the mountd options were v3 only options.

Outstanding work that still needs be addressed:
* Should exportd also process mountd nfs.conf
sections, that exportd supports? This would
make the current nfs.conf sections backward
compatible but could cause confusion.

* How to make the current mountd work injunction
with exportd. Meaning how to stop mountd from
listening for v4 upcalls when exportd is running.
This would also allow a v3 only package. It would
be nice if this was dynamic verse using a compile
switch. Not sure how to do that.

* Stopping rpc.nfsd from failing when rpc.bind is
not running. A nfs.config.d/nfs.conf file was
used to turned off v3 for testing but that
seems a bit clunky.

* The exportd(8) man page could probably used some work.

* No systemd unit files exists. In theory the only processes
that would be needed are exportfs, rpc.nfsd and exportd.

Steve Dickson (5):
exportd: the initial shell of the v4 export support
exportd: Moved cache upcalls routines into libexport.a
exportd: multiple threads
exportd/exportfs: Add the state-directory-path option
exportd: Enabled junction support

.gitignore | 1 +
configure.ac | 1 +
nfs.conf | 4 +
support/export/Makefile.am | 3 +-
{utils/mountd => support/export}/auth.c | 4 +-
{utils/mountd => support/export}/cache.c | 46 +++-
support/export/export.h | 34 +++
{utils/mountd => support/export}/fsloc.c | 0
{utils/mountd => support/export}/v4root.c | 0
{utils/mountd => support/include}/fsloc.h | 0
systemd/nfs.conf.man | 10 +
utils/Makefile.am | 1 +
utils/exportd/Makefile.am | 63 +++++
utils/exportd/exportd.c | 276 ++++++++++++++++++++++
utils/exportd/exportd.man | 81 +++++++
utils/exportfs/exportfs.c | 25 +-
utils/exportfs/exportfs.man | 7 +-
utils/mountd/Makefile.am | 5 +-
18 files changed, 543 insertions(+), 18 deletions(-)
rename {utils/mountd => support/export}/auth.c (99%)
rename {utils/mountd => support/export}/cache.c (98%)
create mode 100644 support/export/export.h
rename {utils/mountd => support/export}/fsloc.c (100%)
rename {utils/mountd => support/export}/v4root.c (100%)
rename {utils/mountd => support/include}/fsloc.h (100%)
create mode 100644 utils/exportd/Makefile.am
create mode 100644 utils/exportd/exportd.c
create mode 100644 utils/exportd/exportd.man

--
2.29.2