Libnfs with two patches, already merged to upstream
 
 
 
 
 
 
Go to file
Alon Bar-Lev 8338c7e27f build: add m4 directory to source tree
m4 directory is required for autotools generation, the use of bootstrap
script is nice helper, however, the autoreconf -ivf should be usable
for autotools based checkout without any other action.

these days the bootstrap script is kinda useless, in the old days it was
a very complex set of autoconf/automake/libtool/gettext commands.

Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
2015-08-24 01:05:00 +03:00
aros aros: add licence to aros_compat.h 2014-06-08 07:53:03 -07:00
doc UTILS: move nfs-cp from examples to utils 2015-05-24 07:50:43 -07:00
examples fix some compiler warnings 2015-06-19 13:49:17 +02:00
include add basic support for setting a log level 2015-06-23 08:55:11 +02:00
lib init: do not write to stderr in rpc_set_error 2015-08-06 10:12:04 +02:00
m4 build: add m4 directory to source tree 2015-08-24 01:05:00 +03:00
mount Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
nfs Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
nlm Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
nsm Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
packaging/RPM New version 1.9.8 2015-08-02 10:18:25 -07:00
portmap Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
rquota Remove unused variables from raw (generated) files 2015-03-12 05:15:55 +00:00
utils UTILS: move nfs-cp from examples to utils 2015-05-24 07:50:43 -07:00
win32 win32: add define for S_IFLNK 2015-01-12 20:32:19 -08:00
.gitignore Added ignore pattern for Windows intermediate files 2012-09-18 08:35:11 +02:00
COPYING proto files: add a simplified bsd licence to the dot-x files 2014-06-08 07:51:38 -07:00
LICENCE-BSD.txt Include the BSD license text in a separate file 2015-03-29 15:02:10 +01:00
LICENCE-GPL-3.txt update the licence text and proide an explicit copy of LGPL2.1 and GPL3 2012-03-04 17:13:08 +11:00
LICENCE-LGPL-2.1.txt update the licence text and proide an explicit copy of LGPL2.1 and GPL3 2012-03-04 17:13:08 +11:00
Makefile.am Include the BSD license text in a separate file 2015-03-29 15:02:10 +01:00
README Add auto-traverse-mount URL argument and default it to TRUE 2015-01-17 11:49:08 -08:00
bootstrap build: add m4 directory to source tree 2015-08-24 01:05:00 +03:00
configure.ac New version 1.9.8 2015-08-02 10:18:25 -07:00
libnfs.pc.in libnfs.pc.in: fix pkg-config --cflags 2013-12-17 12:06:29 +01:00
win32build.bat Try making the initial port used a little more random 2013-05-28 17:22:28 -07:00

README

LIBNFS is a client library for accessing NFS shares over a network.

LIBNFS offers three different APIs, for different use :
1, RAW : A fully async low level RPC library for NFS protocols
This API is described in include/libnfs-raw.h
it offers a fully async interface to raw XDR encoded blobs.
This API provides very flexible and precise control of the RPC issued.

examples/nfsclient-raw.c provides examples on how to use the raw API

2, NFS ASYNC : A fully asynchronous library for high level vfs functions
This API is described by the *_async() functions in include/libnfs.h.
This API provides a fully async access to posix vfs like functions such as 
stat(), read(), ...

examples/nfsclient-async.c provides examples on how to use this API


3, NFS SYNC : A synchronous library for high level vfs functions
This API is described by the *_sync() functions in include/libnfs.h.
This API provides access to posix vfs like functions such as 
stat(), read(), ...

examples/nfsclient-sync.c provides examples on how to use this API

URL-FORMAT:
===========
Libnfs uses RFC2224 style URLs extended with libnfs specific url arguments some minor extensions.
The basic syntax of these URLs is :

nfs://<server|ipv4|ipv6>/path[?arg=val[&arg=val]*]

