From 13391226bf8c3638a6a7bb4e24111f94f92be48a Mon Sep 17 00:00:00 2001 From: Tiramisu Mokka Date: Wed, 10 Jun 2015 09:17:37 +0200 Subject: [PATCH] convert README.html into markdown --- README.md | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..bd4e527 --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ + +# Windows NFS 4.1 Client Instructions + +1. [Building from Source](#build) +2. [Installing Binaries](#install) +3. [Disable the DFS Client](#dfs) +4. [Ldap Configuration](#ldap) +5. [Starting the Client](#startup) +6. [Mounting](#mount) +7. [Connectation](#cthon) +8. [Known Issues](#issues) + + +## 1\. Building from Source + +### Requirements + +* Windows Vista, Windows Server 2008 R2, or Windows 7 (Windows XP and previous versions are not supported) +* Microsoft Visual Studio 2010 +* Windows Driver Development Kit (WinDDK 6000 or later) +* ms-nfs41-client source code: + `> git clone git://citi.umich.edu/projects/ms-nfs41-client.git` + +### Building the rpc library and nfs client daemon + +* WinDDK does not include the ldap library, so we build the rpc library and nfs client daemon with Visual Studio 2010. + +1. Open Windows Explorer and navigate to **ms-nfs41-client\build.vc10**. +2. Make a copy of **env.props.example**, and rename it to **env.props**. +3. Open **env.props** in a text editor, and verify that the value in `C:\WinDDK\7600.16385.0` points to your WinDDK installation. +4. Open the solution file **ms-nfs41-client.sln** in Visual Studio 2010. +5. Select the desired configuration and platform (accessible via Build->Configuration Manager). +6. Right-click on the **daemon** project and select Build. The project and its dependencies should build without errors. The resulting binaries, **nfsd.exe** and **libtirpc.dll**, can be found under **ms-nfs41-client\build.vc10\x64\Debug\**. + +### Building the driver and utilities + +1. From the Start menu, open the WinDDK 'Checked Build Environment' for the target platform. +2. Change directory to **ms-nfs41-client** and type `build`. All projects should build without errors. + +### Signing the driver + +1. Open a WinDDK 'Checked Build Environment' as Administrator in this directory (right click and 'Run as administrator'). +2. Create a certificate for test-signing the driver ([Creating Test Certificates](http://msdn.microsoft.com/en-us/library/ff540213%28VS.85%29.aspx "msdn.microsoft.com")): + `> makecert /pe /ss PrivateCertStore /n CN=nfs41_driver nfs41_driver.cer` +3. Use the certificate to sign **nfs41_driver.sys** ([Test-Signing a Driver File](http://msdn.microsoft.com/en-us/library/ff553467%28VS.85%29.aspx "msdn.microsoft.com")): + `> signtool sign /v /s PrivateCertStore /n nfs41_driver /t http://timestamp.verisign.com/scripts/timestamp.dll path\to\nfs41_driver.sys` + +## 2\. Installing Binaries + +### Requirements + +* ms-nfs41-client binaries: **nfs41_driver.sys**, **nfs41_np.dll**, **libtirpc.dll**, **nfs_install.exe**, **nfsd.exe**, **nfs_mount.exe** +* ms-nfs41-client configuration files: **nfs41_driver.cer**, **nfs41rdr.inf**, **install.bat**, **uninstall.bat**, **etc_netconfig**, **ms-nfs41-idmap.conf** +* Microsoft Visual Studio 2010, or Microsoft Visual C++ 2010 Redistributable Libraries ([x86](https://www.microsoft.com/download/en/details.aspx?id=8328) or [x64](https://www.microsoft.com/download/en/details.aspx?id=13523)). An installer for the redistributable libraries are included with binary releases. + +### Instructions + +1. Copy or extract all ms-nfs41-client binaries and configuration files into a directory that's convenient for testing. +2. Run **vcredist_x*.exe** to install the Visual C++ Redistributable Libraries. +3. Double-click on **nfs41_driver.cer** and select 'Install Certificate', then place it in the 'Trusted Root Certificate Authorities' store. +4. Open a command prompt as Administrator in this directory. +5. Install the driver and update the registry: + `> install.bat` +6. Copy configuration files: + `> mkdir C:\etc` + `> copy etc_netconfig C:\etc\netconfig` + `> copy ms-nfs41-idmap.conf C:\etc\` +7. Allow windows to load test-signed drivers: + `> bcdedit /set testsigning on` +8. Reboot. + +## 3\. Disable the DFS Client + +* The Windows DFS client interferes with some requests, indicated by long delays during operation. See [http://support.microsoft.com/kb/171386](http://support.microsoft.com/kb/171386) for more information. + +### Instructions + +1. Open **regedit.exe** and navigate to `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Mup`. +2. Add a DWORD value named `DisableDfs` with a value of 1. + +## 4\. Ldap Configuration + +### Requirements: + +* **C:\etc\ms-nfs41-idmap.conf** from [Installation](#install) step 7. + +### Instructions + +1. Open **C:\etc\ms-nfs41-idmap.conf** in a text editor. +2. Uncomment the `ldap_hostname` and `ldap_base` lines, and configure as appropriate to match your ldap server configuration (we'll add suggestions later). + +## 5\. Starting the Client + +* If you've installed the binary distribution, you'll find two versions of the nfs client daemon: **nfsd.exe** and **nfsd_debug.exe**. **nfsd.exe** is built to run as a service, and does not provide easy access to debug output. We strongly recommend trying **nfsd_debug.exe** first (using the Instructions below) to verify that you can start the daemon and mount/unmount an nfs share. You can then close **nfsd_debug.exe** and start running **nfsd.exe** as a service with: + `> nfsd.exe -install`. + +### Instructions + +1. From a Windows command prompt, run **nfsd.exe** to start the nfs client daemon. Leave this running in the background until all mapped drives are unmounted. + Usage: + `> nfsd.exe -d [--noldap]` + * `` determines the log verbosity (1, 2, 3 or 0 to disable) + * `--noldap` disables id mapping and uses a default uid=666 and gid=777 + * `--uid, --gid` changes the default uid/gid when no mapping is available (must be nonzero) + +## 6\. Mounting + +### Instructions + +1. From a Windows command prompt run **nfs_mount.exe** to mount a share: + `> nfs_mount.exe Z: :\` +2. To specify the security flavor, add the 'sec=' mount option with sys, krb5, krb5i, or krb5p: + `> nfs_mount.exe -o sec= Z: :\` +3. You can later unmount with: + `> nfs_mount.exe -d Z` + +## 7\. Connectathon + +### Requirements + +* [Cygwin](http://www.cygwin.com "www.cygwin.com"), including packages gcc-core, make, time, tirpc, git +* [Connectathon Test Suite](http://www.connectathon.org/nfstests.html "www.connectathon.org") +* ms-nfs41-client source code (patches for connectathon are located in **ms-nfs41-client\tests**) + +### Instructions + +1. Extract **nfstests.zip** into a directory that's convenient for testing (i.e. **cthon04**). +2. Open a Cygwin shell, and change directory to **cthon04**. +3. Create a git repository to track changes: + `> git init` + `> git add *` + `> git commit -m "files from nfstests.zip"` +4. Apply all cthon patches: + `> git am /path/to/ms-nfs41-client/tests/*.patch` +5. Build the tests: + `> make` +6. Run the test suite on a mounted directory: + `> ./runtests -a -t z:/testdir` + +## 8\. Known Issues + +* 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. +* Symbolic links are not supported in Cygwin. Connectathon's basic test8 and special test nfsidem have been commented out. +* 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](https://tools.ietf.org/html/rfc5661#section-5.3 "RFC 5661: 5.3\. 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. + +Please direct any questions to [ms-nfs41-client-devel@lists.sourceforge.net](mailto:ms-nfs41-client-devel@lists.sourceforge.net).