Gentoo: Flash Operator Panel

Hello all.

The Gentoo Asterisk ebuild will install and set up asterisk, and has an init script to kick it off at startup.

Is anyone else here running asterisk and freepbx on Gentoo? I was hoping for some input in how to best modify the init script to start FOP, rather than using amportal

Thanks,

Paul

[quote=“paulkoan”]Hello all.

The Gentoo Asterisk ebuild will install and set up asterisk, and has an init script to kick it off at startup.

Is anyone else here running asterisk and freepbx on Gentoo? I was hoping for some input in how to best modify the init script to start FOP, rather than using amportal

Thanks,

Paul[/quote]

Hi Paul,

[code:1]/etc/init.d/amportal[/code:1]

[code:1]#!/sbin/runscript

Copyright 1999-2004 Gentoo Foundation

Distributed under the terms of the GNU General Public License v2

$Header: /var/cvsroot/gentoo-x86/net-misc/asterisk/files/1.2.0/asterisk.rc6,v 1.4 2007/04/05 10:32:43 uberlord Exp $

opts="${opts} forcestop reload"

depend() {
need net
use nscd dns zaptel mysql postgresql slapd capi
}

is_running() {
if [ -z “$(pidof asterisk)” ]; then
return 1
else
PID="$(cat /var/run/asterisk/asterisk.pid)"
for x in $(pidof asterisk); do
if [ “${x}” = “${PID}” ]; then
return 0
fi
done
fi

    return 1

}

asterisk_run_loop() {
local OPTS ARGS MSG NICE=""
local result=0 signal=0

    # default options
    OPTS="-f"  # don't fork / detach breaks wrapper script...

    # filter (redundant) arguments
    ARGS="$(echo "${@}" | sed -e "s:-c\|-f::g")"

    # mangle yes/no options
    ASTERISK_CONSOLE="$(echo ${ASTERISK_CONSOLE} | tr '[:lower:]' '[:upper:]')"

    if [ -n "${ASTERISK_CORE_SIZE}" ] &&
       [ "${ASTERISK_CORE_SIZE}" != "0" ]; then
            ulimit -c ${ASTERISK_CORE_SIZE}

            if [ -n "${ASTERISK_CORE_DIR}" ] && \
               [ ! -d "${ASTERISK_CORE_DIR}" ]
            then
                    mkdir -m750 -p "${ASTERISK_CORE_DIR}"

                    if [ -n "${ASTERISK_USER}" ]; then
                            chown -R "${ASTERISK_USER}" "${ASTERISK_CORE_DIR}"
                    fi

fi
ASTERISK_CORE_DIR="${ASTERISK_CORE_DIR:-/tmp}"

            cd "${ASTERISK_CORE_DIR}"
            echo "   Core dump size            : ${ASTERISK_CORE_SIZE}"
            echo "   Core dump location        : ${ASTERISK_CORE_DIR}"
    fi

    if [ -n "${ASTERISK_MAX_FD}" ]; then
            ulimit -n ${ASTERISK_MAX_FD}
            echo "   Max open filedescriptors  : ${ASTERISK_MAX_FD}"
    fi

    if [ -n "${ASTERISK_NICE}" ]; then
            echo "   Nice level                : ${ASTERISK_NICE}"
            NICE="/bin/nice -n ${ASTERISK_NICE} --"
    fi

    if [ -n "${ASTERISK_NOTIFY_EMAIL}" ]; then
            if [ -x /usr/sbin/sendmail ]; then
                    echo "   Email notifications go to : ${ASTERISK_NOTIFY_EMAIL}"
            else
                    echo "   Notifications disabled, /usr/sbin/sendmail doesn't exist or is not executable!"
                    unset ASTERISK_NOTIFY_EMAIL
            fi
    fi

    if [ -n "${ASTERISK_TTY}" ]; then
            for x in ${ASTERISK_TTY} \
                     /dev/tty${ASTERISK_TTY} \
                     /dev/vc/${ASTERISK_TTY}
            do
                    if [ -c "${x}" ]; then
                            TTY="${x}"
                    fi
            done
            [ -n "${TTY}" ] && \
                    echo "   Messages are sent to      : ${TTY}"
    fi

    if [ "${ASTERISK_CONSOLE}" = "YES" ] && [ -n "${TTY}" ]; then
            echo "   Starting Asterisk console : ${ASTERISK_CONSOLE}"
            OPTS="${OPTS} -c"
    fi

    OPTS="${OPTS} ${ARGS}"

    while :; do

            if [ -n "${TTY}" ]; then
                    /usr/bin/stty -F ${TTY} sane
                    ${NICE} /usr/sbin/asterisk ${OPTS} >${TTY} 2>&1 <${TTY}
                    result=$?
            else
                    ${NICE} /usr/sbin/asterisk ${OPTS} &>/dev/null
                    result=$?
            fi

            if [ $result -eq 0 ]; then
                    echo "Asterisk terminated normally"
                    break
            else

if [ $result -gt 128 ]; then
signal=$((result - 128))
MSG=“Asterisk terminated with Signal: $signal”

                            CORE_TARGET="core-$(date "+%Y%m%d-%h%M%s")"

                            local CORE_DUMPED=0
                            if [ -f "${ASTERISK_CORE_DIR}/core" ]; then
                                    mv "${ASTERISK_CORE_DIR}/core" \
                                       "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
                                    CORE_DUMPED=1

                            elif [ -f "${ASTERISK_CORE_DIR}/core.${PID}" ]; then
                                    mv "${ASTERISK_CORE_DIR}/core.${PID}" \
                                       "${ASTERISK_CORE_DIR}/${CORE_TARGET}"
                                    CORE_DUMPED=1

                            fi

                            [ $CORE_DUMPED -eq 1 ] && \
                                    MSG="${MSG}\n\rCore dumped: ${ASTERISK_CORE_DIR}/${CORE_TARGET}"
                    else
                            MSG="Asterisk terminated with return code: $result"
                    fi

                    # kill left-over tasks
                    for X in ${ASTERISK_CLEANUP_ON_CRASH}; do
                            kill -9 $(pidof ${X});
                    done
            fi

            [ -n "${TTY}" ] \
                    && echo "${MSG}" >${TTY} \
                    || echo "${MSG}"


            if [ -n "${ASTERISK_NOTIFY_EMAIL}" ] && \
               [ -x /usr/sbin/sendmail ]; then
                    echo -e -n "Subject: Asterisk crashed\n\r${MSG}\n\r" |\
                             /usr/sbin/sendmail "${ASTERISK_NOTIFY_EMAIL}"
            fi
            sleep 5
            echo "Restarting Asterisk..."
    done
    return 0

}

