# -*- coding: utf-8 -*- import logging, os, re import mv_common def setup_pacman(create_link): if create_link: logging.info(" Creating pacman link") #LOOK #This is not implmented yet, below is the bash code for reference #if [ ! x$1 = x ] #then #ln -s ${BASE}/data/var ${BASE}/data/srv/httpd/htdocs/repo #echo "creating the link for the pacman repo mirror" #fi #for i in mv-core mv-core-testing mv-extra mv-extra-testing #do #echo "[$i]" > ${BASE}/etc/pacman.d/$i ##add mirror if needed #if [ x$PKG_MIRROR = x1 ] #then #echo " Server = http://$dbhost/repo/$i " >> ${BASE}/etc/pacman.d/$i #fi ##add user templates #USERTEMPLATES="/data/home/mythtv/templates" #if [ -f $USERTEMPLATES/sources/$i ] #then #echo "Adding user $i" #cat $USERTEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i #fi #cat $TEMPLATES/sources/$i >> ${BASE}/etc/pacman.d/$i #echo "setting local mirror to $dbhost for $i " #done else: logging.info(" Pacman link will not be created") return def setup_ncid_client(dbhost,templatefile): #This always runs logging.debug(" Configuring ncid client with server %s",dbhost) cmd = '''sed -e "s/^set Host.*$/set Host %s /" %s >/etc/ncid/ncid.conf''' %(dbhost, templatefile) return def setup_ncid_daemon(port,templatefile,Runncidd): logging.info(" Configuring callerid daemon") if Runncidd == "1": logging.debug(" Port: %s",port) mv_common.cp_and_log("/etc/ncid/ncidd.conf",templatefile) cmd = '''sed -e "s/.*set ttyport.*$/set ttyport = \/dev\/%s /" %s >/etc/ncid/ncidd.conf''' %(port,templatefile) mv_common.runcmd(cmd) mv_common.pacinstall("ncidd") mv_common.add_service("ncidd") else: logging.debug(" Callerid will not run") mv_common.pacremove("ncidd") mv_common.remove_service("ncidd") return def setup_splash(Usebootsplash): if Usebootsplash == "1": logging.info(" Enabling splash") cmd = ''' sed -i "s/^default.*0/default 1/g" /boot/grub/menu.lst''' mv_common.runcmd(cmd) else: logging.info(" Disabling splash") cmd = ''' sed -i "s/^default.*1/default 0/g" /boot/grub/menu.lst''' mv_common.runcmd(cmd) return def setup_rrd(UseRRD): if UseRRD == "1": logging.info(" Enabling rrd_stats") mv_common.pacinstall("rrd_stats") else: logging.info(" Disabling rrd_stats") mv_common.pacremove("rrd_stats") def setup_hobbit(UseHobbit,SystemType,dbhost): if UseHobbit == "1": if SystemType == "Standalone" or SystemType == "Master_backend": logging.info(" Installing hobbit server") mv_common.pacinstall("hobbitserver") mv_common.add_service("hobbit") else: logging.info(" Installing hobbit client") mv_common.pacinstall("hobbit-client") setup_hobbit_client(dbhost) mv_common.add_service("hobbit-client") else: logging.info(" Removing Hobbit") mv_common.pacremove("hobbit") mv_common.pacremove("hobbit-client") mv_common.remove_service("hobbit-client") mv_common.remove_service("hobbitserver") cmd = "rm -f /data/srv/httpd/htdocs/hobbit/index.html" mv_common.runcmd(cmd) return def setup_hobbit_client(dbhost): logging.info(" Configuring hobbit client") logging.debug(" hobbit server is %s:", dbhost) cmd='''sed -i "s/^BBDISP.*$/BBDISP=%s/g" /data/srv/hobbit/client/etc/hobbitclient.cfg ''' %dbhost mv_common.runcmd(cmd) return def setup_evrouter(UseEvrouter,EvrouterConfig,template): if UseEvrouter == "1": logging.info(" Configuring everouter") logging.debug(" EvrouterConfig is %s:",EvrouterConfig) if EvrouterConfig == "tinker": logging.debug(" tinker mode, not changing the config") return mv_common.pacinstall("evrouter") mv_common.pacinstall("Xvfb") mv_common.cp_and_log(template+"/evrouter/"+EvrouterConfig,"/etc/evrouter.cfg") mv_common.add_service("evrouter") mv_common.add_service("Xvfb") else: logging.info(" Not using evrouter") mv_common.pacremove("evrouter") mv_common.remove_service("evrouter") mv_common.remove_service("Xvfb") return def setup_DNSmasq(RunDHCP,ip,gw,nameserver): if RunDHCP == "1": logging.info(" Configuring dhcp server(dnsmasq)") logging.debug(" ip: %s", ip) logging.debug(" gw: %s", gw) logging.debug(" ns: %s", nameserver) mv_common.pacinstall("dnsmasq") mv_common.pacinstall("mvpmc") mv_common.add_service("dnsmasq") logging.debug(" Setting default route to my gw: %s",gw) try: f = open("/etc/dnsmasq.conf",'r') dnsconf = f.readlines() f.close() except: logging.info(" Couldn't open dnsmasq.conf") return for line in dnsconf: outline = line if re.match("^dhcp-option=3",line): logging.debug(" Setting default route to my gw: %s",gw) outline = "dhcp-option=3,%s\n" %gw if re.match("^dhcp-option=6",line): logging.debug(" Setting dns to my ip: %s",ip) outline = "dhcp-option=6,%s\n" %ip f.write(outline) f.close() logging.debug(" change nfsroot to my ip:%s",ip) cmd = '''sed -i "s/nfsroot=.*:/nfsroot=%s:/g" /data/srv/tftp/pxelinux.cfg/default''' %ip mv_common.runcmd(cmd) logging.debug(" Adding 127.0.0.1 to resolv.conf") logging.debug(" other nameserver is %s",nameserver) try: f = open("/etc/resolv.conf",'r') dns = f.readlines() f.close() except: dns='' logging.debug(" Couldn't open resolv.conf for reading") try: f = open("/etc/resolv.conf",'w') line="search lan\n" f.write(line) line="nameserver 127.0.0.1\n" f.write(line) line="nameserver %s\n" %nameserver f.write(line) for line in dns: f.write(line) f.close() except: logging.debug(" Couldn't open resolv.conf for writing") logging.debug(" setup dongle.config") cmd = ''' sed -i "s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s %s \& /" /data/srv/tftp/dongle.bin.config ''' %ip #COMMAND="%s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s ${ip} \& /" #ex ${BASE}/data/srv/tftp/dongle.bin.config <<EOF mv_common.runcmd(cmd) else: logging.info(" removing dhcp server(dnsmasq)") mv_common.pacremove("dnsmasq") mv_common.pacremove("mvpmc") mv_common.remove_service("dnsmasq") return def setup_mythweb(UseMythWEB): if UseMythWEB == "1": logging.info(" Activating mythweb") mv_common.pacinstall("lighttpd") mv_common.pacinstall("mythweb") mv_common.add_service("lighttpd") else: logging.info(" Removing mythweb") # mv_common.pacremove("lighttpd") mv_common.pacremove("mythweb") # mv_common.remove_service("lighttpd") return def setup_samba(systemconfig,data_config): mythhome = data_config.MYTHHOME if systemconfig["UseSamba"] == "1": logging.info(" Activating windows file sharing") usersamba=mythhome+"/templates/smb.conf" mv_common.pacinstall("samba") if not os.path.exists("/etc/samba"): logging.debug(" Creating directory /etc/samba") try: os.makedirs("/etc/samba") except: pass if os.path.exists(usersamba): logging.debug(" Using user provided config file %s",usersamba) cmd = "install -D -m755 %s /etc/samba/smb.conf" %usersamba mv_common.runcmd(cmd) else: Samba_media = systemconfig["Samba_media"] Samba_home = systemconfig["Samba_home"] if systemconfig["Samba_mediareadonly"] == "1": smreadonly = "yes" else: smreadonly = "no" if systemconfig["Samba_homereadonly"] == "1": shreadonly = "yes" else: shreadonly = "no" domain = systemconfig["Samba_domain"] servername = systemconfig["hostname"] try: f = open(systemconfig["TEMPLATES"]+"/samba/smb.conf.template",'r') t_smbconf = f.readlines() f.close() except: logging.info(" Couldn't open samba template file") return try: f = open("/etc/samba/smb.conf",'w') except: logging.info(" Couldn't open samba file") return for line in t_smbconf: outline = line if re.match("^.*workgroup", line): logging.debug(" Setting workgroup to %s",domain) outline="workgroup = %s\n" %domain logging.debug(" %s",outline) if re.match("^.* server string",line): logging.debug(" Setting server name to %s",servername) outline="server string = %s\n" %servername logging.debug(" %s",outline) f.write(outline) outline="include = %s/templates/user.shares \n" %mythhome f.write(outline) if Samba_media == "1": outline="include = /etc/samba/smb.conf.media\n" f.write(outline) if Samba_home == "1": outline="include = /etc/samba/smb.conf.home\n" f.write(outline) f.close() logging.info(" Writing smb.conf.media") try: f = open("/etc/samba/smb.conf.media","w") except: logging.info(" Couldn't open smb.conf.media") return medialines=''' [%s] path = %s public = yes only guest = yes writeable = %s printable = no force user = mythtv force group = mythtv create mask = 0755''' %(data_config.SMEDIA,data_config.DATAMOUNT,smreadonly) f.write(medialines) f.close logging.debug(" %s",medialines) logging.info(" Writing smb.conf.home") try: f = open("/etc/samba/smb.conf.home","w") except: logging.info(" Couldn't open smb.conf.home") return homelines=''' [home] path = %s public = yes only guest = yes writeable = %s printable = no force user = mythtv force group = mythtv create mask = 0755 ''' %(data_config.MYTHHOME,shreadonly) f.write(homelines) f.close logging.debug(" %s",homelines) mv_common.add_service("nmbd") mv_common.add_service("smbd") else: logging.info(" Removing windows file sharing") mv_common.remove_service("smbd") mv_common.remove_service("nmbd") mv_common.pacremove("samba") mv_common.pacinstall("smbclient") return def setup_NFSshares(UseNFS,templatefile): if UseNFS == "1": logging.info(" Activating NFS server") mv_common.pacinstall("nfs-utils") mv_common.pacinstall("portmap") cmd = '''sed -e "s/REPLACEME/*/g" %s >/etc/exports''' %templatefile mv_common.add_service("nfsd") mv_common.add_service("nfs-utils") mv_common.add_service("portmap") else: logging.info(" Removing NFS server") mv_common.remove_service("nfsd") return def setup_dyndns(DDnsEnable): if DDnsEnable == "1": logging.info(" Installing Dynamic DNS client") mv_common.pacinstall("inadyn") mv_common.add_service("inadyn") else: logging.info(" Removing Dynamic DNS client") mv_common.pacremove("inadyn") mv_common.remove_service("inadyn") def setup_advanced(systemconfig,data_config): logging.info("____Start of advanced configuration____") create_link = False if systemconfig["SystemType"] == "Master_backend": create_link = True setup_pacman(create_link) setup_ncid_client(systemconfig["dbhost"], systemconfig["TEMPLATES"]+"/ncid.conf.template") setup_ncid_daemon(systemconfig["nciddSerialPort"], systemconfig["TEMPLATES"]+"/ncidd.conf.template", systemconfig["Runncidd"]) setup_splash(systemconfig["Usebootsplash"]) if data_config.SYSTEMTYPE == "MythVantage": setup_hobbit(systemconfig["UseHobbit"], systemconfig["SystemType"], systemconfig["dbhost"]) if data_config.SYSTEMTYPE == "LinHES": setup_rrd(systemconfig["UseRRD"]) setup_evrouter(systemconfig["UseEvrouter"], systemconfig["EvrouterConfig"], systemconfig["TEMPLATES"]) setup_DNSmasq(systemconfig["RunDHCP"], systemconfig["mythip"], systemconfig["mythgw"], systemconfig["mythdns"]) setup_mythweb(systemconfig["UseMythWEB"]) setup_samba(systemconfig,data_config) setup_NFSshares(systemconfig["UseNFS"], systemconfig["TEMPLATES"]+"/exports.template") setup_dyndns(systemconfig["DDnsEnable"]) logging.info("__End of advanced configuration\n")