#!/bin/bash # Source function library. . /etc/rc.conf . /etc/rc.d/functions prog=ZoneMinder ZM_VERSION="1.23.3" ZM_PATH_BIN="/usr/lib/zm/bin" ZM_CONFIG="/etc/zm.conf" command="$ZM_PATH_BIN/zmpkg.pl" loadconf() { if [ -f $ZM_CONFIG ]; then . $ZM_CONFIG else echo "ERROR: $ZM_CONFIG not found. " return 1 fi } # Check for old config and update if needed checkcfg() { # Check config if [ "$ZM_DB_HOST" = "" -o "$ZM_DB_NAME" = "" -o "$ZM_DB_USER" = "" -o "$ZM_DB_PASS" = "" ]; then echo "In $ZM_CONFIG there should not be null values. " return 1 loadconf fi } checkdb() { # Check database exisits and version GetVer="select Value from Config where Name='ZM_DYN_DB_VERSION'" OLD_VERSION=`echo $GetVer | mysql -B -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` if [ "$OLD_VERSION" = "" ]; then GetVer="select Value from Config where Name='ZM_DYN_CURR_VERSION'" OLD_VERSION=`echo $GetVer | mysql -B -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` if [ "$OLD_VERSION" = "" ]; then echo "You must run $ZM_PATH_BIN/zminit manually " return 1 fi fi RETVAL=$? if [ $RETVAL != 0 ]; then tbls=`mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS -s -e 'show tables' $ZM_DB_NAME` RETVAL=$? if [ $RETVAL = 0 ]; then echo "Initialize $prog database: " echo tbls | grep Config >/dev/null 2>&1 RETVAL=$? if [ $RETVAL != 0 ]; then mysql -B -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME < $ZM_PATH_UPDATE/zm_create.sql RETVAL=$? [ $RETVAL = 0 ] && stat_done [ $RETVAL != 0 ] && stat_fail echo return $RETVAL fi ( cd $ZM_PATH_UPDATE; perl $ZM_PATH_BIN/zmupdate.pl -f ) RETVAL=$? [ $RETVAL = 0 ] && stat_done [ $RETVAL != 0 ] && stat_fail echo return $RETVAL else echo "No access to ZoneMinder database. Run $ZM_PATH_BIN/zminit manually. " return $RETVAL fi else [ "$ZM_VERSION" = "$OLD_VERSION" ] && return 0 echo "Upgrade %s database: " "$prog" $ZM_PATH_BIN/zmupdate.pl --version=$OLD_VERSION --noi && ( cd $ZM_PATH_UPDATE; perl $ZM_PATH_BIN/zmupdate.pl -f ) RETVAL=$? [ $RETVAL = 0 ] && stat_done [ $RETVAL != 0 ] && stat_fail echo return $RETVAL fi } start() { loadconf || return $? checkcfg || return $? checkdb || return $? stat_busy "Starting $prog" [ -d /var/run/zm ] || mkdir -m 774 /var/run/zm chown -R $ZM_WEB_USER:$ZM_WEB_GROUP /var/run/zm GetPath="select Value from Config where Name='ZM_PATH_SOCKS'" ZM_PATH_SOCK=`echo $GetPath | mysql -B -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` [ -d $ZM_PATH_SOCK ] || mkdir -m 774 $ZM_PATH_SOCK sudo -u $ZM_WEB_USER test -O $ZM_PATH_SOCK \ || chown -R $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK # Setup the log dir [ -d /var/log/zm ] || mkdir /var/log/zm for logs in zmaudit.log zmdc.log zmfilter.log zmpkg.log zmupdate.log zmwatch.log; do touch /var/log/zm/$logs done chown -R $ZM_WEB_USER:$ZM_WEB_GROUP /var/log/zm $command start RETVAL=$? [ $RETVAL = 0 ] && stat_done [ $RETVAL != 0 ] && stat_fail #[ $RETVAL = 0 ] && touch /var/lock/subsys/zm return $RETVAL } stop() { stat_busy "Stopping $prog" $command stop RETVAL=$? [ $RETVAL = 0 ] && stat_done [ $RETVAL != 0 ] && stat_fail #[ $RETVAL = 0 ] && rm -f /var/lock/subsys/zm } status() { result=`$command status` if [ "$result" = "running" ]; then echo "ZoneMinder is running " RETVAL=0 else echo "ZoneMinder is stopped " RETVAL=1 fi } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'condrestart') loadconf checkcfg result=`$ZM_PATH_BIN/zmdc.pl check` if [ "$result" = "running" ]; then $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null start fi ;; 'status') status ;; *) echo "Usage: zm { start | stop | restart | condrestart | status } " RETVAL=1 ;; esac exit $RETVAL