Difference between revisions of "Network File System configuration"
m (→/etc/exports) |
(→Troubleshooting) |
||
(35 intermediate revisions by 6 users not shown) | |||
Line 9: | Line 9: | ||
* On Ubuntu/Kubuntu: | * On Ubuntu/Kubuntu: | ||
$ sudo apt-get install nfs-kernel-server | $ 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 [https://wiki.gentoo.org/wiki/Nfs-utils gentoo wiki] | ||
===Configuration=== | ===Configuration=== | ||
====/etc/exports==== | ====/etc/exports==== | ||
− | You have to | + | * 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): |
− | 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"> | <source lang="bash"> | ||
+ | ... | ||
# Directory for Armadeus: | # Directory for Armadeus: | ||
− | /local/export 192.168.0.0/255.255. | + | /local/export 192.168.0.0/255.255.255.0(ro,no_root_squash,sync) |
+ | ... | ||
</source> | </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> | |
− | If not existing, create your export directory (for example): | + | * 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"> | <pre class="host"> | ||
− | $ sudo mkdir /local/export | + | $ sudo mkdir -p /local/export |
− | $ sudo chown -R $USER:$ | + | $ sudo chown -R $USER:$GROUP /local/export/ |
</pre> | </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"> | <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> | </pre> | ||
Line 39: | Line 73: | ||
</pre> | </pre> | ||
− | + | || <pre class="host"> | |
− | <pre class="host"> | + | |
$ sudo /etc/init.d/nfs-kernel-server restart | $ sudo /etc/init.d/nfs-kernel-server restart | ||
</pre> | </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: | ||
− | System Settings->System services | + | ''System Settings->System services'' |
− | + | || <pre class="host"> | |
− | + | ||
# /etc/init.d/nfsserver restart | # /etc/init.d/nfsserver restart | ||
+ | </pre> | ||
+ | |||
+ | || <pre class="host"> | ||
+ | # /etc/init.d/nfs restart | ||
+ | </pre> | ||
+ | |} | ||
==NFS usage on your Armadeus board== | ==NFS usage on your Armadeus board== | ||
===Mount the NFS partition manually === | ===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"> | <pre class="apf"> | ||
− | # mkdir -p /mnt/ | + | # mkdir -p /mnt/nfs |
</pre> | </pre> | ||
* mount it (for example): | * mount it (for example): | ||
<pre class="apf"> | <pre class="apf"> | ||
− | # mount -t nfs 192.168.0.2:/local/export /mnt/ | + | # mount -t nfs 192.168.0.2:/local/export /mnt/nfs |
</pre> | </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> | ||
+ | }} | ||
===Mount the NFS partition automatically at each boot from FLASH=== | ===Mount the NFS partition automatically at each boot from FLASH=== | ||
− | |||
* login to your Armadeus board as root | * login to your Armadeus board as root | ||
* open the '''/etc/fstab''' file and add this line: | * 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 | <host-ip>:/<path-to-shared-folder> /mnt/<path-to-mount-folder> nfs hard,intr,rsize=8192,wsize=8192 0 0 | ||
example: | example: | ||
− | 192.168.0.2:/local/export /mnt/ | + | 192.168.0.2:/local/export /mnt/nfs nfs hard,intr,rsize=8192,wsize=8192 0 0 |
* check your modification: | * check your modification: | ||
<pre class="apf"> | <pre class="apf"> | ||
− | # mount /mnt/ | + | # mount /mnt/nfs |
</pre> | </pre> | ||
* reboot your board | * reboot your board | ||
Line 82: | Line 129: | ||
<pre class="apf"> | <pre class="apf"> | ||
# df | # df | ||
− | # ls /mnt/ | + | # ls /mnt/nfs |
</pre> | </pre> | ||
+ | |||
When you have a problem, verify that the NFS server is running on the host: | 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''' | |
− | + | |- | |
− | <pre class="host"> | + | |
+ | | <pre class="host"> | ||
$ /sbin/service nfs status | $ /sbin/service nfs status | ||
</pre> | </pre> | ||
+ | |||
+ | ||<pre class="host"> | ||
+ | $ /etc/init.d/nfs-kernel-server status | ||
+ | </pre> | ||
+ | || | ||
+ | |||
+ | || | ||
+ | |} | ||
===Boot from NFS=== | ===Boot from NFS=== | ||
− | * on your Host, expand generated rootfs image to your NFS export dir (for example if your NFS export dir is ''/ | + | 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> | <pre class=host> | ||
$ make shell_env | $ make shell_env | ||
$ source armadeus_env.sh | $ source armadeus_env.sh | ||
− | $ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C / | + | $ sudo mkdir -p /tftpboot/$ARMADEUS_BOARD_NAME-root/boot |
+ | $ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C /tftpboot/$ARMADEUS_BOARD_NAME-root | ||
</pre> | </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"> | <pre class="apf"> | ||
BIOS> printenv rootpath | BIOS> printenv rootpath | ||
</pre> | </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"> | <pre class="apf"> | ||
− | BIOS> setenv rootpath / | + | BIOS> setenv rootpath /tftpboot/${board_name}-root |
</pre> | </pre> | ||
* save it: | * save it: | ||
Line 118: | Line 187: | ||
===Summary of the required Packages:=== | ===Summary of the required Packages:=== | ||
− | * portmap ( | + | * portmap (Buildroot) |
* nfs (busybox) | * nfs (busybox) | ||
* nfs support (Linux, activated by default in Armadeus configuration) | * nfs support (Linux, activated by default in Armadeus configuration) | ||
− | ==Troubleshooting | + | ==Troubleshooting== |
− | * | + | ===RPC: Program not registered=== |
− | + | * If ''nfsd'' and ''mountd'' daemons are not running on your Host, then you will get a message like: | |
− | In that case, restart the NFS service on your Host (see above) | + | <pre class="apf"> |
− | * | + | mount: RPC: Program not registered |
− | To check if portmap is running, look at the running processes: | + | </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/ | + | 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 | ||
+ | |||
+ | ===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> | ||
+ | |||
+ | ===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== | ==NFS Server under Windows== | ||
Line 138: | Line 230: | ||
==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]] | [[Category:Network]] |
Latest revision as of 13:17, 1 February 2022
Contents
[hide]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.
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/
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.