In this example I am setting up a NFS mounted directory to use for backing up files on remote systems. All commands should be run as root or via sudo.
On the Server
(Fedora Core 6 with NFS4 installed)
1. Turn off any firewall and SELinux software (or configure it to allow NFS traffic). Use the system-config-securitylevel GUI tool. If you follow all the steps here but you are unable to mount the remote directory then go back and check your security settings.
Another place to check is /etc/hosts.allow. Adding this line will open up all services on this server to the specified network.
2. Configure the NFS4 ID to Name mapping daemon. This is not used in versions of NFS before NFS4. It is used on Fedora 6 and above.
Edit the configuration file /etc/idmapd.conf and modify the Domain and Nobody-User/-Group lines thus:
Domain = your-internal-domain.com
Nobody-User = nfsnobody
Nobody-Group = nfsnobody
3. Make sure the portmap, nfslock and nfs services are running. On my system the first two were running by default.
# /sbin/service portmap start
# /sbin/service nfslock start
# /sbin/service nfs start
4. Make sure they will be started whenever the system is rebooted
# /sbin/chkconfig --level 345 portmap on
# /sbin/chkconfig --level 345 nfslock on
# /sbin/chkconfig --level 345 nfs on
5. Create an exports directory for each directory you want to share. This is not the actual directory that contains your data but an indirect link that makes it easier to move the real directory without having to update all your clients. It's a bit like a symbolic link. The name doesn't really matter but something like exports or nfsexports is a good idea.
# mkdir /exports
# mkdir /exports/backups
Then change the directory permissions to suite your needs. For example:
# chmod -R a+w /exports
6. Bind the exports directories to the real directories by editing /etc/fstab and adding lines like this where /proj/backups is the 'real' directory and /exports/backups is the linked directory that will actually be shared by NFS.
/proj/backups /exports/backups none bind 0 0
7. Pick up this change on your system by remounting all filesystems
# mount -a
8. Tell NFS which filesystems can be exported by editing /etc/exports and adding these lines. Look at man exports to learn about all the options. In this example the numbers represent the network and netmask of my internal network and they define the range of IP addresses that will able to access the shared directory. Modify this as needed to restrict access as needed. Of the other options, the rw is most important, signifying that the client will have read/write access to the directory.
Note that all of this should be on Two lines!
9. Pick up this change with this command
# /usr/sbin/exportfs -rv
10. Reboot the system and check that the directories are being exported
# /usr/sbin/showmount -e
Export list for server.int.craic.com
On the Client
(In this case the client was a Fedora 4 system that did not have NFS version 4 installed)
1. If the system did have NFS 4 then you would repeat step 1 in the server configuration to setup the /etc/idmapd.conf file.
2. Create the mount points on the client system. In other words, create the directories that will be linked to the remote shared directories by NFS. In my case this was:
[client] # mkdir /mnt/server_backups
3. Add the shared directories to /etc/fstab on the client. The line defines the hostname of the remote server and the exported directory, separated by a colon. Note that we use the name of the linked/bound directory that we set up, not the real directory name. That way, if we move that directory we only need to change the settings on the server. The second term on the line defines the mount point on the client machine (this machine). 'man fstab' will show what the options mean in the 'nfs' section. Most important of these are 'rw' which define read/write access and 'hard' which sets up a hard mount, which is more robust than a soft mount.
Note that all of this should be on ONE line!
server.int.craic.com:/exports/backups /mnt/server_backups nfs rw,hard,rsize=8192,wsize=8192,timeo=14,intr 0 0
4. Remount the filesystems on this client
[client] # mount -a
If this works then you should not see any messages. Check that the remote directory has been mounted by running 'df' and looking for the appropriate line. Then cd to the local mount point, list the files, etc.
All this information is widely available on the web in various forms. I used this article on fedorasolved.org by Renich Bon Ciric while I was figuring it all out, although that does contain a couple of errors.