Specifying root mount options on diskless boot.
danny at cs.huji.ac.il
Sun Jan 2 09:18:07 UTC 2011
> 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:
> 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?
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
#define DHCP_ENV DHCP_ENV_FREEBSD
or pick my version from:
and compile a new pxeboot.
this new pxeboot will allow you to pass via dhcp some key options.
next, take a look at
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
More information about the freebsd-stable