destinations=""
# Default settings, can be overwritten in backup-script.conf:
-conf_d="/etc/backup-script.d"
+[ -d "/usr/local/etc/backup-script.d" ] \
+ && conf_d="/usr/local/etc/backup-script.d" \
+ || conf_d="/etc/backup-script.d"
pre_exec=""
post_exec=""
default_source_root="/"
-default_target=""
+default_target="/var/backups"
default_user="root"
default_ssh_args_add=""
default_rsync_args_add=""
default_exclude_args_add=""
+default_exclude_dirs_add=""
default_compress=1
default_ping=1
default_local=0
echo
echo "When no <system> is given, all defined systems are used."
echo
- exit 1
+ echo -e $config_info
+ echo
+ exit 2
}
CleanUp() {
return 0
}
+# Search configuration file (last one is used as default!)
+for conf in \
+ "/usr/local/etc/backup-script.conf" \
+ "/etc/backup-script.conf" \
+ "${conf_d}/backup-script.conf" \
+ "/usr/local/etc/backup-script.conf" \
+; do
+ [ -r "$conf" ] && break
+done
+
+# Read in configuration file
+config_info="Configuration file is \"$conf\""
+if [ -r "$conf" ]; then
+ source "$conf"
+else
+ config_info="${config_info} (not readable, using defaults)"
+fi
+config_info="${config_info},\nusing \"$conf_d\" as configuration directory."
+
while [ $# -gt 0 ]; do
case "$1" in
"-n"|"--dry-run")
trap GotSignal SIGINT
echo -n "Started: "; date
-
-for conf in "/etc/backup-script.conf" "${conf_d}/backup-script.conf"; do
- if [ -r "$conf" ]; then
- echo "Reading configuration: \"$conf\" ..."
- source "$conf"
- fi
-done
+echo -e $config_info
echo
if [ $# -ge 1 ]; then
for s in "$@"; do
if [ ! -r "${conf_d}/$s" ]; then
echo "$NAME: Can' read \"${conf_d}/$s\"!"
- exit 1
+ exit 3
fi
sys="$sys ${conf_d}/$s"
done
echo
echo -n "Aborted: "; date
echo
- exit 3
+ exit 4
fi
touch "$PIDFILE" 2>/dev/null
if [ $? -ne 0 ]; then
echo "Error: pre-exec command failed!"; echo
CleanUp
echo "Aborting backup."; echo
- exit 2
+ exit 5
fi
sleep 2
echo
ssh_args_add="$default_ssh_args_add"
rsync_args_add="$default_rsync_args_add"
exclude_args_add="$default_exclude_args_add"
+ exclude_dirs_add="$default_exclude_dirs_add"
compress="$default_compress"
ping="$default_ping"
local="$default_local"
post_exec="$post_exec_saved"
# Validate configuration
- [ "$system" = "localhost" -o "$system" = "127.0.0.1" ] && local=1
+ if [ "$system" = "localhost" -o "$system" = "127.0.0.1" ]; then
+ # Local system
+ local=1
+ compress=0
+ fi
# Make sure "source" ends with a slash ("/")
case "$source" in
source="$source/"
esac
+ # Make sure "target" DOESN'T end with a slash ("/")
+ case "$target" in
+ "*/")
+ target=$( echo "$target" | sed -e 's/\/$//g' )
+ ;;
+ esac
+
[ "$system" = "$fname" ] \
&& systxt="\"$system\"" \
|| systxt="\"$fname\" [\"$system\"]"
cmd="$cmd --exclude=/var/cache/apt --exclude=/var/log"
fi
[ -n "$exclude_args_add" ] && cmd="$cmd $exclude_args_add"
+ for dir in $exclude_dirs_add; do
+ cmd="$cmd --exclude=$dir"
+ done
[ -n "$rsync_args_add" ] && cmd="$cmd $rsync_args_add"
[ "$local" -eq 0 ] \
if [ $ret -eq 20 ]; then
echo "Backup of \"$system\" interrupted. Aborting ..."
- CleanUp
- exit 1
+ GotSignal
fi
echo -n "End date: "; date
sync
-paths=$( echo $destinations | sed -e 's/ /\n/g' | sort | uniq )
-if [ "$DRYRUN" -eq 0 -a -n "$paths" ]; then
- df -h $paths
- echo
+if [ "$DRYRUN" -eq 0 ]; then
+ paths=""
+ paths_zfs=""
+ for dest in $(echo $destinations | sed -e 's/ /\n/g' | sort | uniq); do
+ fs=$(GetFS "$dest")
+ case $fs in
+ "zfs" )
+ paths_zfs="$paths_zfs $dest"
+ ;;
+ *)
+ paths="$paths $dest"
+ esac
+ done
+ if [ -n "$paths" ]; then
+ df -h $paths
+ echo
+ fi
+ if [ -n "$paths_zfs" ]; then
+ zfs list $paths_zfs
+ echo
+ fi
fi
CleanUp
if [ $count_started -ne $count_ok ]; then
echo "-----> THERE HAVE BEEN ERRORS! <-----"
echo
+ exit 6
+elif [ $count_all -ne $count_started ]; then
+ exit 7
fi
# -eof-