Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 79484abe48b368ff515447724bdab86b > files > 8

bdii-5.2.5-1.fc14.noarch.rpm

#! /bin/bash
#
# BDII system startup script
# $Id: bdii,v 1.9 2009/06/18 14:26:52 lfield Exp $
# chkconfig: - 95 5
# description: BDII Service
# config: /etc/bdii/bdii.conf

### BEGIN INIT INFO
# Provides:          bdii
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Stop:      0 1 2 3 4 5 6
# Short-Description: BDII
# Description:       Berkeley Database Information Index
### END INIT INFO

shopt -s expand_aliases

if [ -f /etc/init.d/functions ]; then
    . /etc/init.d/functions
else
    echo "Error: Cannot source /etc/init.d/functions"
fi

log_success_msg ()
{
  success
  echo
}

log_failure_msg()
{
  failure
  echo
}

prog=bdii

# Debian does not have /var/lock/subsys
if [ -d /var/lock/subsys ] ; then
    LOCK_DIR=/var/lock/subsys
else
    LOCK_DIR=/var/lock
fi

lockfile=${LOCK_DIR}/$prog

RUN=yes

if [ -r /etc/default/bdii ] ; then
    . /etc/default/bdii
fi
if [ -r /etc/sysconfig/bdii ] ; then
    . /etc/sysconfig/bdii
fi

if [ "x$RUN" != "xyes" ] ; then
    echo "bdii disabled, please adjust the configuration to your needs "
    echo "and then set RUN to 'yes' in /etc/default/bdii to enable it."
    exit 0
fi

BDII_CONF=${BDII_CONF:-/etc/bdii/bdii.conf}

if [ -f "${BDII_CONF}" ]; then
    . "${BDII_CONF}"
fi

UPDATE_LOCK_FILE=${UPDATE_LOCK_FILE:-${LOCK_DIR}/bdii-update}
SLAPD_LOCK_FILE=${SLAPD_LOCK_FILE:-${LOCK_DIR}/bdii-slapd}
UPDATE_PID_FILE=${BDII_PID_FILE:-/var/run/bdii/bdii-update.pid}
BDII_USER=${BDII_USER:-ldap}
BDII_VAR_DIR=${BDII_VAR_DIR:-/var/lib/bdii}
BDII_UPDATE=${BDII_UPDATE:-/usr/sbin/bdii-update}
SLAPD=${SLAPD:-/usr/sbin/slapd}
SLAPD_CONF=${SLAPD_CONF:-/etc/bdii/bdii-slapd.conf}
SLAPD_HOST=${SLAPD_HOST:-0.0.0.0}
SLAPD_PORT=${SLAPD_PORT:-2170}
SLAPD_DB_DIR=${SLAPD_DB_DIR:-$BDII_VAR_DIR/db}
SLAPD_PID_FILE=${SLAPD_PID_FILE:-/var/run/bdii/db/slapd.pid}
DB_CONFIG=${DB_CONFIG:-/etc/bdii/DB_CONFIG}

if [ -x /sbin/runuser ] ; then
    RUNUSER=runuser
else
    RUNUSER=su
fi

