You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
100 lines
3.0 KiB
# mysqlcrypt.sh
|
|
# This shell script will run KMyMoney in a MySql database
|
|
# and uses the MySql dump program to maintain a copy of the data.
|
|
# Additionally, another copy is written to a backup
|
|
# directory before running KMyMoney. These backups will be deleted after a
|
|
# user-specified number of days.
|
|
|
|
# Optionally, these data files may be encrypted.
|
|
# For encryption, it is necessary that you have the 'gpg' program installed,
|
|
# and have set up a key identified by an email address (which may be a pseudo address).
|
|
# See 'man gpg' for more info. The kgpg program will help set up these keys.
|
|
# DO NOT forget the password associated with gpg; you will need it to access your data.
|
|
|
|
# Optionally, the data can be removed from the database after KMyMoney finishes,
|
|
# and reloaded next time you run.
|
|
|
|
# It is assumed that your logon user name has the necessary database permissions.
|
|
|
|
# Please set the following variables to your requirements
|
|
MYDIR=$HOME/money # directory where the encrypted copy is to be held
|
|
BUDIR=$MYDIR/backup # directory where the backups should go;
|
|
FILE=myfin # name for the encrypted copy
|
|
DBNAME=KMyMoney # mysql datbase name
|
|
DROP=y # (y/n) - whether to delete info from database after running kmm
|
|
SILENT=n # if set to y, backups will be deleted silently, else you will be asked
|
|
CRYPTEMAIL=me@googlemail.com # delete this line if you don't want encrypted copies
|
|
declare -i KEEP=7 # number of days to keep backups
|
|
# end of user-changeable directives
|
|
|
|
if [ ! -d $MYDIR ] ; then
|
|
mkdir $MYDIR;
|
|
fi
|
|
if [ ! -d $BUDIR ] ; then
|
|
mkdir $BUDIR;
|
|
fi
|
|
|
|
if [ -z $CRYPTEMAIL ]; then
|
|
EFILE=${FILE};
|
|
else
|
|
EFILE=${FILE}.gpg;
|
|
fi
|
|
|
|
declare NOW=`date +%Y%m%d%H%M%S`
|
|
|
|
if [ ! -f $MYDIR/$EFILE ] ; then
|
|
kdialog --warningcontinuecancel "A version of $FILE does not exist in $MYDIR.\nWhen KMyMoney starts, please open or create a file and use the 'File/Save as Database' function."
|
|
if [ $? -ne 0 ]; then
|
|
exit;
|
|
fi
|
|
KMMCMD=-n;
|
|
else
|
|
KMMCMD=sql://$USER@localhost/$DBNAME?driver=QMYSQL3
|
|
# backup file
|
|
cp $MYDIR/$EFILE $BUDIR/$NOW$EFILE
|
|
LOAD=y
|
|
mysql -e "use $DBNAME;" 2>/dev/null
|
|
if [ $? -eq 0 ]; then
|
|
kdialog --warningyesno "A $DBNAME database exists. Do you wish to run with this?\n If not, the database will be reloaded from the encrypted file"
|
|
if [ $? -eq 0 ]; then # replied yes
|
|
LOAD=n
|
|
fi;
|
|
fi;
|
|
if [ $LOAD = y ]; then
|
|
echo "Reloading from file"
|
|
if [ -z $CRYPTEMAIL ]; then
|
|
mysql <$MYDIR/$EFILE;
|
|
else
|
|
gpg --decrypt $MYDIR/$EFILE |mysql;
|
|
fi;
|
|
fi;
|
|
fi
|
|
#run kmymoney
|
|
kmymoney $KMMCMD
|
|
mysqldump --databases -R $DBNAME >$MYDIR/$FILE
|
|
if [ ! -z $CRYPTEMAIL ]; then
|
|
rm -f $MYDIR/$EFILE
|
|
gpg -e -r $CRYPTEMAIL $MYDIR/$FILE
|
|
rm $MYDIR/$FILE;
|
|
fi
|
|
|
|
case ${DROP:0:1} in
|
|
y | Y) mysql -e "drop database KMyMoney;";;
|
|
esac
|
|
|
|
# delete outdated backup files
|
|
cd $BUDIR
|
|
for i in `find . -name "*${EFILE}" -ctime +${KEEP}`; do
|
|
case ${SILENT:0:1} in
|
|
y | Y) ANSWER=y
|
|
;;
|
|
*) read -p "Delete $i?" ANSWER
|
|
;;
|
|
esac
|
|
case ${ANSWER:0:1} in
|
|
y | Y) echo "Deleting $i!"
|
|
rm $i
|
|
;;
|
|
esac
|
|
done
|