2021-02-19 20:09:40

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

nfsv4.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.

V2:
* Added two systemd services: nfsv4-exportd and nfsv4-server
* nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.

V3: Changed the name from exportd to nfsv4.exportd

V4: Added compile flag that will compile in the NFSv4 only server

Steve Dickson (7):
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
exportd: systemd unit files
exportd: Added config variable to compile in the NFSv4 only server.

.gitignore | 1 +
configure.ac | 14 ++
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/Makefile.am | 6 +
systemd/nfs.conf.man | 10 +
systemd/nfsv4-exportd.service | 12 +
systemd/nfsv4-server.service | 31 +++
utils/Makefile.am | 4 +
utils/exportd/Makefile.am | 65 +++++
utils/exportd/exportd.c | 276 ++++++++++++++++++++++
utils/exportd/exportd.man | 81 +++++++
utils/exportfs/exportfs.c | 21 +-
utils/exportfs/exportfs.man | 7 +-
utils/mountd/Makefile.am | 5 +-
21 files changed, 606 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 systemd/nfsv4-exportd.service
create mode 100644 systemd/nfsv4-server.service
create mode 100644 utils/exportd/Makefile.am
create mode 100644 utils/exportd/exportd.c
create mode 100644 utils/exportd/exportd.man

--
2.29.2


2021-02-19 20:10:53

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 6/7] exportd: systemd unit files

Created two new systemd unit services
based on nfs-mountd and nfs-service

Signed-off-by: Steve Dickson <[email protected]>
---
systemd/Makefile.am | 4 +++-
systemd/nfsv4-exportd.service | 12 ++++++++++++
systemd/nfsv4-server.service | 31 +++++++++++++++++++++++++++++++
3 files changed, 46 insertions(+), 1 deletion(-)
create mode 100644 systemd/nfsv4-exportd.service
create mode 100644 systemd/nfsv4-server.service

diff --git a/systemd/Makefile.am b/systemd/Makefile.am
index 75cdd9f..5251f23 100644
--- a/systemd/Makefile.am
+++ b/systemd/Makefile.am
@@ -17,7 +17,9 @@ unit_files = \

if CONFIG_NFSV4
unit_files += \
- nfs-idmapd.service
+ nfs-idmapd.service \
+ nfsv4-exportd.service \
+ nfsv4-server.service
endif

if CONFIG_NFSV41
diff --git a/systemd/nfsv4-exportd.service b/systemd/nfsv4-exportd.service
new file mode 100644
index 0000000..11d663a
--- /dev/null
+++ b/systemd/nfsv4-exportd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=NFSv4 Mount Daemon
+DefaultDependencies=no
+Requires=proc-fs-nfsd.mount
+Wants=network-online.target
+After=proc-fs-nfsd.mount
+After=network-online.target local-fs.target
+BindsTo=nfsv4-server.service
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/nfsv4.exportd
diff --git a/systemd/nfsv4-server.service b/systemd/nfsv4-server.service
new file mode 100644
index 0000000..6497568
--- /dev/null
+++ b/systemd/nfsv4-server.service
@@ -0,0 +1,31 @@
+[Unit]
+Description=NFSv4 server and services
+DefaultDependencies=no
+Requires=network.target proc-fs-nfsd.mount
+Requires=nfsv4-exportd.service
+Wants=network-online.target
+Wants=nfs-idmapd.service
+Wants=nfsdcld.service
+
+After=network-online.target local-fs.target
+After=proc-fs-nfsd.mount nfsv4-exportd.service
+After=nfs-idmapd.service
+After=nfsdcld.service
+
+# GSS services dependencies and ordering
+Wants=auth-rpcgss-module.service
+After=rpc-gssd.service gssproxy.service rpc-svcgssd.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStartPre=-/usr/sbin/exportfs -r
+ExecStart=/usr/sbin/rpc.nfsd -N 3
+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
--
2.29.2

2021-02-19 20:10:54

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 7/7] exportd: Added config variable to compile in the NFSv4 only server.

Added the --enable-nfsv4server configuration flag
that will compile/install nfsv4.exportd and
install the systemd unit files.

Signed-off-by: Steve Dickson <[email protected]>
---
configure.ac | 13 +++++++++++++
systemd/Makefile.am | 6 +++++-
utils/Makefile.am | 3 +++
3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index ffd6247..40fb802 100644
--- a/configure.ac
+++ b/configure.ac
@@ -257,6 +257,19 @@ AC_ARG_ENABLE(nfsdcltrack,
enable_nfsdcltrack=$enableval,
enable_nfsdcltrack="yes")

+if test "$enable_nfsv4" = yes; then
+AC_ARG_ENABLE(nfsv4server,
+ [AC_HELP_STRING([--enable-nfsv4server],
+ [enable support for NFSv4 only server @<:@default=no@:>@])],
+ enable_nfsv4server=$enableval,
+ enable_nfsv4server="no")
+ if test "$enable_nfsv4server" = yes; then
+ AC_DEFINE(HAVE_NFSV4SERVER_SUPPORT, 1,
+ [Define this if you want NFSv4 server only support compiled in])
+ fi
+ AM_CONDITIONAL(CONFIG_NFSV4SERVER, [test "$enable_nfsv4server" = "yes" ])
+fi
+
dnl Check for TI-RPC library and headers
AC_LIBTIRPC

diff --git a/systemd/Makefile.am b/systemd/Makefile.am
index 5251f23..650ad25 100644
--- a/systemd/Makefile.am
+++ b/systemd/Makefile.am
@@ -17,7 +17,11 @@ unit_files = \

if CONFIG_NFSV4
unit_files += \
- nfs-idmapd.service \
+ nfs-idmapd.service
+endif
+
+if CONFIG_NFSV4SERVER
+unit_files += \
nfsv4-exportd.service \
nfsv4-server.service
endif
diff --git a/utils/Makefile.am b/utils/Makefile.am
index 2a54b90..ab58419 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -5,6 +5,9 @@ OPTDIRS =
if CONFIG_NFSV4
OPTDIRS += idmapd
OPTDIRS += nfsidmap
+endif
+
+if CONFIG_NFSV4SERVER
OPTDIRS += exportd
endif

