From 0ece1359d96f0e450492d947d356dcd49171557b Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 5 Aug 2013 07:25:31 +0200 Subject: [PATCH] xbmc: add initial systemd support Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/init.d/93_xbmc | 139 ------------------ packages/mediacenter/xbmc/package.mk | 25 +++- packages/mediacenter/xbmc/scripts/xbmc-config | 34 +++++ packages/mediacenter/xbmc/scripts/xbmc-hacks | 29 ++++ .../92_setup-xbmc => scripts/xbmc-sources} | 7 +- .../xbmc/system.d/xbmc-autostart.service | 13 ++ .../xbmc/system.d/xbmc-cleanlogs.service | 13 ++ .../xbmc/system.d/xbmc-config.service | 12 ++ .../xbmc/system.d/xbmc-hacks.service | 12 ++ .../xbmc/system.d/xbmc-halt.service | 14 ++ .../xbmc/system.d/xbmc-poweroff.service | 14 ++ .../xbmc/system.d/xbmc-reboot.service | 14 ++ .../xbmc/system.d/xbmc-sources.service | 12 ++ .../mediacenter/xbmc/system.d/xbmc.service | 16 ++ .../mediacenter/xbmc/system.d/xbmc.target | 9 ++ ...xbmc_user_dirs.conf => xbmc-userdirs.conf} | 0 .../xbmc.conf} | 10 +- 17 files changed, 217 insertions(+), 156 deletions(-) delete mode 100644 packages/mediacenter/xbmc/init.d/93_xbmc create mode 100755 packages/mediacenter/xbmc/scripts/xbmc-config create mode 100755 packages/mediacenter/xbmc/scripts/xbmc-hacks rename packages/mediacenter/xbmc/{init.d/92_setup-xbmc => scripts/xbmc-sources} (98%) mode change 100644 => 100755 create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-autostart.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-cleanlogs.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-config.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-hacks.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-halt.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-poweroff.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-reboot.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc-sources.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc.service create mode 100644 packages/mediacenter/xbmc/system.d/xbmc.target rename packages/mediacenter/xbmc/tmpfiles.d/{92_xbmc_user_dirs.conf => xbmc-userdirs.conf} (100%) rename packages/mediacenter/xbmc/{init.d/91_cleanup-logfiles => tmpfiles.d/xbmc.conf} (81%) diff --git a/packages/mediacenter/xbmc/init.d/93_xbmc b/packages/mediacenter/xbmc/init.d/93_xbmc deleted file mode 100644 index 74db285901..0000000000 --- a/packages/mediacenter/xbmc/init.d/93_xbmc +++ /dev/null @@ -1,139 +0,0 @@ -################################################################################ -# 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 -################################################################################ - -# starting XBMC -# -# runlevels: openelec - -# prevent restrating XBMC at reboot or shutdown - LOCKDIR="/var/lock/" - LOCKFILE="xbmc.disabled" - [ -f "$LOCKDIR/$LOCKFILE" ] && rm -f "$LOCKDIR/$LOCKFILE" & - -# needed functions - add_omit_pids() { - omit_pids="$omit_pids -o $1" - } - - safe_shutdown () { - touch "$LOCKDIR/$LOCKFILE" - SHUTDOWN="/storage/.config/shutdown.sh" - if [ -f $SHUTDOWN ]; then - echo '!!! SHUTDOWN script detected !!!' | logger -t shutdown.sh $1 - cat "$SHUTDOWN" | logger -t shutdown.sh - echo '!!! -End of shutdown script- !!!' | logger -t shutdown.sh $1 - sh $SHUTDOWN $1 - fi - add_omit_pids $(pidof connmand) - add_omit_pids $(pidof dbus-daemon) - killall5 -15 $omit_pids - for seq in `seq 1 10` ; do - usleep 500000 - clear > /dev/tty1 - killall5 -18 $omit_pids || break - done - sync - umount -a >/dev/null 2>&1 - if [ $1 = "reboot" ]; then - reboot - elif [ $1 = "poweroff" ]; then - poweroff -f - fi - } - -LIRCDEV="/var/run/lirc/lircd" -[ -e /var/run/lirc/lircd.irtrans ] && LIRCDEV="/var/run/lirc/lircd.irtrans" -XBMC_ARGS="--standalone -fs --lircdev $LIRCDEV" - -if [ "$DEBUG" = yes ]; then - XBMC_ARGS="$XBMC_ARGS --debug" -fi - -progress "starting XBMC" - -# hack for Boxee Remote -if grep -q "Vendor=0471 Product=20d9" /proc/bus/input/devices; then - export SDL_MOUSE_RELATIVE=0 -fi - -# hack: make addon-bins executable - chmod +x /storage/.xbmc/addons/*/bin/* > /dev/null 2>&1 - -# hack: update RSSnews.xml in userdata - if [ -f /storage/.xbmc/userdata/RssFeeds.xml ]; then - sed -e "s,http://openelec.tv/news?format=feed&type=rss,http://feeds.openelec.tv/news,g" \ - -i /storage/.xbmc/userdata/RssFeeds.xml - fi - -# wait for dbus to start - wait_for_dbus - -# wait for network - wait_for_inet_addr - -# wait for udevadm settle to finish - wait_for_udevadm_settle - -# starting autostart script (will be removed later again, dont use it!!!) - AUTOSTART="/storage/.config/autostart.sh" - if [ -f $AUTOSTART ]; then - echo '!!! AUTOSTART script detected !!!' | logger -t Boot - cat "$AUTOSTART" | logger -t Boot - echo '!!! -End of autostart script- !!!' | logger -t Boot - - sh $AUTOSTART - fi - -# waiting for Xorg to start - wait_for_xorg - - -# starting XBMC - usleep $XBMC_STARTDELAY - while true; do - - while [ -f "$LOCKDIR/$LOCKFILE" ]; do - usleep 250000 - done - - DISPLAY=:0.0 /usr/lib/xbmc/xbmc.bin $XBMC_ARGS > /dev/null 2>&1 - RET=$? - - case "$RET" in - 0) - safe_shutdown poweroff - ;; - 64) - safe_shutdown poweroff - ;; - 66) - safe_shutdown reboot - ;; - 255) - echo "Abnormal Exit. Exited with code $RET" - echo "is Xorg running? check /var/log/Xorg.log" - ;; - *) - echo "Abnormal Exit. Exited with code $RET" - ;; - esac - - usleep 250000 - done diff --git a/packages/mediacenter/xbmc/package.mk b/packages/mediacenter/xbmc/package.mk index 209b8961b4..381b52c273 100644 --- a/packages/mediacenter/xbmc/package.mk +++ b/packages/mediacenter/xbmc/package.mk @@ -459,15 +459,20 @@ make_target() { } post_makeinstall_target() { + rm -rf $INSTALL/usr/bin/xbmc + rm -rf $INSTALL/usr/bin/xbmc-standalone + + mkdir -p $INSTALL/usr/lib/xbmc + cp $PKG_DIR/scripts/xbmc-config $INSTALL/usr/lib/xbmc + cp $PKG_DIR/scripts/xbmc-hacks $INSTALL/usr/lib/xbmc + cp $PKG_DIR/scripts/xbmc-sources $INSTALL/usr/lib/xbmc + mkdir -p $INSTALL/usr/bin cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin cp $PKG_DIR/scripts/gputemp $INSTALL/usr/bin cp $PKG_DIR/scripts/setwakeup.sh $INSTALL/usr/bin cp tools/EventClients/Clients/XBMC\ Send/xbmc-send.py $INSTALL/usr/bin/xbmc-send - rm -rf $INSTALL/usr/bin/xbmc - rm -rf $INSTALL/usr/bin/xbmc-standalone - if [ ! "$DISPLAYSERVER" = "xorg-server" ]; then rm -rf $INSTALL/usr/lib/xbmc/xbmc-xrandr fi @@ -535,3 +540,17 @@ post_makeinstall_target() { fi } +post_install() { +# link default.target to xbmc.target + ln -sf xbmc.target $INSTALL/lib/systemd/system/default.target + + enable_service xbmc-autostart.service + enable_service xbmc-cleanlogs.service + enable_service xbmc-config.service + enable_service xbmc-hacks.service + enable_service xbmc-sources.service + enable_service xbmc-halt.service + enable_service xbmc-poweroff.service + enable_service xbmc-reboot.service + enable_service xbmc.service +} diff --git a/packages/mediacenter/xbmc/scripts/xbmc-config b/packages/mediacenter/xbmc/scripts/xbmc-config new file mode 100755 index 0000000000..40bc985548 --- /dev/null +++ b/packages/mediacenter/xbmc/scripts/xbmc-config @@ -0,0 +1,34 @@ +#!/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 + +if [ -e /var/run/lirc/lircd.irtrans ]; then + XBMC_ARGS="--lircdev /var/run/lirc/lircd.irtrans" +else + XBMC_ARGS="--lircdev /var/run/lirc/lircd" +fi + +if [ "$DEBUG" = yes ]; then + XBMC_ARGS="$XBMC_ARGS --debug" +fi + +echo "XBMC_ARGS=\"$XBMC_ARGS\"" > /run/xbmc/xbmc.conf diff --git a/packages/mediacenter/xbmc/scripts/xbmc-hacks b/packages/mediacenter/xbmc/scripts/xbmc-hacks new file mode 100755 index 0000000000..9bcef47397 --- /dev/null +++ b/packages/mediacenter/xbmc/scripts/xbmc-hacks @@ -0,0 +1,29 @@ +#!/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 +################################################################################ + +# hack: make addon-bins executable + chmod +x /storage/.xbmc/addons/*/bin/* + +# hack: update RSSnews.xml in userdata + if [ -f /storage/.xbmc/userdata/RssFeeds.xml ]; then + sed -e "s,http://openelec.tv/news?format=feed&type=rss,http://feeds.openelec.tv/news,g" \ + -i /storage/.xbmc/userdata/RssFeeds.xml + fi diff --git a/packages/mediacenter/xbmc/init.d/92_setup-xbmc b/packages/mediacenter/xbmc/scripts/xbmc-sources old mode 100644 new mode 100755 similarity index 98% rename from packages/mediacenter/xbmc/init.d/92_setup-xbmc rename to packages/mediacenter/xbmc/scripts/xbmc-sources index 597d370dc2..513496dd25 --- a/packages/mediacenter/xbmc/init.d/92_setup-xbmc +++ b/packages/mediacenter/xbmc/scripts/xbmc-sources @@ -1,3 +1,4 @@ +#!/bin/sh ################################################################################ # This file is part of OpenELEC - http://www.openelec.tv # Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) @@ -18,11 +19,7 @@ # http://www.gnu.org/copyleft/gpl.html ################################################################################ -# setup XBMC -# -# runlevels: openelec - -progress "setup XBMC" +. /etc/profile # # setup XBMC sources diff --git a/packages/mediacenter/xbmc/system.d/xbmc-autostart.service b/packages/mediacenter/xbmc/system.d/xbmc-autostart.service new file mode 100644 index 0000000000..3869e3f90a --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-autostart.service @@ -0,0 +1,13 @@ +[Unit] +Description=XBMC user autostart script +Before=xbmc.service +After=graphical.target + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=-/bin/sh -c /storage/.config/autostart.sh +RemainAfterExit=yes + +[Install] +WantedBy=xbmc.service diff --git a/packages/mediacenter/xbmc/system.d/xbmc-cleanlogs.service b/packages/mediacenter/xbmc/system.d/xbmc-cleanlogs.service new file mode 100644 index 0000000000..4866038a9d --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-cleanlogs.service @@ -0,0 +1,13 @@ +[Unit] +Description=XBMC clean debug logs +ConditionKernelCommandLine=!debugging +Before=xbmc.service + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=-/bin/sh -c rm -rf /storage/.xbmc/userdata/addon_data/*/*.log /storage/.xbmc/userdata/addon_data/*/log/* +RemainAfterExit=yes + +[Install] +WantedBy=xbmc.service diff --git a/packages/mediacenter/xbmc/system.d/xbmc-config.service b/packages/mediacenter/xbmc/system.d/xbmc-config.service new file mode 100644 index 0000000000..cb0f33faf8 --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-config.service @@ -0,0 +1,12 @@ +[Unit] +Description=XBMC configfile writer +Before=xbmc.service + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=/usr/lib/xbmc/xbmc-config +RemainAfterExit=yes + +[Install] +WantedBy=xbmc.service diff --git a/packages/mediacenter/xbmc/system.d/xbmc-hacks.service b/packages/mediacenter/xbmc/system.d/xbmc-hacks.service new file mode 100644 index 0000000000..efb48a6ac3 --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-hacks.service @@ -0,0 +1,12 @@ +[Unit] +Description=XBMC hacks +Before=xbmc.service + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=/usr/lib/xbmc/xbmc-hacks +RemainAfterExit=yes + +[Install] +WantedBy=xbmc.service diff --git a/packages/mediacenter/xbmc/system.d/xbmc-halt.service b/packages/mediacenter/xbmc/system.d/xbmc-halt.service new file mode 100644 index 0000000000..9859bf6e7c --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-halt.service @@ -0,0 +1,14 @@ +[Unit] +Description=XBMC halt script +After=xbmc.service +Before=halt.service +DefaultDependencies=no + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=-/bin/sh /storage/.config/shutdown.sh halt +RemainAfterExit=yes + +[Install] +WantedBy=halt.target diff --git a/packages/mediacenter/xbmc/system.d/xbmc-poweroff.service b/packages/mediacenter/xbmc/system.d/xbmc-poweroff.service new file mode 100644 index 0000000000..f7cbcb0615 --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-poweroff.service @@ -0,0 +1,14 @@ +[Unit] +Description=XBMC poweroff script +After=xbmc.service +Before=poweroff.service +DefaultDependencies=no + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=-/bin/sh /storage/.config/shutdown.sh poweroff +RemainAfterExit=yes + +[Install] +WantedBy=poweroff.target diff --git a/packages/mediacenter/xbmc/system.d/xbmc-reboot.service b/packages/mediacenter/xbmc/system.d/xbmc-reboot.service new file mode 100644 index 0000000000..5561c98c1d --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-reboot.service @@ -0,0 +1,14 @@ +[Unit] +Description=XBMC reboot script +After=xbmc.service +Before=reboot.service +DefaultDependencies=no + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=-/bin/sh /storage/.config/shutdown.sh reboot +RemainAfterExit=yes + +[Install] +WantedBy=reboot.target diff --git a/packages/mediacenter/xbmc/system.d/xbmc-sources.service b/packages/mediacenter/xbmc/system.d/xbmc-sources.service new file mode 100644 index 0000000000..48e6dfb8a7 --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc-sources.service @@ -0,0 +1,12 @@ +[Unit] +Description=XBMC sources Setup +Before=xbmc.service + +[Service] +Type=oneshot +Environment=HOME=/storage +ExecStart=/usr/lib/xbmc/xbmc-sources +RemainAfterExit=yes + +[Install] +WantedBy=xbmc.service diff --git a/packages/mediacenter/xbmc/system.d/xbmc.service b/packages/mediacenter/xbmc/system.d/xbmc.service new file mode 100644 index 0000000000..d965abdfde --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc.service @@ -0,0 +1,16 @@ +[Unit] +Description=XBMC Media Center +After=graphical.target +Requires=graphical.target + +[Service] +Environment=DISPLAY=:0.0 +Environment=SDL_MOUSE_RELATIVE=0 +Environment=HOME=/storage +EnvironmentFile=-/run/xbmc/xbmc.conf +ExecStart=/usr/lib/xbmc/xbmc.bin --standalone -fs $XBMC_ARGS +KillMode=process +Restart=always + +[Install] +WantedBy=xbmc.target diff --git a/packages/mediacenter/xbmc/system.d/xbmc.target b/packages/mediacenter/xbmc/system.d/xbmc.target new file mode 100644 index 0000000000..02e0fc0c82 --- /dev/null +++ b/packages/mediacenter/xbmc/system.d/xbmc.target @@ -0,0 +1,9 @@ +[Unit] +Description=XBMC Mediacenter Interface +Requires=multi-user.target graphical.target +After=graphical.target +Conflicts=rescue.target +AllowIsolate=yes + +[Install] +Alias=default.target diff --git a/packages/mediacenter/xbmc/tmpfiles.d/92_xbmc_user_dirs.conf b/packages/mediacenter/xbmc/tmpfiles.d/xbmc-userdirs.conf similarity index 100% rename from packages/mediacenter/xbmc/tmpfiles.d/92_xbmc_user_dirs.conf rename to packages/mediacenter/xbmc/tmpfiles.d/xbmc-userdirs.conf diff --git a/packages/mediacenter/xbmc/init.d/91_cleanup-logfiles b/packages/mediacenter/xbmc/tmpfiles.d/xbmc.conf similarity index 81% rename from packages/mediacenter/xbmc/init.d/91_cleanup-logfiles rename to packages/mediacenter/xbmc/tmpfiles.d/xbmc.conf index 624e60c8a2..a1a18dd26d 100644 --- a/packages/mediacenter/xbmc/init.d/91_cleanup-logfiles +++ b/packages/mediacenter/xbmc/tmpfiles.d/xbmc.conf @@ -18,12 +18,4 @@ # http://www.gnu.org/copyleft/gpl.html ################################################################################ -# starting XBMC -# -# runlevels: openelec - -if [ ! "$DEBUG" = "yes" ]; then - progress "clean up log files" - rm -f /storage/.xbmc/userdata/addon_data/*/*.log 2>/dev/null - rm -rf /storage/.xbmc/userdata/addon_data/*/log/* 2>/dev/null -fi \ No newline at end of file +d /run/xbmc 0755 root root - -