restore_new_btrbk=false
restore_old_btrbk=false
-errcatch-cleanup() {
+err-cleanup() {
if $restore_new_btrbk; then
e WARNING: due to failure, btrbk.timer may need manual restoration:
e $new_shell sudo systemctl start btrbk.timer
pre="${0##*/}:"
m() { printf "$pre %s\n" "$*"; "$@"; }
e() { printf "$pre %s\n" "$*"; }
-err() { echo "[$(date +'%Y-%m-%d %H:%M:%S%z')]: $pre: $*" >&2; }
-mexit() { echo "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 ;;
(( $# == 2 )) || usage 1
+if [[ ! $HOSTNAME ]]; then
+ err '$HOSTNAME is unset'
+ mexit 1
+fi
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"
- old_host=$HOSTNAME
+ new_hostname=$($new_shell hostname)
;;
pull)
old_host=$2
- bbk_args="-t $new_host"
- bbk_args="-s $old_host"
new_host=$HOSTNAME
+ new_hostname=$HOSTNAME
+ bbk_args="-s $old_host"
old_shell="ssh $old_host"
+ # tests ssh connection
+ old_hostname=$($old_shell hostname)
;;
*)
err invalid first argument
;;
esac
-
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
mexit 1
fi
-e $new_shell hostname
-new_hostname=$($new_shell hostname)
########### end initial processing, begin actually modifying things ##########
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