#!/bin/ksh
#$Id: plbkup,v 1.126 2014/12/03 19:11:50 fulford Exp $
# $Source: /src/merlin/usr/local/etc/RCS/plbkup,v $
# $Revision: 1.126 $
# Author C W Fulford.
# Copyright 2013 (c) C W Fulford.
# Licensed for public use under the LGPL.
# For assistance contact fulford@fulford.net 0709 229 5385
##########################################################
cmd=`basename $0`
syntax="$cmd [-c <config_file>] [-d] [-e <email_rcpt>] [-l] [-n] [-p <psa_config>] [-t <type>] [-T(est)] [-v] <hostid>"
while [ $# -gt 0 ];do
case $1 in
-c)conf= $2;shift 2;;
-d)set -x;debug=:;shift;;
-e)rcpt=$2;shift 2;;
-l)log=:;shift;;
-n) encrypt=$2;shift 2;;
-p)rpsaconf=$2;shift 2;;
-T)testmode=:;shift;;
-t)type=$2;shift 2;;
-v)verbose=:;shift;;
*)hostid=$1;shift;;
esac
done
[ -z "$hostid" ]&&{ echo "syntax: $syntax">&2;exit 1;}
conf=${conf:-/usr/local/etc/plbkup.cf}
[ -r $conf ]||{ echo "$cmd: can't read $conf." >&2;exit 1 ;}
eval `sed $conf -ne '/^'$hostid':/,/^$/{
/^[ ][^#]/p
}'
`
[ -z "$ftpusr" ]&&{
echo "$cmd: FTP user name not found in $conf">&2
exit 1
}
[ -z "$ftpsrvr" ]&&{
echo "$cmd: FTP server not found in $conf">&2
exit 1
}
[ -z "$ftppass" ]&&{
echo "$cmd: FTP passwd not found in $conf">&2
exit 1
}
if [ "$encrypt" = "gpg" ];then
[ -z "$gpass" ] &&{
echo "$cmd: Can't find gpg passphrase in $conf">&2
exit 1
}
gpfile=${gpfile:-".gpg"}
fi
debug=${debug:-""}
verbose=${verbose:-""}
[ -z "$hostid" ]&& { echo "$syntax" >&2;exit 1;}
rpsaconf=${rpsaconf:-"/etc/psa/psa.conf"}
lpsaconf=/tmp/psaconf.$$
# fetch remote psa config file
[ $verbose ] && echo "$cmd: fetching remote psa configuration"
ssh $hostid "cat $rpsaconf" > $lpsaconf
DUMP_D=`awk <$lpsaconf '/^DUMP_D/{print $2}'`
PRODUCT_ROOT_D=`awk <$lpsaconf '/^PRODUCT_ROOT_D/{print $2}'` #plesk root
pleskbackup=${PRODUCT_ROOT_D}/bin/pleskbackup
td=`date +%y%m%d`
arc=${cmd}${td}.tar
arcz=${arc}.gz
[ "$encrypt" = "gpg" ] && arcg=${arcz}.gpg
log=${log:-""}
oldarc=${cmd}`date +%y%m%d -d "3 days ago"`.tar.gz
[ -n "$encrypt" ] && oldarc=$oldarc.$encrypt #make a resonable guess that
# old archives were encrypted too.
oldest=/tmp/oldest$$
rcpt=${rcpt:-"fulford@citylinux.com"}
tag="$cmd-$hostid"
[ $testmode ] && rem="#"
type=${type:-"server"}
_end () {
e_val=$1
read msg
[ $log ] && logger -t $tag "$msg"
mailx -s "$cmd on $hostid - $msg" $rcpt </dev/null
exit $e_val
}
msg="backup started"
[ $verbose ] && echo "$cmd: $msg"
[ $log ]&& logger -t "$tag" "$msg"
# Clear out existing. pleskbackup retains large date stamped
# intermediate backups.
if [ `ssh $hostid "cd $DUMP_D &&{
sudo rm -r archives backup_* clients domains migration.log mysql.daily* 2>/dev/null;ls |sed -e '/'$ignore'/d'|wc -l
}" ` -eq 0 ]
then
[ $verbose ] && echo "$cmd: $hostid repository cleared"
if [ $testmode ];then
ar=0
ssh $hostid "cd $DUMP_D;sudo cp /etc/group $arc"
else
stime=`date "+%H:%M"`
ssh $hostid "cd $DUMP_D &&{
[ $verbose ]&& echo \"$cmd: pleskbackup started $stime\"
[ $verbose ]&& option=\"-v\"
sudo $pleskbackup $type $option --output-file=$arc
ar=$?
}
"
fi
else
msg="Unexpected items in bagging area"
[ $verbose ]&& echo "$cmd: $msg" >&2
echo "failed. $msg"|_end
fi
if [ "$ar" -gt 0 ];then
msg="failed to create $arc"
[ $verbose ] && echo "$cmd: $msg" >&2
echo "$msg"| _end 1
else
ssh $hostid "cd $DUMP_D; sudo gzip $arc"
if ssh $hostid "[ -f $DUMP_D/$arcz ]";then
msg="creation of $arcz completed"
if [ "$encrypt" = "gpg" ];then
echo $gpass |
ssh $hostid "cd $DUMP_D;sudo dd of=.gpg 2>/dev/null
sudo $encrypt -c --batch --passphrase-file .gpg $arcz 2>/dev/null &&
sudo rm $arcz .gpg
"
fi
else
msg="creation of $arcz failed">&2
echo "$msg"| _end 1
fi
# create lftp bookpoints file
bookpoints="/root/.lftp/bookmarks"
echo "plbkup ftp://kab222793:icnoway24sit@backupserver.info"|(ssh $hostid "sudo dd of=$bookpoints") 2>/dev/null
[ $testmode ] && msg="test creation of $arcz completed"
[ $verbose ] && echo "$cmd: $msg"
[ $debug ] && ftpdebug="debug"
ssh $hostid "cd $DUMP_D &&
# "plbkup" is the lftp bookmark
sudo lftp <<- .
$ftpdebug
set ftp:ssl-allow true
open plbkup
${rem}put -E ${arcg:=$arcz}
bye
.
"
#lftp put -E removes source file if transfer successful
if ssh $hostid "[ -f $DUMP_D/${arcg:=$arcz} ]";then
msg="transfer of $arc\ failed."
echo $msg|_end 1
else
msg="transfer of $arcz completed"
[ $verbose ] && echo "$cmd: $msg"
# so remove old archive
ssh $hostid "cd $DUMP_D &&
sudo lftp <<- .
$ftpdebug
open plbkup
ls
bye
.
"|awk 'NR == 1{print $9}'>$oldest
oldarc=$(<$oldest)
ssh $hostid "
sudo lftp <<- .
$ftpdebug
open plbkup
$rem rm $oldarc
bye
.
sudo rm $bookpoints
"
fi
rm $lpsaconf $oldest
echo $msg|_end 0
fi
######################################################################
# This program is free software: you can redistribute it and or #
# modify it under the terms of the Lesser GNU General Public License #
# as published by the Free Software Foundation, either version 3 of #
# the License, or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# A copy of the Lesser GNU General Public License and the GNU #
# General Public License is available at #
# <http://www.gnu.org/licenses/>. #
######################################################################
Copyright
© 2003-2017
Clifford W Fulford.
Fulford Consulting Ltd.
Regd. Co. 4250037 in England & Wales.
Regd. office 162, Edward Rd. Nottingham NG2 5GF, England, UK.
Related web sites: City Linux | Flare Support | West Bridgford | Fulford Portal | Joan Mary Fulford (Nottingham Writer) | Fulford Gallery | Amharic Interpreter | Arabic Interpreter | Tigrinya Interpreter
The layout and associated style sheets for this page are taken from the World Wide Web Consortium and used here under the W3C software licence.