summaryrefslogtreecommitdiff
path: root/scripts/bkp.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/bkp.sh')
-rwxr-xr-xscripts/bkp.sh94
1 files changed, 94 insertions, 0 deletions
diff --git a/scripts/bkp.sh b/scripts/bkp.sh
new file mode 100755
index 0000000..0ad3a1e
--- /dev/null
+++ b/scripts/bkp.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+set -o nounset
+
+declare INC_PATH="./inc"
+declare CONF_PATH="."
+
+declare l_res
+
+export arg_source_machine
+export cfg_source_possible_addresses
+export cfg_rsh_command
+export cfg_rsync_copy_opts
+export cfg_rsync_reporting_opts
+export cfg_rsync_exclude_basepath
+export cfg_rsync_source_paths
+export cfg_rsync_dest_basepath
+export runtime_source_address
+export log_type log_message
+
+source "$INC_PATH/functions.sh"
+
+parse_args "$@"
+l_res=$?
+if [ $l_res -ne 0 ]
+then print_usage
+ exit 1
+fi
+
+log_type=LOG_ERR
+log_message="Curent environnement is not usable, aborting"
+run_or_die 2 check_env
+
+log_type=LOG_ERR
+log_message="Unable to load conf for '$arg_source_machine'"
+run_or_die 3 load_conf "$CONF_PATH/bkp.ini" "$arg_source_machine"
+
+log LOG_NOTICE main "Starting backup of '$arg_source_machine'"
+
+log_type=LOG_ERR
+log_message="Unable to reach '$arg_source_machine'"
+run_or_die 4 find_source_address "$cfg_source_possible_addresses"
+
+log LOG_NOTICE main "Source machine '$arg_source_machine' will be accessed via '${runtime_source_address:-localhost}'"
+
+if [ -z "$runtime_source_address" ]
+then runtime_rsh_command=""
+ runtime_rsync_src=""
+else runtime_rsh_command="$cfg_rsh_command"
+ runtime_rsync_src="$runtime_source_address:"
+fi
+
+if [ "isset" == "${cfg_pre_backup_remote_script_path:+isset}" ]
+then log_type=LOG_ERR
+ log_message="Unable to execute pre_backup_script on '$arg_source_machine'"
+ eval "echo $runtime_rsh_command $runtime_source_address $cfg_pre_backup_remote_script_path"
+ run_or_die 5 eval "$runtime_rsh_command $runtime_source_address $cfg_pre_backup_remote_script_path"
+fi
+
+runtime_rsync_dest_basepath="$cfg_rsync_dest_basepath/$arg_source_machine"
+runtime_rsync_opts="$cfg_rsync_copy_opts $cfg_rsync_reporting_opts"
+
+l_oldifs=$IFS
+IFS=", "
+for runtime_rsync_source_path in $cfg_rsync_source_paths
+do
+ runtime_rsync_dest_lastpath="$(basename $runtime_rsync_source_path)"
+ [ "$runtime_rsync_dest_lastpath" == "/" ] && runtime_rsync_dest_lastpath="rootfs"
+
+ log LOG_NOTICE main "Starting backup from ${runtime_rsync_src}${runtime_rsync_source_path} to $runtime_rsync_dest_basepath/$runtime_rsync_dest_lastpath"
+
+ runtime_rsync_exclude_opts=""
+ if [ -n "$cfg_rsync_exclude_basepath" ]
+ then runtime_rsync_exclude_file="$cfg_rsync_exclude_basepath/$arg_source_machine/exclude-$runtime_rsync_dest_lastpath.lst"
+ if [ -r "$runtime_rsync_exclude_file" ]
+ then runtime_rsync_exclude_opts="--exclude-from=$runtime_rsync_exclude_file --delete-excluded"
+ else log LOG_NOTICE main "No exclude file : '$runtime_rsync_exclude_file'"
+ fi
+ fi
+
+ rsync -e "$runtime_rsh_command" $runtime_rsync_opts $runtime_rsync_exclude_opts "${runtime_rsync_src}${runtime_rsync_source_path}/" "$runtime_rsync_dest_basepath/$runtime_rsync_dest_lastpath/" | tee "$runtime_rsync_dest_basepath/$runtime_rsync_dest_lastpath.log"
+ l_res=$?
+ if [ $l_res -ne 0 ]
+ then log LOG_WARN rsync "rsync has returned a non-0 code : '$l_res'"
+ fi
+ log LOG_NOTICE main "Ending backup"
+ sync
+done
+IFS="$l_oldifs"
+
+if [ "isset" == "${cfg_post_backup_remote_script_path:+isset}" ]
+then log_type=LOG_ERR
+ log_message="Unable to execute post_backup_script on '$arg_source_machine'"
+ run_or_die 6 eval "$runtime_rsh_command $runtime_source_address $cfg_post_backup_remote_script_path"
+fi