Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 02 Jan 2011 11:18:04 +0200
From:      Daniel Braniss <danny@cs.huji.ac.il>
To:        Peter Jeremy <peterjeremy@acm.org>
Cc:        freebsd-stable@freebsd.org
Subject:   Re: Specifying root mount options on diskless boot. 
Message-ID:  <E1PZK4i-000HSP-IX@kabab.cs.huji.ac.il>
In-Reply-To: <20110101124149.GE48579@server.vk2pj.dyndns.org> 
References:  <20110101124149.GE48579@server.vk2pj.dyndns.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> 
> --2iBwrppp/7QCDedR
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: inline
> Content-Transfer-Encoding: quoted-printable
> 
> [I'm not sure if -stable is the best list for this but anyway...]
> 
> I'm trying to convert an old laptop running FreeBSD 8.0 into a diskless
> client (since its internal HDD is growing bad spots faster than I can
> repair them).  I have it pxebooting nicely and running with an NFS root
> but it then reports locking problems: devd, syslogd, moused (and maybe
> others) lock their PID file to protect against multiple instances.
> Unfortunately, these daemons all start before statd/lockd and so the
> locking fails and reports "operation not supported".
> 
> It's not practical to reorder the startup sequence to make lockd start
> early enough (I've tried).
> 
> Since the filesystem is reserved for this client, there's no real need
> to forward lock requests across the wire and so specifying "nolockd"
> would be another solution.  Looking through sys/nfsclient/bootp_subr.c,
> DHCP option 130 should allow NFS mount options to be specified (though
> it's not clear that the relevant code path is actually followed because
> I don't see the associated printf()s anywhere on the console.  After
> getting isc-dhcpd to forward this option (made more difficult because
> its documentation is incorrect), it still doesn't work.
> 
> Understanding all this isn't helped by kenv(8) reporting three different
> sets of root filesystem options:
> boot.nfsroot.path=3D"/tank/m3"
> boot.nfsroot.server=3D"192.168.123.200"
> dhcp.option-130=3D"nolockd"
> dhcp.root-path=3D"192.168.123.200:/tank/m3"
> vfs.root.mountfrom=3D"nfs:server:/tank/m3"
> vfs.root.mountfrom.options=3D"rw,tcp,nolockd"
> 
> And the console also reports conflicting root definitions:
> Trying to mount root from nfs:server:/tank/m3
> NFS ROOT: 192.168.123.200:/tank/m3
> 
> Working through all these:
> boot.nfsroot.* appears to be initialised by sys/boot/i386/libi386/pxe.c
> but, whilst nfsclient/nfs_diskless.c can parse boot.nfsroot.options,
> there's no code to initialise that kenv name in pxe.c
> 
> dhcp.* appears to be initialised by lib/libstand/bootp.c - which does
> include code to populate boot.nfsroot.options (using vendor specific
> DHCP option 20) but this code is not compiled in.  Further studying
> of bootp.c shows that it's possible to initialise arbitrary kenv's
> using DHCP options 246-254 - but the DHCPDISCOVER packets do not
> request these options so they don't work without special DHCP server
> configuration (to forward options that aren't requested).
> 
> vfs.root.* is parsed out of /etc/fstab but, other than being
> reported in the console message above, it doesn't appear to be
> used in this environment (it looks like the root entry can be
> commented out of /etc/fstab without problem).
> 
> My final solution was to specify 'boot.nfsroot.options=3D"nolockd"' in
> loader.conf - and this seems to actually work.
> 
> It seems rather unfortunate that FreeBSD has code to allow NFS root
> mount options to be specified via DHCP (admittedly in several
> incompatible ways) but none actually work.  A quick look at -current
> suggests that the situation there remains equally broken.
> 
> Has anyone else tried to use any of this?  And would anyone be interested
> in trying to make it actually work?

Hi Peter,
i have beed doing diskless booting for a long time, and am very pleased
(though 8.2-prerelease is causing some problems :-).
In my case /var is mfs, or ufs/zfs, and have no lockd problems.

here is what you need to do:
either change in libstand/bootp.c:
#define DHCP_ENV 	 DHCP_ENV_NO_VENDOR
to
#define DHCP_ENV 	DHCP_ENV_FREEBSD

or pick my version from:
	ftp://ftp.cs.huji.ac.il/users/danny/freebsd/diskless-boot/
and compile a new pxeboot.
this new pxeboot will allow you to pass via dhcp some key options.

next, take a look at
  ftp://ftp.cs.huji.ac.il/users/danny/freebsd/diskless-boot/rc.initdiskless
make sure that your exported root has /.etc

If you'r /var is also nfs mounted, maybe unionfs might help too.

just writing quickly so you won't feel discouraged, and that diskless
actually works.

danny





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1PZK4i-000HSP-IX>