[Ocfs2-tools-commits] jlbec commits r516 - trunk/vendor/common
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Dec 28 17:34:40 CST 2004
Author: jlbec
Date: 2004-12-28 17:34:38 -0600 (Tue, 28 Dec 2004)
New Revision: 516
Added:
trunk/vendor/common/o2cb.init
Log:
o Add init script. Not sure it works yet :-)
Added: trunk/vendor/common/o2cb.init
===================================================================
--- trunk/vendor/common/o2cb.init 2004-12-28 21:24:38 UTC (rev 515)
+++ trunk/vendor/common/o2cb.init 2004-12-28 23:34:38 UTC (rev 516)
@@ -0,0 +1,371 @@
+#!/bin/sh
+# init fragment for O2CB.
+#
+# chkconfig: 2435 29 20
+# description: Load O2CB drivers at system boot.
+#
+### BEGIN INIT INFO
+# Provides: o2cb
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Default-Start: 2 3 5
+# Default-Stop:
+# Description: Load O2CB drivers at system boot.
+### END INIT INFO
+
+# Force LC_ALL=C
+export LC_ALL=C
+
+# Source configuration
+[ -f /etc/sysconfig/o2cb ] && . /etc/sysconfig/o2cb
+
+if [ -z "$O2CB_MANAGER" ]
+then
+ O2CB_MANAGER=/proc/cluster
+fi
+
+KVER="$(uname -r)"
+MODPATH="/lib/modules/${KVER}/kernel/drivers/addon/o2cb"
+
+#
+# The module list is an ordered list of modules to load and mountpoints
+# to mount. Each entry is formatted like so:
+# <module>:<fstype>:<mountpoint>
+#
+# The mountpoint is underneath the O2CB_MANAGER path. So, an entry of:
+# ocfs2_heartbeat:hb:heartbeat
+# means to load the ocfs2_heartbeat module, and
+# mount -t hb none ${O2CB_MANAGER}/heartbeat
+#
+# If a module requires no mount, the colons must remain. eg,
+# ocfs2_tcp::
+#
+MODULE_LIST="ocfs2_nodemanager:nm:nm ocfs2_heartbeat:hb:heartbeat ocfs2_tcp::"
+
+
+
+#
+# if_fail()
+#
+# Evaluates return codes. If 0, prints "OK", if 1, prints "Failed"
+# and exits. If 2, status is "already done" and nothing is printed.
+# The rest of the functions in here all honor this convention.
+#
+if_fail()
+{
+ RC="$1"
+ if [ "$RC" = "0" ]
+ then
+ echo "OK"
+ return
+ elif [ "$RC" = "2" ]
+ then
+ return
+ fi
+ echo "Failed"
+ exit 1
+}
+
+
+#
+# dev_create()
+#
+# Create $1
+# Returns 0 on success, 1 on error, 2 if it already exists.
+#
+dev_create()
+{
+ if [ "$#" -lt "1" -o -z "$1" ]
+ then
+ echo "dev_create(): Requires an argument" >&2
+ return 1
+ fi
+ DEV="$1"
+ if [ -e "$DEV" ]
+ then
+ if [ -d "$DEV" ]
+ then
+ return 2
+ fi
+ echo "dev_create(): File $DEV is not a directory" >&2
+ return 1
+ fi
+
+ echo -n "Creating $DEV mount point "
+ mkdir "$DEV" 2>/dev/null
+ if [ $? != 0 ]
+ then
+ echo "Unable to create mount point $DEV" >&2
+ return 1
+ fi
+ return 0
+}
+
+
+#
+# load_module()
+# Load a module
+#
+# 0 is success, 1 is error, 2 is already loaded
+#
+load_module()
+{
+ if [ "$#" -lt "1" -o -z "$1" ]
+ then
+ echo "load_module(): Requires an argument" >&2
+ return 1
+ fi
+ MODNAME="$1"
+
+ MODOUT="`awk '$1 ~ /^'$MODNAME'$/{print $1;exit}' < /proc/modules 2>/dev/null`"
+ if [ -n "$MODOUT" ]
+ then
+ return 2
+ fi
+
+ echo -n "Loading module \"$MODNAME\" "
+ modprobe -s "$MODNAME"
+ if [ "$?" != 0 ]
+ then
+ echo "Unable to load module \"$MODNAME\"" >&2
+ return 1
+ fi
+
+ return 0
+}
+
+
+#
+# unload_module()
+# Unload a module
+#
+# 0 is success, 1 is error, 2 is not loaded
+#
+unload_module()
+{
+ if [ "$#" -lt "1" -o -z "$1" ]
+ then
+ echo "unload_module(): Requires an argument" >&2
+ return 1
+ fi
+ MODNAME="$1"
+
+ MODOUT="`awk '$1 ~ /^'$MODNAME'$/{print $1,$3;exit}' < /proc/modules 2>/dev/null`"
+ if [ -z "$MODOUT" ]
+ then
+ return 2
+ fi
+ case "$MODOUT" in
+ $MODNAME\ 0)
+ ;;
+ $MODNAME\ *)
+ return 2
+ ;;
+ *)
+ echo -n "Invalid module parsing! "
+ return 1
+ ;;
+ esac
+
+ echo -n "Unloading module \"$MODNAME\" "
+ modprobe -rs "$MODNAME"
+ if [ "$?" != 0 ]
+ then
+ echo "Unable to unload module \"$MODNAME\"" >&2
+ return 1
+ fi
+
+ return 0
+}
+
+
+#
+# mount_device()
+# Mount the a filesystem under the O2CB_MANAGER.
+#
+# 0 is success, 1 is error, 2 is already mounted
+#
+mount_device()
+{
+ if [ -z "$O2CB_MANAGER" ]
+ then
+ echo "mount_device(): No manager specified!" >&2
+ return 1
+ fi
+ TYPE="$1"
+ MNTPT="$2"
+ FULL_MOUNT="${O2CB_MANAGER}/${MNTPT}"
+ FULL_MOUNTSEARCH="`echo "$FULL_MOUNT" | sed -e 's/\//\\\\\//g'`"
+ MOUNTOUT="`awk '$2 ~ /^'$FULL_MOUNTSEARCH'$/{print $2; exit}' < /proc/mounts 2>/dev/null`"
+
+ if [ -n "$MOUNTOUT" ]
+ then
+ return 2
+ fi
+
+ echo -n "Mounting ${TYPE} driver filesystem "
+ mount $OPTS -t ${TYPE} ${TYPE} $FULL_MOUNT
+ if [ $? != 0 ]
+ then
+ echo "Unable to mount ${TYPE} driver filesystem" >&2
+ return 1
+ fi
+
+ return 0
+}
+
+
+#
+# unmount_device()
+# Unmount the /dev/oracleasm filesystem
+#
+# 0 is success, 1 is error, 2 is not mounted
+#
+unmount_device()
+{
+ if [ -z "$O2CB_MANAGER" ]
+ then
+ echo "mount_device(): No device specified!" >&2
+ return 1
+ fi
+ TYPE="$1"
+ MNTPT="$2"
+ FULL_MOUNT="${O2CB_MANAGER}/${MNTPT}"
+ FULL_MOUNTSEARCH="`echo "$FULL_MOUNT" | sed -e 's/\//\\\\\//g'`"
+ MOUNTOUT="`awk '$2 ~ /^'$FULL_MOUNTSEARCH'$/{print $2; exit}' < /proc/mounts 2>/dev/null`"
+
+ if [ -z "$MOUNTOUT" ]
+ then
+ return 2
+ fi
+
+ echo -n "Unmounting ${TYPE} driver filesystem "
+ umount $FULL_MOUNT
+ if [ $? != 0 ]
+ then
+ echo "Unable to unmount ${TYPE} driver filesystem" >&2
+ return 1
+ fi
+
+ return 0
+}
+
+
+start()
+{
+ for MODSPEC in $MODULE_LIST
+ do
+ MODULE_NAME="$(echo $MODSPEC | cut -d: -f1)"
+ FSTYPE="$(echo $MODSPEC | cut -d: -f2)"
+ MOUNT_POINT="$(echo $MODSPEC | cut -d: -f3)"
+
+ load_module "$MODULE_NAME"
+ if_fail "$?"
+
+ if [ -n "$FSTYPE" -a -n "$MOUNT_POINT" ]
+ then
+ mount_device "$FSTYPE" "$MOUNT_POINT"
+ if_fail "$?"
+ fi
+ done
+}
+
+stop()
+{
+ # Reverse list for unloading
+ R_MODLIST=""
+ for MODSPEC in $MODULE_LIST
+ do
+ if [ -z "$R_MODLIST" ]
+ then
+ R_MODLIST="$MODSPEC"
+ else
+ R_MODLIST="${MODSPEC} ${R_MODLIST}"
+ fi
+ done
+
+ for MODSPEC in $R_MODLIST
+ do
+ MODULE_NAME="$(echo $MODSPEC | cut -d: -f1)"
+ FSTYPE="$(echo $MODSPEC | cut -d: -f2)"
+ MOUNT_POINT="$(echo $MODSPEC | cut -d: -f3)"
+
+ if [ -n "$FSTYPE" -a -n "$MOUNT_POINT" ]
+ then
+ unmount_device "$FSTYPE" "$MOUNT_POINT"
+ if_fail "$?"
+ fi
+
+ unload_module "$MODULE_NAME"
+ if_fail "$?"
+ done
+}
+
+status()
+{
+ echo -n "Checking if O2CB is loaded: "
+ RC=2
+ for MODSPEC in $MODULE_LIST
+ do
+ MODULE_NAME="$(echo $MODSPEC | cut -d: -f1)"
+ FSTYPE="$(echo $MODSPEC | cut -d: -f2)"
+ MOUNT_POINT="$(echo $MODSPEC | cut -d: -f3)"
+
+ if grep "^${MODULE_NAME} " /proc/modules >/dev/null 2>&1
+ then
+ echo -n "${MODULE_NAME}"
+ else
+ RC=1
+ break
+ fi
+ done
+ if_fail "$RC"
+
+ echo -n "Checking O2CB mount points: "
+ for MODSPEC in $MODULE_LIST
+ do
+ MODULE_NAME="$(echo $MODSPEC | cut -d: -f1)"
+ FSTYPE="$(echo $MODSPEC | cut -d: -f2)"
+ MOUNT_POINT="$(echo $MODSPEC | cut -d: -f3)"
+ FULL_MOUNT="${O2CB_MANAGER}/${MOUNT_POINT}"
+
+ FULL_MOUNTSEARCH="`echo "$FULL_MOUNT" | sed -e 's/\//\\\\\//g'`"
+ if grep "^${FSTYPE} ${FULL_MOUNTSEARCH} ${FSTYPE}" /proc/mounts >/dev/null 2>&1
+ then
+ echo -n "${MOUNT_POINT}"
+ else
+ RC=1
+ break
+ fi
+ done
+ if_fail "$RC"
+}
+
+
+
+case "$1" in
+ start)
+ start
+ ;;
+
+ status)
+ status
+ ;;
+
+ stop)
+ stop
+ ;;
+
+ restart)
+ stop
+ start
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|enable|disable|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
More information about the Ocfs2-tools-commits
mailing list