From a2d8da617d0786badc1d698713e714613fdef613 Mon Sep 17 00:00:00 2001 From: Albert Santoni Date: Fri, 13 Feb 2015 16:06:59 -0500 Subject: [PATCH] Fixed everything about Airtime on Debian * Added sysvinit scripts back in and cleaned them up * service status now works correctly for all services * Moved logging config files into install/ folders for the python_apps * Fixed some small setup.py problems in the various python_apps * Gave each python app a better bin/ script which doesn't fork, which lets service status work automagically. --- airtime_mvc/build/airtime-setup/load.php | 6 +- .../media-monitor/bin/airtime-media-monitor | 2 +- .../media_monitor_logging.cfg} | 0 .../sysvinit/airtime-media-monitor} | 0 .../airtime-media-monitor.conf.template | 0 python_apps/media-monitor/setup.py | 4 +- python_apps/pypo/bin/airtime-liquidsoap | 6 +- python_apps/pypo/bin/airtime-playout | 6 +- .../pypo/{pypo => install}/notify_logging.cfg | 0 .../logging.cfg => install/pypo_logging.cfg} | 0 .../pypo/install/sysvinit/airtime-liquidsoap | 71 +++++++++++++++++++ .../pypo/install/sysvinit/airtime-playout | 71 +++++++++++++++++++ .../airtime-liquidsoap.conf.template | 0 .../airtime-playout.conf.template | 0 .../liquidsoap/generate_liquidsoap_cfg.py | 7 +- python_apps/pypo/setup.py | 11 +-- 16 files changed, 168 insertions(+), 16 deletions(-) rename python_apps/media-monitor/{media_monitor/logging.cfg => install/media_monitor_logging.cfg} (100%) rename python_apps/media-monitor/{media_monitor/airtime-media-monitor-init-d => install/sysvinit/airtime-media-monitor} (100%) mode change 100755 => 100644 rename python_apps/media-monitor/install/{ => upstart}/airtime-media-monitor.conf.template (100%) rename python_apps/pypo/{pypo => install}/notify_logging.cfg (100%) rename python_apps/pypo/{pypo/logging.cfg => install/pypo_logging.cfg} (100%) create mode 100644 python_apps/pypo/install/sysvinit/airtime-liquidsoap create mode 100644 python_apps/pypo/install/sysvinit/airtime-playout rename python_apps/pypo/install/{ => upstart}/airtime-liquidsoap.conf.template (100%) rename python_apps/pypo/install/{ => upstart}/airtime-playout.conf.template (100%) diff --git a/airtime_mvc/build/airtime-setup/load.php b/airtime_mvc/build/airtime-setup/load.php index 684be3b25..722d6aec8 100644 --- a/airtime_mvc/build/airtime-setup/load.php +++ b/airtime_mvc/build/airtime-setup/load.php @@ -39,7 +39,7 @@ function checkPhpDependencies() { */ function checkZendDependencies() { return file_exists('/usr/share/php/libzend-framework-php') - || file_exists('/usr/share/php/zendframework'); // Debian version + || file_exists('/usr/share/php/Zend'); // Debian version } /** @@ -124,7 +124,7 @@ function checkRMQConnection() { * @return boolean true if airtime-media-monitor is running */ function checkMediaMonitorService() { - exec("pgrep -f -u www-data media_monitor", $out, $status); + exec("pgrep -f -u www-data airtime-media-monitor", $out, $status); if (array_key_exists(0, $out) && $status == 0) { return posix_kill(rtrim($out[0]), 0); } @@ -137,7 +137,7 @@ function checkMediaMonitorService() { * @return boolean true if airtime-playout is running */ function checkPlayoutService() { - exec("pgrep -f -u www-data pypo", $out, $status); + exec("pgrep -f -u www-data airtime-playout", $out, $status); if (array_key_exists(0, $out) && $status == 0) { return posix_kill(rtrim($out[0]), 0); } diff --git a/python_apps/media-monitor/bin/airtime-media-monitor b/python_apps/media-monitor/bin/airtime-media-monitor index 329ed53fe..3b05cb304 100644 --- a/python_apps/media-monitor/bin/airtime-media-monitor +++ b/python_apps/media-monitor/bin/airtime-media-monitor @@ -10,7 +10,7 @@ locale.setlocale(locale.LC_ALL, '') def run(): global_cfg = '/etc/airtime/airtime.conf' - logging_cfg = os.path.join(os.path.dirname(__file__), 'logging.cfg') + logging_cfg = '/etc/airtime/media_monitor_logging.cfg' mm2.main( global_cfg, logging_cfg ) diff --git a/python_apps/media-monitor/media_monitor/logging.cfg b/python_apps/media-monitor/install/media_monitor_logging.cfg similarity index 100% rename from python_apps/media-monitor/media_monitor/logging.cfg rename to python_apps/media-monitor/install/media_monitor_logging.cfg diff --git a/python_apps/media-monitor/media_monitor/airtime-media-monitor-init-d b/python_apps/media-monitor/install/sysvinit/airtime-media-monitor old mode 100755 new mode 100644 similarity index 100% rename from python_apps/media-monitor/media_monitor/airtime-media-monitor-init-d rename to python_apps/media-monitor/install/sysvinit/airtime-media-monitor diff --git a/python_apps/media-monitor/install/airtime-media-monitor.conf.template b/python_apps/media-monitor/install/upstart/airtime-media-monitor.conf.template similarity index 100% rename from python_apps/media-monitor/install/airtime-media-monitor.conf.template rename to python_apps/media-monitor/install/upstart/airtime-media-monitor.conf.template diff --git a/python_apps/media-monitor/setup.py b/python_apps/media-monitor/setup.py index 58f46a022..3031b14aa 100644 --- a/python_apps/media-monitor/setup.py +++ b/python_apps/media-monitor/setup.py @@ -22,7 +22,9 @@ else: mm2_files.append(os.path.join(root, filename)) data_files = [ - ('/etc/init', ['install/airtime-media-monitor.conf.template']), + ('/etc/init', ['install/upstart/airtime-media-monitor.conf.template']), + ('/etc/init.d', ['install/sysvinit/airtime-media-monitor']), + ('/etc/airtime', ['install/media_monitor_logging.cfg']), ('/var/log/airtime/media-monitor', []), ('/var/tmp/airtime/media-monitor', []), ] diff --git a/python_apps/pypo/bin/airtime-liquidsoap b/python_apps/pypo/bin/airtime-liquidsoap index 83322775d..7863ba692 100755 --- a/python_apps/pypo/bin/airtime-liquidsoap +++ b/python_apps/pypo/bin/airtime-liquidsoap @@ -1,3 +1,5 @@ -#!/bin/bash -e +#!/usr/bin/python +import runpy -exec python -m liquidsoap 2>&1 +# Run the liquidsoap python module +runpy.run_module('liquidsoap') diff --git a/python_apps/pypo/bin/airtime-playout b/python_apps/pypo/bin/airtime-playout index 5187c0ccd..6e847a072 100755 --- a/python_apps/pypo/bin/airtime-playout +++ b/python_apps/pypo/bin/airtime-playout @@ -1,3 +1,5 @@ -#!/bin/bash +#!/usr/bin/python +import runpy + +runpy.run_module("pypo", run_name="__main__") -exec python -m pypo > /var/log/airtime/pypo/py-interpreter.log 2>&1 diff --git a/python_apps/pypo/pypo/notify_logging.cfg b/python_apps/pypo/install/notify_logging.cfg similarity index 100% rename from python_apps/pypo/pypo/notify_logging.cfg rename to python_apps/pypo/install/notify_logging.cfg diff --git a/python_apps/pypo/pypo/logging.cfg b/python_apps/pypo/install/pypo_logging.cfg similarity index 100% rename from python_apps/pypo/pypo/logging.cfg rename to python_apps/pypo/install/pypo_logging.cfg diff --git a/python_apps/pypo/install/sysvinit/airtime-liquidsoap b/python_apps/pypo/install/sysvinit/airtime-liquidsoap new file mode 100644 index 000000000..22406fa67 --- /dev/null +++ b/python_apps/pypo/install/sysvinit/airtime-liquidsoap @@ -0,0 +1,71 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: airtime-liquidsoap +# Required-Start: $local_fs $remote_fs $network $syslog $all +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage airtime-liquidsoap daemon +### END INIT INFO + +USERID=www-data +GROUPID=www-data +NAME=airtime-liquidsoap + +DAEMON=/usr/bin/$NAME +PIDFILE=/var/run/$NAME.pid + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +start () { + start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ + --make-pidfile --pidfile $PIDFILE --startas $DAEMON +} + +stop () { + # Send TERM after 5 seconds, wait at most 30 seconds. + start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE + rm -f $PIDFILE +} + +case "${1:-''}" in + 'start') + # start commands here + echo -n "Starting $NAME: " + start + echo "Done." + ;; + 'stop') + # stop commands here + echo -n "Stopping $NAME: " + stop + echo "Done." + ;; + 'restart') + # restart commands here + echo -n "Restarting $NAME: " + stop + start + echo "Done." + ;; + 'status') + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + *) # no parameter specified + echo "Usage: $SELF start|stop|restart|status" + exit 1 + ;; +esac diff --git a/python_apps/pypo/install/sysvinit/airtime-playout b/python_apps/pypo/install/sysvinit/airtime-playout new file mode 100644 index 000000000..411e9c102 --- /dev/null +++ b/python_apps/pypo/install/sysvinit/airtime-playout @@ -0,0 +1,71 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: airtime-playout +# Required-Start: $local_fs $remote_fs $network $syslog $all +# Required-Stop: $local_fs $remote_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Manage airtime-playout daemon +### END INIT INFO + +USERID=www-data +GROUPID=www-data +NAME=airtime-playout + +DAEMON=/usr/bin/$NAME +PIDFILE=/var/run/$NAME.pid + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +start () { + start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ + --make-pidfile --pidfile $PIDFILE --startas $DAEMON +} + +stop () { + # Send TERM after 5 seconds, wait at most 30 seconds. + start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE + rm -f $PIDFILE +} + +case "${1:-''}" in + 'start') + # start commands here + echo -n "Starting $NAME: " + start + echo "Done." + ;; + 'stop') + # stop commands here + echo -n "Stopping $NAME: " + stop + echo "Done." + ;; + 'restart') + # restart commands here + echo -n "Restarting $NAME: " + stop + start + echo "Done." + ;; + 'status') + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + *) # no parameter specified + echo "Usage: $SELF start|stop|restart|status" + exit 1 + ;; +esac diff --git a/python_apps/pypo/install/airtime-liquidsoap.conf.template b/python_apps/pypo/install/upstart/airtime-liquidsoap.conf.template similarity index 100% rename from python_apps/pypo/install/airtime-liquidsoap.conf.template rename to python_apps/pypo/install/upstart/airtime-liquidsoap.conf.template diff --git a/python_apps/pypo/install/airtime-playout.conf.template b/python_apps/pypo/install/upstart/airtime-playout.conf.template similarity index 100% rename from python_apps/pypo/install/airtime-playout.conf.template rename to python_apps/pypo/install/upstart/airtime-playout.conf.template diff --git a/python_apps/pypo/liquidsoap/generate_liquidsoap_cfg.py b/python_apps/pypo/liquidsoap/generate_liquidsoap_cfg.py index 57e4342cf..1b409b3c5 100644 --- a/python_apps/pypo/liquidsoap/generate_liquidsoap_cfg.py +++ b/python_apps/pypo/liquidsoap/generate_liquidsoap_cfg.py @@ -39,10 +39,11 @@ def run(): generate_liquidsoap_config(ss) successful = True except Exception, e: + print "Unable to connect to the Airtime server." + logging.error(str(e)) + logging.error("traceback: %s", traceback.format_exc()) if attempts == max_attempts: - print "Unable to connect to the Airtime server." - logging.error(str(e)) - logging.error("traceback: %s", traceback.format_exc()) + logging.error("giving up and exiting...") sys.exit(1) else: time.sleep(3) diff --git a/python_apps/pypo/setup.py b/python_apps/pypo/setup.py index 1be996827..215cc8a0e 100644 --- a/python_apps/pypo/setup.py +++ b/python_apps/pypo/setup.py @@ -18,9 +18,12 @@ else: pypo_files.append(os.path.join(root, filename)) data_files = [ - ('/etc/init', ['install/airtime-playout.conf.template']), - ('/etc/init', ['install/airtime-liquidsoap.conf.template']), - ('/etc/airtime', ['pypo/notify_logging.cfg']), + ('/etc/init', ['install/upstart/airtime-playout.conf.template']), + ('/etc/init', ['install/upstart/airtime-liquidsoap.conf.template']), + ('/etc/init.d', ['install/sysvinit/airtime-playout']), + ('/etc/init.d', ['install/sysvinit/airtime-liquidsoap']), + ('/etc/airtime', ['install/notify_logging.cfg']), + ('/etc/airtime', ['install/pypo_logging.cfg']), ('/var/log/airtime/pypo', []), ('/var/log/airtime/pypo-liquidsoap', []), ('/var/tmp/airtime/pypo', []), @@ -36,7 +39,7 @@ setup(name='airtime-playout', url='http://github.com/sourcefabric/Airtime', author='sourcefabric', license='AGPLv3', - packages=['pypo', 'pypo.media.update', + packages=['pypo', 'pypo.media', 'pypo.media.update', 'liquidsoap', 'liquidsoap.library'], package_data={'': ['*.liq', '*.cfg']}, scripts=[