Project

General

Profile

Bug #615 ยป diskless.2.patch

thomas.nikolajsen, 04/25/2007 09:57 PM

View differences:

rc.d/diskless 12 Apr 2007 19:25:41 -0000
dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null`
[ ${dlv:=0} -eq 0 ] && exit 0
name="diskless2"
name="diskless"
# Provide a function for normalizing the mounting of memory
# filesystems. This should allow the rest of the code here to remain
# as close as possible between 5-current and 4-stable.
# Provide a function for normalizing the mounting of memory filesystems.
# $1 = size
# $2 = mount point
# $3 = (optional) bytes-per-inode
......
if [ -n "$3" ]; then
bpi="-i $3"
fi
/sbin/mdmfs $bpi -s $1 -M md $2
/sbin/mount_mfs $bpi -s $1 swap $2
}
# If there is a global system configuration file, suck it in.
......
rmdir /var/.diskless
else
echo "+++ mount_md of /var"
mount_md ${varsize:=32m} /var
mount_md ${varsize:=32768} /var
fi
if [ ! -d /var/db ]; then
......
true
elif (/bin/mkdir /dev/.diskless 2> /dev/null); then
# if /dev is writable assume it has already been populated
# via rc.diskless1
# via rc.d/diskless
#
rmdir /dev/.diskless
else
......
# generate our hostname
#
if [ -z "`hostname -s`" ]; then
hostname=`/bin/kenv dhcp.host-name`
hostname=`/usr/bin/kenv dhcp.host-name`
hostname $hostname
echo "Hostname is $hostname"
fi
......
# build the resolv.conf
#
if [ ! -e /etc/resolv.conf ]; then
echo domain `/bin/kenv dhcp.domain-name` > /etc/resolv.conf
echo domain `/usr/bin/kenv dhcp.domain-name` > /etc/resolv.conf
set `/bin/kenv dhcp.domain-name-servers`
set `/usr/bin/kenv dhcp.domain-name-servers`
for ns in `IFS=','; echo $*`; do
echo nameserver $ns >> /etc/resolv.conf;
done
fi
rc.d/initdiskless 12 Apr 2007 19:25:41 -0000
#
# If a subdirectory contains the file 'md_size', the contents of the
# file is used to determine the size of the memory filesystem, in 512
# byte sectors. The default is 8192 (4MB). You only have to specify an
# byte sectors. The default is 4096 (2MB). You only have to specify an
# md_size if the default doesn't work for you (i.e. if it is too big or
# too small). Note that in -current the default is 4096 (2MB). For
# example, /conf/base/etc/md_size might contain '16384'.
# too small). For example, /conf/base/etc/md_size might contain '16384'.
#
# If /conf/<special_dir>/SUBDIR.cpio.gz exists, the file is cpio'd into
# the specified /SUBDIR (and a memory filesystem is created for /SUBDIR
......
# /conf/default/etc/{rc.conf,rc.local,fstab}. Your fstab should be sure
# to mount a /usr... typically an NFS readonly /usr.
#
# NOTE! rc.diskless2 will create /var, /tmp, and /dev. Those filesystems
# NOTE! rc.d/diskless will create /var, /tmp, and /dev. Those filesystems
# should not be specified in /conf. At least not yet.
dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null`
......
# Create a generic memory disk
#
mount_md() {
/sbin/mdmfs -i 4096 -s $1 -M md $2
/sbin/mount_mfs -i 4096 -s $1 swap $2
}
# Create the memory filesystem if it has not already been created
#
create_md() {
if [ "x`eval echo \\$md_created_$1`" = "x" ]; then
if [ "x`eval echo \\$md_size_$1`" = "x" ]; then
md_size=4096
else
md_size=`eval echo \\$md_size_$1`
fi
mount_md $md_size /$1
/bin/chmod 755 /$1
eval md_created_$1=created
fi
if [ "x`eval echo \\$md_size_$1`" = "x" ]; then
md_size=4096
else
md_size=`eval echo \\$md_size_$1`
fi
mount_md $md_size /$1
/bin/chmod 755 /$1
eval md_created_$1=created
fi
}
# DEBUGGING
......
#
# - calculate memory filesystem sizes. If the subdirectory (prior to
# NFS remounting) contains the file 'md_size', the contents specified
# in 512 byte sectors will be used to size the memory filesystem. Otherwise
# 8192 sectors (4MB) is used.
# in 512 byte sectors will be used to size the memory filesystem.
#
# - handle NFS remounts. If the subdirectory contains the file
# diskless_remount, the contents of the file is NFS mounted over
......
#
subdir=${j##*/}
if [ -d $j -a -f $j/md_size ]; then
eval md_size_$subdir=`cat $j/md_size`
eval md_size_$subdir=`cat $j/md_size`
fi
# NFS remount
......
if [ -d $j -a -f $j/diskless_remount ]; then
nfspt=`/bin/cat $j/diskless_remount`
if [ `expr "$nfspt" : '\(.\)'` = "/" ]; then
nfspt="${nfsroot}${nfspt}"
nfspt="${nfsroot}${nfspt}"
fi
mount_nfs $nfspt $j
chkerr $? "mount_nfs $nfspt $j"
fi
done
done
done
# - Create all required MFS filesystems and populate them from
......
if [ -f $j ]; then
create_md $subdir
echo "Loading /$subdir from cpio archive $j"
(cd / ; /stand/gzip -d < $j | /stand/cpio --extract -d )
(cd / ; /usr/bin/gzip -d < $j | /usr/bin/cpio --extract -d )
fi
done
for j in /conf/$i/*.remove ; do
......
fi
done
done
    (1-1/1)