#!/bin/bash
###################################################################
#Script to configure your system based off the values in /etc/systemconfig
#Any changes made to config files will be removed when systemconfig.sh is run
#
#JM
###################################################################
#set -x
. /etc/profile
#MVRELEASE=`cat /etc/mythvantage-release  |cut -d" " -f -2`
MVRELEASE=`cat /etc/LinHES-release  `
echo $@ >/tmp/systemconfig.call
echo "----------------------start of systemconfig $@ ----------------------"
BASE=""

#TEMPLATES="/usr/share/templates"
. /etc/profile
. $MV_ROOT/bin/networkconfig.sh
PACMAN="pacman --noconfirm"
postfix=`cat ${BASE}/usr/local/share/mythtv/.releasetype`
PKGBLACKLIST=$BASE/etc/blacklist.package

if [ x$1 = x"Mysql_only" ]
    then
	rm -f /tmp/mysql.txt
        sed -e "s/^DBHostName=.*$/DBHostName=$2/" $TEMPLATES/mysql.txt > /tmp/mysql.txt
        exit 0
    fi


if [ -f /etc/systemconfig ]
then
	. /etc/systemconfig
    setup_MYTH_vars
TEMPNET="Hostip"$default_interface
echo $TEMPNET
eval MYTHIP=\$${TEMPNET}
else
	echo "could not find /etc/systemconfig"
	exit 1
fi


function cp_and_log () {
    if [ -e $1 ]
    then
        echo "copying $1 to $2"
        cp -rfp "$1" "$2"
    else
        echo "$1 is not present, skipping..."
    fi

}


#-----------------------------------------------------