--
2.29.2

2021-02-19 20:11:17

by Steve Dickson

[permalink] [raw]
Subject: [PATCH 4/7] exportd/exportfs: Add the state-directory-path option

Ported state-directory-path option from mountd (commit a15bd948)
Signed-off-by: Steve Dickson <[email protected]>
---
nfs.conf | 1 +
systemd/nfs.conf.man | 3 ++-
utils/exportd/exportd.c | 35 +++++++++++++++++++++++++++--------
utils/exportfs/exportfs.c | 21 +++++++++++++--------
utils/exportfs/exportfs.man | 7 +++++--
5 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/nfs.conf b/nfs.conf
index 4b344fa..bebb2e3 100644
--- a/nfs.conf
+++ b/nfs.conf
@@ -31,6 +31,7 @@
#
[exportd]
# debug="all|auth|call|general|parse"
+# state-directory-path=/var/lib/nfs
# threads=1
[mountd]
# debug="all|auth|call|general|parse"
diff --git a/systemd/nfs.conf.man b/systemd/nfs.conf.man
index a4379fd..d2187f8 100644
--- a/systemd/nfs.conf.man
+++ b/systemd/nfs.conf.man
@@ -131,7 +131,8 @@ but on the server, this will resolve to the path
.TP
.B exportd
Recognized values:
-.B threads
+.BR threads ,
+.BR state-directory-path

See
.BR exportd (8)
diff --git a/utils/exportd/exportd.c b/utils/exportd/exportd.c
index c814503..7130bcb 100644
--- a/utils/exportd/exportd.c
+++ b/utils/exportd/exportd.c
@@ -26,7 +26,6 @@
extern void my_svc_run(void);

struct state_paths etab;
-struct state_paths rmtab;

/* Number of mountd threads to start. Default is 1 and
* that's probably enough unless you need hundreds of
@@ -80,6 +79,12 @@ wait_for_workers (void)
}
}

+inline void
+cleanup_lockfiles (void)
+{
+ unlink(etab.lockfn);
+}
+
/* Fork num_threads worker children and wait for them */
static void
fork_workers(void)
@@ -117,6 +122,8 @@ fork_workers(void)

/* in parent */
wait_for_workers();
+ cleanup_lockfiles();
+ free_state_path_names(&etab);
xlog(L_NOTICE, "exportd: no more workers, exiting\n");
exit(0);
}
@@ -129,6 +136,8 @@ killer (int sig)
kill(0, SIGTERM);
wait_for_workers();
}
+ cleanup_lockfiles();
+ free_state_path_names(&etab);
xlog (L_NOTICE, "Caught signal %d, exiting.", sig);

exit(0);
@@ -159,24 +168,33 @@ set_signals(void)
sa.sa_handler = sig_hup;
sigaction(SIGHUP, &sa, NULL);
}
+
static void
usage(const char *prog, int n)
{
fprintf(stderr,
"Usage: %s [-f|--foreground] [-h|--help] [-d kind|--debug kind]\n"
+" [-s|--state-directory-path path]\n"
" [-t num|--num-threads=num]\n", prog);
exit(n);
}

inline static void
-read_exportd_conf(char *progname)
+read_exportd_conf(char *progname, char **argv)
{
+ char *s;
+
conf_init_file(NFS_CONFFILE);

xlog_set_debug(progname);

num_threads = conf_get_num("exportd", "threads", num_threads);
+
+ s = conf_get_str("exportd", "state-directory-path");
+ if (s && !state_setup_basedir(argv[0], s))
+ exit(1);
}
+
int
main(int argc, char **argv)
{
@@ -194,9 +212,9 @@ main(int argc, char **argv)
xlog_open(progname);

/* Read in config setting */
- read_exportd_conf(progname);
+ read_exportd_conf(progname, argv);

- while ((c = getopt_long(argc, argv, "d:fht:", longopts, NULL)) != EOF) {
+ while ((c = getopt_long(argc, argv, "d:fhs:t:", longopts, NULL)) != EOF) {
switch (c) {
case 'd':
xlog_sconfig(optarg, 1);
@@ -207,6 +225,10 @@ main(int argc, char **argv)
case 'h':
usage(progname, 0);
break;
+ case 's':
+ if (!state_setup_basedir(argv[0], optarg))
+ exit(1);
+ break;
case 't':
num_threads = atoi (optarg);
break;
@@ -219,9 +241,7 @@ main(int argc, char **argv)

if (!setup_state_path_names(progname, ETAB, ETABTMP, ETABLCK, &etab))
return 1;
- if (!setup_state_path_names(progname, RMTAB, RMTABTMP, RMTABLCK, &rmtab))
- return 1;
-
+
if (!foreground)
xlog_stderr(0);

@@ -252,6 +272,5 @@ main(int argc, char **argv)
progname);

free_state_path_names(&etab);
- free_state_path_names(&rmtab);
exit(1);
}
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index f8b446a..262dd19 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -92,10 +92,21 @@ release_lockfile()
}
}
inline static void
-read_exportfs_conf(void)
+read_exportfs_conf(char **argv)
{
+ char *s;
+
conf_init_file(NFS_CONFFILE);
xlog_set_debug("exportfs");
+
+ /* NOTE: following uses "mountd" section of nfs.conf !!!! */
+ s = conf_get_str("mountd", "state-directory-path");
+ /* Also look in the exportd section */
+ if (s == NULL)
+ s = conf_get_str("exportd", "state-directory-path");
+ if (s && !state_setup_basedir(argv[0], s))
+ exit(1);
+
}
int
main(int argc, char **argv)
@@ -110,7 +121,6 @@ main(int argc, char **argv)
int f_ignore = 0;
int i, c;
int force_flush = 0;
- char *s;

if ((progname = strrchr(argv[0], '/')) != NULL)
progname++;
@@ -122,15 +132,10 @@ main(int argc, char **argv)
xlog_syslog(0);

/* Read in config setting */
- read_exportfs_conf();
+ read_exportfs_conf(argv);

nfsd_path_init();

