303 lines
10 KiB
Bash
Executable File
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
|