function start(){

    # Check status
    if [ -f "${SLAPD_LOCK_FILE}" ] || [ -f "${UPDATE_LOCK_FILE}" ] ; then
        echo -n "Starting BDII: "
        result=$($0 status)
        if [ $? -gt 0 ]; then
            echo ${result} 1>&2
            exit 1
        else
            echo "BDII already started"
            exit 0
        fi
    fi

    # Create RAM Disk
    if [ "${BDII_RAM_DISK}" = "yes" ]; then
	mount -t tmpfs -o size=1500M,mode=0744 tmpfs ${SLAPD_DB_DIR}
    fi

    #Initialize the database directory.
    mkdir -p ${SLAPD_DB_DIR}/stats
    mkdir -p ${SLAPD_DB_DIR}/glue2
    chown -R ${BDII_USER}:${BDII_USER} ${SLAPD_DB_DIR}
    [ -x /sbin/restorecon ] && /sbin/restorecon -R ${SLAPD_DB_DIR}
    mkdir -p ${BDII_VAR_DIR}/archive
    chown -R ${BDII_USER}:${BDII_USER} ${BDII_VAR_DIR}
    mkdir -p /var/run/bdii/db
    chown -R ${BDII_USER}:${BDII_USER} /var/run/bdii
    [ -x /sbin/restorecon ] && /sbin/restorecon -R /var/run/bdii/db
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/stats/* 2>/dev/null"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/glue2/* 2>/dev/null"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${SLAPD_DB_DIR}/* 2>/dev/null"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "rm -f ${BDII_VAR_DIR}/old.ldif 2>/dev/null"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/stats"
    $RUNUSER -s /bin/sh ${BDII_USER} -c "cp ${DB_CONFIG} ${SLAPD_DB_DIR}/glue2"

    echo -n "Starting BDII slapd: "
    COMMAND="${SLAPD} -f ${SLAPD_CONF} -h ldap://${SLAPD_HOST}:${SLAPD_PORT} -u ${BDII_USER}"
    ${COMMAND}
    touch ${SLAPD_LOCK_FILE}
    if [ ! -f "${SLAPD_PID_FILE}" ]; then
        sleep 2
    fi

    if [ -f "${SLAPD_PID_FILE}" ]; then
        ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
        RETVAL=$?
    else
        RETVAL=1
    fi

    if [ ${RETVAL} -gt 0 ]; then
        echo -n "BDII slapd failed to start" 1>&2

        rm -f ${SLAPD_LOCK_FILE}
        eval log_failure_msg
        echo "${COMMAND} -d 256"
        ${COMMAND} -d 256
        return 1
    else
        eval log_success_msg
    fi

    export SLAPD_CONF=${SLAPD_CONF}
    $RUNUSER -s /bin/sh ${BDII_USER} -c "${BDII_UPDATE} -c ${BDII_CONF} -d"
    touch ${UPDATE_LOCK_FILE}

    if [ ! -f ${UPDATE_PID_FILE} ]; then
        sleep 2
    fi
    if [ -f ${UPDATE_PID_FILE} ]; then
        ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
        RETVAL=$?
    else
        RETVAL=1
    fi

    echo -n "Starting BDII update process: "
    if [ ${RETVAL} -gt 0 ]; then
        echo -n "BDII update process failed to start" 1>&2
        rm -f ${UPDATE_LOCK_FILE}
        eval log_failure_msg
        return 1
    else
        eval log_success_msg
        touch $lockfile
        return 0
    fi
}

function stop(){

    # Check the existance of the lock file
    if [ ! -f "${SLAPD_LOCK_FILE}" ] &&  [ ! -f "${UPDATE_LOCK_FILE}" ]; then
        echo -n "Stopping BDII: "
        result=$($0 status)
        if [ $? -gt 0 -a $? -ne 3 ]; then
            echo ${result} 1>&2
            return 1
        else
            echo "BDII already stopped"
            return 0
        fi
    fi

    RETVAL=0

    echo -n "Stopping BDII update process: "

    if [ -f "${UPDATE_PID_FILE}" ]; then
        UPDATE_PID=$(cat ${UPDATE_PID_FILE})
    fi

    $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${UPDATE_PID} 2>/dev/null"
    if [ -n "${UPDATE_PID}" ]; then
        ps ${UPDATE_PID} >/dev/null 2>&1
        if [ $? = 0 ]; then
            sleep 2
            ps ${UPDATE_PID} >/dev/null 2>&1
            if [ $? = 0 ]; then
                $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${UPDATE_PID} 2>/dev/null"
                sleep 2
                ps ${UPDATE_PID} >/dev/null 2>&1
                if [ $? = 0 ]; then
                    echo -n "Could not kill BDII update process ${UPDATE_PID}" 1>&2
                    RETVAL=1
                fi
            fi
        fi
    fi

    if [ ${RETVAL} = 0 ];  then
        rm -f ${UPDATE_PID_FILE}
        rm -f ${UPDATE_LOCK_FILE}
        eval log_success_msg
    else
        eval log_failure_msg
    fi

    echo -n "Stopping BDII slapd: "

    if [ -f "${SLAPD_PID_FILE}" ]; then
        SLAPD_PID=$(cat ${SLAPD_PID_FILE})
    fi

    $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -15 ${SLAPD_PID} 2>/dev/null"
    if [ -n "${SLAPD_PID}" ]; then
        ps ${SLAPD_PID} >/dev/null 2>&1
        if [ $? = 0 ]; then
            sleep 2
            ps ${SLAPD_PID} >/dev/null 2>&1
            if [ $? = 0 ]; then
                $RUNUSER -s /bin/sh ${BDII_USER} -c "kill -9 ${SLAPD_PID} 2>/dev/null"
                sleep 2
                ps ${SLAPD_PID} >/dev/null 2>&1
                if [ $? = 0 ]; then
                    echo -n "Could not kill BDII slapd process ${SLAPD_PID}" 1>&2
                    RETVAL=2
                else
                    rm -f {SLAPD_PID_FILE}
                fi
            fi
        fi
    fi

    
    if [ ${RETVAL} = 2 ];  then
        eval log_failure_msg
    else
        rm -f ${SLAPD_LOCK_FILE}
        eval log_success_msg
    fi

    if [ ! ${RETVAL} = 0 ];  then
        return 1
    else
	mountpoint -q ${SLAPD_DB_DIR} && umount ${SLAPD_DB_DIR}
        rm -f $lockfile
        return 0
    fi
}

function status(){

    if [ ! -f "${SLAPD_LOCK_FILE}" ] && [ ! -f "${UPDATE_LOCK_FILE}" ]; then
        echo -n "BDII Stopped"
        eval log_success_msg
        return 3
    fi

    if [ -f ${SLAPD_PID_FILE} ]; then
        ps $(cat ${SLAPD_PID_FILE}) >/dev/null 2>&1
        if [ ! $? = 0 ]; then
            echo -n "BDII slapd PID file exists but the process died" 1>&2
            eval log_failure_msg
            return 1
        fi
    else
        echo -n "BDII slapd PID file ${SLAPD_PID_FILE} does not exist" 1>&2
        eval log_failure_msg
        return 1
    fi

    if [ -f ${UPDATE_PID_FILE} ]; then
        ps $(cat ${UPDATE_PID_FILE}) >/dev/null 2>&1
        if [ ! $? = 0 ]; then
            echo -n "BDII update process died" 1>&2
            eval log_failure_msg
            return 1
        fi
    else
        echo -n "BDII update process failed to start" 1>&2
        eval log_failure_msg
        return 1
    fi
    
    # Check for hanging process
    response=$(ldapsearch -LLL -x -h ${SLAPD_HOST} -p ${SLAPD_PORT} -b o=infosys objectClass=UpdateStats modifyTimestamp 2>/dev/null | grep modifyTimestamp )
    if [ $? -eq 0 ]; then
	time_stamp=$(echo ${response} | cut -d" " -f2) 
	time_string=$(echo ${time_stamp} | sed 's/^\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\).*/\1-\2-\3 \4:\5/')
	time_int=$(date --utc --date "${time_string}" +%s)
	let time_threshold=${time_int}+1200
	time_now=$(date --utc +%s)
	if [ ${time_now} -gt ${time_threshold} ]; then
	    echo -n "BDII update process hanging" 1>&2
	    eval log_failure_msg
	    return 1
	fi
    fi

    echo -n "BDII Runnning "
    eval log_success_msg
    return 0
}

case "$1" in
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    status)
        status
        RETVAL=$?
        ;;
    reload)
        ;;
    restart | force-reload)
        stop
        start
        RETVAL=$?
        ;;
    condrestart | try-restart)
        if [ -f ${SLAPD_LOCK_FILE} ] || [ -f ${UPDATE_LOCK_FILE} ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status|condrestart}"
        RETVAL=1
esac

exit ${RETVAL}