From owner-freebsd-hackers Fri Jan 13 09:01:27 1995 Return-Path: hackers-owner Received: (from root@localhost) by freefall.cdrom.com (8.6.9/8.6.6) id JAA13324 for hackers-outgoing; Fri, 13 Jan 1995 09:01:27 -0800 Received: from brasil.moneng.mei.com (brasil.moneng.mei.com [151.186.20.4]) by freefall.cdrom.com (8.6.9/8.6.6) with SMTP id JAA13318 for ; Fri, 13 Jan 1995 09:01:26 -0800 Received: by brasil.moneng.mei.com (4.1/SMI-4.1) id AA02484; Fri, 13 Jan 95 10:57:28 CST From: Joe Greco Message-Id: <9501131657.AA02484@brasil.moneng.mei.com> Subject: Re: About readonly root partition To: martin@innovus.com (Martin Renters) Date: Fri, 13 Jan 1995 10:57:27 -0600 (CST) Cc: luigi@labinfo.iet.unipi.it, hackers@FreeBSD.org In-Reply-To: <199501131534.HAA11820@freefall.cdrom.com> from "Martin Renters" at Jan 13, 95 10:38:02 am X-Mailer: ELM [version 2.4beta PL9] Content-Type: text Content-Length: 4047 Sender: hackers-owner@FreeBSD.org Precedence: bulk > > So, How about letting "init" look for "/rc" instead/before > > looking for /etc/rc ? This would help in having the following: > > > > 1) a main "rc" is called, which does the initial checks; > > 2) mounts the proper filesystem onto /etc; > > 3) passes control to /etc/rc > > > > With the current setting, the above might still work except that, once > > the new /etc is mounted, the original /etc/rc is no more readable. > > /etc, /tmp, and /var all need to be separate for each diskless client. > > I do agree that it would be a good idea to do something to allow selective > mounting at system startup time. Perhaps init could tell that it is running > diskless and run some sort of shared '/etc/diskless.rc' script which could > mount the correct /etc, /tmp and /var filesystems based on some system > administrator defined scheme. > > An example /etc/diskless.rc might contain: > > mount server:/exports/etc/$hostname /etc > mount server:/exports/tmp/$hostname /tmp > mount server:/exports/var/$hostname /var > > And then execute /etc/rc (which would now be the system specific one) Perhaps define a search path for "rc" in init? "/sbin/rc:/etc/rc" and by default do not provide an /sbin/rc. If one exists, in this case, it could be something like mount server:/exports/etc/$hostname /etc . /etc/rc I hacked around this by making my root NFS partition writable (bypassing all these problems). I have always hacked around similar problems in the past, as well. Typically I mount / rw, and /usr ro, which means that I have to have a per-system /, but I have a little script that hardlinks share-able files rather than copying them, so that in essence /etc, /var, and /tmp are unique on each box, but /bin's binaries are shared. My little wonder-script to do this is appended at the end. Tailored for our local environment, alas. It's cheesy, it's quick, it's dirty. No apologies. :-) brasil is my SunOS 4.1.3 workstation with lotsa disk. I'm always shopping for a better solution, though... People are arguing things about DISKLESS being undesirable and the like, but in reality I find that it is very effective to be able to walk up to an arbitrary PC here at work, cram a disk in, and be running UNIX and X a few minutes later. Very impressive demonstration of a technically superior operating system. ;-) ... Joe ------------------------------------------------------------------------------- Joe Greco - The Data Capture Fellow (and UNIX/Network Hacker) 414/362-3617 Marquette Electronics, Inc. - Milwaukee, WI jgreco@brasil.moneng.mei.com % cat /nfs/2.0S/root/dup #! /bin/sh - master=master dup=$1 mkdir ${dup} (cd $master; find * -print) | ( while read i; do if [ -h ${master}/$i ]; then echo symlink `ls -l ${master}/$i | awk '{print $10}'` ${dup}/$i ln -s `ls -l ${master}/$i | awk '{print $10}'` ${dup}/$i continue; fi if [ -f ${master}/$i ]; then case "$i" in etc/*|var/*) echo copy ${master}/$i ${dup}/$i cp -p ${master}/$i ${dup}/$i;; *) echo link ${master}/$i ${dup}/$i ln ${master}/$i ${dup}/$i esac continue; fi if [ -d ${master}/$i ]; then echo mkdir ${dup}/$i mkdir ${dup}/$i chown -f `ls -ldg ${master}/$i | awk '{print $3 "." $4}'` ${dup}/$i continue; fi if [ -c ${master}/$i ]; then continue; fi if [ -b ${master}/$i ]; then continue; fi if [ -p ${master}/$i ]; then continue; fi done ) chmod 1777 ${dup}/tmp ${dup}/var/tmp echo ${dup} > ${dup}/etc/myname chmod 644 ${dup}/etc/myname echo ${dup} > ${dup}/etc/hostname.ed0 chmod 644 ${dup}/etc/hostname.ed0 echo "151.186.20.4 brasil" >> ${dup}/etc/hosts echo "151.186.20.x ${dup}" >> ${dup}/etc/hosts vi + ${dup}/etc/hosts ( echo "brasil:/nfs/2.0S/root/${dup} / nfs rw 0 0" echo "brasil:/nfs/2.0S/usr /usr nfs ro 0 0" echo "brasil:/nfs/2.0S/usrsrc /usr/src nfs ro 0 0" echo "brasil:/nfs/2.0S/local /usr/local nfs ro 0 0" echo "brasil:/nfs/2.0S/X11R6 /usr/X11R6 nfs ro 0 0" ) > ${dup}/etc/fstab chmod 644 ${dup}/etc/fstab