- /* NOTE: following uses "mountd" section of nfs.conf !!!! */
- s = conf_get_str("mountd", "state-directory-path");
- if (s && !state_setup_basedir(argv[0], s))
- exit(1);
-
while ((c = getopt(argc, argv, "ad:fhio:ruvs")) != EOF) {
switch(c) {
case 'a':
diff --git a/utils/exportfs/exportfs.man b/utils/exportfs/exportfs.man
index 91d3589..6d417a7 100644
--- a/utils/exportfs/exportfs.man
+++ b/utils/exportfs/exportfs.man
@@ -167,9 +167,11 @@ When a list is given, the members should be comma-separated.
.B exportfs
will also recognize the
.B state-directory-path
-value from the
+value from both the
.B [mountd]
-section.
+section and the
+.B [exportd]
+section

.SH DISCUSSION
.SS Exporting Directories
@@ -327,6 +329,7 @@ table of clients accessing server's exports
.BR exports (5),
.BR nfs.conf (5),
.BR rpc.mountd (8),
+.BR exportd (8),
.BR netgroup (5)
.SH AUTHORS
Olaf Kirch <[email protected]>
--
2.29.2

2021-02-20 16:34:08

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 2/19/21 3:08 PM, Steve Dickson wrote:
> nfsv4.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.
>
> V2:
> * Added two systemd services: nfsv4-exportd and nfsv4-server
> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>
> V3: Changed the name from exportd to nfsv4.exportd
>
> V4: Added compile flag that will compile in the NFSv4 only server
Patch set Committed... (tag: nfs-utils-2-5-3-rc6)

steved.
>
> Steve Dickson (7):
> 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
> exportd: systemd unit files
> exportd: Added config variable to compile in the NFSv4 only server.
>
> .gitignore | 1 +
> configure.ac | 14 ++
> 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/Makefile.am | 6 +
> systemd/nfs.conf.man | 10 +
> systemd/nfsv4-exportd.service | 12 +
> systemd/nfsv4-server.service | 31 +++
> utils/Makefile.am | 4 +
> utils/exportd/Makefile.am | 65 +++++
> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
> utils/exportd/exportd.man | 81 +++++++
> utils/exportfs/exportfs.c | 21 +-
> utils/exportfs/exportfs.man | 7 +-
> utils/mountd/Makefile.am | 5 +-
> 21 files changed, 606 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 systemd/nfsv4-exportd.service
> create mode 100644 systemd/nfsv4-server.service
> create mode 100644 utils/exportd/Makefile.am
> create mode 100644 utils/exportd/exportd.c
> create mode 100644 utils/exportd/exportd.man
>

2021-02-24 20:34:25

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> nfsv4.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.

How 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.

There's also --manage-gids.

If you want nfsv4-only at runtime, you can always run rpc.mountd with
-N2 -N3 to turn off the MOUNT protocol support.

If you don't even want v2/f3 code on your system, then you may have to
do something like this, but why is that important?

--b.

>
> V2:
> * Added two systemd services: nfsv4-exportd and nfsv4-server
> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>
> V3: Changed the name from exportd to nfsv4.exportd
>
> V4: Added compile flag that will compile in the NFSv4 only server
>
> Steve Dickson (7):
> 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
> exportd: systemd unit files
> exportd: Added config variable to compile in the NFSv4 only server.
>
> .gitignore | 1 +
> configure.ac | 14 ++
> 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/Makefile.am | 6 +
> systemd/nfs.conf.man | 10 +
> systemd/nfsv4-exportd.service | 12 +
> systemd/nfsv4-server.service | 31 +++
> utils/Makefile.am | 4 +
> utils/exportd/Makefile.am | 65 +++++
> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
> utils/exportd/exportd.man | 81 +++++++
> utils/exportfs/exportfs.c | 21 +-
> utils/exportfs/exportfs.man | 7 +-
> utils/mountd/Makefile.am | 5 +-
> 21 files changed, 606 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 systemd/nfsv4-exportd.service
> create mode 100644 systemd/nfsv4-server.service
> create mode 100644 utils/exportd/Makefile.am
> create mode 100644 utils/exportd/exportd.c
> create mode 100644 utils/exportd/exportd.man
>
> --
> 2.29.2

2021-02-25 03:28:29

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> nfsv4.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.
>
> V2:
> * Added two systemd services: nfsv4-exportd and nfsv4-server
> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.

We really shouldn't make users change how they do things.

Whatever we do, "systemctl start nfs-server" should still be how they
start the NFS server.

--b.

>
> V3: Changed the name from exportd to nfsv4.exportd
>
> V4: Added compile flag that will compile in the NFSv4 only server
>
> Steve Dickson (7):
> 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
> exportd: systemd unit files
> exportd: Added config variable to compile in the NFSv4 only server.
>
> .gitignore | 1 +
> configure.ac | 14 ++
> 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/Makefile.am | 6 +
> systemd/nfs.conf.man | 10 +
> systemd/nfsv4-exportd.service | 12 +
> systemd/nfsv4-server.service | 31 +++
> utils/Makefile.am | 4 +
> utils/exportd/Makefile.am | 65 +++++
> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
> utils/exportd/exportd.man | 81 +++++++
> utils/exportfs/exportfs.c | 21 +-
> utils/exportfs/exportfs.man | 7 +-
> utils/mountd/Makefile.am | 5 +-
> 21 files changed, 606 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 systemd/nfsv4-exportd.service
> create mode 100644 systemd/nfsv4-server.service
> create mode 100644 utils/exportd/Makefile.am
> create mode 100644 utils/exportd/exportd.c
> create mode 100644 utils/exportd/exportd.man
>
> --
> 2.29.2

2021-03-04 07:53:50

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 2/24/21 3:30 PM, J. Bruce Fields wrote:
> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>> nfsv4.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.
>
> How much smaller?
Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
need to also come a long.
>
>> 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.
>
> There's also --manage-gids.
Right... a patch was posted...

>
> If you want nfsv4-only at runtime, you can always run rpc.mountd with
> -N2 -N3 to turn off the MOUNT protocol support.
The end game is not to run mountd at all...

>
> If you don't even want v2/f3 code on your system, then you may have to
> do something like this, but why is that important?
Container friendly... Not bring in all the extra daemons v3
needs is a good thing... esp rpcbind.

steved.

>
> --b.
>
>>
>> V2:
>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>>
>> V3: Changed the name from exportd to nfsv4.exportd
>>
>> V4: Added compile flag that will compile in the NFSv4 only server
>>
>> Steve Dickson (7):
>> 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
>> exportd: systemd unit files
>> exportd: Added config variable to compile in the NFSv4 only server.
>>
>> .gitignore | 1 +
>> configure.ac | 14 ++
>> 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/Makefile.am | 6 +
>> systemd/nfs.conf.man | 10 +
>> systemd/nfsv4-exportd.service | 12 +
>> systemd/nfsv4-server.service | 31 +++
>> utils/Makefile.am | 4 +
>> utils/exportd/Makefile.am | 65 +++++
>> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
>> utils/exportd/exportd.man | 81 +++++++
>> utils/exportfs/exportfs.c | 21 +-
>> utils/exportfs/exportfs.man | 7 +-
>> utils/mountd/Makefile.am | 5 +-
>> 21 files changed, 606 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 systemd/nfsv4-exportd.service
>> create mode 100644 systemd/nfsv4-server.service
>> create mode 100644 utils/exportd/Makefile.am
>> create mode 100644 utils/exportd/exportd.c
>> create mode 100644 utils/exportd/exportd.man
>>
>> --
>> 2.29.2
>

2021-03-04 07:53:52

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 2/24/21 3:49 PM, J. Bruce Fields wrote:
> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>> nfsv4.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.
>>
>> V2:
>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>
> We really shouldn't make users change how they do things.
If they only want v4 support... I'm thinking is a lot easier to
simple do a nfsv4.server start verse edit config files.

>
> Whatever we do, "systemctl start nfs-server" should still be how they
> start the NFS server.
Again.. if they install the nfsv4-utils verse the nfs-utils package
they should expect change... IMHO..

steved.
>
> --b.
>
>>
>> V3: Changed the name from exportd to nfsv4.exportd
>>
>> V4: Added compile flag that will compile in the NFSv4 only server
>>
>> Steve Dickson (7):
>> 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
>> exportd: systemd unit files
>> exportd: Added config variable to compile in the NFSv4 only server.
>>
>> .gitignore | 1 +
>> configure.ac | 14 ++
>> 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/Makefile.am | 6 +
>> systemd/nfs.conf.man | 10 +
>> systemd/nfsv4-exportd.service | 12 +
>> systemd/nfsv4-server.service | 31 +++
>> utils/Makefile.am | 4 +
>> utils/exportd/Makefile.am | 65 +++++
>> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
>> utils/exportd/exportd.man | 81 +++++++
>> utils/exportfs/exportfs.c | 21 +-
>> utils/exportfs/exportfs.man | 7 +-
>> utils/mountd/Makefile.am | 5 +-
>> 21 files changed, 606 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 systemd/nfsv4-exportd.service
>> create mode 100644 systemd/nfsv4-server.service
>> create mode 100644 utils/exportd/Makefile.am
>> create mode 100644 utils/exportd/exportd.c
>> create mode 100644 utils/exportd/exportd.man
>>
>> --
>> 2.29.2
>

2021-03-04 14:01:12

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>
>
> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
> > On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> >> nfsv4.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.
> >
> > How much smaller?
> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
> need to also come a long.

Could we get some numbers?

Looks like nfs-utils in F33 is about 1.2M:

$ rpm -qi nfs-utils|grep ^Size
Size : 1243512

$ strip utils/mountd/mountd
$ ls -lh utils/mountd/mountd
-rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
$ strip utils/exportd/exportd
$ ls -lh utils/exportd/exportd
-rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd

So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
worth it?

> >> 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.
> >
> > There's also --manage-gids.
> Right... a patch was posted...
>
> >
> > If you want nfsv4-only at runtime, you can always run rpc.mountd with
> > -N2 -N3 to turn off the MOUNT protocol support.
> The end game is not to run mountd at all...
>
> >
> > If you don't even want v2/f3 code on your system, then you may have to
> > do something like this, but why is that important?
> Container friendly... Not bring in all the extra daemons v3
> needs is a good thing... esp rpcbind.

Looking at the output of
$ for f in $(rpm -ql nfs-utils); do if [ -f $f ]; then ls -ls $f; fi; done|sort -n

It looks like removing statd, sm-notify, showount and their man pages
would free about another 170K.

I think that's about how much we'd save by seperating out a separate
documentation package.

I don't know, what sort of gains are container folks asking for?

--b.

>
> steved.
>
> >
> > --b.
> >
> >>
> >> V2:
> >> * Added two systemd services: nfsv4-exportd and nfsv4-server
> >> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
> >>
> >> V3: Changed the name from exportd to nfsv4.exportd
> >>
> >> V4: Added compile flag that will compile in the NFSv4 only server
> >>
> >> Steve Dickson (7):
> >> 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
> >> exportd: systemd unit files
> >> exportd: Added config variable to compile in the NFSv4 only server.
> >>
> >> .gitignore | 1 +
> >> configure.ac | 14 ++
> >> 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/Makefile.am | 6 +
> >> systemd/nfs.conf.man | 10 +
> >> systemd/nfsv4-exportd.service | 12 +
> >> systemd/nfsv4-server.service | 31 +++
> >> utils/Makefile.am | 4 +
> >> utils/exportd/Makefile.am | 65 +++++
> >> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
> >> utils/exportd/exportd.man | 81 +++++++
> >> utils/exportfs/exportfs.c | 21 +-
> >> utils/exportfs/exportfs.man | 7 +-
> >> utils/mountd/Makefile.am | 5 +-
> >> 21 files changed, 606 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 systemd/nfsv4-exportd.service
> >> create mode 100644 systemd/nfsv4-server.service
> >> create mode 100644 utils/exportd/Makefile.am
> >> create mode 100644 utils/exportd/exportd.c
> >> create mode 100644 utils/exportd/exportd.man
> >>
> >> --
> >> 2.29.2
> >

2021-03-04 14:01:15

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



> On Mar 2, 2021, at 5:39 PM, Steve Dickson <[email protected]> wrote:
>
>
>
> On 2/24/21 3:49 PM, J. Bruce Fields wrote:
>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>> nfsv4.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.
>>>
>>> V2:
>>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>>
>> We really shouldn't make users change how they do things.
> If they only want v4 support... I'm thinking is a lot easier to
> simple do a nfsv4.server start verse edit config files.
>
>>
>> Whatever we do, "systemctl start nfs-server" should still be how they
>> start the NFS server.
> Again.. if they install the nfsv4-utils verse the nfs-utils package
> they should expect change... IMHO..

I would prefer having a single nfs-utils package. I don't see
a need for a proliferation of these extra little programs --
let's just make the usual suspects behave better.


> steved.
>>
>> --b.
>>
>>>
>>> V3: Changed the name from exportd to nfsv4.exportd
>>>
>>> V4: Added compile flag that will compile in the NFSv4 only server
>>>
>>> Steve Dickson (7):
>>> 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
>>> exportd: systemd unit files
>>> exportd: Added config variable to compile in the NFSv4 only server.
>>>
>>> .gitignore | 1 +
>>> configure.ac | 14 ++
>>> 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/Makefile.am | 6 +
>>> systemd/nfs.conf.man | 10 +
>>> systemd/nfsv4-exportd.service | 12 +
>>> systemd/nfsv4-server.service | 31 +++
>>> utils/Makefile.am | 4 +
>>> utils/exportd/Makefile.am | 65 +++++
>>> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
>>> utils/exportd/exportd.man | 81 +++++++
>>> utils/exportfs/exportfs.c | 21 +-
>>> utils/exportfs/exportfs.man | 7 +-
>>> utils/mountd/Makefile.am | 5 +-
>>> 21 files changed, 606 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 systemd/nfsv4-exportd.service
>>> create mode 100644 systemd/nfsv4-server.service
>>> create mode 100644 utils/exportd/Makefile.am
>>> create mode 100644 utils/exportd/exportd.c
>>> create mode 100644 utils/exportd/exportd.man
>>>
>>> --
>>> 2.29.2

--
Chuck Lever



2021-03-04 14:01:18

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

Hey!

On 3/3/21 10:23 AM, J. Bruce Fields wrote:
> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>
>>
>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>> nfsv4.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.
>>>
>>> How much smaller?
>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>> need to also come a long.
>
> Could we get some numbers?
>
> Looks like nfs-utils in F33 is about 1.2M:
>
> $ rpm -qi nfs-utils|grep ^Size
> Size : 1243512
>
> $ strip utils/mountd/mountd
> $ ls -lh utils/mountd/mountd
> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
> $ strip utils/exportd/exportd
> $ ls -lh utils/exportd/exportd
> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
>
> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
> worth it?
In smaller foot print I guess I meant no v3 daemons, esp rpcbind.

It is not surprising mountd and exportd are similar size since
they are using the same code to do the same thing. With the only
exception is exportd does not have any RPC code. It only handles
upcalls from the kernel.

>
>>>> 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.
>>>
>>> There's also --manage-gids.
>> Right... a patch was posted...
>>
>>>
>>> If you want nfsv4-only at runtime, you can always run rpc.mountd with
>>> -N2 -N3 to turn off the MOUNT protocol support.
>> The end game is not to run mountd at all...
>>
>>>
>>> If you don't even want v2/f3 code on your system, then you may have to
>>> do something like this, but why is that important?
>> Container friendly... Not bring in all the extra daemons v3
>> needs is a good thing... esp rpcbind.
>
> Looking at the output of
> $ for f in $(rpm -ql nfs-utils); do if [ -f $f ]; then ls -ls $f; fi; done|sort -n
>
> It looks like removing statd, sm-notify, showount and their man pages
> would free about another 170K.
And rpcbind and rpcinfo... But thanks for taking a look.

>
> I think that's about how much we'd save by seperating out a separate
> documentation package.
hmm... interesting idea.

>
> I don't know, what sort of gains are container folks asking for?
It is my understanding rpcbind and containers do not play nicely.

Plus I don't think it is a bad idea to be able just install
and nfsv4 client or just install an nfsv4 server.
Maybe I'm wrong??

steved.

>
> --b.
>
>>
>> steved.
>>
>>>
>>> --b.
>>>
>>>>
>>>> V2:
>>>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>>>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>>>>
>>>> V3: Changed the name from exportd to nfsv4.exportd
>>>>
>>>> V4: Added compile flag that will compile in the NFSv4 only server
>>>>
>>>> Steve Dickson (7):
>>>> 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
>>>> exportd: systemd unit files
>>>> exportd: Added config variable to compile in the NFSv4 only server.
>>>>
>>>> .gitignore | 1 +
>>>> configure.ac | 14 ++
>>>> 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/Makefile.am | 6 +
>>>> systemd/nfs.conf.man | 10 +
>>>> systemd/nfsv4-exportd.service | 12 +
>>>> systemd/nfsv4-server.service | 31 +++
>>>> utils/Makefile.am | 4 +
>>>> utils/exportd/Makefile.am | 65 +++++
>>>> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
>>>> utils/exportd/exportd.man | 81 +++++++
>>>> utils/exportfs/exportfs.c | 21 +-
>>>> utils/exportfs/exportfs.man | 7 +-
>>>> utils/mountd/Makefile.am | 5 +-
>>>> 21 files changed, 606 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 systemd/nfsv4-exportd.service
>>>> create mode 100644 systemd/nfsv4-server.service
>>>> create mode 100644 utils/exportd/Makefile.am
>>>> create mode 100644 utils/exportd/exportd.c
>>>> create mode 100644 utils/exportd/exportd.man
>>>>
>>>> --
>>>> 2.29.2
>>>
>

2021-03-04 14:01:32

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/3/21 1:10 PM, Chuck Lever wrote:
>
>
>> On Mar 2, 2021, at 5:39 PM, Steve Dickson <[email protected]> wrote:
>>
>>
>>
>> On 2/24/21 3:49 PM, J. Bruce Fields wrote:
>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>> nfsv4.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.
>>>>
>>>> V2:
>>>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>>>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>>>
>>> We really shouldn't make users change how they do things.
>> If they only want v4 support... I'm thinking is a lot easier to
>> simple do a nfsv4.server start verse edit config files.
>>
>>>
>>> Whatever we do, "systemctl start nfs-server" should still be how they
>>> start the NFS server.
>> Again.. if they install the nfsv4-utils verse the nfs-utils package
>> they should expect change... IMHO..
>
> I would prefer having a single nfs-utils package. I don't see
> a need for a proliferation of these extra little programs --
> let's just make the usual suspects behave better.
nfs-utils is not going anywhere!! :-)

I'm just trying to give people the option of only
install a v4 client or v4 server. If they want it
all... nfs-utils will be there!!

steved.

2021-03-04 14:02:15

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Wed, Mar 03, 2021 at 04:22:28PM -0500, Steve Dickson wrote:
> Hey!
>
> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
> > On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
> >>
> >>
> >> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
> >>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> >>>> nfsv4.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.
> >>>
> >>> How much smaller?
> >> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
> >> need to also come a long.
> >
> > Could we get some numbers?
> >
> > Looks like nfs-utils in F33 is about 1.2M:
> >
> > $ rpm -qi nfs-utils|grep ^Size
> > Size : 1243512
> >
> > $ strip utils/mountd/mountd
> > $ ls -lh utils/mountd/mountd
> > -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
> > $ strip utils/exportd/exportd
> > $ ls -lh utils/exportd/exportd
> > -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
> >
> > So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
> > worth it?
> In smaller foot print I guess I meant no v3 daemons, esp rpcbind.

The rpcbind rpm is 120K installed, so if the new v4-only rpm has no
dependency on rpcbind then we save 120K.

So, for stuff needed in both v4-only and full cases, would we package
that in a common rpm that they both depend on?

--b.

2021-03-04 17:28:26

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/3/21 10:23 AM, J. Bruce Fields wrote:
> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>
>>
>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>> nfsv4.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.
>>>
>>> How much smaller?
>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>> need to also come a long.
>
> Could we get some numbers?
>
> Looks like nfs-utils in F33 is about 1.2M:
>
> $ rpm -qi nfs-utils|grep ^Size
> Size : 1243512
Here are the numbers. Remember things are still in development so
these may not be the final numbers

For the v4 only client
rpm -qi nfsv4-client-utils-2* | grep ^Size
Size : 374573

for the v4only server:
rpm -qi nfsv4-utils-2* | grep ^Size
Size : 942088
>
> $ strip utils/mountd/mountd
> $ ls -lh utils/mountd/mountd
> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
> $ strip utils/exportd/exportd
> $ ls -lh utils/exportd/exportd
> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
>
> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
> worth it?
Looking at the numbers above... I think it is.

steved.

>
>>>> 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.
>>>
>>> There's also --manage-gids.
>> Right... a patch was posted...
>>
>>>
>>> If you want nfsv4-only at runtime, you can always run rpc.mountd with
>>> -N2 -N3 to turn off the MOUNT protocol support.
>> The end game is not to run mountd at all...
>>
>>>
>>> If you don't even want v2/f3 code on your system, then you may have to
>>> do something like this, but why is that important?
>> Container friendly... Not bring in all the extra daemons v3
>> needs is a good thing... esp rpcbind.
>
> Looking at the output of
> $ for f in $(rpm -ql nfs-utils); do if [ -f $f ]; then ls -ls $f; fi; done|sort -n
>
> It looks like removing statd, sm-notify, showount and their man pages
> would free about another 170K.
>
> I think that's about how much we'd save by seperating out a separate
> documentation package.
>
> I don't know, what sort of gains are container folks asking for?
>
> --b.
>
>>
>> steved.
>>
>>>
>>> --b.
>>>
>>>>
>>>> V2:
>>>> * Added two systemd services: nfsv4-exportd and nfsv4-server
>>>> * nfsv4-server starts rpc.nfsd -N 3, so nfs.conf mod not needed.
>>>>
>>>> V3: Changed the name from exportd to nfsv4.exportd
>>>>
>>>> V4: Added compile flag that will compile in the NFSv4 only server
>>>>
>>>> Steve Dickson (7):
>>>> 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
>>>> exportd: systemd unit files
>>>> exportd: Added config variable to compile in the NFSv4 only server.
>>>>
>>>> .gitignore | 1 +
>>>> configure.ac | 14 ++
>>>> 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/Makefile.am | 6 +
>>>> systemd/nfs.conf.man | 10 +
>>>> systemd/nfsv4-exportd.service | 12 +
>>>> systemd/nfsv4-server.service | 31 +++
>>>> utils/Makefile.am | 4 +
>>>> utils/exportd/Makefile.am | 65 +++++
>>>> utils/exportd/exportd.c | 276 ++++++++++++++++++++++
>>>> utils/exportd/exportd.man | 81 +++++++
>>>> utils/exportfs/exportfs.c | 21 +-
>>>> utils/exportfs/exportfs.man | 7 +-
>>>> utils/mountd/Makefile.am | 5 +-
>>>> 21 files changed, 606 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 systemd/nfsv4-exportd.service
>>>> create mode 100644 systemd/nfsv4-server.service
>>>> create mode 100644 utils/exportd/Makefile.am
>>>> create mode 100644 utils/exportd/exportd.c
>>>> create mode 100644 utils/exportd/exportd.man
>>>>
>>>> --
>>>> 2.29.2
>>>
>

2021-03-04 17:32:02

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/3/21 4:54 PM, J. Bruce Fields wrote:
> On Wed, Mar 03, 2021 at 04:22:28PM -0500, Steve Dickson wrote:
>> Hey!
>>
>> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
>>> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>>>
>>>>
>>>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>>>> nfsv4.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.
>>>>>
>>>>> How much smaller?
>>>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>>>> need to also come a long.
>>>
>>> Could we get some numbers?
>>>
>>> Looks like nfs-utils in F33 is about 1.2M:
>>>
>>> $ rpm -qi nfs-utils|grep ^Size
>>> Size : 1243512
>>>
>>> $ strip utils/mountd/mountd
>>> $ ls -lh utils/mountd/mountd
>>> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
>>> $ strip utils/exportd/exportd
>>> $ ls -lh utils/exportd/exportd
>>> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
>>>
>>> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
>>> worth it?
>> In smaller foot print I guess I meant no v3 daemons, esp rpcbind.
>
> The rpcbind rpm is 120K installed, so if the new v4-only rpm has no
> dependency on rpcbind then we save 120K.
The point with rpcbind is it not going to be started which means
it not opening up listening connection that may never be used.
This has pissed of people for years! :-)