function setupmysql  {
#setup mysql.txt to find the database servers
echo "running setup mysql"
        if [ $SystemType = "Master_backend" ]
        then
            if [ $MYTHDHCP = 0 ]
            then
                #this grabs eth0, as that is all thats supported.
#                dbhost=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
                dbhost=`ifconfig  | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
                sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
                cp_and_log /tmp/systemconfig.old ${BASE}/etc/systemconfig
                ##logic to change master_serverip and backend_serverip  in db

                ${BASE}${MV_ROOT}/bin/restore_default_settings.sh  -c BECONFIG -s master -a $dbhost
            else

                dbhost=$MYTHIP
                sed -e "s/^dbhost=.*$/dbhost=\"$dbhost\"/" /etc/systemconfig >/tmp/systemconfig.old
                cp_and_log /tmp/systemconfig.old ${BASE}/etc/systemconfig
                #logic to change dbhost in db
                ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s master -a $dbhost
            fi
        fi

        if [ $SystemType = "Slave_backend" ]
        then
            if [ $MYTHDHCP = 0 ]
            then
                #this grabs eth0, as that is all thats supported.
                #slavehost=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -n1`
                slavehost=`ifconfig  | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
                ##logic to change backend_serverip in db
                ${BASE}${MV_ROOT}/bin/restore_default_settings.sh  -c BECONFIG -s slave  -a $slavehost
            else
                slavehost=$MYTHIP

                #logic to change backend_serverif in db
                ${BASE}${MV_ROOT}/bin/restore_default_settings.sh -c BECONFIG -s slave  -a $slavehost
            fi
        fi

        MYSQLTXT=${BASE}/usr/share/mythtv/mysql.txt
        if [ $SystemType = "Standalone" ]
        then
            sed -e "s/^DBHostName=.*$/DBHostName="localhost"/" $TEMPLATES/mysql.txt > $MYSQLTXT
        else
            sed -e "s/^DBHostName=.*$/DBHostName=$dbhost/" $TEMPLATES/mysql.txt > $MYSQLTXT
        fi
        rm ${BASE}/home/mythtv/.mythtv/mysql.txt
        rm ${BASE}${MV_ROOT}/bin/mythtv/.mythtv/mysql.txt
        if [ -f ${BASE}/home/mythtv/templates/mysql.txt ]
        then
            cp_and_log ${BASE}/home/mythtv/templates/mysql.txt $MYSQLTXT
        fi

        chmod 755 $MYSQLTXT
        chown mythtv $MYSQLTXT

}

function setupmysqlnetwork(){
MFILE=etc/my.cnf
grep "#skip-networking" $BASE/$MFILE
status=$?



    if [ $SystemType = "Standalone" ]
         then
            sed -ie "s/^#skip-networking/skip-networking/g" $BASE/$MFILE
            if [ $status = 0 ]
            then
                sudo sv restart mysql
	        echo "restarting mysql with   no network"
            fi

        fi

    if [ $SystemType = "Master_backend" ]
    then
          sed -ie "s/^skip-networking/#skip-networking/g" $BASE/$MFILE
            if [ $status = 1 ]
            then
                sudo sv restart mysql
		        echo "restarting mysql with  network"
            fi

    fi


}


function settimezone {
#set the timezone
if [  x"$timezone" = x ]
then
    timezone="unknown"
fi
rm ${BASE}/etc/localtime
echo $timezone
ln -s "/usr/share/zoneinfo/$timezone"  ${BASE}/etc/localtime
        sed -e "s~^TIMEZONE=.*$~TIMEZONE=\"${timezone}\"~" ${BASE}/etc/rc.conf > $TEMPLATES/rc.conf

       # echo CLOCK="UTC" > ${BASE}/etc/conf.dclock
       # echo CLOCK_SYSTOCH="yes" >> ${BASE}/etc/conf.d/clock
       # echo TIMEZONE="$timezone" >> ${BASE}/etc/conf.d/clock
cp_and_log $TEMPLATES/rc.conf ${BASE}/etc/rc.conf
#Check for Atomic Ant
 if grep disablemodules=agpart,intel_agp /proc/cmdline >/dev/null
 then
 	cat /etc/rc.conf |  sed -e '/MOD_BLACKLIST/ c\MOD_BLACKLIST=($ALSABLACKLIST agpart intel_agp)' > /etc/rc.conf.aa
	mv /etc/rc.conf /etc/rc.conf.preaa
	mv /etc/rc.conf.aa /etc/rc.conf
# else
# 	exit 1
 fi

}


function setupreceiver {
   case $ReceiverType in
    tinker) echo "do nothing"
            ;;
    Serial) echo "setup serial lirc"
            sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
            echo "lirc_serial   #lirc" >> ${BASE}/etc/modules.mythvantage
            load-modules-mythvantage.sh
            ;;
    Usb-imon) echo "setup receiver-usb-imon"
              sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
              echo "lirc_imon     #lirc" >> ${BASE}/etc/modules.mythvantage
              load-modules-mythvantage.sh
              ;;
   Hauppauge) echo "setup hauppauge reciever (lirc_i2c)"
              sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
              echo "lirc_i2c   #lirc" >> ${BASE}/etc/modules.mythvantage
              cp_and_log $TEMPLATES/modules/lirc_i2c.conf ${BASE}/etc/modprobe.d/lirc_i2c.conf
              rmmod lirc_i2c 2>/dev/null
              load-modules-mythvantage.sh
             ;;
           *)   sed -i -e '/.*#lirc/d' ${BASE}/etc/modules.mythvantage
              ;;
    esac


}

function setupremote {
     case $Remotetype in
        no_remote) echo "No remote selected"
                daemon_remove="lircd $daemon_remove"
                ;;
        tinker) echo "Remote in tinker mode"
                ;;
            *)  echo "Setup remote"
                mv ${BASE}/etc/lircd.conf ${BASE}/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
                cd $TEMPLATES/remotes/$Remotetype
                for i in lircd*
                do
                        cat $i >> ${BASE}/etc/lircd.conf
                done
                cp -f lircrc* $BASE/etc/lircrc 2> /dev/null
                if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
                then
                    cat $TEMPLATES/LCD/$LCDtype/lircrc >> /etc/lircrc
                    cat $TEMPLATES/LCD/$LCDtype/lircd.conf >> /etc/lircd.conf
                fi
                if [ -f $TEMPLATES/transmit/$Blastertype/lircd.conf ]
                then
                    cat $TEMPLATES/transmit/$Blastertype/lircd.conf  >> ${BASE}/etc/lircd.conf
                fi
                chmod 755 /etc/lircrc
                daemon_add="lircd $daemon_add"
                sv hup lircd

		if [ ! -e /home/mythtv/.mythtv/lircrc ]
		then
			if [ ! -d /home/mythtv/.mythtv ]
			then
				mkdir /home/mythtv/.mythtv
				chown mythtv:mythtv /home/mythtv/.mythtv
			fi

			ln -s /etc/lircrc /home/mythtv/.mythtv/lircrc 2> /dev/null
		fi
		if [ ! -e /home/mythtv/.lircrc ]
		then

			ln -s /etc/lircrc /home/mythtv/.lircrc 2> /dev/null
		fi


                ;;
esac

}

function setupblaster {
        #cd $TEMPLATES/transmit/$Blastertype
        #for i in lircd*
        #do
         #       cat lircd.conf  >> ${BASE}/etc/lircd.conf
        #done
      #  REMOTE_NAME${BASE}/usr/bin/change_chan.sh=`grep name lircd.conf* |awk -F" " ' { print $2 } '`
         sed -e "s/^REMOTE_NAME=.*$/REMOTE_NAME=${Blastertype} /" $TEMPLATES/change_chan.sh > ${BASE}/usr/bin/change_chan.sh
          chmod 755 ${BASE}/usr/bin/change_chan.sh
        #channel change script change
        setupremote

}

function setupevrouter {
    if [  x$UseEvrouter  = x1 ]
    then
        case x$EvrouterConfig in
            xtinker )
                    echo "do nothing for evrouter"
                    ;;
                x ) echo "empty evrouter"
                    ;;
                * ) echo "setup evrouter for $EvrouterConfig "
                    cp_and_log $TEMPLATES/evrouter/$EvrouterConfig /etc/evrouter.cfg
                    daemon_add="evrouter Xvfb $daemon_remove"

                    ;;
        esac
    else
    # disable evrouter
    daemon_remove="evrouter Xvfb $daemon_remove"
    fi




}

function setupLCD {
   case x$LCDtype in
    xtinker) echo "do nothing"
            ;;
    xno_lcd) echo "disabling lcd"
            sv down lcdd
            load-modules-mythvantage.sh  UNLOAD LCD
            sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
            daemon_remove="lcdd $daemon_remove"
            ;;
        x) echo "empty lcd" ;;

         *) echo "setup lcd"
            if [ -f $TEMPLATES/LCD/$LCDtype/modules  ]
            then
              sed -i -e '/.*#LCD/d' ${BASE}/etc/modules.mythvantage
              cat $TEMPLATES/LCD/$LCDtype/modules >> ${BASE}/etc/modules.mythvantage
              #should also modprobe
            fi


            if [ -f $TEMPLATES/LCD/$LCDtype/LCDd.conf ]
            then
                cp_and_log  $TEMPLATES/LCD/$LCDtype/LCDd.conf /etc
               # install="lcdproc $install"
                daemon_add="lcdd $daemon_add"
                load-modules-mythvantage.sh
                RESTART_FE="true"
                RESTART_LCD="true"
            fi
            #check if lirc capable,if so then call setupremote
            if [ -f $TEMPLATES/LCD/$LCDtype/lircrc ]
            then
                setupremote
            fi
            ;;
    esac

}



function scrubnfs {
	   cp_and_log /etc/fstab $TEMPLATES/fstab.conf.template
       grep -v nfs   $TEMPLATES/fstab.conf.template > ${BASE}/etc/fstab
   }

function setupfstab () {
#    	setupfstab $NFSserver $NFSshare $NFSmount
         echo "$1 $2  nfs" >> ${BASE}/etc/fstab
         if [ ! -e "$2" ]
         then
           mkdir -p "$2"
           chown mythtv:mythtv "$2"
         fi
         if [ x$DCONFIG = x  ]
         then
            mount $2 &
        fi

}

function setupncidclient
{
    sed -e "s/^set Host.*$/set Host $dbhost /" $TEMPLATES/ncid.conf.template >${BASE}/etc/ncid/ncid.conf
}

function setupnciddaemon {
    if [ x$Runncidd = x1 ]
    then
        cp_and_log /etc/ncid/ncidd.conf $TEMPLATES/ncidd.conf.template
        sed -e "s/.*set ttyport.*$/set ttyport =  \/dev\/$nciddSerialPort /" $TEMPLATES/ncidd.conf.template >${BASE}/etc/ncid/ncidd.conf
    fi

}

function setupntp () {
        #this is used for backend or standlone types
        if [  $1 = "1" ]
                then
                        #MBE/STD use deafult
                        echo "Not changing ntp config"
                else
                        #echo "server $dbhost" >> ${BASE}/etc/ntp.conf
                        echo "setting ntp to $dbhost"
                        sed -i "s/pool.ntp.org/$dbhost/g" ${BASE}/etc/ntp.conf
                fi


}

function setupplugins (){

pkglistinstall=""
pkglistremove=""
#default enabled
for i in mythcontrols mythgallery mythmovietime mythmusic mythsmolt mythvideo
do
    eval pkgvalue=\$${i}
    if [ x$pkgvalue = x ]
    then
        pkglistinstall="$pkglistinstall $i$postfix"
    else
        if [ x$pkgvalue = x1 ]
        then
            pkglistinstall="$pkglistinstall $i$postfix"
        else
            pkglistremove="$pkglistremove $i$postfix"
        fi
    fi
done

#default disabled
for i in mythphone mytharchive mythbrowser mythnews mythgame mythflix mythweather mythappletrailers mythstream mythvodka
do
    eval pkgvalue=\$${i}
    if [ x$pkgvalue = x ]
    then
        pkglistremove="$pkglistremove $i$postfix"
    else
        if [ x$pkgvalue = x1 ]
        then
            pkglistinstall="$pkglistinstall $i$postfix"
        else
            pkglistremove="$pkglistremove $i$postfix"
        fi
    fi
done
#everything else
for i in  miro xe romdb xine dvdcss webmin
do
    eval pkgvalue=\$${i}
    case $i in
        xine)
                if [ x$pkgvalue = x1 ]
                then
                    pkglistinstall="$pkglistinstall xine-ui"
                else
                    pkglistremove="$pkglistremove xine-ui"
                fi
            ;;
        dvdcss)
                if [ x$pkgvalue = x1 ]
                then
                    pkglistinstall="$pkglistinstall libdvdcss"
                else
                    pkglistremove="$pkglistremove libdvdcss"
                fi
            ;;
        webmin)
                ##Daemon_add is here because webmin is on the software page instead of the advanced screen
                if [ x$pkgvalue = x1 ]
                then
                    pkglistinstall="$pkglistinstall webmin"
                    daemon_add="webmin $daemon_add"
                else
                    pkglistremove="$pkglistremove webmin"
                    daemon_remove="webmin $daemon_remove"
                fi
                ;;
        *)
            if [ x$pkgvalue = x1 ]
            then
                pkglistinstall="$pkglistinstall $i"
            else
                pkglistremove="$pkglistremove $i"
            fi
        ;;
esac

done


install="$pkglistinstall $install"
remove="$pkglistremove $remove"

}
function LCDcheck () {
 case x$LCDtype in
    xtinker) echo "do nothing lcd "
            ;;
    xno_lcd) echo "no  lcd "
                       ;;
    xxosd) install="xosd lcdproc $install"
            ;;
        x) echo "lcd empty "
        ;;
 *)
     install="lcdproc $install"
    ;;
esac
}


function packages () {
#see which plugins need to be installed
echo "  Starting to install Packages"
setupplugins
LCDcheck
if [ ! -f $PKGBLACKLIST ]
then
    touch $PKGBLACKLIST
fi
    for i in $remove
    do
    if [ ! x$i = xnone ]
    then
        echo "-----------$i --------------"
        grep -q $i $PKGBLACKLIST
        if [ $? = 1 ]
        then
            pacman -Q $i 2>/dev/null
            #VAR=`pacman -Q $i  2>&1 `
            if [ $? = 0 ]
            then
                    if [ $i = "mythweb$postfix" ]
                    then
                    pacman --noconfirm -R mythweb$postfix
                    echo removed $i
                    else
                    pacman --noconfirm -Rs $i
                    echo removed $i
                    fi
            fi
        else
            echo "$i is black listed"
        fi
    fi
    done


    for i in $install
    do
    if [ ! x$i = xnone ]
    then
        echo "-----------$i --------------"
        grep -q $i $PKGBLACKLIST
        if [ $? = 1 ]
        then
                pacman -Q $i 2>/dev/null
                #VAR=`pacman -Q $i  2>&1 `
    #            echo $VAR |grep -vq error:

                if [ ! $? = 0 ]
                then
                        pacman --noconfirm -Sf $i
                        echo installed $i
            else
                echo "$i already installed"
                fi
        else
        echo "$i is black listed"
        fi
    fi
    done
}

function daemons {
echo "Daemons on boot"

     for i in $daemon_remove
     do
    	   sv check $i 1>/dev/null
            status=$?
	   if [ $status -eq 0 ]
	   then
		sv down $i
	   fi
	        remove_service.sh $i
     done


    for i in $daemon_add
    do
        sv check $i 1>/dev/null
        status=$?
        add_service.sh $i

		if [ $status -eq 0 ]
		then
                    case $i in
                        mysql*) sv hup $i
                                        ;;
                        mythback*) sv hup $i
                                        ;;
                        lirc* ) sv hup $i
                                        ;;
                        frontend) sv check frontend 1>/dev/null
                                        ;;

                        smbd ) sv hup $i
                                        ;;
                        nmbd ) sv hup $i
                                        ;;
                        evrouter) sv restart $i
                                    ;;
                    *)     sv down $i
                            sleep 1
                            sv up $i
                        ;;
	           esac
                 fi

        done

}


function services
{
ser_install=""
ser_daemon_add=""
ser_remove=""
ser_daemon_remove=""
if [ x$UseEvrouter = x1 ]
then
    ser_daemon_add="evrouter Xvfb $ser_daemon_add"
else
    ser_daemon_remove="evrouter Xvfb $ser_remove"
fi

if [ x$RunDHCP = x1 ]
then
           ser_daemon_add="dnsmasq  $ser_daemon_add"
           ser_install="dnsmasq mvpmc  $ser_install"

else
           ser_daemon_remove="dnsmasq  $ser_daemon_remove"
           ser_remove="dnsmasq mvpmc  $ser_remove"
fi

if [ x$RunFrontend = x1 ]
then
           ser_daemon_add="frontend hal   $ser_daemon_add"
           ser_install=" $ser_install"
           showX=true
 else
           ser_daemon_remove="frontend hal  $ser_daemon_remove"
           ser_remove="$ser_remove"
 fi

if [ x$UseMythWEB = x1 ]
then
            ser_install="lighttpd  mythweb$postfix $ser_install"
            ser_daemon_add="lighttpd $ser_daemon_add"
 else
           ser_remove="mythweb$postfix $ser_remove"
           ser_daemon_remove="$ser_daemon_remove"
 fi

#samba
if [ x$UseSamba = x1 ]
then
        ser_install="samba $ser_install"
        ser_daemon_add="nmbd smbd $ser_daemon_add "
        if [ x$Samba_mediareadonly = x1 ]
            then
                smreadonly="no"
                else
                smreadonly="yes"
        fi

        if [ x$Samba_homereadonly = x1 ]
            then
                shreadonly="no"
                else
                shreadonly="yes"
        fi

        if [ ! -d ${BASE}/etc/samba ]
        then
            mkdir ${BASE}/etc/samba
        fi

        if [  -f ${BASE}/data/home/mythtv/templates/smb.conf  ]
        then
            install -D -m755  ${BASE}/data/home/mythtv/templates/smb.conf   ${BASE}/etc/samba/smb.conf
        else
            sed -e "s/^.*workgroup =.*$/ workgroup = $Samba_domain/g " \
                -e "s/^.*server string = .*$/ server string = $hostname/g" $TEMPLATES/samba/smb.conf.template > ${BASE}/etc/samba/smb.conf

            if [ x$Samba_media = "x1" ]
            then
                echo "include =  /etc/samba/smb.conf.media" >> ${BASE}/etc/samba/smb.conf
                sed -e "s/^.*writeable.*$/writeable = $smreadonly/g" $TEMPLATES/samba/smb.conf.media > ${BASE}/etc/samba/smb.conf.media
            fi

            if [ x$Samba_home = "x1" ]
            then
                echo "include =  /etc/samba/smb.conf.home" >> ${BASE}/etc/samba/smb.conf
                sed -e "s/^.*writeable.*$/writeable = $shreadonly/g" $TEMPLATES/samba/smb.conf.home > ${BASE}/etc/samba/smb.conf.home

            fi

        fi
else
        ser_remove="samba $ser_remove"
        ser_install="smbclient $ser_install"
        ser_daemon_remove="smbd nmbd  $ser_daemon_remove"
fi


if [ x$UseNFS = x1 ]
then
      ser_install="nfs-utils portmap $ser_install"
      ser_daemon_add="nfsd nfslock portmap $ser_daemon_add"
       sed -e "s/REPLACEME/*/g" $TEMPLATES/exports.template > ${BASE}/etc/exports

else
      ser_remove="$ser_remove"
      ser_daemon_remove="nfsd  $ser_daemon_remove"
fi

if [ x$Runncidd = x1 ]
then
           ser_daemon_add="ncidd ncid $ser_daemon_add"
           ser_install="ncid $ser_install"
else
           ser_daemon_remove="ncidd ncid $ser_daemon_remove"
           ser_remove="ncid $ser_remove"
fi


if [ x$UseEvrouter = x1 ]
then
           ser_install="evrouter Xvfb $ser_install"
  else
           ser_remove="evrouter $ser_remove"
fi




#Setting the default, just to avoid the or statement..
#if [ x$UseHobbit = x ]
#then
#    UseHobbit=0
#fi

#if [ x$UseHobbit = x1 ]
#then
#    case $SystemType in
#        Standalone|Master_backend )
#           ser_daemon_add="hobbit $ser_daemon_add"
#           ser_install="hobbitserver $ser_install"
#        ;;
#
#        *)   ser_daemon_add="hobbit-client $ser_daemon_add"
#              ser_install="hobbit-client $ser_install"
#        ;;
#        esac
#else
#           ser_daemon_remove="hobbit hobbit-client $ser_daemon_remove"
#           ser_remove="hobbit-client hobbitserver $ser_remove"
#            rm -f /data/srv/httpd/htdocs/hobbit/index.html
#
# fi



}



function setupsleep {
if [ x$AutoShutdown = x1  ]
then
    cronshutdowntime=""
    if  [ x$Shutdowntime != x-1 ]
    then
        cronshutdowntime=$Shutdowntime
    fi
    if [ x$Shutdowntime2 != x-1 ]
    then
        if [ x$cronshutdowntime = x ]
        then
            cronshutdowntime=$Shutdowntime2
        else
            cronshutdowntime="${cronshutdowntime},${Shutdowntime2}"
        fi
    fi

    sed -e "s/HOUR/$cronshutdowntime/g" $TEMPLATES/cron.template | crontab - -u mythtv
else
    sed -e "/00 HOUR.*/d" $TEMPLATES/cron.template | crontab - -u mythtv
fi

}


function setuppacman () {
#setup link to httpd dir
echo "Configuring pacman"
  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

     #sed -e "s/REPLACEME/$dbhost/g"  $TEMPLATES/sources/svc_pkg > /etc/pacman.d/svc_pkg


}


function setupzipcode () {
    if [ ! x$zipcode = x ]
    then
        ${MV_ROOT}/bin/restore_default_settings.sh -c ZIP  -z $zipcode
	#Let's also speed things up for those in North America
	mkdir /usr/bin/perlbin/vendor/tv_grabbers_non_na
	mv /usr/bin/perlbin/vendor/tv_grab_*  /usr/bin/perlbin/vendor/tv_grabbers_non_na
	mv  /usr/bin/perlbin/vendor/tv_grabbers_non_na/tv_grab_na*  /usr/bin/perlbin/vendor/
    fi
}

function process_nfsmap () {
#first look for a local copy of nfsmap
if [ $1 = noip ]
then
    if [ -f /data/home/mythtv/templates/nfsmap ]
    then
        NFSMAP="/data/home/mythtv/templates/nfsmap"
    else
        mv -f /tmp/nfsmap /tmp/nfsmap.old
        wget -O /tmp/nfsmap http://$dbhost:1337/templates/nfsmap
        if [ $? = 0 ]
        then
            NFSMAP="/tmp/nfsmap"
        fi
    fi
else
        mv -f /tmp/nfsmap /tmp/nfsmap.old
        wget -O /tmp/nfsmap http://$1:1337/templates/nfsmap
        if [ $? = 0 ]
        then
            NFSMAP="/tmp/nfsmap"
        fi
fi

    if [ -f $NFSMAP ]
    then
        #read in file
        while read line
        do
            NFSserver=`echo "$line"|cut -d" " -f1`
            NFSmount=`echo "$line"|cut  -d" " -f2`
            setupfstab $NFSserver $NFSmount
        done <$NFSMAP
    else
        echo "couldn't find nfsmap"

    fi
}

function setupcnfs () {
     scrubnfs
        if [ $HaveCentralNFS = "yes" ]
	then
            case x$NFSserver in
                xfile:nfsmap )
                                process_nfsmap noip
                                ;;
               *:nfsmap )
                                nfsmapip=`echo "$NFSserver" | cut -d: -f1 `
                                process_nfsmap $nfsmapip
                                ;;
                *)  setupfstab $NFSserver $NFSmount
                esac

	    #if [ ! x"$NFSserver" = "xfile:nfsmap" ]
            #then
            #    setupfstab $NFSserver $NFSmount
            #else
            #    process_nfsmap
            #fi
        else
            echo "fe_nfs"
            #if no central nfs found, then use the mbe.
            if [ $SystemType = "Frontend_only" ]
            then
                setupfstab ${dbhost}:/myth /myth
            fi
	fi

}

function setupbootsplash () {

if  [ x$Usebootsplash = x1 ]
then
    COMMAND="%s/^default.*0/default 1/g"
else
    COMMAND="%s/^default.*1/default 0/g"
fi

ex ${BASE}/boot/grub/menu.lst <<EOF
:$COMMAND
:wq
EOF

}

function setuphobbitclient () {
COMMAND="%s/^BBDISP=.*$/BBDISP=$dbhost/g"


ex ${BASE}/data/srv/hobbit/client/etc/hobbitclient.cfg <<EOF
:$COMMAND
:wq
EOF

}

function setupSyslog () {
COMMAND="%s/^destination d_remote.*$/destination d_remote \{tcp\(\"${dbhost}\" port\(514\)\) \;\} \;/"
ex ${BASE}/etc/syslog-ng.conf <<EOF
:$COMMAND
:wq
EOF




}

function setupfuncminion () {
COMMAND="%s/^certmaster.*$/certmaster = ${dbhost}/"
ex ${BASE}/etc/func/minion.conf <<EOF
:$COMMAND
:wq
EOF
}

function setupDNSMASQ(){
if [ x$RunDHCP = x1   ]
then
    echo "DNSMASQ setup"

#set default route to my GW
COMMAND="%s/^dhcp-option=3.*$/dhcp-option=3,${route}/"
ex ${BASE}/etc/dnsmasq.conf <<EOF
:$COMMAND
:wq
EOF

#setup dns to my ip
COMMAND="%s/^dhcp-option=6.*$/dhcp-option=6,${ip}/"
ex ${BASE}/etc/dnsmasq.conf <<EOF
:$COMMAND
:wq
EOF


#change nfsroot to my ip
COMMAND="%s/nfsroot=.*:/nfsroot=${ip}:/"
ex ${BASE}/data/srv/tftp/pxelinux.cfg/default <<EOF
:$COMMAND
:wq
EOF

#add 127.0.0.1 to /etc/resolv.conf
        echo "search lan" > ${BASE}/etc/resolv.conf
        echo "nameserver 127.0.0.1" >> ${BASE}/etc/resolv.conf
        echo "nameserver $nameserver" >> ${BASE}/etc/resolv.conf
fi

#setup dongle.config
COMMAND="%s/mvpmc -f .*/mvpmc -f \/etc\/helvR10.fon -s ${ip} \& /"
ex ${BASE}/data/srv/tftp/dongle.bin.config <<EOF
:$COMMAND
:wq
EOF



#setup dongle.config

}

function reloadfe(){
   PID=`ps -ef |grep mythfrontend|grep -v grep |awk  '{print $2 }'`
   /usr/bin/backend_control.sh  clearcache  behost $dbhost
   if [ x$RESTART_LCD = xtrue ]
   then
    killall -9 mythlcdserver
   fi
   if [  x = x$PID ]
   then
       echo "Mythfrontend not running, will not reload"
   else
        kill -s USR1 $PID
   fi
   exit 0

}


function setup_db (){

            install="mysql avahli"
            daemon_add="mysql"
            packages
            daemons
status=1
mysqlstatus=1
while [ ! $status = 0  ]
do
    sv stop mysql
    sleep 1
    sv  start mysql
    mysqlstatus=$?
    if [ $mysqlstatus = 0 ]
    then
   	mysql -e "show databases;"
        showstatus=$?
        if [ $showstatus = 0 ]
        then
            pacman --noconfirm -R mythdb-initial
            pacman --noconfirm  -S mythdb-initial
            $MV_ROOT/bin/restore_default_settings.sh -c load
            if [ $SystemType = "Master_backend" ]
            then
                $MV_ROOT/bin/restore_default_settings.sh  -c  BECONFIG  -s master  -a $dbhost
            fi
            #update database to allow user jobs on this host.
            $MV_ROOT/bin/restore_default_settings.sh  -c  USERJOBALLOW
            $MV_ROOT/bin/restore_default_settings.sh  -c  ACCESSCONTROL
	   if [ -d /data/srv/mysql/mythconverg ]
	   then
	    pacman --noconfirm -R webcalendar
            pacman --noconfirm --nodeps  -S webcalendar
	    status=0
	   fi
   	fi
    fi
done
}

function setup_web_auth {
    if [ x$UseMythWEB_auth = x1 ]
    then
        #enable auth
        sed -ie "s/^.*include.*auth-inc.conf.*$/include \"\/etc\/lighttpd\/auth-inc.conf\"/g" /etc/lighttpd/lighttpd.conf
    else
         #disable auth
        sed -ie "s/^.*include.*auth-inc.conf.*$/#include \"\/etc\/lighttpd\/auth-inc.conf\"/g" /etc/lighttpd/lighttpd.conf
    fi
    sudo sv restart lighttpd

}

#----------------------------------------------------MAIN PROGRAM-------------------------------------------
#misc,sleep,hostype,advanced,audio
eval LAST=\$$#
LIST=`echo $LAST | tr , " " `

hosttypechange="false"


for i in  $LIST
do
echo $i
case $i in
    misc) showmisc="true"
        ;;
    sleep) showsleep="true"
        ;;
    hostype) showhost="true"
             showX="true"
        ;;
    hostypec) hosttypechange="true"
            ;;
    advanced) showadvanced="true"
        ;;
    audio) showaudio="true"
        ;;
    network) shownetwork="true"
        ;;
    advancedX)  showX="true"
        ;;
    webuser)  setup_web_auth
        ;;
    restartfe)  killall -9 mythfrontend
                killall -9 mythwelcome
                 exit 0
        ;;
    reloadfe)  reloadfe
        ;;

    this_is_install) MV_NEW_INSTALL="true"
        ;;

    esac
done

if [ x$MV_NEW_INSTALL = xtrue ]
then
	hosttypechange="false"
fi



#  exit 1

#network
if [ x"$shownetwork" = xtrue ]
then
    OLDHOSTNAME=`hostname`
    NEWHOSTNAME=$hostname
    if [ ! $OLDHOSTNAME = $NEWHOSTNAME ]
    then

    ${MV_ROOT}/bin/restore_default_settings.sh  -cuhostname -o -h$OLDHOSTNAME
    RESTART_FE="true"
    hostname $NEWHOSTNAME
    if [ $SystemType != "Frontend_only" ]
    then
        sv restart mythbackend
    fi

    fi

    setup_network
    CMDLINE=$(cat /proc/cmdline)
    echo $CMDLINE |grep -q netboot
    NETBOOT=$?
    if [   x$NETBOOT = x1  ]
        then
            echo "loading network"
            ${BASE}/etc/net/scripts/network.init reload
            ${BASE}/etc/net/scripts/network.init restart
        else
            echo "netboot, will not start network"
        fi
fi


if [ x$showhost = "xtrue" ]
then
case $SystemType in
    Standalone)
            setupntp 1
            services
            if [ x$hosttypechange = "xtrue" ]
            then
             setup_db
            fi
            if [ -f   ${BASE}/etc/avahi/services/mysql.service     ]
            then
                        rm -f ${BASE}/etc/avahi/services/mysql.service
                        sudo sv restart avahi
            fi

            install="mysql mythdb-initial  avahli portmap nfslock local-website $ser_install"


            remove="none $ser_remove"

            daemon_add="mysql  mythbackend  avahi portmap nfslock netfs lighttpd $ser_daemon_add"
            daemon_remove="none $ser_daemon_remove"

    ;;
   Master_backend)
            setupntp 1
            services

            if [  !  -f   ${BASE}/etc/avahi/services/mysql.service     ]
            then
                        mkdir  ${BASE}/etc/avahi/services
                        cp $TEMPLATES/mysql.service  ${BASE}/etc/avahi/services/mysql.service
                        sudo sv restart  avahi
            fi

            install="mysql  mythdb-initial avahi portmap nfslock local-website myth2ipod mythtv-status $ser_install  "
            remove="$ser_remove"

            daemon_add="mysql mythbackend  avahi   portmap nfslock netfs lighttpd $ser_daemon_add"
            daemon_remove="$ser_daemon_remove"
    ;;
    Slave_backend)
            setupntp 0
            services
            if [ x$hosttypechange = "xtrue" ]
            then
             setup_db
            fi
            if [    -f   ${BASE}/etc/avahi/services/mysql.service     ]
            then
                        rm -f ${BASE}/etc/avahi/services/mysql.service
                        sudo sv restart  avahi
            fi

            #cp $TEMPLATES/mysql.service  ${BASE}/etc/avahi/services/mysql.service
            install="mysql  avahi  local-website portmap nfslock $ser_install  "
            remove=" $ser_remove"

            daemon_add="mythbackend avahi portmap nfslock netfs lighttpd $ser_daemon_add"
            daemon_remove="$ser_daemon_remove"
    ;;
    Frontend_only)
        #Add values for services
        setupntp 0
        services
        if [  -f   ${BASE}/etc/avahi/services/mysql.service     ]
            then
                        rm -f ${BASE}/etc/avahi/services/mysql.service
                        sudo sv restart  avahi
            fi

        install="libmysqlclient mysql-clients portmap nfslock avahi local-website $ser_install"
        remove="mysql mythweb$postfix $ser_remove"

        daemon_add="avahi portmap nfslock netfs lighttpd $ser_daemon_add "
        daemon_remove="mysql   mythbackend  $ser_daemon_remove"
   ;;


esac
#setupSyslog

fi

#apply these to ALL types




#systemtype

if [ x$showhost = "xtrue" ]
then
    setupmysqlnetwork
    setupmysql
    setupremote
    #grab the new dbhost key
    #/usr/bin/grabkey.py
fi

#audio

if [ x$showaudio = "xtrue" ]
then
	#setupsoundtype
    if [ ! x$Audiotype = xtinker  ]
    then
        ${MV_ROOT}/bin/soundconfig.sh -t real -i $Audiotype -d $SoundDevice
    fi
fi

#should always run
packages

#misc

if [ x$showmisc = "xtrue" ]
then
	setupzipcode
	settimezone
    setupcnfs
fi

#sleep
if [ x$showsleep = "xtrue" ]
then
	setupsleep
fi

if [ x$showX = "xtrue" ]
then
    ${MV_ROOT}/bin/xconfig.sh
fi

#advanced
if [ x$showadvanced = "xtrue" ]
then
    if [ ! x$showhost = "xtrue" ]
    then
        services
        install="none $ser_install"
        remove="none $ser_remove"
        daemon_add=" none $ser_daemon_add"
        daemon_remove="none $ser_daemon_remove"
        packages


        if [ x$SystemType = xMaster_backend ]
        then
            setuppacman link
            else
            setuppacman
        fi
     fi
    setupncidclient
    setupnciddaemon
    setupbootsplash
    setuphobbitclient
    setupreceiver
    setupevrouter
    setupblaster
    setupLCD
    setupDNSMASQ

fi



daemons
#add check for lcd, and restart if needed.

if [ x$RESTART_FE = xtrue ]
then
    reloadfe
fi





case $SystemType in
    Standalone)  smoltsystem=6
                     MVRELEASE="$MVRELEASE  (Standalone)"
                    ;;
   Master_backend)
            if [ x$RunFrontend = x1 ]
            then
                smoltsystem=2
                MVRELEASE="$MVRELEASE  (MBE with Frontend)"
            else
                smoltsystem=1
                MVRELEASE="$MVRELEASE  (MBE)"
            fi
            ;;
   Slave_backend)
            if [ x$RunFrontend = x1 ]
            then
                smoltsystem=5
                MVRELEASE="$MVRELEASE  (SLAVE  with Frontend)"
            else
                smoltsystem=5
                MVRELEASE="$MVRELEASE  (SLAVE)"
            fi
            ;;
     Frontend_only)
          smoltsystem=3
          MVRELEASE="$MVRELEASE  ( Frontend only)"
            ;;
esac
echo $MVRELEASE > /etc/os_myth_release
echo "systemtype=$smoltsystem" > /home/mythtv/.mythtv/smolt.info 2>/dev/null
echo "remote=$Remotetype" >> /home/mythtv/.mythtv/smolt.info 2>/dev/null