2023-12-30 21:24:54

by Martin Wege

[permalink] [raw]
Subject: Fwd: [Ms-nfs41-client-devel] ANN: NFSv4.1 Windows driver binaries for Windows 10 for testing, 2023-12-30 ...

Hello,

Please test the binaries

Thanks,
Martin

---------- Forwarded message ---------
From: Roland Mainz <[email protected]>
Date: Sat, Dec 30, 2023 at 4:34 PM
Subject: [Ms-nfs41-client-devel] ANN: NFSv4.1 Windows driver binaries
for Windows 10 for testing, 2023-12-30 ...
To: <[email protected]>


Hi!

----

I've created a set of test binaries for the NFSv4.1 filesystem driver
for Windows, based on https://github.com/kofemann/ms-nfs41-client
(commit id #43852f547ce80b3b33bb05c2e993e322d2264dfa), for testing and
feedback (download URL below).
Please send comments, bugs, test reports, complaints etc. to
https://sourceforge.net/projects/ms-nfs41-client/lists/ms-nfs41-client-devel

# 1. Requirements:
- Windows 10 (64bit, without SecureBoot!!)
- Cygwin 3.5.0
(Install in Cygwin setup.exe, Install with checkboxes "Testing" and "Sync")
- Packages:
cygwin
cygwin-devel
cygrunsrv
cygutils
cygutils-extra
bash
bzip2
coreutils
getent
gdb
grep
hostname
less
pax
pbzip2
procps-ng
sed
tar
time
util-linux
wget


# 2. Installation (as "Administrator"):
$ mkdir -p ~/download
$ cd ~/download
$ wget 'http://www.nrubsig.org/people/gisburn/work/msnfs41client/releases/testing/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2'
$ (cd / && tar -xf
~/download/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2
)
$ /sbin/msnfs41client install


# 3. Deinstallation:
$ (set -x ; cd / && tar -tf
~/download/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2
| while read i ; do [[ -f "$i" ]] && rm "$i" ; done)


##
## Usage
##

# Run the NFSv4 client daemon:
# - run this preferably as "Adminstrator", but this is not a requirement
# - requires separate terminal
$ /sbin/msnfs41client run_daemon

# Mount a filesystem and use it
$ /sbin/nfs_mount -o rw N 10.49.20.110:/net_tmpfs2
Successfully mounted '10.49.20.110@2049' to drive 'N:'
$ cd /cygdrive/n/
$ ls -la
total 4
drwxrwxrwt 5 Unix_User+0 Unix_Group+0 100 Dec 7 14:17 .
dr-xr-xr-x 1 roland_mainz Kein 0 Dec 14 13:48 ..
drwxr-xr-x 3 Unix_User+197608 Unix_Group+197121 80 Dec 12 16:24 10492030
drwxr-xr-x 3 Unix_User+197608 Unix_Group+197121 60 Dec 13 17:58 directory_t
drwxr-xr-x 3 Unix_User+197608 Unix_Group+197121 60 Dec 7 11:01 test2

# Unmount filesystem:
$ cd ~
$ net use N: /delete

#
# Notes:
#
- Idmapping (including uid/gid mapping) between NFSv4 client and NFSv4
server works via /lib/msnfs41client/cygwin_idmapper.ksh, which
either uses builtin static data, or /usr/bin/getent passwd and
/usr/bin/getent group.
As getent uses the configured name services it should work with LDAP
too.
This is still work-in-progress, with the goal that both NFSv4 client
and server can use different uid/gid numeric values for client and
server side.

- UNC paths are supported, after successful mounting /sbin/nfs_mount
will list the paths in Cygwin UNC format.

- SIDs work, users with valid Windows accounts (see Cygwin idmapping
above get their SIDs, unknown users with valid uid/gid values get
Unix_User+id/Unix_Group+id SIDs, and all others are mapped
to nobody/nogroup SIDs.

- Cygwin symlinks are supported, but might require
$ fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1 #.
This includes symlinks to UNC paths, e.g. as Admin
$ cmd /c 'mklink /d c:\home\rmainz
\\derfwpc5131_ipv6@2049\nfs4\export\home2\rmainz' #
and then $ cd /cygdrive/c/home/rmainz/ # should work

- performance: All binaries are build without any optimisation, so
the filesystem is much slower than it could be.

- bad performance due to Windows Defender AntiVirus:
Option 1:
# disable Windows defender realtime monitoring
# (requires Admin shell)
powershell -Command 'Set-MpPreference -DisableRealtimeMonitoring 1'
Option 2:
Add "nfsd.exe", "nfsd_debug.exe", ksh93.exe, bash.exe, git.exe and
other offending commands to process name whitelist.

- performance: Use vmxnet3 in VMware to improve performance

- ACLs are supported via the normal Windows ACL tools, but on
Linux require the nfs4_getfacl/nfs4_setfacl utilties to see the
data.
Example (assuming that Windows, Linux NFSv4 client and NFSv4
server have a user "siegfried_wulsch"):
- On Windows on a NFSv4 filesystem, :
$ icacls myhorribledata.txt /grant "siegfried_wulsch:WD" #
- On Linux NFSv4 clients you will then see this:
---- snip ----
$ nfs4_getfacl myhorribledata.txt
A::OWNER@:rwatTcCy
A::[email protected]:rwatcy
A::GROUP@:rtcy
A::EVERYONE@:rtcy
---- snip ----


#
# Known issues:
#
- The kernel driver ("nfs41_driver.sys") does not have a cryptographic
signature for SecureBoot - which means it will only work if SecureBoot
is turned off (otherwise $ /sbin/msnfs41client install # will FAIL!)
- If nfsd_debug.exe crashes or gets killed, the only safe way
to run it again requires a reboot
- LDAP support does not work yet
- Attribute caching is to agressiv, making $ tail -f ... # not seeing
new data.
Workaround: Use GNU tail'S $ tail --follow=name ... #
- krb5p security with AES keys do not work against the linux server,
as it does not support gss krb5 v2 tokens with rotated data.
- When recovering opens and locks outside of the server's grace period,
client does not check whether the file has been modified by another
client.
- If nfsd.exe is restarted while a drive is mapped, that drive needs
to be remounted before further use.
- Does not allow renaming a file on top of an existing open file.
Connectathon's special test op_ren has been commented out.
- Extended attributes are supported with some limitations:
a) the server must support NFS Named Attributes,
b) the order of listings cannot be guaranteed by NFS, and
c) the EaSize field cannot be reported for directory queries of
FileBothDirInformation, FileFullDirInfo, or FileIdFullDirInfo.

