mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 21:56:42 +00:00
tvheadend: convert to systemd service
This commit is contained in:
parent
0569c02188
commit
9ba1e2efd0
@ -22,14 +22,8 @@
|
|||||||
|
|
||||||
. /etc/profile
|
. /etc/profile
|
||||||
|
|
||||||
LOCKDIR="/var/lock/"
|
|
||||||
LOCKFILE="tvheadend.disabled"
|
|
||||||
LOCKFILE_SLEEP="tvheadend.sleep"
|
|
||||||
|
|
||||||
ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend"
|
ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend"
|
||||||
ADDON_SYS_DIR="/usr/lib/xbmc/addons/service.multimedia.tvheadend"
|
|
||||||
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend"
|
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend"
|
||||||
ADDON_BIN="tvheadend"
|
|
||||||
LOG_FILE="$ADDON_HOME/service.log"
|
LOG_FILE="$ADDON_HOME/service.log"
|
||||||
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
|
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
|
||||||
XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file"
|
XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file"
|
||||||
@ -42,29 +36,13 @@ TIMESHIFT_SETTINGS_DIR="$ADDON_HOME/timeshift"
|
|||||||
TIMESHIFT_SETTINGS_FILE="$TIMESHIFT_SETTINGS_DIR/config"
|
TIMESHIFT_SETTINGS_FILE="$TIMESHIFT_SETTINGS_DIR/config"
|
||||||
TIMESHIFT_DIR="$ADDON_HOME/cache/timeshift"
|
TIMESHIFT_DIR="$ADDON_HOME/cache/timeshift"
|
||||||
|
|
||||||
## handle upgrade. this should be removed later
|
|
||||||
|
|
||||||
# remove any old hts-tvheadend dir
|
|
||||||
if [ -d $HOME/.xbmc/addons/service.multimedia.hts-tvheadend ] ; then
|
|
||||||
# stop old service if runing
|
|
||||||
$HOME/.xbmc/addons/service.multimedia.hts-tvheadend/bin/tvheadend.stop
|
|
||||||
rm -rf $HOME/.xbmc/addons/service.multimedia.hts-tvheadend
|
|
||||||
fi
|
|
||||||
|
|
||||||
# reuse old config files
|
|
||||||
if [ -d $HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend ] ; then
|
|
||||||
mv $HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend $ADDON_HOME
|
|
||||||
sed -i 's/service.multimedia.hts-tvheadend/service.multimedia.tvheadend/g' $ADDON_HOME/xmltv/config
|
|
||||||
fi
|
|
||||||
##
|
|
||||||
|
|
||||||
mkdir -p $ADDON_HOME
|
mkdir -p $ADDON_HOME
|
||||||
|
|
||||||
|
chmod a+x $ADDON_DIR/bin/*
|
||||||
|
|
||||||
if [ ! -f "$ADDON_SETTINGS" ]; then
|
if [ ! -f "$ADDON_SETTINGS" ]; then
|
||||||
if [ -f $ADDON_DIR/settings-default.xml ]; then
|
if [ -f $ADDON_DIR/settings-default.xml ]; then
|
||||||
cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS
|
cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS
|
||||||
elif [ -f $ADDON_SYS_DIR/settings-default.xml ]; then
|
|
||||||
cp $ADDON_SYS_DIR/settings-default.xml $ADDON_SETTINGS
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -72,8 +50,6 @@ if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then
|
|||||||
mkdir -p $XMLTV_SETTINGS_DIR
|
mkdir -p $XMLTV_SETTINGS_DIR
|
||||||
if [ -f $ADDON_DIR/xmltv-config ]; then
|
if [ -f $ADDON_DIR/xmltv-config ]; then
|
||||||
cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE
|
cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE
|
||||||
elif [ -f $ADDON_SYS_DIR/xmltv-config ]; then
|
|
||||||
cp $ADDON_SYS_DIR/xmltv-config $XMLTV_SETTINGS_FILE
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -82,8 +58,6 @@ if [ ! -f "$DVR_SETTINGS_FILE" ]; then
|
|||||||
mkdir -p $DVR_SETTINGS_DIR
|
mkdir -p $DVR_SETTINGS_DIR
|
||||||
if [ -f $ADDON_DIR/dvr-config ]; then
|
if [ -f $ADDON_DIR/dvr-config ]; then
|
||||||
cp $ADDON_DIR/dvr-config $DVR_SETTINGS_FILE
|
cp $ADDON_DIR/dvr-config $DVR_SETTINGS_FILE
|
||||||
elif [ -f $ADDON_SYS_DIR/dvr-config ]; then
|
|
||||||
cp $ADDON_SYS_DIR/dvr-config $DVR_SETTINGS_FILE
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -92,8 +66,6 @@ if [ ! -f "$TIMESHIFT_SETTINGS_FILE" ]; then
|
|||||||
mkdir -p $TIMESHIFT_SETTINGS_DIR
|
mkdir -p $TIMESHIFT_SETTINGS_DIR
|
||||||
if [ -f $ADDON_DIR/timeshift-config ]; then
|
if [ -f $ADDON_DIR/timeshift-config ]; then
|
||||||
cp $ADDON_DIR/timeshift-config $TIMESHIFT_SETTINGS_FILE
|
cp $ADDON_DIR/timeshift-config $TIMESHIFT_SETTINGS_FILE
|
||||||
elif [ -f $ADDON_SYS_DIR/timeshift-config ]; then
|
|
||||||
cp $ADDON_SYS_DIR/timeshift-config $TIMESHIFT_SETTINGS_FILE
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -104,45 +76,32 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /var/config
|
mkdir -p /var/config
|
||||||
if [ -f $ADDON_DIR/settings-default.xml ]; then
|
if [ -f $ADDON_DIR/settings-default.xml ]; then
|
||||||
cat "$ADDON_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default
|
cat "$ADDON_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default
|
||||||
elif [ -f $ADDON_SYS_DIR/settings-default.xml ]; then
|
fi
|
||||||
cat "$ADDON_SYS_DIR/settings-default.xml" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf.default
|
cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf
|
||||||
fi
|
|
||||||
cat "$ADDON_SETTINGS" | awk -F\" '{print $2"=\""$4"\""}' | sed '/^=/d' > /var/config/tvheadend.conf
|
|
||||||
|
|
||||||
. /var/config/tvheadend.conf.default
|
. /var/config/tvheadend.conf.default
|
||||||
. /var/config/tvheadend.conf
|
. /var/config/tvheadend.conf
|
||||||
|
|
||||||
rm -rf "$LOCKDIR/$LOCKFILE_SLEEP" &>/dev/null
|
# start userspace DVB driver/addon
|
||||||
tvheadend.stop
|
for driver_dvb in $(find /storage/.xbmc/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do
|
||||||
rm -rf "$LOCKDIR/$LOCKFILE" &>/dev/null
|
driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}')
|
||||||
if [ ! "$(pidof $ADDON_BIN)" ]; then
|
logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###"
|
||||||
while [ true ] ; do
|
# use ". " because of variable export
|
||||||
while [ -f "$LOCKDIR/$LOCKFILE_SLEEP" ] ; do
|
. $driver_dvb
|
||||||
usleep 100000
|
done
|
||||||
done
|
|
||||||
if [ -f "$LOCKDIR/$LOCKFILE" ] ; then
|
# (wait for) at least 1 adapter (xbmc allows to set 0)
|
||||||
break
|
[ $NUM_ADAPTERS -lt 1 ] && NUM_ADAPTERS=1
|
||||||
fi
|
if [ "$WAIT_FOR_FEINIT" == "true" ] && [ ! -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend* ] ; then
|
||||||
# start userspace DVB driver/addon
|
sleep 1
|
||||||
for driver_dvb in $(find /storage/.xbmc/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do
|
continue
|
||||||
driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}')
|
fi
|
||||||
logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###"
|
|
||||||
# use ". " because of variable export
|
if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then
|
||||||
. $driver_dvb
|
logger -t Tvheadend "### Preloading capmt_ca.so library ###"
|
||||||
done
|
LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" exec tvheadend $TVHEADEND_ARG &>$LOG_FILE
|
||||||
# (wait for) at least 1 adapter (xbmc allows to set 0)
|
else
|
||||||
[ $NUM_ADAPTERS -lt 1 ] && NUM_ADAPTERS=1
|
exec tvheadend $TVHEADEND_ARG &>$LOG_FILE
|
||||||
if [ "$WAIT_FOR_FEINIT" == "true" ] && [ ! -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend* ] ; then
|
fi
|
||||||
sleep 1
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then
|
|
||||||
logger -t Tvheadend "### Preloading capmt_ca.so library ###"
|
|
||||||
LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" $ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE
|
|
||||||
else
|
|
||||||
$ADDON_BIN $TVHEADEND_ARG &>$LOG_FILE
|
|
||||||
fi
|
|
||||||
done &
|
|
||||||
fi
|
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# This file is part of OpenELEC - http://www.openelec.tv
|
|
||||||
# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
|
|
||||||
#
|
|
||||||
# This Program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This Program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with OpenELEC.tv; see the file COPYING. If not, write to
|
|
||||||
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
|
||||||
# http://www.gnu.org/copyleft/gpl.html
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
. /etc/profile
|
|
||||||
|
|
||||||
LOCKDIR="/var/lock/"
|
|
||||||
LOCKFILE="tvheadend.disabled"
|
|
||||||
LOCKFILE_SLEEP="tvheadend.sleep"
|
|
||||||
|
|
||||||
ADDON_BIN="tvheadend"
|
|
||||||
|
|
||||||
mkdir -p "$LOCKDIR"
|
|
||||||
if [ ! -e "$LOCKDIR/$LOCKFILE_SLEEP" ] ; then
|
|
||||||
touch "$LOCKDIR/$LOCKFILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(pidof $ADDON_BIN)" ] ; then
|
|
||||||
killall -q $ADDON_BIN
|
|
||||||
for seq in `seq 1 10` ; do
|
|
||||||
if [ ! "$(pidof $ADDON_BIN)" ] ; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
usleep 200000
|
|
||||||
done
|
|
||||||
killall -q -9 $ADDON_BIN
|
|
||||||
fi
|
|
@ -17,23 +17,3 @@
|
|||||||
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA.
|
||||||
# http://www.gnu.org/copyleft/gpl.html
|
# http://www.gnu.org/copyleft/gpl.html
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
import xbmc, xbmcaddon, time, os, subprocess
|
|
||||||
|
|
||||||
__scriptname__ = "TVHeadend Service"
|
|
||||||
__author__ = "OpenELEC"
|
|
||||||
__url__ = "http://www.openelec.tv"
|
|
||||||
__settings__ = xbmcaddon.Addon(id='service.multimedia.tvheadend')
|
|
||||||
__cwd__ = __settings__.getAddonInfo('path')
|
|
||||||
__start__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "tvheadend.start") )
|
|
||||||
__stop__ = xbmc.translatePath( os.path.join( __cwd__, 'bin', "tvheadend.stop") )
|
|
||||||
|
|
||||||
#make binary files executable in adson bin folder
|
|
||||||
subprocess.Popen("chmod -R +x " + __cwd__ + "/bin/*" , shell=True, close_fds=True)
|
|
||||||
|
|
||||||
subprocess.Popen(__start__, shell=True, close_fds=True)
|
|
||||||
|
|
||||||
while (not xbmc.abortRequested):
|
|
||||||
time.sleep(0.250)
|
|
||||||
|
|
||||||
subprocess.Popen(__stop__, shell=True, close_fds=True)
|
|
||||||
|
@ -22,35 +22,28 @@
|
|||||||
|
|
||||||
. /etc/profile
|
. /etc/profile
|
||||||
|
|
||||||
|
SERVICE="service.multimedia.tvheadend"
|
||||||
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend"
|
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.tvheadend"
|
||||||
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
|
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
|
||||||
REMOVE_MODULES=`grep REMOVE_MODULES $ADDON_SETTINGS | sed 's|.*value="\([^"]*\)".*|\1|g'`
|
REMOVE_MODULES=`grep REMOVE_MODULES $ADDON_SETTINGS | sed 's|.*value="\([^"]*\)".*|\1|g'`
|
||||||
|
|
||||||
LOCKFILE_SLEEP="/var/lock/tvheadend.sleep"
|
|
||||||
|
|
||||||
ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend"
|
ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.tvheadend"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
hibernate|suspend|pre)
|
pre)
|
||||||
if [ "$(pidof tvheadend)" ];then
|
if systemctl is-active "$SERVICE" &>/dev/null ; then
|
||||||
progress "Shutting down HTS TVHeadend for suspending..."
|
systemctl stop "$SERVICE"
|
||||||
touch $LOCKFILE_SLEEP
|
|
||||||
tvheadend.stop
|
|
||||||
for module in $REMOVE_MODULES ; do
|
for module in $REMOVE_MODULES ; do
|
||||||
rmmod -w $module
|
rmmod -w $module
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
post)
|
||||||
thaw|resume|post)
|
if systemctl is-enabled "$SERVICE" &>/dev/null ; then
|
||||||
if [ -f "$LOCKFILE_SLEEP" ] ; then
|
|
||||||
progress "Restarting HTS TVHeadend for wakeup..."
|
|
||||||
for module in $REMOVE_MODULES ; do
|
for module in $REMOVE_MODULES ; do
|
||||||
modprobe $module
|
modprobe $module
|
||||||
done
|
done
|
||||||
rm -rf "$LOCKFILE_SLEEP"
|
systemctl start "$SERVICE"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*) exit $NA
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=TVHeadend Service
|
||||||
|
After=graphical.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/sh -c "exec sh /storage/.xbmc/addons/service.multimedia.tvheadend/bin/tvheadend.start"
|
||||||
|
TimeoutStopSec=2
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2
|
||||||
|
StartLimitInterval=0
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=xbmc.target
|
Loading…
x
Reference in New Issue
Block a user