3 # (C) 2001 Luigi Rizzo, Gabriele Cecchetti
4 # <Standard BSD copyright>
9 # clone root filesystem for diskless root stuff
12 # clone_root all to do a full copy (e.g. bin, sbin...)
13 # clone_root update to recreate /var (including devices)
14 # clone_root to copy /conf and password-related files
16 # This script assumes that you use a shared readonly root and /usr
17 # partition. The script creates a partial clone of the root partition,
18 # and puts it into ${DEST} (defaults to /diskless_root ) on the server,
21 # To run a diskless install you need to do the following:
23 # create /conf/default/etc/fstab
24 # this will replace the standard /etc/fstab and should contain
25 # as a minimum the following lines
26 # ${SERVER}:${DEST} / nfs ro 0 0
27 # ${SERVER}:/usr /usr nfs ro 0 0
28 # proc /proc procfs rw 0 0
30 # create /conf/default/etc/rc.conf
31 # this will replace the standard rc.conf and should contain
32 # the startup options for the diskless client. Most likely
33 # you will not need to set hostname and ifconfig_* because these
34 # will be already set by the startup code. You will also
35 # probably need to set local_startup="" so that the server's
36 # local startup files will not be used.
38 # create a kernel config file in /sys/i386/conf/DISKLESS with
41 # options BOOTP_NFSROOT
42 # options BOOTP_COMPAT
43 # and do a full build of the kernel.
44 # If you use the firewall, remember to default to open or your kernel
45 # will not be able to send/receive the bootp packets.
48 # enable NFS server and set /etc/exports as
49 # ${DEST} -maproot=0 -alldirs <list of diskless clients>
52 # enable bootpd by uncommenting the bootps line in /etc/inetd.conf
53 # and putting at least the following entries in /etc/bootptab:
55 # hn:ht=1:vm=rfc1048:\
59 # :rp="${SERVER}:${DEST}":
61 # client1:ha=0123456789ab:tc=.default
63 # and make sure that client1 is listed in /etc/hosts
66 # some manual init is needed here.
67 # DEST the diskless_root dir (goes into /etc/bootptab and /etc/exports
71 # you should not touch these vars:
72 # SYSDIRS system directories and mountpoints
73 # DIRS mountpoints (empty dirs)
74 # PWFILES files related to passwords
75 # TOCOPY files and dirs to copy from root partition
77 SYSDIRS="dev proc root usr var"
79 PWFILES="master.passwd passwd spwd.db pwd.db"
80 TOCOPY="bin boot compat etc modules sbin stand sys"
82 init_diskless_root() {
83 echo "Cleaning old diskless root ($DEST)"
85 rm -rf ${DEST} && echo "Old diskless root removed."
86 echo "Creating $DEST..."
87 mkdir -p $DEST && echo "New diskless root created."
88 echo "+++ Now copy original tree from / ..."
90 (cd / ; tar -clf - ${TOCOPY} ) | (cd $DEST; tar xvf - )
91 #(cd / ; find -x dev | cpio -o -H newc ) | \
92 # (cd $DEST; cpio -i -H newc -d )
93 echo "+++ Fixing permissions on some objects"
94 chmod 555 $DEST/sbin/init
97 update_conf_and_pw() {
98 echo "+++ Copying files in /conf and password files"
99 (cd ${DEST} ; rm -rf conf )
100 (cd / ; tar clf - conf ) | (cd ${DEST}; tar xvf - )
101 mkdir -p ${DEST}/conf/etc # used to mount things
102 (cd /etc ; tar cvf - ${PWFILES} ) | (cd ${DEST}/etc ; tar xf - )
106 echo "+++ update: create mountpoints and device entries, kernel"
107 for i in ${SYSDIRS} ${DIRS}
110 mkdir -p ${DEST}/$i && chown root:wheel ${DEST}/$i && echo -n "$i "
113 ln -s /var/tmp ${DEST}/tmp
114 echo "+++ Copying kernel from /sys/compile/DISKLESS"
115 cp /sys/compile/DISKLESS/kernel $DEST/kernel
122 all) # clean and reinstall the whole diskless_root
128 update) # clean and rebuild mountpoints and device entries
133 *) # copy /conf and password files