# EOF.

----

Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [email protected]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)


_______________________________________________
Ms-nfs41-client-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ms-nfs41-client-devel


2023-12-31 00:05:21

by Dan Shelton

[permalink] [raw]
Subject: Re: [Ms-nfs41-client-devel] ANN: NFSv4.1 Windows driver binaries for Windows 10 for testing, 2023-12-30 ...

On Sat, 30 Dec 2023 at 22:25, Martin Wege <[email protected]> wrote:
>
> Hello,
>
> Please test the binaries
>
> Thanks,
> Martin
>
> ---------- Forwarded message ---------
> From: Roland Mainz <[email protected]>
> Date: Sat, Dec 30, 2023 at 4:34 PM
> Subject: [Ms-nfs41-client-devel] ANN: NFSv4.1 Windows driver binaries
> for Windows 10 for testing, 2023-12-30 ...
> To: <[email protected]>
>
>
> Hi!
>
> ----
>
> I've created a set of test binaries for the NFSv4.1 filesystem driver
> for Windows, based on https://github.com/kofemann/ms-nfs41-client
> (commit id #43852f547ce80b3b33bb05c2e993e322d2264dfa), for testing and
> feedback (download URL below).
> Please send comments, bugs, test reports, complaints etc. to
> https://sourceforge.net/projects/ms-nfs41-client/lists/ms-nfs41-client-devel
>
> # 1. Requirements:
> - Windows 10 (64bit, without SecureBoot!!)
> - Cygwin 3.5.0
> (Install in Cygwin setup.exe, Install with checkboxes "Testing" and "Sync")
> - Packages:
> cygwin
> cygwin-devel
> cygrunsrv
> cygutils
> cygutils-extra
> bash
> bzip2
> coreutils
> getent
> gdb
> grep
> hostname
> less
> pax
> pbzip2
> procps-ng
> sed
> tar
> time
> util-linux
> wget
>
>
> # 2. Installation (as "Administrator"):
> $ mkdir -p ~/download
> $ cd ~/download
> $ wget 'http://www.nrubsig.org/people/gisburn/work/msnfs41client/releases/testing/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2'
> $ (cd / && tar -xf
> ~/download/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2
> )
> $ /sbin/msnfs41client install

This fails on Windows 11, because two DLLs are missing:
VCRUNTIME140D.dll
ucrtbased.dll

Could you please package these DLLs too?

The workaround is to install Visual Studio 19.

>
>
> # 3. Deinstallation:
> $ (set -x ; cd / && tar -tf
> ~/download/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2
> | while read i ; do [[ -f "$i" ]] && rm "$i" ; done)
>
>
> ##
> ## Usage
> ##
>
> # Run the NFSv4 client daemon:
> # - run this preferably as "Adminstrator", but this is not a requirement
> # - requires separate terminal
> $ /sbin/msnfs41client run_daemon

This fails because the script wants cdb.exe (is this WinDBG command
line?). I added a # to that line, and then the script runs.

It would be nice if you could add this to Cygwin cygrunserv to run
msnfs41client run_daemon as Windows service

>
> # Mount a filesystem and use it
> $ /sbin/nfs_mount -o rw N 10.49.20.110:/net_tmpfs2
> Successfully mounted '10.49.20.110@2049' to drive 'N:'
> $ cd /cygdrive/n/

This fails too, until I figured out that the Linux nfs server needs
the export line "insecure". Could you please fix this?

So after fixing all this, nfs_mount succeeded. HURRAY!!

So, permissions/ownership seems to be an issue, so I created a tmp/
dir, and did a chmod a=u tmp, so everyone can r/w to that dir. And
then Windows can even WRITE there.

Quick test, Word and Excel can read and write files.
Moving big and small files works.
Watching videos from NFS filesystem work
Overwriting/replacing files created on Linux fails with a permission
error, which is correct.
clang can compile on the NFS filesystem a hello world application
wget on NFS filesystem works

So far it looks VERY good :)
--
Dan

