Mount NFS volume on Ubuntu Linux server from macOS client

Solution 1:

Setting up the Linux server

  1. Install the NFS server as per the Ubuntu NFS guide:

    sudo apt install nfs-kernel-server
    
  2. Edit /etc/exports:

    sudo nano /etc/exports
    

    Now add a line similar to this:

    /home/ubuntu 172.16.238.0/24(insecure,rw,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
    
    • /home/ubuntu is the directory to export
    • 172.16.238.0/24 is the IP addresses to accept connections from. The Mac client's IP address should be in this range. Use * to allow from any IP address. (But be careful not to make your NFS server available to the entire internet!)
    • insecure means to accept connections from unprivileged (higher) port numbers
    • rw means read-write
    • all_squash,anonuid=1000,anongid=1000 forces all reads and writes to be performed by the user/group with UID/GID 1000 (1000 is the default ubuntu user/group on my server). Run id on the server to find out your UID/GID. You need these options unless your Ubuntu server and Mac client use the same UID/GID for the main user.
    • no_subtree_check is a performance thing
  3. Save the file and run

    sudo exportfs -vra
    

    to reload the NFS exports. (I'm not sure if the -a option is necessary.)

Setting up the Mac client

  1. On the macOS client, edit the /etc/auto_master file (documented in the auto_master man page):

    sudo nano /etc/auto_master
    

    and change the line starting with /net to the following (or add it if necessary):

    /net                    -hosts          -nobrowse,nosuid,locallocks,nfc,actimeo=1
    
    • locallocks creates locks on the client rather than on the server. Without this, Finder becomes very slow and takes forever to show directories.
    • nfc makes UTF-8 file names work
    • actimeo=1 sets the attribute cache timeout as short as possible. Note that setting it to 0 (or adding noac) causes Finder not to notice when a file is deleted on the server, so we can't use it.
    • Note that we're not using nfsvers=4 here. I got kernel panics on the Mac with this, so I went back to the default (NFSv3).

    Note: It appears that some macOS software updates can overwrite this file and remove your changes. I've found myself having to go back to back to this answer once a year or so re-apply the changes.

  2. Refresh the automounts by running

    sudo automount -vc
    

    (If you previously tried to mount an NFS volume, unmount it first, like so: sudo umount -f /net/fileserver.local/home/ubuntu)

  3. In the Finder menu, select Go -> Go to Folder, and type /net/SERVER_HOST_NAME, e.g. /net/fileserver.local.

    You should find your exported directory in there, e.g. at /net/fileserver.local/home/ubuntu. Drag this directory to the Finder sidebar to make it easy to access in the future.