<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Windows NFS 4.1 Client Instructions</title> <link rel="stylesheet" title="CITI Default" href="http://www.citi.umich.edu/format/citi.css" type="text/css"/> <link rel="icon" href="http://www.citi.umich.edu/images/citilogo-16x16.png" type="image/png"/> <link rel="shortcut icon" href="http://www.citi.umich.edu/images/citilogo-16x16.png" type="image/png"/> <style type="text/css"> /*<![CDATA[*/ body { min-width: 600px; background-color: #DDDDFF; font-family: serif; } #page { padding: 0 12px 0 12px; } #content { margin: 12px 0 12px 0; padding: 8px; background-color: #FFFFFF; border: 1px solid #88A; } #index { padding-right: 12px; float: right; background-color: #FFFFFF; border: 1px solid #88A; } a { color: #0282b4; } a:hover { color: #0244b4; } h1 { font-size: 2em; text-align: center; background: none; } h2 { margin: 24px 0 8px 0; font-variant: small-caps; border-bottom: 1px dashed #88A; } h3 { margin-left: 8px; } /*]]>*/ </style> </head> <body> <div id="page"> <h1>Windows NFS 4.1 Client Instructions</h1> <div id="content"> <div id="index"> <ol> <li><a href="#build">Building from Source</a></li> <li><a href="#install">Installing Binaries</a></li> <li><a href="#dfs">Disable the DFS Client</a></li> <li><a href="#ldap">Ldap Configuration</a></li> <li><a href="#startup">Starting the Client</a></li> <li><a href="#mount">Mounting</a></li> <li><a href="#cthon">Connectation</a></li> <li><a href="#issues">Known Issues</a></li> </ol> </div> <h2>1. <a name="build">Building from Source</a></h2> <h3>Requirements</h3> <ul> <li>Windows Vista, Windows Server 2008 R2, or Windows 7 (Windows XP and previous versions are not supported)</li> <li>Microsoft Visual Studio 2010</li> <li>Windows Driver Development Kit (WinDDK 6000 or later)</li> <li>ms-nfs41-client source code: <br/><code>> git clone git://citi.umich.edu/projects/ms-nfs41-client.git</code></li> </ul> <h3>Building the rpc library and nfs client daemon</h3> <ul><li>WinDDK does not include the ldap library, so we build the rpc library and nfs client daemon with Visual Studio 2010.</li></ul> <ol> <li>Open Windows Explorer and navigate to <strong>ms-nfs41-client\build.vc10</strong>.</li> <li>Make a copy of <strong>env.props.example</strong>, and rename it to <strong>env.props</strong>.</li> <li>Open <strong>env.props</strong> in a text editor, and verify that the value in <code><WDKPATH>C:\WinDDK\7600.16385.0</WDKPATH></code> points to your WinDDK installation.</li> <li>Open the solution file <strong>ms-nfs41-client.sln</strong> in Visual Studio 2010.</li> <li>Select the desired configuration and platform (accessible via Build->Configuration Manager).</li> <li>Right-click on the <strong>daemon</strong> project and select Build. The project and its dependencies should build without errors. The resulting binaries, <strong>nfsd.exe</strong> and <strong>libtirpc.dll</strong>, can be found under <strong>ms-nfs41-client\build.vc10\x64\Debug\</strong>.</li> </ol> <h3>Building the driver and utilities</h3> <ol> <li>From the Start menu, open the WinDDK 'Checked Build Environment' for the target platform.</li> <li>Change directory to <strong>ms-nfs41-client</strong> and type <code>build</code>. All projects should build without errors.</li> </ol> <h3>Signing the driver</h3> <ol> <li>Open a WinDDK 'Checked Build Environment' as Administrator in this directory (right click and 'Run as administrator').</li> <li>Create a certificate for test-signing the driver (<a href="http://msdn.microsoft.com/en-us/library/ff540213%28VS.85%29.aspx" title="msdn.microsoft.com">Creating Test Certificates</a>): <br/><code>> makecert /pe /ss PrivateCertStore /n CN=nfs41_driver nfs41_driver.cer</code></li> <li>Use the certificate to sign <strong>nfs41_driver.sys</strong> (<a href="http://msdn.microsoft.com/en-us/library/ff553467%28VS.85%29.aspx" title="msdn.microsoft.com">Test-Signing a Driver File</a>): <br/><code>> signtool sign /v /s PrivateCertStore /n nfs41_driver /t http://timestamp.verisign.com/scripts/timestamp.dll path\to\nfs41_driver.sys</code></li> </ol> <h2>2. <a name="install">Installing Binaries</a></h2> <h3>Requirements</h3> <ul> <li>ms-nfs41-client binaries: <strong>nfs41_driver.sys</strong>, <strong>nfs41_np.dll</strong>, <strong>libtirpc.dll</strong>, <strong>nfs_install.exe</strong>, <strong>nfsd.exe</strong>, <strong>nfs_mount.exe</strong></li> <li>ms-nfs41-client configuration files: <strong>nfs41_driver.cer</strong>, <strong>nfs41rdr.inf</strong>, <strong>install.bat</strong>, <strong>uninstall.bat</strong>, <strong>etc_netconfig</strong>, <strong>ms-nfs41-idmap.conf</strong></li> <li>Microsoft Visual Studio 2010, or Microsoft Visual C++ 2010 Redistributable Libraries (<a href="https://www.microsoft.com/download/en/details.aspx?id=8328">x86</a> or <a href="https://www.microsoft.com/download/en/details.aspx?id=13523">x64</a>). An installer for the redistributable libraries are included with binary releases.</li> </ul> <h3>Instructions</h3> <ol> <li>Copy or extract all ms-nfs41-client binaries and configuration files into a directory that's convenient for testing.</li> <li>Run <strong>vcredist_x*.exe</strong> to install the Visual C++ Redistributable Libraries.</li> <li>Double-click on <strong>nfs41_driver.cer</strong> and select 'Install Certificate', then place it in the 'Trusted Root Certificate Authorities' store.</li> <li>Open a command prompt as Administrator in this directory.</li> <li>Install the driver and update the registry: <br/><code>> install.bat</code></li> <li>Copy configuration files: <br/><code>> mkdir C:\etc</code> <br/><code>> copy etc_netconfig C:\etc\netconfig</code> <br/><code>> copy ms-nfs41-idmap.conf C:\etc\</code></li> <li>Allow windows to load test-signed drivers: <br/><code>> bcdedit /set testsigning on</code></li> <li>Reboot.</li> </ol> <h2>3. <a name="dfs">Disable the DFS Client</a></h2> <ul> <li>The Windows DFS client interferes with some requests, indicated by long delays during operation. See <a href="http://support.microsoft.com/kb/171386">http://support.microsoft.com/kb/171386</a> for more information.</li> </ul> <h3>Instructions</h3> <ol> <li>Open <strong>regedit.exe</strong> and navigate to <code>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Mup</code>.</li> <li>Add a DWORD value named <code>DisableDfs</code> with a value of 1.</li> </ol> <h2>4. <a name="ldap">Ldap Configuration</a></h2> <h3>Requirements:</h3> <ul> <li><strong>C:\etc\ms-nfs41-idmap.conf</strong> from <a href="#install">Installation</a> step 7.</li> </ul> <h3>Instructions</h3> <ol> <li>Open <strong>C:\etc\ms-nfs41-idmap.conf</strong> in a text editor.</li> <li>Uncomment the <code>ldap_hostname</code> and <code>ldap_base</code> lines, and configure as appropriate to match your ldap server configuration (we'll add suggestions later).</li> </ol> <h2>5. <a name="startup">Starting the Client</a></h2> <ul> <li>If you've installed the binary distribution, you'll find two versions of the nfs client daemon: <strong>nfsd.exe</strong> and <strong>nfsd_debug.exe</strong>. <strong>nfsd.exe</strong> is built to run as a service, and does not provide easy access to debug output. We strongly recommend trying <strong>nfsd_debug.exe</strong> first (using the Instructions below) to verify that you can start the daemon and mount/unmount an nfs share. You can then close <strong>nfsd_debug.exe</strong> and start running <strong>nfsd.exe</strong> as a service with:<br /><code>> nfsd.exe -install</code>.</li> </ul> <h3>Instructions</h3> <ol> <li>From a Windows command prompt, run <strong>nfsd.exe</strong> to start the nfs client daemon. Leave this running in the background until all mapped drives are unmounted. <br/>Usage: <br/><code>> nfsd.exe -d <debug level> [--noldap]</code> <ul> <li><code><debug level></code> determines the log verbosity (1, 2, 3 or 0 to disable)</li> <li><code>--noldap</code> disables id mapping and uses a default uid=666 and gid=777</li> <li><code>--uid, --gid</code> changes the default uid/gid when no mapping is available (must be nonzero)</li> </ul></li> </ol> <h2>6. <a name="mount">Mounting</a></h2> <h3>Instructions</h3> <ol> <li>From a Windows command prompt run <strong>nfs_mount.exe</strong> to mount a share: <br/><code>> nfs_mount.exe Z: <server_name>:\</code></li> <li>To specify the security flavor, add the 'sec=' mount option with sys, krb5, krb5i, or krb5p: <br/><code>> nfs_mount.exe -o sec=<flavor> Z: <server_name>:\</code></li> <li>You can later unmount with: <br/><code>> nfs_mount.exe -d Z</code></li> </ol> <h2>7. <a name="cthon">Connectathon</a></h2> <h3>Requirements</h3> <ul> <li><a href="http://www.cygwin.com" title="www.cygwin.com">Cygwin</a>, including packages gcc-core, make, time, tirpc, git</li> <li><a href="http://www.connectathon.org/nfstests.html" title="www.connectathon.org">Connectathon Test Suite</a></li> <li>ms-nfs41-client source code (patches for connectathon are located in <strong>ms-nfs41-client\tests</strong>)</li> </ul> <h3>Instructions</h3> <ol> <li>Extract <strong>nfstests.zip</strong> into a directory that's convenient for testing (i.e. <strong>cthon04</strong>).</li> <li>Open a Cygwin shell, and change directory to <strong>cthon04</strong>.</li> <li>Create a git repository to track changes: <br/><code>> git init</code> <br/><code>> git add *</code> <br/><code>> git commit -m "files from nfstests.zip"</code></li> <li>Apply all cthon patches: <br/><code>> git am /path/to/ms-nfs41-client/tests/*.patch</code></li> <li>Build the tests: <br/><code>> make</code></li> <li>Run the test suite on a mounted directory: <br/><code>> ./runtests -a -t z:/testdir</code></li> </ol> <h2>8. <a name="issues">Known Issues</a></h2> <ul> <li>krb5p security with AES keys do not work against the linux server, as it does not support gss krb5 v2 tokens with rotated data.</li> <li>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.</li> <li>If nfsd.exe is restarted while a drive is mapped, that drive needs to be remounted before further use.</li> <li>Symbolic links are not supported in Cygwin. Connectathon's basic test8 and special test nfsidem have been commented out.</li> <li>Does not allow renaming a file on top of an existing open file. Connectathon's special test op_ren has been commented out.</li> <li>Extended attributes are supported with some limitations: a) the server must support <a href="https://tools.ietf.org/html/rfc5661#section-5.3" title="RFC 5661: 5.3. Named Attributes">NFS Named Attributes</a>, 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.</li> </ul> <p>Please direct any questions to <a href="mailto:ms-nfs41-client-devel@lists.sourceforge.net">ms-nfs41-client-devel@lists.sourceforge.net</a>.</p> </div> </div> </body> </html>