diff --git a/CREDITS b/CREDITS index 644b4ab59..a9053b04c 100644 --- a/CREDITS +++ b/CREDITS @@ -2,7 +2,7 @@ CREDITS ======= -Version 2.3.0 +Version 2.3.0/2.3.1 ------------- Martin Konecny (martin.konecny@sourcefabric.org) Role: Developer Team Lead diff --git a/changelog b/changelog index aff42ec52..eb92ef188 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,16 @@ +2.3.1 - March 19th, 2013 + * Bug fixes + * Security fixes with running unescaped shell commands + * Fix backend services not coming back online if RabbitMQ crashed and + then restarted + * Fix uninstall not properly cleaning system + * Improved Services watchdog (test whether Services are running and + responding, not just running) + * Much faster library import (Silan analyzer runs in background) + * Fixed zombie process sometimes being created + * Other + * Upgrade to Mutagen (tag reader) 1.21 + 2.3.0 - Jan 21st, 2013 * New features * Localization (Chinese, Czech, English, French, German, Italian, Korean, diff --git a/debian/changelog b/debian/changelog index 137c4a1b0..3f9fcb53b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,15 @@ +airtime (2.3.0-2) unstable; urgency=low + + * Don't run the airtime-install script if the user has chosen not to + set up Apache + + -- Daniel James Tue, 19 Mar 2013 16:39:23 +0000 + airtime (2.3.0-1) unstable; urgency=low - * Nightly development snapshot of Airtime 2.3.x + * Upstream 2.3.0 release - -- Daniel James Tue, 22 Jan 2013 11:44:57 +0000 + -- Daniel James Tue, 12 Feb 2013 11:44:57 +0000 airtime (2.2.1-1) unstable; urgency=low diff --git a/debian/postinst b/debian/postinst index e6d5169f1..d3c7ca5c9 100755 --- a/debian/postinst +++ b/debian/postinst @@ -1,10 +1,14 @@ #!/bin/bash #postinst script for airtime -set -x +set -e . /usr/share/debconf/confmodule +if [ "$DPKG_DEBUG" = "developer" ]; then + set -x +fi + wwwdir="/usr/share/airtime" tmpdir="/var/lib/airtime/tmp" configdir="/etc/airtime" @@ -20,39 +24,30 @@ case "$1" in webserver="apache2" php="php5" - # clean up previous configurations - if [ -L /etc/$webserver/conf.d/airtime.conf ]; then - rm -f /etc/$webserver/conf.d/airtime.conf - fi - - if [ -f /etc/$webserver/sites-available/airtime-vhost ]; then - a2dissite airtime-vhost - fi - # this file in 1.8.2 is a directory path in 1.9.3 if [ -f /var/www/airtime/utils/airtime-import ]; then rm -f /var/www/airtime/utils/airtime-import fi - # APACHE config - echo "Setting up apache2..." - - # create the document root if it doesn't exist - if [ ! -d $wwwdir/public/ ]; then - install -d -m755 $wwwdir/public/ - fi - - # set up the virtual host + # do we set up a virtual host? db_get airtime/apache-setup - if [ "$RET" == "system-wide (all vhosts)" ]; then - if [ ! -d /etc/$webserver/conf.d/ ]; then - install -d -m755 /etc/$webserver/conf.d/ - fi - if [ ! -e /etc/$webserver/conf.d/airtime.conf ]; then - ln -s ${includefile} /etc/$webserver/conf.d/airtime.conf + APACHESETUP=$RET + if [ "${APACHESETUP}" == "no thanks" ]; then + echo "Not setting up ${webserver} and ${php}..." + + elif [ "${APACHESETUP}" == "dedicated v-host" ]; then + echo "Setting up ${webserver}..." + + # create the document root if it doesn't exist + if [ ! -d $wwwdir/public/ ]; then + install -d -m755 $wwwdir/public/ + fi + + # temporarily disable an existing virtual host + if [ -f /etc/$webserver/sites-available/airtime-vhost ]; then + a2dissite airtime-vhost fi - elif [ "$RET" == "dedicated v-host" ]; then db_get airtime/apache-servername SN=$RET db_get airtime/apache-serveradmin @@ -69,30 +64,49 @@ case "$1" in if [ $RETVAL -eq 0 ]; then a2ensite airtime-vhost fi - fi - # enable the rewrite module - command -v a2enmod > /dev/null - RETVAL=$? - if [ $RETVAL -eq 0 ]; then - a2enmod rewrite - fi + # insert a specific hostname, if provided, into API configuration + if [ "${SN}" != "localhost" ]; then - # remove the default site, if requested to - db_get airtime/apache-deldefault - if [ "$RET" == "remove default" ]; then - if [ -f /etc/apache2/sites-available/default ]; then - a2dissite default + # new installs + if [ -f /var/lib/airtime/tmp/airtime_mvc/build/airtime.conf -a -f /var/lib/airtime/tmp/python_apps/api_clients/api_client.cfg ]; then + sed -i "s/base_url = localhost/base_url = ${SN}/" /var/lib/airtime/tmp/airtime_mvc/build/airtime.conf + sed -i "s/host = 'localhost'/host = '${SN}'/" /var/lib/airtime/tmp/python_apps/api_clients/api_client.cfg + fi + + # upgrades + if [ -f /etc/airtime/airtime.conf -a -f /etc/airtime/api_client.cfg ]; then + sed -i "s/base_url = localhost/base_url = ${SN}/" /etc/airtime/airtime.conf + sed -i "s/host = 'localhost'/host = '${SN}'/" /etc/airtime/api_client.cfg + fi fi - fi - # PHP config - echo "Configuring php5..." - if [ ! -d /etc/$php/conf.d/ ]; then - install -d -m755 /etc/$php/conf.d/ - fi - if [ ! -e /etc/$php/conf.d/airtime.ini ]; then - ln -s ${phpinifile} /etc/$php/conf.d/airtime.ini + # enable the rewrite module + command -v a2enmod > /dev/null + RETVAL=$? + if [ $RETVAL -eq 0 ]; then + a2enmod rewrite + fi + + # remove the default site, if requested to + db_get airtime/apache-deldefault + if [ "$RET" == "remove default" ]; then + if [ -f /etc/apache2/sites-available/default ]; then + a2dissite default + fi + fi + + # PHP config + echo "Configuring php5..." + if [ ! -d /etc/$php/conf.d/ ]; then + install -d -m755 /etc/$php/conf.d/ + fi + if [ ! -e /etc/$php/conf.d/airtime.ini ]; then + ln -s ${phpinifile} /etc/$php/conf.d/airtime.ini + fi + + # restart apache + invoke-rc.d apache2 restart fi # XXX ICECAST XXX @@ -186,9 +200,6 @@ case "$1" in echo "The rabbitmq-server package does not appear to be installed on this server." fi - # restart apache - invoke-rc.d apache2 restart - # fix the Liquidsoap symlink if it doesn't point to standard location if [ -h /usr/bin/airtime-liquidsoap ]; then SYMLINK_TARGET=`readlink /usr/bin/airtime-liquidsoap` @@ -214,8 +225,12 @@ case "$1" in echo "Reconfiguration complete." else - if [ -n "$OLDVERSION" ] && [[ "${OLDVERSION:0:3}" < "1.9" ]]; then - echo "Upgrades from Airtime versions before 1.9.0 are not supported. Please back up your files and perform a clean install." + if [ -n "$OLDVERSION" ] && [[ "${OLDVERSION:0:3}" < "2.1" ]]; then + echo "Upgrades from Airtime versions before 2.1.0 are not supported. Please back up your files and perform a clean install." + + elif [ "${APACHESETUP}" == "no thanks" ]; then + echo "Please run the ${tmpdir}/install_minimal/airtime-install script after you have set up the web server." + else mkdir -p /var/log/airtime diff --git a/python_apps/pypo/airtime-liquidsoap-init-d b/python_apps/pypo/airtime-liquidsoap-init-d index 21323e850..d0e9751d7 100755 --- a/python_apps/pypo/airtime-liquidsoap-init-d +++ b/python_apps/pypo/airtime-liquidsoap-init-d @@ -28,6 +28,7 @@ stop () { # Send TERM after 5 seconds, wait at most 30 seconds. start-stop-daemon --stop --oknodo --retry=TERM/10/KILL/5 --quiet --pidfile $PIDFILE rm -f $PIDFILE + sleep 4 } start_no_monit() { diff --git a/python_apps/pypo/liquidsoap_scripts/ls_script.liq b/python_apps/pypo/liquidsoap_scripts/ls_script.liq index 566df0d9e..4a8a0b0e0 100644 --- a/python_apps/pypo/liquidsoap_scripts/ls_script.liq +++ b/python_apps/pypo/liquidsoap_scripts/ls_script.liq @@ -42,13 +42,13 @@ queue = amplify(1., override="replay_gain", queue) # the crossfade function controls fade in/out queue = crossfade_airtime(queue) queue = on_metadata(notify, queue) -queue = map_metadata(update=false, append_title, queue) output.dummy(fallible=true, queue) http = input.http_restart(id="http") http = cross_http(http_input_id="http",http) output.dummy(fallible=true, http) stream_queue = http_fallback(http_input_id="http", http=http, default=queue) +stream_queue = map_metadata(update=false, append_title, stream_queue) ignore(output.dummy(stream_queue, fallible=true)) diff --git a/python_apps/pypo/pypofetch.py b/python_apps/pypo/pypofetch.py index f10c8c958..535d0fa99 100644 --- a/python_apps/pypo/pypofetch.py +++ b/python_apps/pypo/pypofetch.py @@ -534,7 +534,7 @@ class PypoFetch(Thread): #check if this file is opened (sometimes Liquidsoap is still #playing the file due to our knowledge of the track length #being incorrect!) - if not self.is_file_opened(): + if not self.is_file_opened(path): os.remove(path) except Exception, e: self.logger.error(e) diff --git a/python_apps/pypo/pypopush.py b/python_apps/pypo/pypopush.py index f438b3bb1..cd552cf52 100644 --- a/python_apps/pypo/pypopush.py +++ b/python_apps/pypo/pypopush.py @@ -372,7 +372,17 @@ class PypoPush(Thread): first_link = chain[0] self.modify_cue_point(first_link) - if float(first_link['cue_in']) >= float(first_link['cue_out']): + + #ATM, we should never have an exception here. However in the future, it + #would be nice to allow cue_out to be None which would then allow us to + #fallback to the length of the track as the end point. + try: + end = first_link['cue_out'] + except TypeError: + #cue_out is type None + end = first_link['length'] + + if float(first_link['cue_in']) >= float(end): chain = chain [1:] return chain @@ -498,6 +508,11 @@ class PypoPush(Thread): self.logger.debug(msg) tn.write(msg) + show_name = media_item['show_name'] + msg = 'vars.show_name %s\n' % show_name.encode('utf-8') + tn.write(msg) + self.logger.debug(msg) + tn.write("exit\n") self.logger.debug(tn.read_all()) diff --git a/utils/airtime-check-system.php b/utils/airtime-check-system.php index 86f13b5b7..1ce017c35 100644 --- a/utils/airtime-check-system.php +++ b/utils/airtime-check-system.php @@ -99,10 +99,13 @@ class AirtimeCheck { { $headerInfo = get_headers("http://$p_baseUrl:$p_basePort",1); - if (!isset($headerInfo['Server'][0])) + if (!isset($headerInfo['Server'][0])) { return self::UNKNOWN; - else + } else if (is_array($headerInfo['Server'])) { return $headerInfo['Server'][0]; + } else { + return $headerInfo['Server']; + } } public static function GetStatus($p_baseUrl, $p_basePort, $p_baseDir, $p_apiKey){