[PATCH 11/11] defaultenv-2: add symbolic link support to boot/nfs

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Sat Sep 8 10:47:46 EDT 2012


On 15:49 Sat 08 Sep     , Sascha Hauer wrote:
> On Fri, Sep 07, 2012 at 02:13:37PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > If the symlink is not find on barebox try on the host.
> > So we are back compatible with nfs command.
> > 
> > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> > ---
> >  defaultenv-2/base/boot/nfs |   64 +++++++++++++++++++++++++++++++++++++++++---
> >  1 file changed, 61 insertions(+), 3 deletions(-)
> > 
> > diff --git a/defaultenv-2/base/boot/nfs b/defaultenv-2/base/boot/nfs
> > index 892f103..bf27d38 100644
> > --- a/defaultenv-2/base/boot/nfs
> > +++ b/defaultenv-2/base/boot/nfs
> > @@ -5,6 +5,8 @@ if [ "$1" = menu ]; then
> >  	exit
> >  fi
> >  
> > +. /env/data/ansi-colors
> > +
> >  path="/mnt/tftp"
> >  
> >  # to get the dhcp info (global.dhcp.rootpath, global.dhcp.bootfile, global.dhcp.oftree_file)
> > @@ -44,6 +46,24 @@ if [ -n "${global.dhcp.bootfile}" ]; then
> >  	mount -t nfs "${eth0.serverip}:${mnt}" "${path}"
> >  
> >  	global.bootm.image="${path}/${bootfile}"
> > +
> > +	if [ -L "${global.bootm.image}" ]; then
> > +		readlink -f "${global.bootm.image}" bootfile_symlink
> > +
> > +		# if the file is not on barebox fs assume it's on the host
> > +		if [ ! -e "${bootfile_symlink}" ]; then
> > +			dirname "${bootfile_symlink}" mnt
> > +			basename "${bootfile_symlink}" bootfile
> > +
> > +			umount "${path}"
> > +			mount -t nfs "${eth0.serverip}:${mnt}" "${path}"
> > +
> > +			bootfile_symlink="${path}/${bootfile_symlink}"
> > +			global.bootm.image="${path}/${bootfile}"
> > +		else
> > +			global.bootm.image="${bootfile_symlink}"
> > +		fi
> 
> symbolic links either point to the target or not, but doing magic on
> them to try to interpret where they *could* point to is no option.
the issue with nfs is the mount path
you need to mount `dirname file`

but if the file is a symlink this is where it's complex you need to resolv it
and mount the real path

I'd prefer to avoid it but nfs is like this
as you may just be allow to see a part of the host tree via nfs and the host
have different mountpoint

I use this feature for years on U-Boot before and now on the defaultenv
The nfs symlink was managed via the nfs command now that we use the fs on defaultenv-2

I need to have it too or it's never switch to the defaultenv-2 for me.

Best Regards,
J.



More information about the barebox mailing list