>
> So, for stuff needed in both v4-only and full cases, would we package
> that in a common rpm that they both depend on?
I thought of this... but I was going to get both packages working
and then figure out what is common between them.

steved.

>
> --b.
>

2021-03-04 17:40:22

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Thu, Mar 04, 2021 at 08:42:24AM -0500, Steve Dickson wrote:
>
>
> On 3/3/21 4:54 PM, J. Bruce Fields wrote:
> > On Wed, Mar 03, 2021 at 04:22:28PM -0500, Steve Dickson wrote:
> >> Hey!
> >>
> >> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
> >>> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
> >>>>
> >>>>
> >>>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
> >>>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> >>>>>> nfsv4.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.
> >>>>>
> >>>>> How much smaller?
> >>>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
> >>>> need to also come a long.
> >>>
> >>> Could we get some numbers?
> >>>
> >>> Looks like nfs-utils in F33 is about 1.2M:
> >>>
> >>> $ rpm -qi nfs-utils|grep ^Size
> >>> Size : 1243512
> >>>
> >>> $ strip utils/mountd/mountd
> >>> $ ls -lh utils/mountd/mountd
> >>> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
> >>> $ strip utils/exportd/exportd
> >>> $ ls -lh utils/exportd/exportd
> >>> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
> >>>
> >>> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
> >>> worth it?
> >> In smaller foot print I guess I meant no v3 daemons, esp rpcbind.
> >
> > The rpcbind rpm is 120K installed, so if the new v4-only rpm has no
> > dependency on rpcbind then we save 120K.
> The point with rpcbind is it not going to be started which means
> it not opening up listening connection that may never be used.
> This has pissed of people for years! :-)

