Date: Wed, 05 Jan 2000 15:34:21 +0900 From: MIHIRA Sanpei Yoshiro <sanpei@sanpei.org> To: freebsd-current@FreeBSD.ORG Subject: Re: [diskless] /etc/rc.diskless1 in 3-stable is better than in 4-current Message-ID: <200001050634.PAA03950@lavender.yy.cs.keio.ac.jp> In-Reply-To: Your message of "Tue, 21 Dec 1999 16:51:24 %2B0100 (CET)" References: <199912211551.QAA16496@info.iet.unipi.it>
next in thread | previous in thread | raw e-mail | index | archive | help
----Next_Part(Wed_Jan__5_15:34:21_2000)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi.
First of all, I tried to take in modification of 3-stable into
4-current. And I tested with 4-current NFS server and diskless
client.
merge from latest 3-stable rc.diskless shell scripts:
etc/rc.diskless1 1.1.2.1(for 3-stable)
etc/rc.diskless2 1.2.2.1(for 3-stable)
Some differences between 3-stable and below rc.diskless{1,2} files
- add $FreeBSD$ tag
- apply a consistent style to most of the etc scripts
- don't extract inet6 address for bootp_ipa and bootp_bca.
TODO list:
- If files in ``/etc'' directory are symbolic linked,
cp -Rp are failed. I will check it and fix.
- I want to free rc.diskless1 from /usr partition.
(We don't have any hint about path name of /usr directory
with bootp.
But we need to use ``/usr/bin/awk and /usr/bin/fgrep,
/usr/bin/head'' commands to obtain IP address.
So currently rc.diskless1 has hard-coded with ${nfs_root}/usr).
- create or copy below files and directories
(I want to compile ports collection in diskless machine)
/var/db/port.mkversion
/var/db/pkg
---
MIHIRA Sanpei Yoshiro
Yokohama, Japan.
----Next_Part(Wed_Jan__5_15:34:21_2000)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
# $FreeBSD: src/etc/rc.diskless1,v 1.4 1999/09/13 17:09:07 peter Exp $
#
# /etc/rc.diskless - general BOOTP startup
#
# BOOTP has mounted / for us. Assume a read-only mount. We must then
# - figure out where the NFS mount is coming from
# - figure out our IP by querying the interface
# - retarget /conf/ME softlink to proper configuration script directory
#
# It is expected that /etc/fstab and /etc/rc.conf.local will be
# set by the system operator on the server to be softlinks to
# /conf/ME/fstab and /conf/ME/rc.conf.local. The system operator may
# choose to retarget other files as well. The server itself boots
# properly with its default /conf/ME softlink pointing to
# /conf/server.host.name.
#
# During a diskless boot, we retarget the /conf/ME softlink to point
# to /conf/DISKLESS.CLIENT.IP.ADDRESS. Thus, various system config
# files that are softlinks through /conf/ME also get retargeted.
#
# SEE SAMPLE FILES IN /usr/share/examples/diskless.
# chkerr:
#
# Routine to check for error
#
# checks error code and drops into shell on failure.
# if shell exits, terminates script as well as /etc/rc.
#
chkerr() {
case $1 in
0)
;;
*)
echo "$2 failed: dropping into /bin/sh"
/bin/sh
# RESUME
;;
esac
}
# DEBUGGING
#
# set -v
# Figure out where the root mount is coming from, synthesize a mount
# for /usr and mount it.
#
# e.g. nfs_root might wind up as "A.B.C.D:/"
#
# NOTE! the /usr mount is only temporary so we can access commands necessary
# to retarget /conf/ME. The actual /usr mount should be part of the
# retargeted /etc/fstab. See instructions in /usr/share/examples/diskless.
#
set `/bin/df /`
nfs_root=$8
# XXX we should extract the host part from nfs_root, but we don't have
# any good tool for string parsing yet. The ../ is a dirty hack. We
# can add more than one. But this whole section to determine the boot
# ifc etc. needs some cleanup
mount_nfs -o ro ${nfs_root}/../usr /usr
chkerr $? "mount of /usr"
# Figure out our interface and IP.
#
bootp_ifc=`route -n get default | fgrep interface | awk '{ print $2; }'`
bootp_ipbca=`ifconfig ${bootp_ifc} | fgrep 'inet ' | head -1 | awk '{ print $6; }'`
bootp_ipa=`ifconfig ${bootp_ifc} | fgrep 'inet ' | head -1 | awk '{ print $2; }'`
echo "Interface ${bootp_ifc} IP-Address ${bootp_ipa} Broadcast ${bootp_ipbca}"
umount /usr
# Files in /etc are copied to /conf/etc which is writable. Then
# per-machine configs from /conf/ip.address/etc are copied onto this
# directory. First choice is using the client's IP, then the client's
# broadcast address, then a default configuration.
# This way we have some flexibility to handle clusters of machines
# on separate subnets.
#
# WARNING! null mounts cannot handle mmap, and since many programs
# use mmap (such as 'cp'), we have to copy.
#
mount_mfs -s 2048 -T qp120at dummy /conf/etc
cp -Rp /etc/* /conf/etc
chkerr $? "MFS mount on /conf/etc"
if [ -d /conf/${bootp_ipa} ]
then
cp -Rp /conf/${bootp_ipa}/etc/* /conf/etc
elif [ -d /conf/${bootp_ipbca} ]
then
cp -Rp /conf/${bootp_ipbca}/etc/* /conf/etc
else
cp -Rp /conf/default/etc/* /conf/etc
fi
#mkdir /conf/ME
#cp -Rp /conf/${bootp_ipa}/* /conf/ME
#
# Make the new directory available as /etc
#
mount_null /conf/etc /etc
# retarget the kernel
#
#sysctl -w kern.bootfile=/conf/ME/kernel
# Tell /etc/rc to run the specified script after
# it does its mounts but before it does anything
# else.
#
# This script is responsible for setting up the
# diskless mount environment. This can be
# overriden by /conf/ME/rc.conf.local if, for
# example, you do not want to run the standard
# system /etc/rc.diskless2
diskless_mount="/etc/rc.diskless2"
----Next_Part(Wed_Jan__5_15:34:21_2000)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
# $FreeBSD: src/etc/rc.diskless2,v 1.4 1999/09/13 17:09:07 peter Exp $
#
# rc.diskless2
#
# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
elif [ -r /etc/rc.conf ]; then
. /etc/rc.conf
fi
mount_mfs -s ${varsize:=65536} -T qp120at dummy /var
var_dirs="run dev db msgs tmp spool spool/mqueue spool/lpd spool/output \
spool/output/lpd"
for i in ${var_dirs}
do
mkdir /var/${i}
done
chmod 755 /var/run
chmod 755 /var/db
chmod 755 /var/spool
chmod 1777 /var/tmp
chown -R root.daemon /var/spool/output
chgrp daemon /var/spool/lpd
#
# XXX make sure to create one dir for each printer as requested by lpd
#
if [ ! -h /tmp -a ! -h /var/tmp ]; then
mount_null /var/tmp /tmp
fi
# extract a list of device entries, then copy them to a writable partition
(cd /; find -x dev | cpio -o -H newc) > /tmp/dev.tmp
mount_mfs -s 4096 -i 512 -T qp120at dummy /dev
(cd /; cpio -i -H newc -d < /tmp/dev.tmp)
----Next_Part(Wed_Jan__5_15:34:21_2000)----
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001050634.PAA03950>
