lots of fixes
[distro-setup] / btrbk-run
old mode 100755 (executable)
new mode 100644 (file)
index 6024229..5e1a888
--- a/btrbk-run
+++ b/btrbk-run
@@ -24,18 +24,23 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 usage() {
   cat <<'EOF'
 btrbk-run [OPTIONS]
-usually -t TARGET_HOST
+usually -t TARGET_HOST or -s SOURCE_HOST
+
+Note, at source location, intentionally not executable, run and read
+install-my-scripts.
+
 EOF
   echo "top of script file:"
   sed -n '1,/^[# ]*end command line/{p;b};q' "$0"
   exit $1
 }
 
-script_dir=$(dirname $(readlink -f "$BASH_SOURCE"))
+# latest $MAIL_HOST
+if [[ -e /b/bash_unpublished/source-semi-priv ]]; then
+  source /b/bash_unpublished/source-semi-priv
+fi
 
 # note q is owned by root:1000
-# note p/m is owned 1000:1000 and chmod 700
-
 
 mountpoints=()
 
@@ -47,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
@@ -65,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 ;;
@@ -81,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
@@ -129,35 +149,37 @@ if [[ $source ]]; then
 fi
 
 
-
-# set default mountpoints
-case $HOSTNAME in
-  # no remote backups atm. note, if we do enable this, configuration below will need some changes.
-  #  frodo)
-  #    prospective_mps=(/i)
-  #    ;;
-  *)
-    prospective_mps=(/a /q)
-    if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
-      prospective_mps+=(/o)
+if [[ $mountpoints ]]; then
+  for mp in ${mountpoints[@]}; do # default mountpoints to sync
+    if [[ -e /nocow/btrfs-stale/$mp ]]; then
+      echo "$0: error: $mp is stale, mount-latest-subvol first"
+      exit 1
     fi
-    ;;
-esac
-case ${targets[0]} in
-  kw|kww)
-    prospective_mps=(/a)
-    ;;
-esac
-
-for mp in ${prospective_mps[@]}; do # default mountpoints to sync
-  if [[ -e /nocow/btrfs-stale/$mp ]]; then
-    echo "$0: warning: $mp stale, not adding to default mountpoints"
-    continue
-  fi
-  if awk '{print $2}' /etc/fstab | grep -xF $mp &>/dev/null; then
-    mountpoints+=($mp)
-  fi
-done
+  done
+else
+  # set default mountpoints
+  case $HOSTNAME in
+    # no remote backups atm. note, if we do enable this, configuration below will need some changes.
+    #  frodo)
+    #    prospective_mps=(/i)
+    #    ;;
+    *)
+      prospective_mps=(/a /q)
+      if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
+        prospective_mps+=(/o)
+      fi
+      ;;
+  esac
+  for mp in ${prospective_mps[@]}; do # default mountpoints to sync
+    if [[ -e /nocow/btrfs-stale/$mp ]]; then
+      echo "$0: warning: $mp stale, not adding to default mountpoints"
+      continue
+    fi
+    if awk '{print $2}' /etc/fstab | grep -xF $mp &>/dev/null; then
+      mountpoints+=($mp)
+    fi
+  done
+fi
 
 echo "mountpoints: ${mountpoints[*]}"
 
@@ -264,6 +286,7 @@ fi
 
 if $dry_run; then
   m btrbk -v -n $cmd_arg
+  exit 0
 elif [[ $cmd_arg == archive ]]; then
   if [[ $source ]]; then
     m btrbk $verbose_arg $progress_arg $cmd_arg ssh://$source$vol $vol
@@ -294,11 +317,11 @@ if mountpoint $rsync_mountpoint >/dev/null; then
   done
 fi
 
-PATH=$script_dir:$PATH
+/a/bin/distro-setup/install-my-scripts
 if [[ $source ]]; then
   m mount-latest-subvol
 else
-  m mount-latest-remote ${targets[@]}
+  m /a/exe/mount-latest-remote ${targets[@]}
 fi
 
 # todo: move variable data we don't care about backing up