OK, but we can do that without replacing mountd and changing the way
everyone installs nfs-utils and runs the nfs server.

--b.

2021-03-04 17:49:48

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.

On Thu, Mar 04, 2021 at 08:34:45AM -0500, Steve Dickson wrote:
>
>
> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
> > On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
> >>
> >>
> >> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
> >>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
> >>>> nfsv4.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.
> >>>
> >>> How much smaller?
> >> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
> >> need to also come a long.
> >
> > Could we get some numbers?
> >
> > Looks like nfs-utils in F33 is about 1.2M:
> >
> > $ rpm -qi nfs-utils|grep ^Size
> > Size : 1243512
> Here are the numbers. Remember things are still in development so
> these may not be the final numbers
>
> For the v4 only client
> rpm -qi nfsv4-client-utils-2* | grep ^Size
> Size : 374573
>
> for the v4only server:
> rpm -qi nfsv4-utils-2* | grep ^Size
> Size : 942088

$ rpm -qi nfs-utils|grep ^Size
Size : 1243512
$ echo $((374573+942088))
1316661

So, they're a little bigger than nfs-utils, taken together. Like you
say, under development, probably there's just something overlooked that
could be removed from one or the other or moved to an nfs-common
package.

That might make a case for splitting up client and server sides for
minimal installs that need only one or the other.

