1
Files
qnap-rc-scripts/twonkymedia.sh
2016-09-04 22:20:40 +03:00

303 lines
10 KiB
Bash
Executable File

#!/bin/sh
#
# MediaServer Control File written by Itzchak Rehberg
# Modified for fedora/redhat by Landon Bradshaw <phazeforward@gmail.com>
# Adapted to TwonkyMedia 3.0 by TwonkyVision GmbH
# Adapted to TwonkyMedia 4.0 by TwonkyVision GmbH
#
# This script is intended for SuSE and Fedora systems. Please report
# problems and suggestions at http://www.twonkyvision.de/mantis/
#
#
###############################################################################
#
### BEGIN INIT INFO
# Provides: twonkymedia
# Required-Start: $network $remote_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: TwonkyVision UPnP server
### END INIT INFO
#
# Comments to support chkconfig on RedHat/Fedora Linux
# chkconfig: 345 71 29
# description: TwonkyVision UPnP server
#
#==================================================================[ Setup ]===
WORKDIR1="/mnt/HDA_ROOT/twonkymedia"
WORKDIR2="`dirname $0`"
DAEMON=twonkymedia
PIDFILE=/var/run/mediaserver.pid
MNT_POINT="/mnt/ext"
TWONKY_SOURCE="${MNT_POINT}/opt/source/twonkymedia.tar.gz"
ROOT_PART="/mnt/HDA_ROOT"
UPDATEPKG_DIR="${ROOT_PART}/update_pkg"
MULTIMEDIA_SHARE=`/sbin/getcfg SHARE_DEF defMultimedia -d Qmultimedia -f /etc/config/def_share.info`
BOND_SUP=`/sbin/getcfg "Network" "BONDING Support" -d "FALSE"`
NIC_NUM=`/sbin/getcfg "Network" "Interface Number" -d "FALSE"`
APP_RUNTIME_CONF="/var/.application.conf"
TwonkyMedia_Enable=`/sbin/getcfg TwonkyMedia Enable -u -d FALSE`
RETVAL=0
#=================================================================[ Script ]===
clean_twonky_cache()
{
if [ -d /mnt/HDA_ROOT/twonkymedia/twonkymedia.db/cache ]; then
/bin/rm -rf /mnt/HDA_ROOT/twonkymedia/twonkymedia.db/cache/*
[ $? = 0 ] && echo "TwonkyMedia cache have been cleaned."
fi
if [ x"`/bin/cat /etc/config/crontab | /bin/grep "twonkymedia"`" = x ]; then
echo "0 3 * * * /bin/rm -rf /mnt/HDA_ROOT/twonkymedia/twonkymedia.db/cache/*" >> /etc/config/crontab
/usr/bin/crontab /etc/config/crontab
fi
}
move_db_path_to_hdd()
{
volume_test=`/sbin/getcfg ${MULTIMEDIA_SHARE} path -f /etc/smb.conf | cut -d '/' -f 3`
[ "x${volume_test}" = "x" ] || volume=${volume_test}
if [ ! -d "/share/${volume}/${MULTIMEDIA_SHARE}" ]; then
/bin/echo "db can't be moved to HDD"
/bin/echo "Default share ${MULTIMEDIA_SHARE} is not found."
#/sbin/write_log "Default share ${MULTIMEDIA_SHARE} is not found. TwonkyMedia start failed." 2
exit 1
fi
[ -d /share/${volume}/.@twonkymedia.db ] || /bin/mkdir /share/${volume}/.@twonkymedia.db
twonkydb=`/usr/bin/readlink "/mnt/HDA_ROOT/twonkymedia/twonkymedia.db" 2>>/dev/null`
if [ -z $twonkydb ] || [ "$twonkydb" != "/share/${volume}/.@twonkymedia.db" ]; then
/bin/rm -rf /mnt/HDA_ROOT/twonkymedia/twonkymedia.db
/bin/ln -sf /share/${volume}/.@twonkymedia.db /mnt/HDA_ROOT/twonkymedia/twonkymedia.db
fi
[ ! -f "${WORKDIR}/twonkymediaserver6-log.txt" ] || /bin/rm -f "${WORKDIR}/twonkymediaserver6-log.txt"
[ -f /share/${volume}/.@twonkymedia.db/twonkymediaserver-log.txt ] || /bin/touch /share/${volume}/.@twonkymedia.db/twonkymediaserver-log.txt
/bin/ln -sf /share/${volume}/.@twonkymedia.db/twonkymediaserver-log.txt "${WORKDIR}/twonkymediaserver6-log.txt"
logtxt=`/usr/bin/readlink "/mnt/HDA_ROOT/twonkymedia/twonkymediaserver-log.txt" 2>>/dev/null`
if [ "x$logtxt" != "x/share/${volume}/.@twonkymedia.db/twonkymediaserver-log.txt" ]; then
/bin/rm -rf /mnt/HDA_ROOT/twonkymedia/twonkymediaserver-log.txt
/bin/ln -sf /share/${volume}/.@twonkymedia.db/twonkymediaserver-log.txt /mnt/HDA_ROOT/twonkymedia/twonkymediaserver-log.txt
fi
# twonky 5.0 default config is /var/twonkymedia
if [ -d "/var/twonkymedia" ]; then
/bin/rm -rf /var/twonkymedia
fi
/usr/bin/readlink /var/twonkymedia 2>>/dev/null
if [ $? = 0 ]; then
/bin/rm /var/twonkymedia
fi
/bin/ln -sf /share/${volume}/.@twonkymedia.db /var/twonkymedia
/bin/rm -rf /share/twonkymedia 2>>/dev/null
/bin/ln -sf /share/${volume}/.@twonkymedia.db /share/twonkymedia
}
check_twonky_qpkg()
{
QPKG_Twonky_Ver=`/sbin/getcfg TwonkyMedia Version -d "0.0" -f /etc/config/qpkg.conf`
QPKG_Twonky_Enable=`/sbin/getcfg TwonkyMedia ENABLE -u -d "FALSE" -f /etc/config/qpkg.conf`
QPKG_Twonky_Shell=`/sbin/getcfg TwonkyMedia Shell -d "null" -f /etc/config/qpkg.conf`
if [ "x$QPKG_Twonky_Enable" = "xTRUE" ] && [ -x "${QPKG_Twonky_Shell}" ]; then
${QPKG_Twonky_Shell} stop 1>>/dev/null 2>>/dev/null
/sbin/setcfg TwonkyMedia ENABLE FALSE -f /etc/config/qpkg.conf
fi
}
# Source function library.
if [ -f /etc/rc.status ]; then
# SUSE
. /etc/rc.status
rc_reset
else
# Reset commands if not available
rc_status() {
case "$1" in
-v)
true
;;
*)
false
;;
esac
echo
}
alias rc_exit=exit
fi
#QNAP
if [ -f ${UPDATEPKG_DIR}/twonkymedia.tar.gz ]; then
[ ! -f $TWONKY_SOURCE ] || /bin/rm -f $TWONKY_SOURCE
TWONKY_SOURCE="${UPDATEPKG_DIR}/twonkymedia.tar.gz"
fi
if [ -f $TWONKY_SOURCE ] && [ ! -d ${MNT_POINT}/opt/twonkymedia ]; then
/bin/mkdir ${MNT_POINT}/opt/twonkymedia
/bin/rm -f ${WORKDIR1} 1>>/dev/null 2>>/dev/null
/bin/ln -sf ${MNT_POINT}/opt/twonkymedia ${WORKDIR1}
#/bin/cp $TWONKY_SOURCE $WORKDIR1
#/bin/gunzip $WORKDIR1/twonkymedia.tar.gz
/bin/tar -zxf $TWONKY_SOURCE -C $WORKDIR1
#/bin/rm $WORKDIR1/twonkymedia.tar
/bin/sync
fi
[ -d /rpc ] || /bin/mkdir /rpc
#END
if [ -x "$WORKDIR1" ]; then
WORKDIR="$WORKDIR1"
else
WORKDIR="$WORKDIR2"
fi
if [ ! -f "${WORKDIR}/${DAEMON}" ]; then
DAEMON=twonkymusic
fi
TWONKYSRV="${WORKDIR}/${DAEMON}"
INIFILE="/etc/config/twonkyvision-mediaserver6.ini"
DEFAULT_INIFILE="${WORKDIR}/twonkymedia6-default.ini"
DEFAULT_SERVER_INIFILE="${WORKDIR}/twonkymedia-server-default.ini"
LOG_FILE="${WORKDIR}/twonkymediaserver6-log.txt"
TwonkyMedia_Hide=`/sbin/getcfg DISABLE upnp -d 0 -f $APP_RUNTIME_CONF`
if [ "x$TwonkyMedia_Hide" = "x1" ]; then
/sbin/setcfg TwonkyMedia Enable FALSE
TwonkyMedia_Enable="FALSE"
fi
cd $WORKDIR
case "$1" in
start)
if [ "x$TwonkyMedia_Enable" != "xTRUE" ]; then
echo "UPnP MediaServer is disabled. If the process still existed, try to run \"${0} stop\""
exit 0
fi
check_twonky_qpkg
clean_twonky_cache
move_db_path_to_hdd
if [ -e $PIDFILE ]; then
PID=`cat $PIDFILE`
echo "Twonky server seems already be running under PID $PID"
echo "(PID file $PIDFILE already exists). Checking for process..."
running=`ps --no-headers -o "%c" -p $PID`
if ( [ "${DAEMON}"=="${running}" ] ); then
echo "Process IS running. Not started again."
else
echo "Looks like the daemon crashed: the PID does not match the daemon."
echo "Removing flag file..."
rm $PIDFILE
$0 start
exit $?
fi
exit 0
else
if [ ! -x "${TWONKYSRV}" ]; then
echo "Twonky servers not found".
rc_status -u
exit $?
fi
echo -n "Starting UPnP MediaServer: ($TWONKYSRV) "
_contentdir=`/sbin/getcfg "" contentdir -d "/Qmultimedia" -f ${DEFAULT_INIFILE}`
[ "+A|/${MULTIMEDIA_SHARE}" = "${_contentdir}" ] || /bin/sed -i 's/^contentdir.*$/'"contentdir=+A|\/${MULTIMEDIA_SHARE}"'/' ${DEFAULT_INIFILE}
_contentdir=`/sbin/getcfg "" contentdir -d "/Qmultimedia" -f ${DEFAULT_SERVER_INIFILE}`
[ "+A|/${MULTIMEDIA_SHARE}" = "${_contentdir}" ] || /bin/sed -i 's/^contentdir.*$/'"contentdir=+A|\/${MULTIMEDIA_SHARE}"'/' ${DEFAULT_SERVER_INIFILE}
if [ ! -f ${INIFILE} ]; then
/bin/cp ${DEFAULT_INIFILE} ${INIFILE}
fi
# end
if [ `/sbin/getcfg TwonkyMedia "Web Enable" -u -d FALSE` = FALSE ]; then
$TWONKYSRV -inifile "${INIFILE}" -enableweb 1 -powersavemode 1 -logfile ${LOG_FILE} -suppressmenu mediafeeds 2>/dev/null 1>/dev/null &
else
enableweb=`/sbin/getcfg main enableweb -d 9 -f "${INIFILE}"` # 9 should not exist
if [ $enableweb = 1 ] || [ $enableweb = 0 ]; then
/sbin/setcfg main enableweb 2 -f "${INIFILE}"
fi
$TWONKYSRV -inifile "${INIFILE}" -enableweb 2 -powersavemode 1 -logfile ${LOG_FILE} -suppressmenu mediafeeds 2>/dev/null 1>/dev/null &
fi
rc_status -v
/bin/sleep 2
fi
;;
stop)
if [ ! -e $PIDFILE ]; then
echo "Shutting down UPnP MediaServer services: twonkymedia."
echo "PID file $PIDFILE not found, stopping server anyway..."
killall twonkymedia twonkymusic 2>/dev/null 1>/dev/null
rc_status -u
# exit 3
else
echo -n "Shutting down UPnP MediaServer services: twonkymedia."
PID=`cat $PIDFILE`
kill -s TERM $PID
kill -9 `pidof twonkymediaserver`
rm -f $PIDFILE
# end
rc_status -v
fi
_pid=`/bin/pidof twonkymediaserver`
[ -z "$_pid" ] || kill $_pid 2>/dev/null 1>/dev/null
_pid=`/bin/pidof twonkymedia`
[ -z "$_pid" ] || kill $_pid 2>/dev/null 1>/dev/null
if [ "x${NIC_NUM}" = "x1" ]; then
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev eth0 2> /dev/null 1>/dev/null
else
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev bond0 2> /dev/null 1>/dev/null
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev eth0 2> /dev/null 1>/dev/null
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev eth1 2> /dev/null 1>/dev/null
fi
;;
reload)
[ -f ${INIFILE} ] || /bin/cp ${DEFAULT_INIFILE} ${INIFILE}
if [ ! -e $PIDFILE ]; then
echo "PID file $PIDFILE not found, stopping server anyway..."
killall twonkymedia twonkymusic 2>/dev/null 1>/dev/null
rc_status -u
exit 3
else
echo -n "Reloading Twonky server ... "
PID=`cat $PIDFILE`
kill -s HUP $PID
rc_status -v
fi
;;
restart)
$0 stop
/bin/sleep 2
$0 start
;;
status)
if [ ! -e $PIDFILE ]; then
running="`ps ax --no-headers | grep -e twonkymedia -e twonkymusic | grep -v grep | grep -v twonkymedia.sh | cut -d ' ' -f 1`"
if [ "${running}" == "" ]; then
echo "No twonky server is running"
else
echo "A twonky server seems to be running (PID: "${running}"), but no PID file exists."
echo "Probably no write permission for ${PIDFILE}."
fi
exit 0
fi
PID=`cat $PIDFILE`
running=`ps --no-headers -o "%c" -p $PID`
if ( [ "${DAEMON}"=="${running}" ] ); then
echo "Twonky server IS running."
else
echo "Looks like the daemon crashed: the PID does not match the daemon."
fi
;;
*)
echo ""
echo "Twonky server"
echo "-------------"
echo "Syntax:"
echo " $0 {start|stop|restart|reload|status}"
echo ""
exit 3
;;
esac
rc_exit