#!/bin/bash #---------------------------------------------------------------------------- . /usr/LH/bin/backupcommon || { echo 1>&2 "Can not load common settings!" exit 1 } . /etc/osd_cat.cfg || { color=yellow outline=2 outlinecolour=black shadow=0 shadowcolour=black font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" } #---------------------------------------------------------------------------- # Function to display status onscreen osd() # Arg_1 = display text Arg_2 = delay time Arg_3 = line num { TEXT=$1 killall -9 osd_cat if [ $3 -gt 1 ]; then for ((i=2; i <= $3 ; i++)) do TEXT="\n"$TEXT done fi printf "$TEXT" | osd_cat --lines=6 --pos=middle --align=center --delay=$2 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font & } # Prevent mythshutdown from shutting down the system in the middle... lock_myth # Play a sound to let you know I'm starting. play_sound init.wav # Keep a chain of recent backups, export DISPLAY=:0.0 osd "Rolling over old backups..." 0 1 echo "Starting rollover of old backups, this may take a while..." [ -f "$BACKUP_SQL" ] && shrink $BACKUP_SQL [ -f "$BACKUP_TAR" ] && shrink $BACKUP_TAR backup_roller .19 .18 .17 .16 .15 .14 .13 .12 .11 .10 .9 .8 .7 .6 .5 .4 .3 .2 .1 '' echo "Rollover completed." # Quit MythWelcome and MythFrontend if they are running. MWRUNNING=0 FERUNNING=0 if [ "$(pidof mythwelcome)" ] then MWRUNNING=1 killall mythwelcome fi if [ "$(pidof mythfrontend)" ] then FERUNNING=1 killall mythfrontend fi osd "Checking the database..." 0 2 # Start with the database backup, first we make sure it's healthy, and # then we can dump it. # Doing this while the backend is active would be BAD. stop_mythbackend # Stop, check, and fix $DATABASE db to ensure clean copy, then restart it. stop_mysqld cd $DATABASE_DIR $MYISAMCHK -f *.MYI start_mysqld osd "Backing up database..." 0 3 # Dumps the $DATABASE database $MYSQLDUMP -v -c -u root $DATABASE > $BACKUP_SQL shrink $BACKUP_SQL osd "Backing up files..." 0 4 # Now to backup the other files, no fooling around, grab everything in the # list because you never know what you'll want, and we can always get clever # about what to restore later... # gather all the things in the list into a nice tidy bundle cd / $TAR cvf $BACKUP_TAR $BACKUP_LIST 2>&1 | $SED -e '/Error exit delayed from previous errors/d' shrink $BACKUP_TAR # If you can't read this you've got no business restoring from it anyway. $CHOWN root:root $BACKUP_TAR* $BACKUP_SQL* $CHMOD go-rwx $BACKUP_TAR* $BACKUP_SQL* osd "Testing backup..." 0 5 echo "Sanity checking your backup..." play_sound testing.wav # Play a sound to let you know the outcome. if check_files_and_tables $BACKUP_LIST ; then osd "Backup completed successfully." 5 6 echo "Backup passes all checks." COMPLETE_MSG="Last backup completed on `date '+%D @ %-I:%M %p'`" play_sound complete.wav STATUS=0 else osd "Backup FAILED." 5 6 echo "The backup is bad or already out of date!" COMPLETE_MSG="Last backup FAILED on `date '+%D @ %-I:%M %p'`" play_sound fail.wav STATUS=1 fi # Add Last backup status to menu item if grep "" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml >/dev/null 2>&1 then sed -i "s_\.*\_description\>$COMPLETE_MSG\<\/description_" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml else sed -i.orig " /NONE/ i\ \$COMPLETE_MSG\<\/description\>" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml fi # Now we can restart the backend. start_mythbackend # Unlock the system again... unlock_myth # Restart Mythwelcome or Mythfrontend if it was running. if [ $MWRUNNING -eq 1 ] then exec su mythtv -c "/usr/bin/mythwelcome" > /dev/null 2>&1 elif [ $FERUNNING -eq 1 ] then exec su mythtv -c "/usr/LH/bin/mythfrontend-start" > /dev/null 2>&1 fi exit $STATUS