Message ID | 20210219200815.792667-1-steved@redhat.com (mailing list archive) |
---|---|
Headers | show |
Series | The NFSv4 only mounting daemon. | expand |
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 >
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
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
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 >
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 >
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 > >
> On Mar 2, 2021, at 5:39 PM, Steve Dickson <SteveD@RedHat.com> 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
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 >>> >
On 3/3/21 1:10 PM, Chuck Lever wrote: > > >> On Mar 2, 2021, at 5:39 PM, Steve Dickson <SteveD@RedHat.com> 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.
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.
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. I believe it is more of a functionally thing than a size thing WRT to containers. > > So, for stuff needed in both v4-only and full cases, would we package > that in a common rpm that they both depend on? Well... if we want the packages to be compatible yes there would have to be a common rpm (aka nfs.conf, nfsmount.conf, upcall stuff) But if one only wants a client or server then they don't have to be compatible... steved.
On Wed, Mar 03, 2021 at 05:07:56PM -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. > I believe it is more of a functionally thing than a size thing > WRT to containers. OK. But if it's not about size, then we can use "rpc.mountd -N2 -N3", we don't need a separate daemon. --b.
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 >>> >
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. >
On 3/3/21 5:17 PM, J. Bruce Fields wrote: > On Wed, Mar 03, 2021 at 05:07:56PM -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. >> I believe it is more of a functionally thing than a size thing >> WRT to containers. > > OK. But if it's not about size, then we can use "rpc.mountd -N2 -N3", > we don't need a separate daemon. Personally I see this is the first step away from V3... So what we don't need is all that RPC code, all the different mounting versions... no RPC code at all, which also means no need for libtirpc... That is a lot of code that goes away, which I think is a good thing. I never thought it was a good idea to have mountd process the v4 upcalls... I always thought it should be a different deamon... and now we have one. A simple daemon that only processes v4 upcalls. steved.
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.
On Thu, Mar 04, 2021 at 08:57:28AM -0500, Steve Dickson wrote: > Personally I see this is the first step away from V3... > > So what we don't need is all that RPC code, all the different mounting > versions... no RPC code at all, which also means no need for libtirpc... > That is a lot of code that goes away, which I think is a good thing. libtirpc is a shared library, it'll still be loaded as long as anyone needs it, and I'm not convinced we'll be able to get rid of all users. > I never thought it was a good idea to have mountd process > the v4 upcalls... I always thought it should be a different > deamon... and now we have one. > > A simple daemon that only processes v4 upcalls. I really do get the appeal, I've always liked the idea too. I'm not sure it's bringing us a real practical advantage at this point, compared to rpc.mountd, which can act either as a daemon that only processes v4 upcalls or can do both, depending on how you start it. --b.
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.
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. >
On 3/4/21 9:06 AM, J. Bruce Fields wrote: > On Thu, Mar 04, 2021 at 08:57:28AM -0500, Steve Dickson wrote: >> Personally I see this is the first step away from V3... >> >> So what we don't need is all that RPC code, all the different mounting >> versions... no RPC code at all, which also means no need for libtirpc... >> That is a lot of code that goes away, which I think is a good thing. > > libtirpc is a shared library, it'll still be loaded as long as anyone > needs it, and I'm not convinced we'll be able to get rid of all users. > >> I never thought it was a good idea to have mountd process >> the v4 upcalls... I always thought it should be a different >> deamon... and now we have one. >> >> A simple daemon that only processes v4 upcalls. > > I really do get the appeal, I've always liked the idea too. > > I'm not sure it's bringing us a real practical advantage at this point, > compared to rpc.mountd, which can act either as a daemon that only > processes v4 upcalls or can do both, depending on how you start it. Right with some configuration changes... But I do think there is value with have a package that will work right out of the box! Boom! Install the package and you have a working v4 server with no configure changes... I do think there is value there. steved.
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. >
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'.
On Thu, Mar 04, 2021 at 11:31:53AM -0500, Steve Dickson wrote: > > > On 3/4/21 9:06 AM, J. Bruce Fields wrote: > > On Thu, Mar 04, 2021 at 08:57:28AM -0500, Steve Dickson wrote: > >> Personally I see this is the first step away from V3... > >> > >> So what we don't need is all that RPC code, all the different mounting > >> versions... no RPC code at all, which also means no need for libtirpc... > >> That is a lot of code that goes away, which I think is a good thing. > > > > libtirpc is a shared library, it'll still be loaded as long as anyone > > needs it, and I'm not convinced we'll be able to get rid of all users. > > > >> I never thought it was a good idea to have mountd process > >> the v4 upcalls... I always thought it should be a different > >> deamon... and now we have one. > >> > >> A simple daemon that only processes v4 upcalls. > > > > I really do get the appeal, I've always liked the idea too. > > > > I'm not sure it's bringing us a real practical advantage at this point, > > compared to rpc.mountd, which can act either as a daemon that only > > processes v4 upcalls or can do both, depending on how you start it. > Right with some configuration changes... But I do think there is > value with have a package that will work right out of the box! > > Boom! Install the package and you have a working v4 server > with no configure changes... I do think there is value there. Installing rpms and enabling systemd units is also a form of configuration. So maybe it comes down to whether we'd rather configure a v4-only server with: dnf install nfsv4-only-server systemctl enable nfsv4-server vs. edit some stuff in /etc/nfs.conf My preference is for the second, but it's just a feeling, I don't really have an objective argument either way. Anyone else? --b.
> On Mar 5, 2021, at 9:36 AM, J. Bruce Fields <bfields@fieldses.org> wrote: > > On Thu, Mar 04, 2021 at 11:31:53AM -0500, Steve Dickson wrote: >> >> >> On 3/4/21 9:06 AM, J. Bruce Fields wrote: >>> On Thu, Mar 04, 2021 at 08:57:28AM -0500, Steve Dickson wrote: >>>> Personally I see this is the first step away from V3... >>>> >>>> So what we don't need is all that RPC code, all the different mounting >>>> versions... no RPC code at all, which also means no need for libtirpc... >>>> That is a lot of code that goes away, which I think is a good thing. >>> >>> libtirpc is a shared library, it'll still be loaded as long as anyone >>> needs it, and I'm not convinced we'll be able to get rid of all users. >>> >>>> I never thought it was a good idea to have mountd process >>>> the v4 upcalls... I always thought it should be a different >>>> deamon... and now we have one. >>>> >>>> A simple daemon that only processes v4 upcalls. >>> >>> I really do get the appeal, I've always liked the idea too. >>> >>> I'm not sure it's bringing us a real practical advantage at this point, >>> compared to rpc.mountd, which can act either as a daemon that only >>> processes v4 upcalls or can do both, depending on how you start it. >> Right with some configuration changes... But I do think there is >> value with have a package that will work right out of the box! I didn't understand this claim. Don't we already have that? If not, why not? >> Boom! Install the package and you have a working v4 server >> with no configure changes... I do think there is value there. > > Installing rpms and enabling systemd units is also a form of > configuration. Don't understand this argument either. What does "with no configuration changes" mean exactly? Installing and enabling is, as Bruce says, about the same administrative hassle as editing /etc/nfs.conf. What's being avoided here? > So maybe it comes down to whether we'd rather configure a v4-only server > with: > > dnf install nfsv4-only-server > systemctl enable nfsv4-server > > vs. > > edit some stuff in /etc/nfs.conf > > My preference is for the second, but it's just a feeling, I don't really > have an objective argument either way. Anyone else? Now, I'm making these comments in good faith. I don't want Steve to roll his eyes and think "what a pain in the ass". Please read and digest. Maybe have a Scotch and get a good night's sleep before replying. I really really don't want an argument, especially not right before a weekend. (And note please that I've given some alternatives here, so I'm not just trying to knock down the ideas). I feel strongly that the first approach is wrong, but it's Steve's ballgame so I'm not going to go as far as a NAK. We've spent a decade trying to fix the mistake of having an "nfs" and "nfs4" filesystem type on the client. Now we want to do the same thing on the server, and in the end, if and when NFSv3 goes away, we will be stuck with nfsv4-only-server. All I'm saying is we should proceed very carefully so we don't paint ourselves into a corner in the long run. This game is ultimately about lowering long-term maintenance cost. First, if only NFSv4 is configured in /etc/nfs.conf, then just don't start rpcbind. We already do this for statd when NFSv2 or NFSv3 is mounted on an NFS client. Let's automate and hide as much complexity as possible. Second, "dnf install nfsv4-only-server" by itself makes sense if you want to remove rpcbind and a few other components that are not ever going to be used, and you want to prevent dnf from ever installing them again during an update. But instead of nfsv4-only-server I might consider splitting the RPM generated by nfs-utils.src: one called nfs4-utils that installs the nfsv4-only stuff, and nfs-utils, which depends on nfs4-utils and installs the non-v4 stuff too. No changes to systemd units, please! And "dnf install nfs-utils" as before still provides the whole user space suite. Folks who just want an NFSv4 server can uninstall nfs-utils and install nfs4-utils (or if nothing is on the system, just install nfs4-utils). The configuration steps, and this is critical, are otherwise exactly the same in both cases. Third, as for exportd... if we're not changing the upcall mechanism, then just having mountd not start network listeners seems entirely adequate. I don't see the sense in replacing it. If you want smaller binaries, then let's focus on putting the whole nfs-utils package on a diet. Everyone wins that way. -- Chuck Lever