NFS Boot

It is possible to "NFS boot" a Baserock system. This means using TFTP to load the kernel, and NFS to mount the root filesystem. This can be handy for developing, since it makes it easier and faster to deploy a new version, compared to flashing a device.

The Morph deployment plugin can deploy a system image for NFS booting. You'll need to configure the device manually to use TFTP, Morph does not help with that. To deploy the system, you need a TFTP and NFS server, with specific filesystem layout.

/srv/nfsboot/           all files for nfsbooting
    foo/                everything for device id foo
        systems/        all system versions
            default -> v1   current default system version
            v1/
                orig/
                run/
        state/
            home/       example
    tftp/
        foo-v1          -> ../foo/systems/v1/orig/kernel
        foo             -> foo-v1 (or whatever version)

The server needs to have /srv/nfsboot created, and have an NFS and a TFTP server configured. The TFTP server should serve files from /srv/nfsboot/tftp.

The person running "morph deploy nfsboot" needs root access on the server, in order to create and modify system files, and to restart the NFS service.

FIXME: needs to usea cluster morph. To do the deployment:

morph deploy nfsboot $MORPHOLOGY $SERVER \
    HOSTNAME=foo VERSION_LABEL=v1 \
    NFSBOOT_CONFIGURE=yes

where $MORPHOLOGY is the name of the system morphology (in the current cloned definitions repo), and $SERVER is the address of the TFTP and NFS server. HOSTNAME is the name of the device, and VERSION_LABEL is the version of the system you're deploying (e.g., "v1", "v2", "2013-07-10", or whatever makes sense to you).

This will create /srv/nfsboot/foo, and put all the necessary files in there. It will also copy the kernel to /srv/nfsboot/tftp. It will also modify /etc/exports, if necessary, and restart/reload the NFS server.

After this, you can manually boot the device, and it should start running the version of Baserock you just deployed.