start() {
local OPTS USER GROUP PID
local tmp x

    if [ -n "${ASTERISK_NICE}" ]; then
            if [ ${ASTERISK_NICE} -ge -20 ] && \
               [ ${ASTERISK_NICE} -le  19 ]; then
                    OPTS="--nicelevel ${ASTERISK_NICE}"
            else
                    eerror "Nice value must be between -20 and 19"
                    return 1
            fi
    fi

if [ -n “${ASTERISK_USER}” ]; then
USER=$(echo $ASTERISK_USER | sed ‘s/:.//’)
GROUP=$(echo $ASTERISK_USER | awk -F: '/.
:.*/ { print $2 }’)
if [ -n “${USER}” ]; then
ASTERISK_OPTS="${ASTERISK_OPTS} -U ${USER}“
fi
if [ -n “${GROUP}” ]; then
ASTERISK_OPTS=”${ASTERISK_OPTS} -G ${GROUP}“
GROUP=”:${GROUP}" # make it look nice…
fi
ebegin "Starting asterisk PBX (as ${USER}${GROUP})"
else
ebegin "Starting asterisk PBX (as root)"
fi

    if [ "$(echo ${ASTERISK_WRAPPER} | tr '[:upper:]' '[:lower:]')" != "yes" ]; then
            start-stop-daemon --start --exec /usr/sbin/amportal start\
                    ${OPTS} -- ${ASTERISK_OPTS}
            result=$?
    else
            asterisk_run_loop ${ASTERISK_OPTS} 2>/dev/null &
            result=$?
    fi

    if [ $result -eq 0 ]; then
            # 2 seconds should be enough for asterisk to start
            sleep 2
            is_running
            result=$?
    fi

    eend $result

}

forcestop() {
ebegin "Stopping asterisk PBX"
start-stop-daemon --stop --pidfile /var/run/asterisk/asterisk.pid
eend $?
}

stop() {
if ! is_running; then
eerror "Asterisk is not running!"
return 0
fi

    ebegin "Stopping asterisk PBX gracefully"
    /usr/sbin/asterisk -r -x "stop gracefully" &>/dev/null
    # Now we have to wait until asterisk has _really_ stopped.
    sleep 1
    if is_running; then
            einfon "Waiting for asterisk to shutdown ."
            local cnt=0
            while is_running; do
                    cnt=`expr $cnt + 1`
                    if [ $cnt -gt 60 ] ; then
                            # Waited 120 seconds now. Fail.
                            echo
                            eend 1 "Failed."

return
fi
sleep 2
echo -n "."
done
echo
fi
eend 0
}

reload() {
if is_running; then
ebegin “Forcing asterisk to reload configuration”
/usr/sbin/asterisk -r -x “reload” &>/dev/null
eend $?
else
eerror "Asterisk is not running!"
fi
}[/code:1]

[code:1]rc-update add amportal default[/code:1]

This always starts the flash operator panel correctly for me.

For the record, I’m using free pbx 2.2.1, and asterisk 1.2.17 (emerged from portage)

WH237…