Files
Arquivotheca.Solaris-2.5/cmd/initpkg/init.d/cacheos
seta75D 7c4988eac0 Init
2021-10-11 19:38:01 -03:00

152 lines
3.4 KiB
Bash
Executable File

#!/sbin/sh
#
# Copyright (c) 1994, Sun Microsystems Inc.
#
#ident "@(#)cacheos 1.21 95/01/27 SMI"
cocdevconfig() {
#
# configure devices before setting up cache disk
#
_INIT_RECONFIG="set"; export _INIT_RECONFIG
/sbin/sh /etc/init.d/drvconfig
/sbin/sh /etc/init.d/devlinks
_INIT_RECONFIG=""; export _INIT_RECONFIG
if [ -f /reconfigure ]
then
/usr/bin/rm -f /reconfigure
fi
}
dodots() {
echo "Configuring cache and swap:\c"
(while :
do
sleep 6
echo ".\c"
done)&
dotpid=$!
}
coc_runprofile() {
# process the disk configuration profile
if [ -f /.autoinstall/preinstall ]; then
/usr/bin/mv /.autoinstall/preinstall \
/.autoinstall/preinstall.done
/sbin/sh /.autoinstall/preinstall.done
fi
if [ -f /.autoinstall/profile ]; then
exec < ${vfstab}; readvfstab "/dev/fd"
if [ "${mountp}" -a -d /dev/fd ]; then
/sbin/mount -m /dev/fd >/dev/null 2>&1
fi
SWAPSIZE=`/sbin/bpgetfile swapsize | \
(read junk size junk; echo $size)`
SYS_SWAPSIZE=${SWAPSIZE}; export SYS_SWAPSIZE
/usr/sbin/install.d/pfinstall -c none \
/.autoinstall/profile >/dev/null
if [ $? -ne 0 ]; then
fatal_err "Error in disk configuration."
fi
/sbin/umount /dev/fd >/dev/null 2>&1
fi
}
get_cachedev() {
# get cache device from vfstab
exec < ${vfstab}; readvfstab "$CACHEMNT"
CACHEDEV=${special}
RCACHEDEV=${fsckdev}
if [ -z "$CACHEDEV" -o -z "$RCACHEDEV" ]; then
#
# this is either a bug in pfinstall or the user made
# a bad modification to vfstab. Not much we can do
# here
#
fatal_err "Could not find $CACHEMNT entry in vfstab!"
fi
/usr/lib/fs/cachefs/cfstagchk $RCACHEDEV >/dev/null 2>&1
if [ $? -ne 0 ]; then
fatal_err "Improperly tagged cache device!"
fi
}
fatal_err() {
if [ $dotpid -ne 0 ]; then
kill $dotpid >/dev/null 2>&1
kill $dotpid >/dev/null 2>&1
fi
echo "\nFATAL: $1"
/usr/sbin/halt
}
#
# See if the root file system type is "cachefs". If so, we do the
# work necessary for caching root and /usr on a "cache-only-client".
# We either create a new cache or validate an existing cache, and
# get the cache "front file system" mounted so that everything is
# in place when S40standardmounts runs and does (re)mounts using cachefs.
#
ROOTFS=`/usr/lib/fs/cachefs/cfsfstype -r 2>/dev/null`
if [ "$ROOTFS" = "cachefs" ]
then
>/etc/mnttab
dotpid=0
CACHEMNT=/.cache
CACHEDIR=$CACHEMNT/rootcache
INSTMARKER=/COSINSTALL
newcache=0
cfsfsckflags=""
if [ -f $INSTMARKER -o "${_CACHEFS_FLUSHCACHE}" = "YES" ]; then
newcache=1
fi
if [ $newcache -ne 0 ]; then
cocdevconfig
dodots
coc_runprofile
get_cachedev
/usr/bin/rm -f $INSTMARKER
else
dodots
get_cachedev
#
# check and mount the cache
#
/usr/sbin/fsck -m $RCACHEDEV >/dev/null 2>&1
fsckerr=$?
if [ $fsckerr -ne 0 ]
then
/usr/sbin/fsck -o p $RCACHEDEV >/dev/null 2>&1
fsckerr=$?
cfsfsckflags="-o noclean"
fi
if [ $fsckerr -ne 0 ]; then
> $INSTMARKER
fatal_err "Could not fsck $RCACHEDEV."
fi
/usr/sbin/mount -m $CACHEDEV $CACHEMNT
if [ $? -ne 0 ]; then
fatal_err "Could not mount cache device $CACHEDEV."
fi
fi
if [ -d $CACHEDIR ]; then
/usr/sbin/fsck -F cachefs $cfsfsckflags $CACHEDIR
if [ $? -ne 0 ]; then
/usr/bin/rm -rf $CACHEDIR
fi
fi
if [ ! -d $CACHEDIR ]; then
/usr/lib/fs/cachefs/cfsadmin -c $CACHEDIR
if [ $? -ne 0 ]; then
fatal_err "Could not create cache in $CACHEDIR."
fi
fi
kill $dotpid >/dev/null 2>&1
kill $dotpid >/dev/null 2>&1
echo "done."
mntlist="${mntlist}$CACHEDEV $CACHEMNT\n"
fi