avoid multiple time zones
[distro-setup] / btrbk-run
index 71b0e6b76c939a2c36f085a93dd947adb0a49029..f0f16bda44f3013bc48ec4ed10c1c1955cbd8d9c 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
@@ -203,8 +214,9 @@ ssh_identity /root/.ssh/home
 # transaction info.
 transaction_syslog local7
 
-# 20%ish speedup[]
-stream_buffer 512m
+# note, i had this because man said 20% speedup, but ran into
+# this issue, https://github.com/digint/btrbk/issues/275
+#stream_buffer 512m
 
 # so we only run one at a time
 lockfile                   /var/lock/btrbk.lock
@@ -233,9 +245,15 @@ EOF
 
 
 
-for tg in ${targets[@]:-$HOSTNAME}; do
-  # for an initial run, btrbk requires the dir to exist.
-  ssh root@$tg mkdir -p /mnt/root/btrbk
+# for an initial run, btrbk requires the dir to exist.
+mkdir -p /mnt/root/btrbk
+local_zone=$(date +%z)
+for h in ${targets[@]} $source; do
+  zone=$(ssh root@$h "mkdir -p /mnt/root/btrbk; date +%z")
+  if [[ $zone != $local_zone ]]; then
+    echo "error: error. dont confuse yourself with multiple time zones. $h has different timezone than localhost" >&2
+    exit 1
+  fi
 done