#!/usr/bin/python2
# -*- coding: utf-8 -*-
import sys, os, commands, glob, time
import getopt, re, MySQLdb
import logging
import mv_common , mv_network
import inspect
#____________________________________________setup the logging______________________________________________________
LOG_FILENAME = '/tmp/systemconfig.log'
DEBUGLOG = '/tmp/systemconfig_debug.log'
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%m-%d %H:%M',
filename=DEBUGLOG,
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
#formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
formatter = logging.Formatter("%(message)s")
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
#infoformatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
infoformatter = logging.Formatter("%(message)s")
infofile = logging.FileHandler(LOG_FILENAME, 'w')
infofile.setFormatter(infoformatter)
infofile.setLevel(logging.INFO)
logging.getLogger('').addHandler(infofile)
def usage():
logging.info("tell people how to use this")
def setup_x(systemconfig):
if mv_common.read_config(mv_common.module_config,"xorg") == False :
logging.info("____Skipping of Xorg, config disabled____")
else:
if not os.path.exists('/usr/share/icons/default'):
if os.path.exists('/usr/share/icons/Vanilla-DMZ-AA'):
os.symlink('/usr/share/icons/Vanilla-DMZ-AA','/usr/share/icons/default');
if systemconfig.get("UseXLargeMouse") == "1" :
cmd = "echo Xcursor.size: 48 > %s/.Xdefaults" %data_config.MYTHHOME
else:
cmd = "echo Xcursor.size: 16 > %s/.Xdefaults" %data_config.MYTHHOME
mv_common.runcmd(cmd)
cmd = "%s/bin/xconfig.sh" %systemconfig.get("MVROOT")
mv_common.runcmd(cmd)
def generate_config_xml(uuid,dbhost):
#configxml_t ='''
#
#
#
#%s
#
#
#
#%s
#mythtv
#mythtv
#mythconverg
#0
#
#
#
#
#'''
configxml_t='''
my-unique-identifier-goes-here
1
%s
mythtv
mythtv
mythconverg
3306
0
0
5
echo 'WOLsqlServerCommand not set'
%s
'''
configxml= configxml_t %(dbhost,uuid)
return configxml
def gen_uuid():
cmd = "/usr/bin/uuidgen"
uuid = mv_common.runcmd_output(cmd)
return uuid
def setup_config_xml(systemconfig):
#setup mysql.txt and config.xml
logging.info(" setup config xml")
mv_root = systemconfig.get("MVROOT")
mysqltxt = "/usr/share/mythtv/mysql.txt"
configxml_file = "/usr/share/mythtv/config.xml"
templates = systemconfig.get("TEMPLATES")
mysqltemplate = templates + "/mysql.txt"
dbhost = systemconfig.get("dbhost")
uuid = gen_uuid()
config_xml=generate_config_xml(uuid,dbhost)
mv_common.mkdir_mythhome(data_config.MYTHHOME,"mythtv","mythtv")
delfile = data_config.MYTHHOME + "/.mythtv/mysql.txt"
mv_common.remove_file(delfile)
delfile = mv_root + "/bin/mythtv/.mythtv/mysql.txt"
mv_common.remove_file(delfile)
filecheck = data_config.MYTHHOME + "/templates/mysql.txt"
if os.path.exists(filecheck):
logging.info(" Scrapping all the previous work and using %s for mysql.txt", filecheck)
mv_common.cp_and_log(filecheck, mysqltxt)
try:
f = open(configxml_file, 'w')
for outline in config_xml:
f.write(outline)
f.close()
except:
logging.debug(" Couldn't write config.xml")
home_xml_file=data_config.MYTHHOME + "/.mythtv/config.xml"
mv_common.link_file(configxml_file,home_xml_file)
#setup link for root user
mv_common.mkdir_mythhome("/root","root","root")
home_xml_file="/root/.mythtv/config.xml"
mv_common.remove_file(home_xml_file)
mv_common.link_file(configxml_file,home_xml_file)
def main(argv):
try:
MVROOT = os.environ["MV_ROOT"]
except:
logging.debug("MVROOT was not defined, using the default value")
MVROOT = "/usr/MythVantage"
global cmdmodule
global systemconfig
systemconfig["MVROOT"]=MVROOT
restartlcd = False
cmdmodule={"misc":False , "sleep":False ,
"hostype":False , "hostypec":False ,
"advanced":False , "audio":False ,
"network":False , "advancedX":False ,
"webuser":False , "restartfe":False ,
"reloadfe":False , "ddns":False ,
"screensaver":False , "ir":False ,
"this_is_install":False ,
"user":False, "software":False,
"plugins":False, "smolt":False,
"all":False, "dhcp_request":False ,
"func":False, "supplemental":False,
"vnc":False, "fileshare":False,
"config_xml":False,
"locale":False }
try:
opts, args = getopt.getopt(argv, 'c:hm:d:', ["help","modules" ] )
except getopt.GetoptError, why:
print why
usage()
print "exception happened"
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit(0)
elif opt in ("-m"):
for i in arg.split(","):
cmdmodule[i]=True
elif opt in ("-d"):
dhcp_dev = arg
if cmdmodule["this_is_install"] or cmdmodule["hostypec"]:
systemconfig["hostypec"] = True
#cmdmodule["smolt"] = True
if cmdmodule["hostypec"] == True :
cmdmodule["fileshare"] = True
cmdmodule["hostype"] = True
systemconfig["mythip"] = mv_network.setup_MYTH_IP(systemconfig)
systemconfig["mythdhcp"] = mv_network.setup_MYTH_DHCP(systemconfig)
systemconfig["mythgw"] = mv_network.setup_MYTH_DHCP(systemconfig)
systemconfig["mythdns"] = mv_network.setup_MYTH_DHCP(systemconfig)
if cmdmodule["all"]:
logging.info("*** WILL RUN ALL MODULES ***")
cmdmodule["network"] = True
cmdmodule["hostype"] = True
cmdmodule["ir"]= True
#cmdmodule["network"] = True
cmdmodule["audio"] = True
cmdmodule["misc"] = True
cmdmodule["sleep"] = True
cmdmodule["webuser"] = True
cmdmodule["ddns"] = True
cmdmodule["screensaver"] = True
cmdmodule["advanced"] = True
cmdmodule["software"] = True
cmdmodule["advancedX"] = True
#cmdmodule["smolt"] = True
cmdmodule["user"] = True
cmdmodule["vnc"] = True
cmdmodule["fileshare"] = True
cmdmodule["config_xml"] = True
cmdmodule["locale"] = True
##putting this here until I can create the seperate share module
#if cmdmodule["fileshare"]:
#cmdmodule["advanced"] = True
#cmdmodule["misc"] = True
if cmdmodule["network"]:
restartfe = mv_network.setup_network(systemconfig, cmdmodule["this_is_install"])
systemconfig["mythip"] = mv_network.setup_MYTH_IP(systemconfig)
systemconfig["mythdhcp"] = mv_network.setup_MYTH_DHCP(systemconfig)
systemconfig["mythgw"] = mv_network.setup_MYTH_DHCP(systemconfig)
systemconfig["mythdns"] = mv_network.setup_MYTH_DHCP(systemconfig)
cmdmodule["hostype"] = True
if restartfe == True :
logging.debug(" Setting the frontend to restart due to network change")
cmdmodule["restartfe"] = True
if cmdmodule["config_xml"]:
setup_config_xml(systemconfig)
if cmdmodule["func"]:
from mv_hostype import setup_func_minion
setup_func_minion(systemconfig.get("dbhost"),systemconfig.get("hostname"))
if cmdmodule["hostype"]:
import mv_hostype
cmdmodule["advancedX"] = True
setup_x(systemconfig)
cmdmodule["ir"] = True
mv_hostype.hostypeprint(systemconfig)
#cmdmodule["smolt"] = True
#if cmdmodule["network"]:
#restartfe = mv_network.setup_network(systemconfig, cmdmodule["this_is_install"])
#if restartfe == True :
#logging.debug(" Setting the frontend to restart due to network change")
#cmdmodule["restartfe"] = True
if cmdmodule["ir"] == True:
import mv_ir
restart = mv_ir.setup_ir(systemconfig,data_config,cmdmodule["this_is_install"])
restartfe = restart[0]
restartlcd = restart[1]
if restartfe == True :
logging.debug(" Setting the frontend to restart due to lirc change")
cmdmodule["restartfe"] = True
cmdmodule["smolt"] = True
if cmdmodule["audio"] == True:
if mv_common.read_config(mv_common.module_config,"audio") == False :
logging.info("____Skipping of Audio, config disabled____")
else:
logging.debug("______Start of Audio Configuration______")
if not systemconfig.get("Audiotype") == "tinker":
if cmdmodule["this_is_install"]:
if systemconfig.get("Audiotype") == "OSS":
mv_common.pacinstall("oss")
mv_common.add_service("oss")
cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,
systemconfig.get("Audiotype"),
systemconfig["SoundDevice"])
mv_common.runcmd(cmd)
mv_common.reloadfe(systemconfig.get("dbhost"),restartlcd)
else:
logging.debug(" Tinker mode(audio), not changing configuration")
logging.debug("__End of audio")
if cmdmodule["misc"]:
if mv_common.read_config(mv_common.module_config,"misc") == False :
logging.info("____Skipping of misc, config disabled____")
else:
import mv_misc
#zipcode is no longer used
#mv_misc.setup_zip(MVROOT,systemconfig.get("zipcode"))
mv_misc.setup_tz(systemconfig.get("timezone"),systemconfig["TEMPLATES"])
#mv_misc.setup_nfs(systemconfig)
if cmdmodule["sleep"]:
if mv_common.read_config(mv_common.module_config,"sleep") == False :
logging.info("____Skipping of sleep, config disabled____")
else:
import mv_misc
mv_misc.setup_sleep(systemconfig)
if cmdmodule["webuser"]:
import mv_webuser
mv_webuser.setup_web_auth(systemconfig.get("UseMythWEB_auth"))
if cmdmodule["ddns"]:
import mv_ddns
mv_ddns.setup_ddns(systemconfig)
if cmdmodule["screensaver"]:
import mv_screensaver
mv_screensaver.setup_screensaver(systemconfig, data_config)
if cmdmodule["advanced"]:
import mv_advanced
mv_advanced.setup_advanced(systemconfig, data_config)
if cmdmodule["fileshare"]:
import mv_fileshare
mv_fileshare.setup_fileshare(systemconfig, data_config)
if cmdmodule["software"] or cmdmodule["plugins"]:
import mv_software
mv_software.setup_software(systemconfig, data_config)
if cmdmodule["advancedX"]:
if mv_common.read_config(mv_common.module_config,"xorg") == False :
logging.info("____Skipping of advancedX, config disabled____")
else:
setup_x(systemconfig)
if cmdmodule["restartfe"]:
mv_common.restartfe(restartlcd)
if cmdmodule["reloadfe"]:
mv_common.reloadfe(systemconfig.get("dbhost"),restartlcd)
#if cmdmodule["smolt"]:
#import mv_smolt
#mv_smolt.setup_smolt_type(systemconfig.get("SystemType"),
#systemconfig.get("Remotetype"),
#systemconfig.get("RunFrontend"),
#data_config.MYTHHOME,
#data_config.SYSTEMTYPE)
if cmdmodule["user"]:
logging.info("____Start of ssh user____")
if systemconfig.get("rootSSH") == "1" :
logging.info(" Allowing ssh access for root")
cmd = '''sed -i "s/^.*PermitRootLogin.*$/PermitRootLogin yes/" /etc/ssh/sshd_config'''
mv_common.runcmd(cmd)
else:
logging.info(" Removing ssh access for root")
cmd = '''sed -i "s/^.*PermitRootLogin.*$/PermitRootLogin no/" /etc/ssh/sshd_config'''
mv_common.runcmd(cmd)
logging.info("__End of ssh user\n")
if cmdmodule["dhcp_request"]:
cmd = '''dhcpcd -t4 -h' ' -Td %s > /tmp/mvnetwork.dhcpinfo ''' %dhcp_dev
mv_common.runcmd(cmd)
if cmdmodule["supplemental"] or cmdmodule["this_is_install"]:
import mv_supplemental
mv_supplemental.windowmanager(systemconfig)
mv_supplemental.supplemental(systemconfig,cmdmodule["this_is_install"])
if cmdmodule["vnc"]:
import mv_vnc
mv_vnc.setupvnc(systemconfig,data_config)
if cmdmodule["fileshare"]:
import mv_fileshare
mv_fileshare.setup_fileshare(systemconfig, data_config)
if cmdmodule["locale"]:
import mv_locale
mv_locale.setup_locale(systemconfig)
if __name__ == "__main__":
config_file = "mv_config"
data_config = __import__(config_file, globals(), locals(), [])
#Read in systemconfig
global systemconfig
systemconfig = {"hostypec":False}
file_name = "/etc/systemconfig"
try:
config_file = open(file_name)
except:
logging.critical("%s could not be opened", file_name)
sys.exit(1)
for line in config_file:
line = line.strip()
if line and line[0] is not "#" and line[-1] is not "=":
var, val = line.rsplit("=", 1)
val = val.strip('"')
systemconfig[var.strip()] = val.strip()
try:
systemconfig["TEMPLATES"] = os.environ["TEMPLATES"]
except:
logging.critical(" *TEMPLATES is not defined")
logging.critical(" *using default value")
systemconfig["TEMPLATES"] = "/usr/MythVantage/templates"
logging.debug("______START OF DEBUG______")
main(sys.argv[1:])
logging.debug("______cmd line options______")
for i in cmdmodule.items():
logging.debug (i)
logging.debug("______systemconfig______")
for i in systemconfig.items():
logging.debug(i)
#pass