If it's installed size we're working on, though, do we have some target
in mind here, though? Do we know what the container people are aiming
for? I had some idea glic is more in the 10s of megabytes, and a
minimal Fedora install is in the 100s, so I just wonder if it's worth
chasing after 10s-100s of K.

--b.

2021-03-04 18:11:29

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/4/21 9:24 AM, J. Bruce Fields wrote:
> On Thu, Mar 04, 2021 at 08:34:45AM -0500, Steve Dickson wrote:
>>
>>
>> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
>>> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>>>
>>>>
>>>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>>>> nfsv4.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.
>>>>>
>>>>> How much smaller?
>>>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>>>> need to also come a long.
>>>
>>> Could we get some numbers?
>>>
>>> Looks like nfs-utils in F33 is about 1.2M:
>>>
>>> $ rpm -qi nfs-utils|grep ^Size
>>> Size : 1243512
>> Here are the numbers. Remember things are still in development so
>> these may not be the final numbers
>>
>> For the v4 only client
>> rpm -qi nfsv4-client-utils-2* | grep ^Size
>> Size : 374573
>>
>> for the v4only server:
>> rpm -qi nfsv4-utils-2* | grep ^Size
>> Size : 942088
>
> $ rpm -qi nfs-utils|grep ^Size
> Size : 1243512
> $ echo $((374573+942088))
> 1316661
>
> So, they're a little bigger than nfs-utils, taken together. Like you
> say, under development, probably there's just something overlooked that
> could be removed from one or the other or moved to an nfs-common
> package.
With containers in mind, I was thinking it would be one or the other
not both. I can see a container only wanting an client or server
but not both.

