Date: Sat, 15 Nov 2008 12:21:31 +0200 From: Danny Braniss <danny@cs.huji.ac.il> To: Luigi Rizzo <rizzo@iet.unipi.it> Cc: stable@freebsd.org Subject: Re: diskless+pxe notes Message-ID: <E1L1IHT-000PML-KG@kabab.cs.huji.ac.il> In-Reply-To: <20081114194534.GA64986@onelab2.iet.unipi.it> References: <20081114194534.GA64986@onelab2.iet.unipi.it>
next in thread | previous in thread | raw e-mail | index | archive | help
> 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" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E1L1IHT-000PML-KG>