dup-live-disk.sh: change some messages, echorun() -> echorun_maybe()

This commit is contained in:
2022-03-08 11:46:40 +01:00
parent 78dc9f765f
commit 2aadd7bc51

View File

@@ -138,7 +138,7 @@ Options:
Default is 'ask' Default is 'ask'
-h, --help this help -h, --help this help
-m, --man display a "man-like" page and exit -m, --man display a "man-like" page and exit
--mariadb=ACTION stop and restart mysql/mariadb server before and -M, --mariadb=ACTION stop and restart mysql/mariadb server before and
after copies ('yes', 'no', 'ask'). after copies ('yes', 'no', 'ask').
Default is 'ask' Default is 'ask'
-n, --no Will answer 'no' to any question -n, --no Will answer 'no' to any question
@@ -177,8 +177,8 @@ function log {
return 0 return 0
} }
# prints out and run a command. # prints out and run (maybe) a command.
function echorun { function echorun_maybe {
if [[ "$DRYRUN" == 'yes' ]]; then if [[ "$DRYRUN" == 'yes' ]]; then
log "dry-run: %s" "$*" log "dry-run: %s" "$*"
else else
@@ -212,28 +212,6 @@ yesno() {
done done
} }
function error_handler {
local ERROR=$2
log "FATAL: Error line $1, exit code $2. Aborting."
exit "$ERROR"
}
trap 'error_handler $LINENO $?' ERR SIGHUP SIGINT SIGTERM
function exit_handler {
local mnt
# log "exit handler (at line $1)"
mariadb_maybe_start
if [[ -n "$DSTMNT" ]] && mountpoint -q "$DSTMNT"; then
for mnt in "$DSTMNT"/{dev,proc,sys}; do
if mountpoint -q "$mnt"; then
echorun umount "$mnt"
fi
done
fi
}
trap 'exit_handler $LINENO' EXIT
# mariadb start/stop # mariadb start/stop
function mariadb_maybe_stop { function mariadb_maybe_stop {
[[ $MARIADBSTOPPED == yes ]] && return 0 [[ $MARIADBSTOPPED == yes ]] && return 0
@@ -249,7 +227,7 @@ function mariadb_maybe_stop {
log "Warning: MariaDB/MySQL is running, database corruption possible on DEST disk." log "Warning: MariaDB/MySQL is running, database corruption possible on DEST disk."
return 0 return 0
fi fi
echorun systemctl stop mariadb echorun_maybe systemctl stop mariadb
# bug if script stops here # bug if script stops here
MARIADBSTOPPED=yes MARIADBSTOPPED=yes
else else
@@ -260,12 +238,34 @@ function mariadb_maybe_stop {
function mariadb_maybe_start { function mariadb_maybe_start {
if [[ $MARIADB == yes && $MARIADBSTOPPED == yes ]]; then if [[ $MARIADB == yes && $MARIADBSTOPPED == yes ]]; then
#log -n "restarting mariadb/mysql... " #log -n "restarting mariadb/mysql... "
echorun systemctl start mariadb echorun_maybe systemctl start mariadb
MARIADBSTOPPED=no MARIADBSTOPPED=no
#log "done." #log "done."
fi fi
} }
function error_handler {
local ERROR=$2
log "FATAL: Error line $1, exit code $2. Aborting."
exit "$ERROR"
}
trap 'error_handler $LINENO $?' ERR SIGHUP SIGINT SIGTERM
function exit_handler {
local mnt
# log "exit handler (at line $1)"
mariadb_maybe_start
if [[ -n "$DSTMNT" ]] && mountpoint -q "$DSTMNT"; then
for mnt in "$DSTMNT"/{dev,proc,sys}; do
if mountpoint -q "$mnt"; then
echorun_maybe umount "$mnt"
fi
done
fi
}
trap 'exit_handler $LINENO' EXIT
function check_block_device { function check_block_device {
local devtype="$1" local devtype="$1"
local mode="$2" local mode="$2"
@@ -288,13 +288,14 @@ function check_block_device {
# check that /etc/fstab.DESTLABEL exists in SRC disk. # check that /etc/fstab.DESTLABEL exists in SRC disk.
function check_fstab { function check_fstab {
local fstab="${AUTOFS_DIR}/$SRCROOTLABEL/etc/fstab.$DSTROOTLABEL" local etc="${AUTOFS_DIR}/$SRCROOTLABEL/etc"
local fstab="fstab.$DSTROOTLABEL"
#if [[ "$FSTAB" != no ]]; then #if [[ "$FSTAB" != no ]]; then
if [[ ! -f "$fstab" ]]; then if [[ ! -f "$etc/$fstab" ]]; then
FSTAB=no FSTAB=no
log "Warning: No target fstab (%s) on SRC disk" "$fstab" log "Warning: No target fstab (%s) on SRC disk" "$etc/$fstab"
else else
log "Info: target fstab (%s) exists on SRC disk" "$fstab" log "Info: Found target fstab (%s) in SRC root partition (%s)." "$fstab" "$etc"
fi fi
return 0 return 0
} }
@@ -309,7 +310,7 @@ function fix_fstab {
if [[ "$FSTAB" == no ]]; then if [[ "$FSTAB" == no ]]; then
log "Warning: DST fstab will be *wrong*, boot is compromised" log "Warning: DST fstab will be *wrong*, boot is compromised"
else else
echorun ln -f "$fstab.$DSTROOTLABEL" "$fstab" echorun_maybe ln -f "$fstab.$DSTROOTLABEL" "$fstab"
fi fi
return 0 return 0
} }
@@ -338,6 +339,7 @@ COPY=ask # do FS copies
MARIADB=ask # stop/start mysql/mariadb MARIADB=ask # stop/start mysql/mariadb
MARIADBSTOPPED=no # mysql stopped ? MARIADBSTOPPED=no # mysql stopped ?
YESNO= # default answer YESNO= # default answer
ROOTCOPIED=no # was root partition copied ?
# short and long options # short and long options
SOPTS="a:c:df:g:hM:m:nr:y" SOPTS="a:c:df:g:hM:m:nr:y"
@@ -579,8 +581,9 @@ for ((i=0; i<${#LABELS[@]}; ++i)); do
if [[ "$copy" == yes ]]; then if [[ "$copy" == yes ]]; then
mariadb_maybe_stop mariadb_maybe_stop
# shellcheck disable=SC2086 # shellcheck disable=SC2086
echorun rsync "$FILTER" ${RSYNCOPTS} "$SRCPART" "$DSTPART" echorun_maybe rsync "$FILTER" ${RSYNCOPTS} "$SRCPART" "$DSTPART"
if [[ "$DSTROOTLABEL" == "${DSTLABELS[$i]}" ]]; then if [[ "$DSTROOTLABEL" == "${DSTLABELS[$i]}" ]]; then
ROOTCOPIED=yes
fix_fstab fix_fstab
fi fi
fi fi
@@ -595,18 +598,22 @@ if [[ $GRUB == ask ]]; then
fi fi
fi fi
if [[ $GRUB == no ]]; then if [[ $GRUB == no ]]; then
log "Warning: Skipping grub install on %s, boot %s will maybe fail." "$DST" if [[ $ROOTCOPIED == yes ]]; then
log "Warning: root filesystem changed, and skipping grub install on %s, boot will probably fail." "$DST"
else
log "Warning: Skipping grub install on %s." "$DST"
fi
else else
log "installing grub on $DST..." log "installing grub on $DST..."
DSTMNT="$AUTOFS_DIR/$DSTROOTLABEL" DSTMNT="$AUTOFS_DIR/$DSTROOTLABEL"
# mount virtual devices # mount virtual devices
echorun mount -o bind /sys "$DSTMNT/sys" echorun_maybe mount -o bind /sys "$DSTMNT/sys"
echorun mount -o bind /proc "$DSTMNT/proc" echorun_maybe mount -o bind /proc "$DSTMNT/proc"
echorun mount -o bind /dev "$DSTMNT/dev" echorun_maybe mount -o bind /dev "$DSTMNT/dev"
echorun chroot "$DSTMNT" update-grub echorun_maybe chroot "$DSTMNT" update-grub
echorun chroot "$DSTMNT" grub-install "$DST" echorun_maybe chroot "$DSTMNT" grub-install "$DST"
fi fi
exit 0 exit 0