>
> That might make a case for splitting up client and server sides for
> minimal installs that need only one or the other.
>
> If it's installed size we're working on, though, do we have some target
> in mind here, though?
No.

Do we know what the container people are aiming for?
No. I'm sure they don't know this is going on.

> I had some idea glic is more in the 10s of megabytes, and a
> minimal Fedora install is in the 100s, so I just wonder if it's worth
> chasing after 10s-100s of K.
I really don't think we need a target size... The size
will be smaller because how the packages are broken up.
Installing one of the v4 packages will always have
smaller footprint than the entire nfs-utils package.

steved.
>
> --b.
>

2021-03-04 18:31:32

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/4/21 9:01 AM, J. Bruce Fields wrote:
> On Thu, Mar 04, 2021 at 08:42:24AM -0500, Steve Dickson wrote:
>>
>>
>> On 3/3/21 4:54 PM, J. Bruce Fields wrote:
>>> On Wed, Mar 03, 2021 at 04:22:28PM -0500, Steve Dickson wrote:
>>>> Hey!
>>>>
>>>> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
>>>>> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>>>>>
>>>>>>
>>>>>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>>>>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>>>>>> nfsv4.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.
>>>>>>>
>>>>>>> How much smaller?
>>>>>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>>>>>> need to also come a long.
>>>>>
>>>>> Could we get some numbers?
>>>>>
>>>>> Looks like nfs-utils in F33 is about 1.2M:
>>>>>
>>>>> $ rpm -qi nfs-utils|grep ^Size
>>>>> Size : 1243512
>>>>>
>>>>> $ strip utils/mountd/mountd
>>>>> $ ls -lh utils/mountd/mountd
>>>>> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
>>>>> $ strip utils/exportd/exportd
>>>>> $ ls -lh utils/exportd/exportd
>>>>> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
>>>>>
>>>>> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
>>>>> worth it?
>>>> In smaller foot print I guess I meant no v3 daemons, esp rpcbind.
>>>
>>> The rpcbind rpm is 120K installed, so if the new v4-only rpm has no
>>> dependency on rpcbind then we save 120K.
>> The point with rpcbind is it not going to be started which means
>> it not opening up listening connection that may never be used.
>> This has pissed of people for years! :-)
>
> OK, but we can do that without replacing mountd and changing the way
> everyone installs nfs-utils and runs the nfs server.
I'm not replacing mounts in nfs-utils and I not changing how the
server is started in nfs-utils... I'm just giving people options

