#!/bin/bash . /etc/profile . /etc/systemconfig shopt -s -o nounset echo $@ >> /tmp/restore.out echo "######################################################" echo "######################################################" echo "######################################################" echo "######################################################" cat /tmp/restore.out exit 0 #TEMPLATES="/usr/share/templates/settings" TEMPLATES="$TEMPLATES/settings" TABLES="settings keybindings jumppoints" MYTHDBUSER=mythtv MYTHTVPASSWD=mythtv declare -r OPTSTRING="c:e:t:d:h:s:a:z:Ho" Thistemplate="" declare -i OVERRIDE=0 declare -i EVERYTHING=0 function CMD_DEFINE () { #add override check if [ x$Thistemplate = xsyssettings -a $OVERRIDE -eq 1 ] then MYSQLCMD="mysql --local-infile -s -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec" MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec" MYSQLCMD_UPDATE_HOST="UPDATE settings set data='$oldhostname' where value='HostMyhostname' and hostname=\"$hostname\";" else MYSQLCMD="mysql --local-infile -s -u$MYTHDBUSER -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec" MYSQLCMD_C="mysql -u$MYTHDBUSER -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec" MYSQLCMD_UPDATE_HOST="select hostname from settings;" fi } function SQL_DEFINE () { thostname=`echo ${hostname}|tr -C [:alpha:] _` echo "Using $thostname for temp table postfix" #$1 is the table name if [ $1 = "settings" ] then ALTERSQL="Alter table temp_${1}_${thostname} add unique ( value )" else ALTERSQL=";" fi CREATESQL="create table temp_${1}_${thostname} like $1;" COPY_TMP_SQL="replace into temp_${1}_${thostname} (select * from $1 where hostname=\"$hostname\");" INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${thostname} FIELDS TERMINATED BY '\t';" #INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$Thistemplate/$1.txt' REPLACE INTO TABLE temp_${1}_${hostname} FIELDS TERMINATED BY '\t';" DROPSQL="delete from $1 where hostname=\"$hostname\";" COPY_BCK_SQL="replace into $1 (select * from temp_${1}_${thostname} where hostname=\"$hostname\");" DROP_TABLE="Drop table temp_${1}_${thostname}" } function ARG_ERR() { if [ x$OPTARG = "x" ] then echo "$SWITCH NEEDS AND ARG" exit 11 fi } function ALSADEVICE () { #ALSA:hw:1,4 if [ x$Audiotype = xALSA ] then SoundDevice=ALSA:$SoundDevice MixerDevice="ALSA:default" else MixerDevice="/dev/mixer" fi } if [ $# -eq 0 ] then echo "Valid options are:" echo " -c (save|restore|load|uhostname|BECONFIG|ZIP|ACCESSCONTROL)" echo " -t (syssettings|hostsettings)" echo " -d databasename" echo " -h hostname" echo " -s systemtype (master|slave|standalone|frontendonly)" echo " -a ipaddress" echo " -z zipcode" echo " -o override (only used upgrade installs)" exit 1 fi while getopts "$OPTSTRING" SWITCH do case $SWITCH in # \?) echo "unkown option" # exit 11 ;; c) echo "$SWITCH" "$OPTARG" ARG_ERR OPERATION=$OPTARG ;; t) echo "$SWITCH" "$OPTARG" ARG_ERR Thistemplate=$OPTARG if [ x$Thistemplate = x"syssettings" ] then echo "template is syssettings" loadhost=false elif [ x$Thistemplate = x"hostsettings" ] then echo "template is hostsettings" Thistemplate=syssettings loadhost=true else echo "invalid template name" exit 1 fi ;; d) echo "$SWITCH" "$OPTARG" ARG_ERR if [ $OVERRIDE = 1 ] then ovdbhost=$OPTARG else dbhost=$OPTARG fi ;; h) echo "$SWITCH" "$OPTARG" ARG_ERR if [ $OVERRIDE = 1 ] then oldhostname=$hostname hostname=$OPTARG else hostname=$OPTARG fi ;; s) echo "$SWITCH" "$OPTARG" ARG_ERR SYSTEMTYPE=$OPTARG ;; a) echo "$SWITCH" "$OPTARG" ARG_ERR IP_ADDRESS=$OPTARG ;; z) echo "$SWITCH" "$OPTARG" ARG_ERR ZIPCODE=$OPTARG ;; o) OVERRIDE=1 ;; esac done echo $OVERRIDE #setup the Mysql commands CMD_DEFINE $MYSQLCMD_C "show tables" > /dev/null status=$? if [ $status = 1 ] then echo "$@ failed" echo "$@ failed" >> /tmp/restore.out exit 1 fi case $OPERATION in restore) #used to restore settings from syssettings if [ -d $TEMPLATES/$Thistemplate ] then cd $TEMPLATES/$Thistemplate if [ $loadhost = false ] then for i in $TABLES do SQL_DEFINE $i sed -e "s/REPLACEME/$hostname/g" $i.txt > /tmp/$i.txt #echo $MYSQLCMD "$SELECTSQL" echo $i $MYSQLCMD "$CREATESQL" $MYSQLCMD "$ALTERSQL" $MYSQLCMD "$COPY_TMP_SQL" $MYSQLCMD "$INSERTSQL" $MYSQLCMD "$DROPSQL" $MYSQLCMD "$COPY_BCK_SQL " $MYSQLCMD "$DROP_TABLE " #rm /tmp/$i.txt done fi if [ $loadhost = true ] then #only load the settings table with values HOST i=settings SQL_DEFINE $i sed -e "s/REPLACEME/$hostname/g" $i.txt > /tmp/$i.txt echo $i $MYSQLCMD "$CREATESQL" $MYSQLCMD "$ALTERSQL" $MYSQLCMD "$INSERTSQL" $MYSQLCMD "$COPY_TMP_SQL" $MYSQLCMD "$DROPSQL" $MYSQLCMD "$COPY_BCK_SQL" $MYSQLCMD "$DROP_TABLE " fi else echo "couldn't find $TEMPLATES/$Thistemplate" fi ;; save) if [ ! -d $TEMPLATES/$Thistemplate ] then mkdir -p $TEMPLATES/$Thistemplate fi cd $TEMPLATES/$Thistemplate for i in $TABLES do EXTRACLAUSE="" case $i in settings) EXTRACLAUSE="and not (value like \"BackendServerIP\") and not (value like \"locale\") order by value" SQL="select value,data,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;" # SQL="select * from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;" $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt ;; keybindings) SQL="select context,action,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;" $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt ;; jumppoints) SQL="select destination,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE" ;" $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt ;; esac # sed -e "s/$hostname/REPLACEME/g" $i > $i.txt && rm $i done ;; load) #will load both default_1 and default_2 unless either file is not found for i in default_1 default_2 do if [ -f $TEMPLATES/$i/settings.txt ] then echo $i for tablename in $TABLES do #create table CREATESQL="create table IF NOT EXISTS ${tablename}_${i} like $tablename;" $MYSQLCMD_C "$CREATESQL" #truncate table TRUNCATESQL="truncate ${tablename}_${i} " $MYSQLCMD_C "$TRUNCATESQL" #load table INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$i/$tablename.txt' REPLACE INTO TABLE ${tablename}_${i} FIELDS TERMINATED BY '\t';" $MYSQLCMD_C "$INSERTSQL" #update_hostname UPDATEHOSTNAMESQL="update ${tablename}_${i} set hostname='$i' ; " $MYSQLCMD_C "$UPDATEHOSTNAMESQL" done else echo "couldn't find $TEMPLATES/$i/settings.txt template to load" fi CREATESQL="create table IF NOT EXISTS settings_user1 like settings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS settings_user2 like settings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS settings_user3 like settings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS keybindings_user1 like keybindings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS keybindings_user2 like keybindings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS keybindings_user3 like keybindings;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS jumppoints_user1 like jumppoints;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS jumppoints_user2 like jumppoints;" $MYSQLCMD_C "$CREATESQL" CREATESQL="create table IF NOT EXISTS jumppoints_user3 like jumppoints;" $MYSQLCMD_C "$CREATESQL" done ;; BECONFIG) if [ $SYSTEMTYPE = "master" ] then $MYSQLCMD_C "UPDATE settings set data='${IP_ADDRESS}' where value='MasterServerIP';" $MYSQLCMD_C "delete from settings where value='BackendServerIP' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";" fi if [ $SYSTEMTYPE = "slave" ] then $MYSQLCMD_C "delete from settings where value='BackendServerIP' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";" fi ;; ZIP) $MYSQLCMD_C "delete from settings where value='locale' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE' , value='locale' , hostname=\"$hostname\";" $MYSQLCMD_C "delete from settings where value='MythMovies.ZipCode' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='$ZIPCODE', value='MythMovies.ZipCode' , hostname=\"$hostname\";" ;; MUSICFRONT) ALSADEVICE $MYSQLCMD_C "delete from settings where value='AudioOutputDevice' and hostname=\"$hostname\";" $MYSQLCMD_C "delete from settings where value='MixerDevice' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='AudioOutputDevice' , hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='$MixerDevice', value='MixerDevice' , hostname=\"$hostname\";" #need to reload the settings. systemconfig.sh reloadfe ;; MUSICMYTH) ALSADEVICE $MYSQLCMD_C "delete from settings where value='MusicAudioDevice' and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='$SoundDevice', value='MusicAudioDevice' , hostname=\"$hostname\";" ;; uhostname) #used when the hostname is changed. TABLES="settings capturecard keybindings storagegroup recorded" for i in $TABLES do USQL="update $i set hostname=\"$oldhostname\" where hostname=\"$hostname\" ;" $MYSQLCMD_C "$USQL" done ;; USERJOBALLOW) SQL="update settings set data='1' where value like 'JobAllowUserJob%' and hostname=\"$hostname\" ;" $MYSQLCMD_C "$SQL" ;; ACCESSCONTROL) LIST="Hostaccessnetwork Hostaccesshostype HostaccesshostypeSystemtype Hostaccessmisc Hostaccesssleep Hostaccessadvanced HostaccessadvancedX Hostaccesssound" for i in $LIST do $MYSQLCMD_C "delete from settings where value=\"$i\" and hostname=\"$hostname\";" $MYSQLCMD_C "REPLACE INTO settings set data='1', value=\"$i\" , hostname=\"$hostname\";" done SQL="update settings set data='0' where value='HostaccesshostypeSystemtype' and hostname=\"$hostname\" ;" $MYSQLCMD_C "$SQL" SQL="update settings set data='0' where value='Hostaccessuser' and hostname=\"$hostname\" ;" $MYSQLCMD_C "$SQL" ;; esac #SELECT * INTO OUTFILE 'data.txt' # FIELDS TERMINATED BY ',' # FROM table2;