pre="${0##*/}:"
m() { printf "$pre %s\n" "$*"; "$@"; }
e() { printf "$pre %s\n" "$*"; }
-err() { echo "$pre: ERROR: $*" >&2; }
-mexit() { echo "$pre: exiting with status $1"; exit $1; }
+err() { echo "$pre ERROR: $*" >&2; }
+mexit() { echo "$pre exiting with status $1"; exit $1; }
##### begin command line parsing ########
-temp=$(getopt -l help owh "$@") || usage 1
+force=false
mp_args="-m /o,/q,/a"
+temp=$(getopt -l force,help owh "$@") || usage 1
eval set -- "$temp"
while true; do
case $1 in
+ --force) force=true ;;
-o) mp_args="-m /o"; shift ;;
-h|--help) usage ;;
--) shift; break ;;
case $1 in
push)
old_host=$HOSTNAME
+ old_hostname=$HOSTNAME
new_host=$2
- bbk_args="-s $old_host"
+ bbk_args="-t $new_host"
new_shell="ssh $new_host"
new_hostname=$($new_shell hostname)
;;
old_host=$2
new_host=$HOSTNAME
new_hostname=$HOSTNAME
- bbk_args="-t $new_host"
bbk_args="-s $old_host"
old_shell="ssh $old_host"
- # test ssh connection
- $old_shell :
+ # tests ssh connection
+ old_hostname=$($old_shell hostname)
;;
*)
err invalid first argument
source /a/bin/bash_unpublished/source-state
-if [[ $old_host != "$MAIL_HOST" ]]; then
- e "WARNING: \$old_host != \$MAIL_HOST. Sleeping for 5 seconds in case you want to reconsider"
- sleep 5
+if [[ $old_hostname != "$MAIL_HOST" ]] && ! $force; then
+ err "\$old_hostname($old_hostname) != \$MAIL_HOST($MAIL_HOST). Rerun with --force if you really want this."
+ mexit 1
fi
if [[ ! $new_host || ! $old_host ]]; then
fi
btrbk_test="systemctl is-active btrbk.service"
-while true; do
+active=true
+while $active; do
+ active=false
for shell in "$new_shell" "$old_shell"; do
e $shell $btrbk_test
status=$($shell $btrbk_test) ||:
case $status in
inactive|failed) : ;;
*)
+ # This covers conditions like "activating", which still return 3 from
+ # systemctl is-active.
+ active=true
e "btrbk active on shell:$shell, status:$status, sleeping 8 seconds"
sleep 8
- continue
+ break
;;
esac
done
- break
done
# ensure these are unused before doing anything
m $old_shell /a/exe/primary-setup $new_hostname
e Running main btrbk
-if ! m btrbk-run -v $bbk_args -m /o; then
- ret=$?
+m btrbk-run -v $bbk_args -m /o || ret=$?
+if (( ret )); then
bang="$(printf "$(tput setaf 5)█$(tput sgr0)%.0s" 1 2 3 4 5 6 7)"
e $bang failed btrbk of /o. restoring old host as primary
m $old_shell /a/exe/primary-setup localhost