X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=switch-mail-host;h=df0b83605ee25fc8c7743504d18a5698278a2916;hp=eafe1044c0816c19aa7522b94445d6a3de7cec78;hb=a1ebefe19ab910d20fad0c2fd88637fee23dee7c;hpb=7f759d320592e791a62cd0a966350e8c53ee0976 diff --git a/switch-mail-host b/switch-mail-host index eafe104..df0b836 100644 --- a/switch-mail-host +++ b/switch-mail-host @@ -38,16 +38,18 @@ err-cleanup() { 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 ;; @@ -66,8 +68,9 @@ 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" new_hostname=$($new_shell hostname) ;; @@ -75,11 +78,10 @@ case $1 in 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 @@ -89,9 +91,9 @@ 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 @@ -112,20 +114,24 @@ if $old_shell systemctl is-active btrbk.timer; 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 @@ -162,8 +168,8 @@ fi 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