Network File System configuration: Difference between revisions

From ArmadeusWiki
No edit summary
 
JulienB (talk | contribs)
 
(93 intermediate revisions by 9 users not shown)
Line 1: Line 1:
==Introduction==
==Introduction==


On this page, you will find usefull informations to configure your Host or Target network
On this page, you will find usefull informations to configure NFS ([[wikipedia:Network_File_System_(protocol)|Network File System]]) on your Host and your Target.


==Host NFS server==
==NFS server on your development Host==


On Linux (&Mac?) NFS is part of your distribution so you normally don't need to install it.
===Installation===
The only thing you have to do is to configure the directory you want others access from the network.
* On Fedora, NFS is part of your distribution so you normally don't need to install it.
For that you have to modify the /etc/exports file (for example):
* On Ubuntu/Kubuntu:
  # Directory for Armadeus:
  $ sudo apt-get install nfs-kernel-server
  /local/export    192.168.0.0/255.255.0.0(ro,no_root_squash,sync)
* On OpenSUSE:
(In that case your Host will authorize all client from the subnet 192.168.*.* to access /local/export in read only mode)
  $ sudo zypper install yast2-nfs-server
* On Gentoo:
# emerge -av nfs-utils


Then restart your NFS server:
You can also take a look at the [https://wiki.gentoo.org/wiki/Nfs-utils gentoo wiki]
===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):
<pre class="host">
$ sudo vim /etc/exports
</pre>
and add it (at the end of the file):
<source lang="bash">
...
# Directory for Armadeus:
/local/export    192.168.0.0/255.255.255.0(ro,no_root_squash,sync)
...
</source>
: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''.<br>
* 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:
<source lang="bash">
...
# 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)
...
</source>
* If not existing, create your export directory (for example):
<pre class="host">
$ sudo mkdir -p /local/export
$ sudo chown -R $USER:$GROUP /local/export/
</pre>
 
====/etc/hosts====
* You have to declare your APF/OPOS board in the PC hosts list, to fully support NFS access from U-Boot. For such purpose you have to update the ''/etc/hosts'' file with your preferred editor (as root):
<pre class="host">
$ sudo vim /etc/hosts
</pre>
and add the IP address of your board after the localhost definition for example :
<source lang="bash">
127.0.0.1 localhost
192.168.0.10 apf
...
</source>
 
====Restart of NFS server====
{| border="1" cellpadding="5" cellspacing="0" summary="Restart of NFS server depending on your distribution"
|- style="background:#efefef;"
! '''On Fedora''' || '''On Ubuntu/Kubuntu/debian'''  || '''On OpenSUSE''' || '''On Gentoo'''
|-
 
|<pre class="host">
  # /sbin/service nfs restart
  # /sbin/service nfs restart
 
</pre>
Next time you boot, you can check your NFS server status with:
Next time you boot, you can check your NFS server status with:
<pre class="host">
  # /sbin/service nfs status
  # /sbin/service nfs status
</pre>
and if not started then:
and if not started then:
<pre class="host">
  # /sbin/service nfs start
  # /sbin/service nfs start
</pre>
|| <pre class="host">
$ sudo /etc/init.d/nfs-kernel-server restart
</pre>
Next time you boot, you can check your NFS server status with:
''System Settings->System services''
|| <pre class="host">
# /etc/init.d/nfsserver restart
</pre>
|| <pre class="host">
# /etc/init.d/nfs restart
</pre>
|}
==NFS usage on your Armadeus board==
===Mount the NFS partition manually ===
* check if mount point is existing (for example we will take ''/mnt/nfs''):
<pre class="apf">
# ls /mnt
</pre>
* if not existing, create the mount point:
<pre class="apf">
# mkdir -p /mnt/nfs
</pre>
* mount it (for example):
<pre class="apf">
# mount -t nfs 192.168.0.2:/local/export /mnt/nfs
</pre>
Here 192.168.0.2 is your Host IP address and ''/local/export'' the name of your Host directory you want to mount.
{{Note| On some nfs server (for exemple with debian wheezy) there is a warning when we mount nfs partition. But the filesystem is mounted :
<pre class="apf">
# mount /mnt/nfs/
svc: failed to register lockdv1 RPC service (errno 97).
</pre>
}}


==On your Armadeus target:==
===Mount the NFS partition automatically at each boot from FLASH===


- create a mount point (for example):
* login to your Armadeus board as root
  # mkdir -p /mnt/host
* open the '''/etc/fstab''' file and add this line:
- mount it (for example):
  <host-ip>:/<path-to-shared-folder> /mnt/<path-to-mount-folder> nfs hard,intr,rsize=8192,wsize=8192 0 0
  # mount -t nfs 192.168.0.2:/local/export /mnt/host
