X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=src%2Fbackupninja.in;h=1dac55d918e344355931611791d792375c377344;hb=5297a4855d01d0b96a4842e2671269d2c604c427;hp=57936da1d4b2ce5a521dcbdae05c3ee7ed218aa7;hpb=489e294c50b6cba7545a110d26edd43e6b6e55ea;p=matthijs%2Fupstream%2Fbackupninja.git diff --git a/src/backupninja.in b/src/backupninja.in index 57936da..1dac55d 100755 --- a/src/backupninja.in +++ b/src/backupninja.in @@ -34,7 +34,7 @@ function setupcolors () { function colorize () { if [ "$usecolors" == "yes" ]; then - local typestr=`echo "$@" | sed 's/\(^[^:]*\).*$/\1/'` + local typestr=`echo "$@" | @SED@ 's/\(^[^:]*\).*$/\1/'` [ "$typestr" == "Debug" ] && type=0 [ "$typestr" == "Info" ] && type=1 [ "$typestr" == "Warning" ] && type=2 @@ -68,7 +68,7 @@ function printmsg() { type=$1 shift if [ $type == 100 ]; then - typestr=`echo "$@" | sed 's/\(^[^:]*\).*$/\1/'` + typestr=`echo "$@" | @SED@ 's/\(^[^:]*\).*$/\1/'` [ "$typestr" == "Debug" ] && type=0 [ "$typestr" == "Info" ] && type=1 [ "$typestr" == "Warning" ] && type=2 @@ -131,32 +131,40 @@ function msg { function check_perms() { local file=$1 + debug "check_perms $file" local perms - perms=($(stat -L --printf='%a %g %G %u %U' $file)) - local gperm=${perms[0]:1:1} - local wperm=${perms[0]:2:1} - local gid=${perms[1]} - local group=${perms[2]} - local owner=${perms[3]} + local owners + + perms=($(stat -L --format='%A' $file)) + debug "perms: $perms" + local gperm=${perms:4:3} + debug "gperm: $gperm" + local wperm=${perms:7:3} + debug "wperm: $wperm" + + owners=($(stat -L --format='%g %G %u %U' $file)) + local gid=${owners[0]} + local group=${owners[1]} + local owner=${owners[2]} if [ "$owner" != 0 ]; then echo "Configuration files must be owned by root! Dying on file $file" fatal "Configuration files must be owned by root! Dying on file $file" fi - if [ $wperm -gt 0 ]; then + if [ "$wperm" != '---' ]; then echo "Configuration files must not be world writable/readable! Dying on file $file" fatal "Configuration files must not be world writable/readable! Dying on file $file" fi - if [ $gperm -gt 0 ]; then + if [ "$gperm" != '---' ]; then case "$admingroup" in $gid|$group) :;; *) if [ "$gid" != 0 ]; then - echo "Configuration files must writable/readable by group ${perms[2]}! Dying on file $file" - fatal "Configuration files must writable/readable by group ${perms[2]}! Dying on file $file" + echo "Configuration files must not be writable/readable by group $group! Use the admingroup option in backupninja.conf. Dying on file $file" + fatal "Configuration files must not be writable/readable by group $group! Use the admingroup option in backupninja.conf. Dying on file $file" fi ;; esac @@ -170,7 +178,7 @@ function tolower() { # simple to integer function function toint() { - echo "$1" | tr -d [:alpha:] + echo "$1" | tr -d '[:alpha:]' } # @@ -196,7 +204,7 @@ function isnow() { whendayofweek=$1; at=$2; whentime=$3; whenday=`toint "$whendayofweek"` whendayofweek=`tolower "$whendayofweek"` - whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//' | sed -r 's/^([0-9])$/0\1/'` + whentime=`echo "$whentime" | @SED@ 's/:[0-9][0-9]$//' | @SED@ -r 's/^([0-9])$/0\1/'` if [ "$whendayofweek" == "everyday" -o "$whendayofweek" == "daily" ]; then whendayofweek=$nowdayofweek @@ -371,8 +379,8 @@ while [ $# -ge 1 ]; do singlerun=$2 processnow=1 else - echo "--run option must be fallowed by a backupninja action file" - fatal "--run option must be fallowed by a backupninja action file" + echo "--run option must be followed by a backupninja action file" + fatal "--run option must be followed by a backupninja action file" usage fi shift @@ -401,7 +409,7 @@ if [ ! -r "$conffile" ]; then fi # find $libdirectory -libdirectory=`grep '^libdirectory' $conffile | awk '{print $3}'` +libdirectory=`grep '^libdirectory' $conffile | @AWK@ '{print $3}'` if [ -z "$libdirectory" ]; then if [ -d "@libdir@" ]; then libdirectory="@libdir@" @@ -425,8 +433,12 @@ setfile $conffile # get global config options (second param is the default) getconf configdirectory @CFGDIR@/backup.d getconf scriptdirectory @datadir@ +getconf reportdirectory getconf reportemail +getconf reporthost +getconf reportspace getconf reportsuccess yes +getconf reportuser getconf reportwarning yes getconf loglevel 3 getconf when "Everyday at 01:00" @@ -436,11 +448,14 @@ getconf usecolors "yes" getconf SLAPCAT /usr/sbin/slapcat getconf LDAPSEARCH /usr/bin/ldapsearch getconf RDIFFBACKUP /usr/bin/rdiff-backup +getconf CSTREAM /usr/bin/cstream +getconf MYSQLADMIN /usr/bin/mysqladmin getconf MYSQL /usr/bin/mysql getconf MYSQLHOTCOPY /usr/bin/mysqlhotcopy getconf MYSQLDUMP /usr/bin/mysqldump getconf PGSQLDUMP /usr/bin/pg_dump getconf PGSQLDUMPALL /usr/bin/pg_dumpall +getconf PGSQLUSER postgres getconf GZIP /bin/gzip getconf RSYNC /usr/bin/rsync getconf admingroup root @@ -476,7 +491,11 @@ errormsg="" if [ "$singlerun" ]; then files=$singlerun else - files=`find $configdirectory -mindepth 1 -maxdepth 1 -type f ! -name '.*.swp' | sort -n` + files=`find $configdirectory -follow -mindepth 1 -maxdepth 1 -type f ! -name '.*.swp' | sort -n` + + if [ -z "$files" ]; then + fatal "No backup actions configured in '$configdirectory', run ninjahelper!" + fi fi for file in $files; do @@ -522,9 +541,24 @@ if [ $doit == 1 ]; then echo ${messages[$i]} done echo -e "$errormsg" - } | mail $reportemail -s "backupninja: $hostname $subject" + if [ "$reportspace" == "yes" ]; then + previous="" + for i in $(ls "$configdirectory"); do + backuploc=$(grep ^directory "$configdirectory"/"$i" | @AWK@ '{print $3}') + if [ "$backuploc" != "$previous" ]; then + df -h "$backuploc" + previous="$backuploc" + fi + done + fi + } | mail -s "backupninja: $hostname $subject" $reportemail fi if [ $actions_run != 0 ]; then info "FINISHED: $actions_run actions run. $fatals fatal. $errors error. $warnings warning." fi + +if [ -n "$reporthost" ]; then + debug "send $logfile to $reportuser@$reporthost:$reportdirectory" + rsync -qt $logfile $reportuser@$reporthost:$reportdirectory +fi