Network File System configuration

From ArmadeusWiki
Revision as of 09:56, 18 December 2014 by FabienM (Talk | contribs) (Restart of NFS server)

Jump to: navigation, search

Introduction

On this page, you will find usefull informations to configure NFS (Network File System) on your Host and your Target.

NFS server on your development Host

Installation

  • On Fedora, NFS is part of your distribution so you normally don't need to install it.
  • On Ubuntu/Kubuntu:
$ sudo apt-get install nfs-kernel-server
  • On OpenSUSE:
$ sudo zypper install yast2-nfs-server

Configuration

/etc/exports

  • You have to declare the directory where you're going to store the files you want to share accross the network. For that you have to modify the /etc/exports file with (for example):
$ sudo vim /etc/exports

and add it (at the end of the file):

...
# Directory for Armadeus:
/local/export     192.168.0.0/255.255.255.0(ro,no_root_squash,sync)
...
In that case your Host will authorize all client from the subnet 192.168.*.* to access /local/export in read only mode. If you want read/write access from your APF to your exported dir, then replace ro with rw.
  • In order to use the same folder through TFTP and NFS, using the default U-Boot scripts for example, it recommended to export your /tftpboot folder as well:
...
# Directory for Armadeus:
/local/export     192.168.0.0/255.255.255.0(ro,no_root_squash,sync)
/tftpboot     192.168.0.0/255.255.255.0(ro,no_root_squash,sync)
...
  • If not existing, create your export directory (for example):
$ sudo mkdir -p /local/export
$ sudo chown -R $USER:$GROUP /local/export/

/etc/hosts

  • You have to declare your apf board in PC host list to fully support NFS access from U-Boot. For such purpose you have to update the /etc/hosts with your prefered editor as root:
$ sudo vim /etc/hosts

and add the ip address of your board after the localhost defnition for exemple :

127.0.0.1	localhost
192.168.0.10	apf
...

Restart of NFS server

  • On Fedora:
 # /sbin/service nfs restart

Next time you boot, you can check your NFS server status with:

 # /sbin/service nfs status

and if not started then:

 # /sbin/service nfs start
  • On Ubuntu/Kubuntu/debian:
 $ sudo /etc/init.d/nfs-kernel-server restart

Next time you boot, you can check your NFS server status with: System Settings->System services

  • On OpenSUSE
# /etc/init.d/nfsserver restart

NFS usage on your Armadeus board

Mount the NFS partition manually

  • check if mount point is existing (for example we will take /mnt/nfs):
# ls /mnt
  • if not existing, create the mount point:
 # mkdir -p /mnt/nfs
  • mount it (for example):
 # mount -t nfs 192.168.0.2:/local/export /mnt/nfs

Here 192.168.0.2 is your Host IP address and /local/export the name of your Host directory you want to mount.

Note Note: On some nfs server (for exemple with debian wheezy) there is a warning when we mount nfs partition. But the filesystem is mounted :
# mount /mnt/nfs/
svc: failed to register lockdv1 RPC service (errno 97).


Mount the NFS partition automatically at each boot from FLASH

  • login to your Armadeus board as root
  • open the /etc/fstab file and add this line:
<host-ip>:/<path-to-shared-folder> /mnt/<path-to-mount-folder> nfs hard,intr,rsize=8192,wsize=8192 0 0

example:

192.168.0.2:/local/export /mnt/nfs nfs hard,intr,rsize=8192,wsize=8192 0 0
  • check your modification:
 # mount /mnt/nfs
  • reboot your board
 # reboot
  • and enjoy the result
 # df
 # ls /mnt/nfs

When you have a problem, verify that the NFS server is running on the host:

 $ /etc/init.d/nfs-kernel-server status

or

 $ /sbin/service nfs status

Boot from NFS

This boot procedure is usefull to test a modified rootfs and/or a linux kernel keeping safe the original flash memory content of your board.

  • on your Host, expand generated rootfs image to your NFS export dir (for example if your NFS export dir is /tftpboot on your Host) and you want to boot on it using the U-Boot script nfsboot:
 $ make shell_env
 $ source armadeus_env.sh
 $ sudo mkdir -p /tftpboot/$ARMADEUS_BOARD_NAME-root/boot
 $ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C /tftpboot/$ARMADEUS_BOARD_NAME-root
 $ sudo cp $ARMADEUS_BINARIES/$ARMADEUS_BOARD_NAME-linux.bin /tftpboot/$ARMADEUS_BOARD_NAME-root/boot

The copy of a Linux kernel to the NFS /boot folder, makes possible to also download it with NFS when booting the board.

  • On your board, in U-Boot, check if the rootpath envt variable is set accordingly:
 BIOS> printenv rootpath
  • If not, then set it (by default U-boot is configured to use the following path /tftpboot/apfXXXX-root) where apfXXXX may be apf9328, apf27, apf28, apf51, apf6:
 BIOS> setenv rootpath /tftpboot/apfXXXX-root
  • save it:
 BIOS> saveenv
  • then boot with:
 BIOS> run nfsboot

Summary of the required Packages:

  • portmap (Buildroot)
  • nfs (busybox)
  • nfs support (Linux, activated by default in Armadeus configuration)

Troubleshooting:

  • 1] If nfsd and mountd daemon are not running on your Host, then you will get a message like:
# mount: RPC: Program not registered

In that case, restart the NFS service on your Host (see above)

  • 2] To successfully mount a NFS drive, portmap daemon should be running on your target, if not system will hang during some minutes when you launch the mount !!

To check if portmap is running, look at the running processes:

# ps faux

If portmap is not listed, then launch it manually:

# /etc/init.d/S13portmap

NFS Server under Windows

For those who want to use the NFS service on Windows, a small and FREE NFS server is available here.

Links