Arguments supported by libnfs are :
 tcp-syncnt=<int>  : Number of SYNs to send during the session establish
                     before failing setting up the tcp connection to the
                     server.
 uid=<int>         : UID value to use when talking to the server.
                     default it 65534 on Windows and getuid() on unixen.
 gid=<int>         : GID value to use when talking to the server.
                     default it 65534 on Windows and getgid() on unixen.
 readahead=<int>   : Enable readahead for files and set the maximum amount
                     of readahead to <int>.
 auto-traverse-mounts=<0|1>
                   : Should libnfs try to traverse across nested mounts
		     automatically or not. Default is 1 == enabled.

Auto_traverse_mounts
====================
Normally in NFSv3 if a server has nested exports, for example if it would
export both /data and /data/tmp then a client would need to mount
both these exports as well.
The reason is because the NFSv3 protocol does not allow a client request
to return data for an object in a different filesystem/mount.
(legacy, but it is what it is. One reason for this restriction is to
guarantee that inodes are uniqe across the mounted system.)

This option, when enabled will make libnfs perform all these mounts
internally for you. This means that one libnfs mount may now have files
with duplicate inode values so if you cache files based on inode
make sure you cache files based on BOTH st.st_ino and st.st_dev.


ROOT vs NON-ROOT
================
When running as root, libnfs tries to allocate a system port for its connection
to the NFS server. When running as non-root it will use a normal 
ephemeral port.
Many NFS servers default to a mode where they do not allow non-system
ports from connecting.
These servers require you use the "insecure" export option in /etc/exports
in order to allow libnfs clients to be able to connect.

Some versions of Linux support special capabilities that can be assigned to
programs to allow non-root users to bind to system ports.
This is set up by running 
    sudo setcap 'cap_net_bind_service=+ep' /path/to/executable
When libnfs is linked against an executable with this special capability
assigned to it, libnfs may be able to use system ports even when executing
under the privilege of a non-root user account.

This is highly non-portable so IF this works on your linux system, count
yourself lucky.


DOCUMENTATION
=============
libnfs sources ship with prebuilt manpage(s) in the doc directory.
If you change the manpage sources you need to manually regenerate the new
manpages by running 
  cd doc
  make doc

FUSE
====
A simple FUSE filesystem built on libnfs can be found in
examples/fuse_nfs.c

Compile using : gcc fuse_nfs.c -o fuse_nfs -lfuse -lnfs
Mount using : sudo ./fuse_nfs -n nfs://<server>/<export> -m <mountpoint>


PLATFORM support
=================
This is a truly multiplatform library.

Linux:  - tested with Ubuntu 10.04 - should work with others as well
Cygwin: - tested under 64bit win2k8.
MacOSX: - tested with SDK 10.4 (under Snow Leopard) - should also work with later SDKs and 64Bit
iOS:    - tested with iOS SDK 4.2 - running on iOS 4.3.x
FreeBSD:- tested with 8.2
Solaris
Windows:- tested on Windows 7 64 and Windows XP 32 using Visual Studio 10 (see README.win32.txt for build instructions)
Android:
AROS: - Build with 'make -f aros/Makefile.AROS'


LD_PRELOAD
==========
examples/ld_nfs.c contains a LD_PRELOADable module that can be used to make
several standard utilities nfs aware.
It is still very incomplete but can be used for basic things such as cat and cp.
Patches to add more coverage is welcome.

Compile with :
gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs

Then try things like
LD_NFS_DEBUG=9 LD_PRELOAD=./ld_nfs.so cat nfs://127.0.0.1/data/tmp/foo123

LD_NFS_DEBUG=9 LD_PRELOAD=./ld_nfs.so cp nfs://127.0.0.1/data/tmp/foo123 nfs://127.0.0.1/data/tmp/foo123.copy

This is just a toy preload module. Don't open bugs if it does not work. Send
patches to make it better instead.


RELEASE TARBALLS
================
Release tarballs are available at
https://sites.google.com/site/libnfstarballs/li



MAILING LIST
============
A libnfs mailing list is available at http://groups.google.com/group/libnfs
Announcements of new versions of libnfs will be posted to this list.