#!/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 /etc/rc.conf.1 #Check for Atomic Ant if grep disablemodules=agpart,intel_agp /proc/cmdline >/dev/null then cat /etc/rc.conf.1 | sed -e '/MOD_BLACKLIST/ c\MOD_BLACKLIST=($ALSABLACKLIST agpart intel_agp)' > /etc/rc.conf rm -fr /etc/rc.conf.1 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 () { cat > ${BASE}/etc/ntp.conf << EOF # default restrictions restrict default noquery notrust nomodify # NTP drift file - used to keep track of your system clocks # time deviation driftfile /etc/ntp.drift # NTP log file logfile /var/log/ntp.log # override the default restrictions here, servers that can query restrict 192.168.0.0 mask 255.255.0.0 nomodify restrict 10.0.0.0 mask 255.0.00 nomodify #servers to sync with EOF #this is used for backend or standlone types if [ $1 = "1" ] then echo "server pool.ntp.org" >> ${BASE}/etc/ntp.conf #echo "server ntp3.sf-bay.org" >> ${BASE}/etc/ntp.conf echo "restrict pool.ntp.org" >> ${BASE}/etc/ntp.conf #echo "restrict ntp3.sf-bay.org noquery nomodify" >> ${BASE}/etc/ntp.conf else echo "server $dbhost" >> ${BASE}/etc/ntp.conf echo "restrict $dbhost noquery nomodify" >> ${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 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 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 < ${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 < /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