> Hi,
> i finally decided to try and use pxeboot to replace the etherboot
> method I was using so far for diskless setups.
>
> The goal is to fully share the server's root and /usr directories,
> as documented in diskless(8). I'd like to share the following
> notes, hopefully to go in the manpage.
>
> cheers
> luigi
>
Hi,
With a slightly modified libstand/bootp.c - a PR was sent
way back, but you can check
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/diskless-boot
you can control the diskless boot options.
by comenting out kernel= in
/boot/defaults/loader.conf
you can set in the dhcpd.conf.
since most of the tags received via dhcp are placed in kenv,
the crucial options are there!
BTW, we use diskless servers/workstations for 90% of our hosts, the
exception being:
- the dhcp/tftp server
- a 'lagged' server - the router/server get confused :-)
- our mail servers, there is a bug somewhere, where some critical
network resources get deadlocked.
- our developement servers.
the / of the diskless is almost identical to the server, but for
many reasons, I like to keep it appart. The trick to overcome the
read-only problem, is using unionfs for /etc:
in rc.initdiskless:
if [ -e /conf/union ]; then
kldload unionfs
mount_md 4096 /.etc
mount_unionfs -o transparent /.etc /etc
fi
the /conf is nfs mounted from a central site, the location is passed
via dhcp:
confpath=`kenv conf-path`
if [ -n "$confpath" ] ; then
if [ "`expr $confpath : '\(.*\):'`" ] ; then
echo Mounting $confpath on /conf
mount_nfs $confpath /conf
chkerr $? "mount_nfs $confpath /conf"
to_umount="${to_umount} $confpath"
fi
fi
the actual rc.conf is configured like this:
eval `kenv | sed -n 's/^rc\.//p'`
rm -f /etc/rc.conf /etc/rc.conf.local
for fc in $conf0 $conf1 $conf2 $conf3 $conf4 $conf5 $conf6 $conf7 $conf8
$conf9 rc.conf.$hostname
do
ho=`expr $fc : '\(.*\):'`
fl=`expr $fc : '.*/\(.*\)'`
if [ "${ho}" != "" ]; then
mp=`expr $fc : '\(.*\)/.*'`
mount_nfs $mp /mnt > /dev/null 2>&1
if [ -f /mnt/$fl ]; then
echo "# from $fc /mnt/$fl" >> /etc/rc.conf
cat /mnt/$fl >> /etc/rc.conf
fi
umount /mnt > /dev/null 2>&1
elif [ -e /conf/$fc ] ; then
echo "# from /conf/$fc" >> /etc/rc.conf
cat /conf/$fc >> /etc/rc.conf
fi
done
> -------------- root path configuration -----------------
>
> There seems to be a well known problem in pxeloader, see
> kern/106493 , where pxeloader defaults to using a root path of
> /pxeroot when offered "/" . The patch suggested in
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=106493
>
> is trivial and judging from it I believe this is addressing a
> true bug and not a feature. Fortunately there is a workaround
> (suggested in the PR) which is using "//" as a root path.
>
> ------------- sharing /boot with the server ---------------
>
> I believe it is quite useful to share the whole root
> partition between the server and the diskless client.
> This would require at a minimum some conditional code
> in loader.conf (or loader.rc, etc) so that at least you
> point to different kernels.
>
> A minimalistic approach can be adding this line to /boot/loader.conf
>
> bootfile="kernel\\${loaddev};kernel"
>
> The variable $loaddev contains the name of the load device,
> which is "pxe0" in the case of pxeboot, and disk* in other
> cases when loading from the local disk.
> If you make sure that there is no 'kernel.disk*' on the
> directory, and instead there is a kernel.pxe0 in the same
> directory, then the diskless machines and the server will boot
> from the proper file.
>
> Unfortunately i don't know how to implement a conditional
> in /boot/loader.conf -- otherwise one could do much nicer things
> such as differentiate which modules to load and so on.
>
> --------------- pxeloader bug in 7.x ---------------------------
> Also worth mentioning is an annoying bug in pxeloader as compiled
> on 7.x, see http://www.freebsd.org/cgi/query-pr.cgi?pr=118222
> i.e. the pxeloader in 7.x fails to proceed and prints a message
> "can't figure out which disk we are booting from".
>
> The workaround is using a pxeloader from FreeBSD6 works.
> I guess this is a compiler-related problem (given that 6.x uses gcc 3.4
> as a compiler, while 7.x uses gcc 4.2).
>
> -----------------------------------------------------------------
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to
"freebsd-stable-unsubscribe@freebsd.org"
>