diff options
Diffstat (limited to 'net/ibrdtnd/files/systemcheck.sh')
-rw-r--r-- | net/ibrdtnd/files/systemcheck.sh | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/net/ibrdtnd/files/systemcheck.sh b/net/ibrdtnd/files/systemcheck.sh new file mode 100644 index 000000000..3110bcf06 --- /dev/null +++ b/net/ibrdtnd/files/systemcheck.sh @@ -0,0 +1,101 @@ +#!/bin/sh +# +# + +check_mounted() { + DIR=$1 + while [ "$DIR" != "/" ]; do + if [ -n "`mount | grep "$DIR"`" ]; then + return 0 + fi + + DIR=`dirname $DIR` + done + return 1 +} + +check_writable() { + CHECKFILE="$1/.container-lock" + /bin/touch $CHECKFILE + + if [ $? -gt 0 ]; then + return 1; + fi + + /bin/echo "0123456789" >> $CHECKFILE + + if [ $? -gt 0 ]; then + return 2; + fi + + /bin/rm $CHECKFILE + + if [ $? -gt 0 ]; then + return 3; + fi +} + +check_mountdev() { + # get wait_mount option + WAIT_MOUNT_DEV=`uci -q get ibrdtn.safemode.wait_mount` + + if [ $? -ne 0 ]; then + return 0 + fi + + DATA=`mount | grep ${WAIT_MOUNT_DEV}` + + if [ -n "${DATA}" ]; then + return 0 + fi + + return 1 +} + +# check the storage device +check_mountdev +RET=$? + +if [ ${RET} -ne 0 ]; then + WAIT_SECONDS=60 + /usr/bin/logger -t "systemcheck.sh" -p 2 "disk storage not ready, wait max. ${WAIT_SECONDS} seconds until it is mounted" + while [ ${RET} -ne 0 ] && [ ${WAIT_SECONDS} -ne 0 ]; do + sleep 1 + let WAIT_SECONDS=WAIT_SECONDS-1 + check_mountdev + RET=$? + done +fi + +if [ ${RET} -ne 0 ]; then + # failed, storage not mounted + exit 1 +fi + +# get the path for the container +CONTAINER=`uci -q get ibrdtn.storage.container` + +if [ -z "$CONTAINER" ]; then + exit 0 +fi + +CONTAINER_PATH=`dirname $CONTAINER` + +if [ -n "$CONTAINER_PATH" ]; then + # check if the container is on a mounted device + check_mounted $CONTAINER_PATH + + if [ $? -gt 0 ]; then + # failed + exit 1 + fi + + # check if the device is writable + check_writable $CONTAINER_PATH + + if [ $? -gt 0 ]; then + # failed + exit 1 + fi +fi + |