lots of fixes
[distro-setup] / btrbk-run
index 71b0e6b76c939a2c36f085a93dd947adb0a49029..5e1a8883c0beece80987269249b91dbb842262e2 100644 (file)
--- a/btrbk-run
+++ b/btrbk-run
@@ -40,11 +40,7 @@ if [[ -e /b/bash_unpublished/source-semi-priv ]]; then
   source /b/bash_unpublished/source-semi-priv
 fi
 
-script_dir=$(dirname $(readlink -f "$BASH_SOURCE"))
-
 # note q is owned by root:1000
-# note p/m is owned 1000:1000 and chmod 700
-
 
 mountpoints=()
 
@@ -56,13 +52,18 @@ dry_run=false # mostly for testing
 rate_limit=no
 verbose=true; verbose_arg=-v
 progress_arg="--progress"
+pull_reexec=false
 
 default_args_file=/etc/btrbk-run.conf
 if [[ -s $default_args_file ]]; then
   set -- $(< $default_args_file) "$@"
+  echo "$0: warning: default btrbk-run options set in $default_args_file (sleeping 5 seconds):"
+  cat $default_args_file
+  sleep 5
 fi
 
-temp=$(getopt -l help cl:m:nps:t:vh "$@") || usage 1
+orig_args=("$@")
+temp=$(getopt -l pull-reexec,help cl:m:nps:t:vh "$@") || usage 1
 eval set -- "$temp"
 while true; do
   case $1 in
@@ -74,6 +75,7 @@ while true; do
     -m) IFS=, mountpoints=($2); unset IFS; shift 2 ;;
     -n) dry_run=true; dry_run_arg=-n; shift ;;
     -p) progress_arg="--progress"; shift ;;
+    --pull-reexec) pull_reexec=true; shift ;;
     -q) verbose=false; verbose_arg=; progress_arg=; shift ;;
     # source host to receive a backup from
     -s) source=$2; shift 2 ;;
@@ -90,18 +92,27 @@ done
 # usefull commands are resume and archive
 cmd_arg=${1:-run}
 
-if [[ -s $default_args_file ]]; then
-  echo "$0: warning: default btrbk-run options set in $default_args_file (sleeping 5 seconds):"
-  cat $default_args_file
-  sleep 5
-fi
-
 if [[ -v targets && $source ]]; then
   echo "$0: error: -t and -s are mutually exclusive" >&2
   exit 1
 fi
 
+# pull_reexec stops us from getting into an infinite loop if there is some
+# kind of weird problem
+if ! $pull_reexec && [[ $source ]]; then
+  tmpf=$(mktemp)
+  scp $source:/a/bin/distro-setup/btrbk-run $tmpf
+  if diff -q $tmpf $BASH_SOURCE; then
+    echo "$0: found newer version on host $source. reexecing"
+    install -T $tmpf /usr/local/bin/btrbk-run
+    /usr/local/bin/btrbk-run --pull-reexec "${orig_args[@]}"
+  fi
+fi
+
+
 echo -e "$0: options: conf_only=$conf_only\ndry_run=$dry_run\nrate_limit=$rate_limit\nverbose=$verbose\ncmd_arg=$cmd_arg"
+### end options parsing
+
 
 # set default targets
 if [[ ! -v targets && ! $source ]]; then