example:
192.168.0.2 is your Host IP address and /local/export the name of your Host directory you want to mount.
  192.168.0.2:/local/export /mnt/nfs nfs hard,intr,rsize=8192,wsize=8192 0 0
* check your modification:
<pre class="apf">
# mount /mnt/nfs
</pre>
* reboot your board
<pre class="apf">
# reboot
</pre>
* and enjoy the result
<pre class="apf">
# df
# ls /mnt/nfs
</pre>


==Troubleshooting:==
When you have a problem, verify that the NFS server is running on the host:
{| border="1" cellpadding="5" cellspacing="0" summary="Status of NFS server depending on your distribution"
|- style="background:#efefef;"
! '''On Fedora''' || '''On Ubuntu/Kubuntu/debian'''  || '''On OpenSUSE''' || '''On Gentoo'''
|-


1] If nfsd and mountd daemon are not running on your Host, then you will get a message like:
| <pre class="host">
# mount: RPC: Program not registered
$ /sbin/service nfs status
In that case, restart the NFS service on your Host (see above)
</pre>
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:
||<pre class="host">
$ /etc/init.d/nfs-kernel-server status
</pre>
|| 
 
|| 
|}
 
===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:
<pre class=host>
$ 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
</pre>
* The copy of the Linux kernel to the NFS ''/boot'' folder, makes possible to also download it with NFS when booting the board:
<pre class=host>
$ sudo cp $ARMADEUS_BINARIES/$ARMADEUS_BOARD_NAME-linux.bin /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/
</pre>
* With recent (3.10+) kernels, you also have to copy the Device Tree blobs:
<pre class=host>
$ sudo mkdir -p /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/dtbs
$ sudo cp $ARMADEUS_BINARIES/*.dtb /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/dtbs/
</pre>
 
* On your board, in U-Boot, check if the ''rootpath'' envt variable is set accordingly:
<pre class="apf">
BIOS> printenv rootpath
</pre>
* 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:
<pre class="apf">
BIOS> setenv rootpath /tftpboot/${board_name}-root
</pre>
* save it:
<pre class="apf">
BIOS> saveenv
</pre>
* then boot with:
<pre class="apf">
BIOS> run nfsboot
</pre>
 
===Summary of the required Packages:===
* portmap (Buildroot)
* nfs (busybox)
* nfs support (Linux, activated by default in Armadeus configuration)
 
==Troubleshooting==
 
===RPC: Program not registered===
* If ''nfsd'' and ''mountd'' daemons are not running on your Host, then you will get a message like:
<pre class="apf">
mount: RPC: Program not registered
</pre>
* In that case, restart the NFS service on your Host (see [[Network_File_System_configuration#Restart_of_NFS_server|above]]).
 
===Portmap/RPCbind===
* To successfully mount a NFS drive, ''portmap''/''rpcbind'' daemon should be running on your APF/OPOS, if not, system will hang during some minutes when you launch the mount !!
To check if ''portmap''/''rpcbind'' is running, look at the running processes:
<pre class="apf">
  # ps faux
  # ps faux
If portmap is not listed, then launch it manually:
</pre>
  # /etc/init.d/S14portmap
If ''portmap/rpcbind'' is not listed, then launch it manually or install it:
<pre class="apf"
  # /etc/init.d/S13portmap
</pre>
* Note: ''portmap'' is obsolete since 2017


==TFTP Server under Windows:==
===Connection refused===
* If you get this on your APF when trying to mount:
<pre class="apf">
mount: mounting 192.168.0.2:/local/export on /mnt/nfs/ failed: Connection refused
</pre>
* then your kernel might need some extra options:
<pre class="apf">
mount -o port=2049,nolock,proto=tcp 192.168.0.2:/local/export /mnt/nfs/
</pre>


For those who want to transfer some files from Windows (kernel image / root fs), a small and FREE tftp server is available here:
=== errno 111 ===
http://tftpd32.jounin.net/  
 
* If you have ''errno 111'' error:
<pre class="apf">
# mount -t nfs 192.168.0.152:/nfsroot /mnt/nfs
[10577.918887] svc: failed to register lockdv1 RPC service (errno 111).
[10577.925392] lockd_up: makesock failed, error=-111
mount: mounting 192.168.0.152:/nfsroot on /mnt/nfs failed: Connection refused
</pre>
 
*  then try version 4 of nfs:
<pre class="apf">
# mount -t nfs -o vers=4 192.168.0.152:/nfsroot /mnt/nfs
</pre>
 
* or nolock option :
<pre class="apf">
# mount -t nfs -o vers=3,nolock 192.168.0.152:/nfsroot /mnt/nfs
</pre>
 
===Timemouts in U-Boot===
* If you think all your NFS server config is OK but still have Timeouts ("Loading: T T T T T T T T") in U-Boot when using ''run nfsboot'', then you can try this (tested on Ubuntu 22.04):
 
<pre class"host">
sudo vim /etc/nfs.conf
</pre>
and add this line in [nfsd] section:
<pre class"host">
udp=y
</pre>
then:
<pre class"host">
sudo /etc/init.d/nfs-kernel-server restart
</pre>
 
===Kernel debug===
* If none of the above workarounds was successful -> no luck ! :-) You can still activate NFS debugging by recompiling your kernel with CONFIG_SUNRPC_DEBUG options and use ''setenv extrabootargs nfsrootdebug'' in U-Boot. And then you dig...
 
==NFS Server under Windows==
For those who want to use the NFS service on Windows, a small and FREE NFS server is available [http://www.freedownloadscenter.com/Utilities/Misc__Utilities/nfsAxe.html here].


==Links==
==Links==
* http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.8.
* http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.8.


 
[[Category:Network]]
[[Fr:Configuration Réseau|Page en français]]

Latest revision as of 15:00, 29 July 2026

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
  • On Gentoo:
# emerge -av nfs-utils

You can also take a look at the gentoo wiki

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/OPOS board in the PC hosts list, to fully support NFS access from U-Boot. For such purpose you have to update the /etc/hosts file with your preferred editor (as root):
$ sudo vim /etc/hosts

and add the IP address of your board after the localhost definition for example :

127.0.0.1	localhost
192.168.0.10	apf
...

Restart of NFS server

On Fedora On Ubuntu/Kubuntu/debian On OpenSUSE On Gentoo
 # /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
 $ sudo /etc/init.d/nfs-kernel-server restart

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

 # /etc/init.d/nfsserver restart
 # /etc/init.d/nfs 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:

On Fedora On Ubuntu/Kubuntu/debian On OpenSUSE On Gentoo
 $ /sbin/service nfs status
 $ /etc/init.d/nfs-kernel-server 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
  • The copy of the Linux kernel to the NFS /boot folder, makes possible to also download it with NFS when booting the board:
 $ sudo cp $ARMADEUS_BINARIES/$ARMADEUS_BOARD_NAME-linux.bin /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/
  • With recent (3.10+) kernels, you also have to copy the Device Tree blobs:
 $ sudo mkdir -p /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/dtbs
 $ sudo cp $ARMADEUS_BINARIES/*.dtb /tftpboot/$ARMADEUS_BOARD_NAME-root/boot/dtbs/
  • 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/${board_name}-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

RPC: Program not registered

  • If nfsd and mountd daemons 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).

Portmap/RPCbind

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

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

 # ps faux

If portmap/rpcbind is not listed, then launch it manually or install it:

* Note: ''portmap'' is obsolete since 2017

===Connection refused===
* If you get this on your APF when trying to mount:
<pre class="apf">
mount: mounting 192.168.0.2:/local/export on /mnt/nfs/ failed: Connection refused
  • then your kernel might need some extra options:
mount -o port=2049,nolock,proto=tcp 192.168.0.2:/local/export /mnt/nfs/

errno 111

  • If you have errno 111 error:
# mount -t nfs 192.168.0.152:/nfsroot /mnt/nfs
[10577.918887] svc: failed to register lockdv1 RPC service (errno 111).
[10577.925392] lockd_up: makesock failed, error=-111
mount: mounting 192.168.0.152:/nfsroot on /mnt/nfs failed: Connection refused
  • then try version 4 of nfs:
# mount -t nfs -o vers=4 192.168.0.152:/nfsroot /mnt/nfs
  • or nolock option :
# mount -t nfs -o vers=3,nolock 192.168.0.152:/nfsroot /mnt/nfs

Timemouts in U-Boot

  • If you think all your NFS server config is OK but still have Timeouts ("Loading: T T T T T T T T") in U-Boot when using run nfsboot, then you can try this (tested on Ubuntu 22.04):
sudo vim /etc/nfs.conf

and add this line in [nfsd] section:

udp=y

then:

sudo /etc/init.d/nfs-kernel-server restart

Kernel debug

  • If none of the above workarounds was successful -> no luck ! :-) You can still activate NFS debugging by recompiling your kernel with CONFIG_SUNRPC_DEBUG options and use setenv extrabootargs nfsrootdebug in U-Boot. And then you dig...

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