2023-12-31 06:19:27

by Cedric Blancher

[permalink] [raw]
Subject: Re: [Ms-nfs41-client-devel] ANN: NFSv4.1 Windows driver binaries for Windows 10 for testing, 2023-12-30 ...

On Sun, 31 Dec 2023 at 01:05, Dan Shelton <[email protected]> wrote:
>
> On Sat, 30 Dec 2023 at 22:25, Martin Wege <[email protected]> wrote:
[[CUT--CUT--CUT]]
> > I've created a set of test binaries for the NFSv4.1 filesystem driver
> > for Windows, based on https://github.com/kofemann/ms-nfs41-client
> > (commit id #43852f547ce80b3b33bb05c2e993e322d2264dfa), for testing and
> > feedback (download URL below).
> > Please send comments, bugs, test reports, complaints etc. to
> > https://sourceforge.net/projects/ms-nfs41-client/lists/ms-nfs41-client-devel
[[CUT--CUT--CUT]]
> > # 2. Installation (as "Administrator"):
> > $ mkdir -p ~/download
> > $ cd ~/download
> > $ wget 'http://www.nrubsig.org/people/gisburn/work/msnfs41client/releases/testing/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2'
> > $ (cd / && tar -xf
> > ~/download/msnfs41client_cygwin_binaries_20231230_14h12m_git43852f5.tar.bz2
> > )
> > $ /sbin/msnfs41client install
>
> This fails on Windows 11, because two DLLs are missing:
> VCRUNTIME140D.dll
> ucrtbased.dll
>
> Could you please package these DLLs too?

Or just link them statically.

[[CUT--CUT--CUT]]
> > # Mount a filesystem and use it
> > $ /sbin/nfs_mount -o rw N 10.49.20.110:/net_tmpfs2
> > Successfully mounted '10.49.20.110@2049' to drive 'N:'
> > $ cd /cygdrive/n/
>
> This fails too, until I figured out that the Linux nfs server needs
> the export line "insecure". Could you please fix this?

Not sure whether this can be fixed at all. The nfsd server requires
that nfs clients connect from a TCP port < 1024, and Windows just
doesn't allow a bind() to a port < 1024. I had that debate with
Roland, and for now its "under investigation" what could be done.

>
> So after fixing all this, nfs_mount succeeded. HURRAY!!
>
> So, permissions/ownership seems to be an issue, so I created a tmp/
> dir, and did a chmod a=u tmp, so everyone can r/w to that dir. And
> then Windows can even WRITE there.
>
> Quick test, Word and Excel can read and write files.
> Moving big and small files works.
> Watching videos from NFS filesystem work
> Overwriting/replacing files created on Linux fails with a permission
> error, which is correct.
> clang can compile on the NFS filesystem a hello world application
> wget on NFS filesystem works

BUG: Windows 11 Explorer shows the NFS mount as "disconnected"

> So far it looks VERY good :)

Agreed.

Many thanks go to Roland Mainz and Tigran Mkrtchyan for working on this

Ced
--
Cedric Blancher <[email protected]>
[https://plus.google.com/u/0/+CedricBlancher/]
Institute Pasteur