Last bug to iron out in Ubuntu 6.10 - zm init script..

Support and queries relating to all previous versions of ZoneMinder
Locked
ddamron
Posts: 8
Joined: Sat Nov 04, 2006 11:01 pm
Location: Calgary, AB Canada

Last bug to iron out in Ubuntu 6.10 - zm init script..

Post by ddamron »

phew! ok, I have zm 1.22 completely working on ubuntu 6.10 desktop

many thanks to everyone here for using "concise" instructions..

basically, all worked well with the 6.06 install

1 question though, when I start, stop, or restart, I always get these error messages..

I've only been using linux for about 6 days, managed to get all other bugs
ironed out, so bear with me..
$Stopping ZoneMinder: sh: Syntax error: Bad fd number
success

Starting ZoneMinder: sh: Syntax error: Bad fd number
success
and here's my script...

Code: Select all

dan@dan-desktop:~$ cat /etc/init.d/zm
#!/bin/sh
# description: Control ZoneMinder as a Service
# chkconfig: 2345 99 00
# Source function library.
#. /etc/rc.d/init.d/functions

prog=ZoneMinder
ZM_VERSION="1.22.2"
ZM_PATH_BIN="/usr/local/bin"
ZM_CONFIG="/usr/local/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
                if [ "$ZM_DB_SERVER" != "" -a "$ZM_DB_NAME" != "" -a "$ZM_DB_USERA" != "" -a "$ZM_DB_PASSA" != "" ]; then
                        echo -n "Converting $ZM_CONFIG"
                        cp $ZM_CONFIG $ZM_CONFIG.old && \
                        cat $ZM_CONFIG.old | \
                                grep -v ZM_DB_USERB | \
                                grep -v ZM_DB_PASSB | \
                                sed -e 's/ZM_DB_USERA/ZM_DB_USER/' | \
                                sed -e 's/ZM_DB_PASSA/ZM_DB_PASS/' >$ZM_CONFIG && \
                        rm -f $ZM_CONFIG.old
                        RETVAL=$?
                        [ $RETVAL = 0 ] && echo_success
                        [ $RETVAL != 0 ] && echo_failure
                        echo
                fi
                if [ "$ZM_DB_SERVER" != "" -a "$ZM_DB_NAME" != "" -a "$ZM_DB_USER" != "" -a "$ZM_DB_PASS" != "" ]; then
                        echo -n "Converting $ZM_CONFIG to 1.22.0"
                        cp $ZM_CONFIG $ZM_CONFIG.old
                        rm -f $ZM_CONFIG
                        cat $ZM_CONFIG.old | \
                        sed -e 's/ZM_DB_SERVER/ZM_DB_HOST/' >/tmp/$$
                        . /tmp/$$
                        cp $ZM_CONFIG.rpmnew $ZM_CONFIG && chmod 644 $ZM_CONFIG
                        for n in ZM_DB_HOST ZM_DB_NAME ZM_DB_USER ZM_DB_PASS; do
                                eval "val=\$$n"
                                if [ "$val" != "" ]; then
                                cp $ZM_CONFIG /tmp/$$.rpmnew &&
                                sed 's/^'$n='.*$/'$n=$val'/g' /tmp/$$.rpmnew >$ZM_CONFIG
                                fi
                        done
                        rm /tmp/$$
                        RETVAL=$?
                        [ $RETVAL = 0 ] && echo_success
                        [ $RETVAL != 0 ] && echo_failure
                        echo
                else
                        echo "In $ZM_CONFIG there should not be null values."
                        return 1
                fi
        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 -n "You must run zmupdate.pl manualy"
                        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 -n "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 ] && echo_success
                                [ $RETVAL != 0 ] && echo_failure
                                echo
                                return $RETVAL
                        fi
                        ( cd $ZM_PATH_UPDATE; perl $ZM_PATH_BIN/zmupdate.pl -f )
                        RETVAL=$?
                        [ $RETVAL = 0 ] && echo_success
                        [ $RETVAL != 0 ] && echo_failure
                        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 -n "Upgrade $prog database: "
                $ZM_PATH_BIN/zmupdate.pl --version=$OLD_VERSION --noi && ( cd $ZM_PATH_UPDATE; perl $ZM_PATH_BIN/zmupdate.pl -f )
                RETVAL=$?
                [ $RETVAL = 0 ] && echo_success
                [ $RETVAL != 0 ] && echo_failure
                echo
                return $RETVAL
        fi
}

start()
{
        loadconf || return $?
        checkcfg || return $?
        checkdb || return $?
        #/usr/local/sbin/motd.sh > /etc/motd
        echo -n "Starting $prog: "
        [ ! -d /var/run/zm ] \
                && mkdir -m 774 /var/run/zm \
                && chown $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 \
                &&chown $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK
        $command start
        RETVAL=$?
        [ $RETVAL = 0 ] && echo success
        [ $RETVAL != 0 ] && echo failure
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/zm
        return $RETVAL
}

stop()
{
        echo -n $"Stopping $prog: "
        $command stop
        RETVAL=$?
        [ $RETVAL = 0 ] && echo success
        [ $RETVAL != 0 ] && echo failure
        echo
        [ $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: $0 { start | stop | restart | condrestart | status }"
                RETVAL=1
                ;;
esac
exit $RETVAL
dan@dan-desktop:~$
Any help would be apreciated! it works, it's just annoying...

Dan
User avatar
cordel
Posts: 5210
Joined: Fri Mar 05, 2004 4:47 pm
Location: /USA/Washington/Seattle

Gentoo Start Script

Post by cordel »

Gentoo uses something a little different.
There are two files involved.

/etc/conf.d/zm

Code: Select all

# Placed in /etc/conf.d/zoneminder

ZM_SCRIPT=/usr/bin/zmpkg.pl

# Commands for starting and stopping the server

CMD_START="${ZM_SCRIPT} start"
CMD_STOP="${ZM_SCRIPT} stop"
/etc/init.d/zm

Code: Select all

#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/www-misc/zoneminder/files/init.d,v 1.1 2006/02/06 22:02:52 rl03 Exp $
# Placed in /etc/init.d/zoneminder

depend() {
    need mysql
    use net
}

start() {
        ebegin "Starting zoneminder"
        eval ${CMD_START}
        eend $?
}

stop() {
        ebegin "Stopping zoneminder"
        eval ${CMD_STOP}
        eend $?
}
Try those. I was just working on someones Gentoo box and these appear to work.
If I remember correctly (I could be wrong) ubuntu uses a simular method.

Regards,
Corey
Locked