diff --git a/xCAT/postscripts/aixlitesetup b/xCAT/postscripts/aixlitesetup new file mode 100644 index 000000000..85d068f8d --- /dev/null +++ b/xCAT/postscripts/aixlitesetup @@ -0,0 +1,288 @@ +#!/bin/sh +# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html + + +################################################################################ +# +# aixlitesetup +# - This script is used to configure the xCAT statelite support +# for AIX +# +############################################################################### + +ME=`hostname -s` +SL="/.statelite" +ROOTDIR="/" + +MOUNTDIR="$SL/mnt" # where I mount all the trees. +PERSISTENT="$SL/persistent" +TMPDIR="$SL/tmpdir" +DEFAULT="/.default" + +# statelite table files are in "/" +# /statelite.table, /litefile.table, /litetree.table +STATELITE="/statelite.table" +LITEFILE="/litefile.table" +LITETREE="/litetree.table" +LOG="${ROOTDIR}/${SL}/statelite.log" + +# check the statelite.table file to see if we have +# a persistent dir to mount. +ProcessStatelite () { + + for i in `cat $STATELITE | grep -v '^#' | grep $ME` + do + + SERVER=`echo $i | awk -F'|' '{print $2}'` + TOMNT=`echo $i | awk -F'|' '{print $3}'` + + # /.statelite/tmpdir + mkdir -p ${TMPDIR} + + # /.statelite/persistent + mkdir -p ${PERSISTENT} + + # mount 10.2.0.200:/nodedata /.statelite/persistent + mount $SERVER:$TOMNT ${PERSISTENT} + + # make a node subdir + # /.statelite/persistent/ + mkdir -p ${PERSISTENT}/${ME} + + done +} + +# process the litefile table +ProcessLitefile () { + for i in `cat $LITEFILE | grep $ME` + do + type=`echo $i | awk -F'|' '{print $2}'` + path=`echo $i | awk -F'|' '{print $3}'` + + FindFile ${path} ${type} + done + +} + +MountTrees () { + # ex. /.statelite/mnt + mkdir -p $MOUNTDIR + + for i in `cat $LITETREE | grep -v '^#' | grep $ME` + do + + NODE=`echo $i | awk -F'|' '{print $1}'` + SERV=`echo $i | awk -F'|' '{print $2}'` + DIR=`echo $i | awk -F'|' '{print $3}'` + + # ex. /.statelite/mnt/10.2.0.200/etc/ + mkdir -p ${MOUNTDIR}/${SERV}${DIR} + + MAX=5 + TRIES=1 + + # ex. 10.2.0.200:/etc/ /.statelite/mnt/10.2.0.200/etc/ + while ! mount $SERV:$DIR ${MOUNTDIR}/${SERV}${DIR} + do + if [ "$TRIES" = "$MAX" ] + then + echo "Cannot mount $i." >/dev/console + break + fi + TRIES=`expr $TRIES + 1` + S=`expr $RANDOM % 20` + echo "Can't mount $SERV:$MNT... Sleeping $S seconds then trying agai +n" >/dev/console + sleep $S + done + done +} + + +ProcessType () { + #MOUNT=$1 # where this is (ex. /.statelite/mnt/10.2.0.200/etc/FScfg) + #PATH=$2 # file (ex. /etc/FScfg) + #TYPE=$3 # type of file (ex. rw) + #isChild=$4 # child = 1, parent = 0 + + PPATH=`dirname ${2}` # ex. /etc + + case "${3}" in + rw) + # item is copied from litetree dir or .default location ($1) + # into local file + + + # the local name of the file or directory + LOCAL=`echo ${2} | sed -e 's/\/$//'` + + # copy to local file or dir + if [ -d ${1} ]; then + # if it's a dir then copy all contents to local + if [ ! -e ${LOCAL} ]; then + mkdir -p ${LOCAL} + fi + if [ "0" -ne `ls -A ${1} | wc -l` ]; then + cp -r ${1}* ${LOCAL} + echo "cp -r ${1}* ${LOCAL}" 2>&1 >>$LOG + fi + else + # if file just copy + if [ ! -e ${LOCAL} ]; then + FDIR=`dirname ${2}` + mkdir -p ${FDIR} + touch ${LOCAL} + fi + cp -r ${1} ${LOCAL} + echo "cp -r ${1} ${LOCAL}" 2>&1 >>$LOG + fi + ;; + + persistent) + # the item is copied to the /.statelite/persistent subdir + # from wherever it is found ( $1 above ) + # the /.statelite/persistent/blah is then mounted + # over the local /blah + # ex. /.statelite/persistent/compute02/etc + if [ ! -d ${PERSISTENT}/${ME}${PPATH} ]; then + mkdir -p ${PERSISTENT}/${ME}${PPATH} + echo "mkdir -p ${PERSISTENT}/${ME}${PPATH}" >>$LOG + fi + + # if the file doesn't exist, then copy it over to persistent + if [ ! -e ${PERSISTENT}/${ME}${2} ]; then + echo "cp -r ${1} ${PERSISTENT}/${ME}${2}" >>$LOG + cp -r ${1} ${PERSISTENT}/${ME}${2} 2>&1 >>$LOG + fi + + LOCAL=`echo ${2} | sed -e 's/\/$//'` + SOURCE=`echo ${PERSISTENT}/${ME}${2}` + + if [ ! -e ${LOCAL} ]; then + + if [ -d ${SOURCE} ]; then + # need to create local dir + echo "mkdir -p ${LOCAL}" >>$LOG + mkdir -p ${LOCAL} + else + # need to create local file + FDIR=`dirname ${2}` + mkdir -p ${FDIR} + touch ${LOCAL} + + fi + fi + + # ex. mount /.statelite/persistent//blah /blah + # note: the dir from the statelite table is mounted over + # /.statelite/persistent + + # make sure we don't get duplicate mounts + umount ${LOCAL}>>$LOG 2>&1 + + echo "mount ${SOURCE} ${LOCAL}" >>$LOG + mount ${SOURCE} ${LOCAL}>>$LOG 2>&1 + ;; + + ro) + # mounted file or dir is overmounted over local version + + # $1 - mounted file or directory or default(?) + # $2 - file or dir name + + # ex. /etc/lppcfg + LOCAL=`echo ${2} | sed -e 's/\/$//'` + + # ex. /.statelite/mnt//etc/lppcfg + SOURCE=`echo ${1} | sed -e 's/\/$//'` + + if [ ! -e ${LOCAL} ]; then + + if [ -d ${SOURCE} ]; then + # need to create local dir + echo "mkdir -p ${LOCAL}" >>$LOG + mkdir -p ${LOCAL} + else + # need to create local file + touch ${LOCAL} + fi + fi + # make sure we don't get duplicate mounts + umount ${LOCAL}>>$LOG 2>&1 + + echo "mount -o ro ${SOURCE} ${LOCAL}" >>$LOG 2>&1 + # ex. mount -o /.statelite/mnt//etc/lppcfg /etc/lppcfg + mount -o ro ${SOURCE} ${LOCAL}>>$LOG 2>&1 + ;; + *) + ;; + esac +} + + +FindFile () { + # $1 = Pathname to locate + # $2 = Type of file + # $3 = 0 or 1: 0 means parent, 1 means child + path=$1 + type=$2 + isChild=$3 + FOUND=0 + + # this assumes the dir are already in priority order + for i in `cat $LITETREE | grep -v '^#' | grep $ME` + do + + SERVER=`echo $i | awk -F'|' '{print $2}'` + DIR=`echo $i | awk -F'|' '{print $3}'` + + NAME=`basename ${1}` + + + SRC=`echo ${MOUNTDIR}/${SERVER}${DIR}/${NAME} | sed -e 's/\/\//\//'` + + # ex. /.statelite/mnt/10.2.0.200/etc/FScfg + if [ -e ${SRC} ]; then + + + FOUND=1 + ProcessType ${SRC} ${path} ${type} ${isChild} + break + fi + done + + # Default behavior is to get from the image + if [ "$FOUND" = "0" ]; then + + if [ -e "${DEFAULT}${path}" ]; then + + + ProcessType ${DEFAULT}${path} ${path} ${type} ${isChild} + else + + echo "Could not find ${path} in defaults or any other place" >/dev/console + fi + fi +} + + + + + +########################################################################### +# Start / MAIN / main +########################################################################### + +# mount the persistent dir - if provided +ProcessStatelite + +# mount all the dirs from the litetree table. +MountTrees + +# process the litefile table +ProcessLitefile + +# Unmount dirs no longer needed - TBD +#UnmountTrees + +exit 0