import platform import shutil from subprocess import Popen, PIPE import subprocess import sys import os sys.path.append('/usr/lib/airtime/') from api_clients import api_client from configobj import ConfigObj import logging if os.geteuid() != 0: print "Please run this as root." sys.exit(1) """ This function returns the codename of the host OS by querying lsb_release. If lsb_release does not exist, or an exception occurs the codename returned is 'unknown' """ def get_os_codename(): try: p = Popen("which lsb_release > /dev/null", shell=True) sts = os.waitpid(p.pid, 0)[1] if (sts == 0): #lsb_release is available on this system. Let's get the os codename p = Popen("lsb_release -sc", shell=True, stdout=PIPE) codename = p.communicate()[0].strip('\r\n') p = Popen("lsb_release -sd", shell=True, stdout=PIPE) fullname = p.communicate()[0].strip('\r\n') return (codename, fullname) except Exception, e: pass return ("unknown", "unknown") def generate_liquidsoap_config(ss): data = ss['msg'] fh = open('/etc/airtime/liquidsoap.cfg', 'w') fh.write("################################################\n") fh.write("# THIS FILE IS AUTO GENERATED. DO NOT CHANGE!! #\n") fh.write("################################################\n") for d in data: buffer = d[u'keyname'] + " = " if(d[u'type'] == 'string'): temp = d[u'value'] buffer += '"%s"' % temp else: temp = d[u'value'] if(temp == ""): temp = "0" buffer += temp buffer += "\n" fh.write(api_client.encode_to(buffer)) fh.write('log_file = "/var/log/airtime/pypo-liquidsoap/<script>.log"\n') fh.close() PATH_INI_FILE = '/etc/airtime/pypo.cfg' PATH_LIQUIDSOAP_BIN = '/usr/lib/airtime/pypo/bin/liquidsoap_bin' #any debian/ubuntu codename in this et will automatically use the natty liquidsoap binary arch_map = dict({"32bit":"i386", "64bit":"amd64"}) # load config file try: config = ConfigObj(PATH_INI_FILE) except Exception, e: print 'Error loading config file: ', e sys.exit(1) try: #select appropriate liquidsoap file for given system os/architecture architecture = platform.architecture()[0] arch = arch_map[architecture] print "* Detecting OS: ...", (codename, fullname) = get_os_codename() print " Found %s (%s) on %s architecture" % (fullname, codename, arch) print " * Creating symlink to Liquidsoap binary" p = Popen("which liquidsoap", shell=True, stdout=PIPE) liq_path = p.communicate()[0].strip() symlink_path = "/usr/bin/airtime-liquidsoap" if p.returncode == 0: try: os.unlink(symlink_path) except Exception: #liq_path DNE, which is OK. pass os.symlink(liq_path, symlink_path) else: print " * Liquidsoap binary not found!" sys.exit(1) #initialize init.d scripts subprocess.call("update-rc.d airtime-playout defaults >/dev/null 2>&1", shell=True) subprocess.call("update-rc.d airtime-liquidsoap defaults >/dev/null 2>&1", shell=True) #clear out an previous pypo cache print "* Clearing previous pypo cache" subprocess.call("rm -rf /var/tmp/airtime/pypo/cache/scheduler/* >/dev/null 2>&1", shell=True) if "airtime_service_start" in os.environ and os.environ["airtime_service_start"] == "t": print "* Waiting for pypo processes to start..." subprocess.call("invoke-rc.d airtime-playout start-no-monit > /dev/null 2>&1", shell=True) subprocess.call("invoke-rc.d airtime-liquidsoap start-no-monit > /dev/null 2>&1", shell=True) except Exception, e: print e