| #!/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 |
| |