If you want this particular function install this package
If you want that particular function install that package
If you want the entire kit and caboodle use this package.

Since these new package will have different names things
will work slightly different, but that all will be using
the same code base.

steved.

>
> --b.
>

2021-03-05 00:58:44

by Patrick Goetz

[permalink] [raw]
Subject: Re: [PATCH 0/7 V4] The NFSv4 only mounting daemon.



On 3/4/21 8:01 AM, J. Bruce Fields wrote:
> On Thu, Mar 04, 2021 at 08:42:24AM -0500, Steve Dickson wrote:
>>
>>
>> On 3/3/21 4:54 PM, J. Bruce Fields wrote:
>>> On Wed, Mar 03, 2021 at 04:22:28PM -0500, Steve Dickson wrote:
>>>> Hey!
>>>>
>>>> On 3/3/21 10:23 AM, J. Bruce Fields wrote:
>>>>> On Tue, Mar 02, 2021 at 05:33:23PM -0500, Steve Dickson wrote:
>>>>>>
>>>>>>
>>>>>> On 2/24/21 3:30 PM, J. Bruce Fields wrote:
>>>>>>> On Fri, Feb 19, 2021 at 03:08:08PM -0500, Steve Dickson wrote:
>>>>>>>> nfsv4.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.
>>>>>>>
>>>>>>> How much smaller?
>>>>>> Will a bit smaller... but a number of daemons like nfsd[cld,clddb,cldnts]
>>>>>> need to also come a long.
>>>>>
>>>>> Could we get some numbers?
>>>>>
>>>>> Looks like nfs-utils in F33 is about 1.2M:
>>>>>
>>>>> $ rpm -qi nfs-utils|grep ^Size
>>>>> Size : 1243512
>>>>>
>>>>> $ strip utils/mountd/mountd
>>>>> $ ls -lh utils/mountd/mountd
>>>>> -rwxrwxr-x. 1 bfields bfields 128K Mar 3 10:12 utils/mountd/mountd
>>>>> $ strip utils/exportd/exportd
>>>>> $ ls -lh utils/exportd/exportd
>>>>> -rwxrwxr-x. 1 bfields bfields 106K Mar 3 10:12 utils/exportd/exportd
>>>>>
>>>>> So replacing mountd by exportd saves us about 20K out of 1.2M. Is it
>>>>> worth it?
>>>> In smaller foot print I guess I meant no v3 daemons, esp rpcbind.
>>>
>>> The rpcbind rpm is 120K installed, so if the new v4-only rpm has no
>>> dependency on rpcbind then we save 120K.
>> The point with rpcbind is it not going to be started which means
>> it not opening up listening connection that may never be used.
>> This has pissed of people for years! :-)
>
> OK, but we can do that without replacing mountd and changing the way
> everyone installs nfs-utils and runs the nfs server.
>
>
> --b.
>

Yes, but then people get involved. The announcement of exportd was the
tech highlight of my week. It's not about the size, it's about how
distros package the tools, documentation, and configuration complexity.
Taking these one at a time:

If it were up to me, everyone would run Arch linux with NFS systemd
service files I wrote myself. These service files would pretend that NFS
v.3 was long forgotten. Unfortunately, I work in a large organization
with other people and don't get to make those calls. We run Ubuntu and
RHEL/CentOS, and the systemd service files are configured to launch
rpcbind as a dependent service. That's a problem because the local
Information Security Office sees rpcbind as a dangerous cancer and will
automatically quarantine any machine advertising this service. I've
worked through the spaghetti ensemble of service units provided by
Canonical which launch NFS services in order to attempt to undo the
rpcbind dependency, but it's a pain in the ass. If NFS v.3 isn't an
option, the distro supplied service files will necessarily be required
to behave, too.

If the NFS documentation were superlative, this might be less of a
problem, but the current instantiation of NFS is saddled with decades of
technical debt, out of date documentation and some new features aren't
even documented (we've even discussed this on this list). I'm still
trying to figure out how people know how to set up pNFS, for example.
NFS v4 is sufficiently different from v3 that the preponderance of old
information on the Internet is confusing and contradictory. If the
daemon name is different, that's an immediate and obvious tip off that
you're looking at out of date information. The people referencing
exportd are the ones to pay attention to.

Looking at one of my Ubuntu 18.04 server installs, there's configuration
information in the systemd unit files, there's configuration information
in /etc/default, and elsewhere. If I set

RPCMOUNTDOPTS="--manage-gids -N 2 -N 3 -u"

in /etc/default/nfs-kernel-server, does that actually do anything? Who
knows? (Actually, if you dig through everything related in
/lib/systemd/system, it does at least read this file.) Runing tcpdump
and tracing the packets should not be the solution to every
configuration question. Any simplification of this is welcome, even if
the resulting code is 128K *larger*.

Also, I'm guessing NFS would see wider adoption if there were a
simplified v.4 only packaging option. Just sayin'.