Current File : //usr/local/jetapps/usr/share/rear/prep/default/040_check_backup_and_output_scheme.sh |
#
# Check conditions that depend on BACKUP_URL or OUTPUT_URL
# in particular conditions that depend on their schemes.
#
if test "$BACKUP_URL" ; then
local backup_scheme="$( url_scheme "$BACKUP_URL" )"
case "$backup_scheme" in
(iso)
case $WORKFLOW in
(mkrescue|mkbackuponly)
# When the backup is configured to be in the ISO (e.g. via BACKUP_URL="iso:///mybackup")
# only "rear mkbackup" results an ISO (or ISOs cf. https://github.com/rear/rear/issues/1545)
# that is/are usable for "rear recover". When the backup is configured to be in the ISO
# the mkrescue workflow results an ISO without backup which lets "rear recover"
# fail with "ERROR: Backup archive 'backup.tar.gz' not found."
# cf. https://github.com/rear/rear/issues/1547 and https://github.com/rear/rear/issues/1545
# and the mkbackuponly workflow exits with exit code 0 but results no ISO at all
# cf. https://github.com/rear/rear/issues/1548
# so that mkrescue and mkbackuponly usually do not work for the 'iso' backup scheme.
# But there are special cases where mkrescue/mkbackuponly with BACKUP_URL=iso is used
# so that we cannot error out in any case, cf. https://github.com/rear/rear/issues/1613
# Accordingly a UserInput dialog that errors out by default to be on the safe side is used
# to provide a ready for use mean of final power to the user to enforce what ReaR must do:
prompt="Proceed regardless that '$WORKFLOW' could be destructive with a '$backup_scheme' BACKUP_URL ?"
workflow_uppercase="$( tr '[:lower:]' '[:upper:]' <<< $WORKFLOW )"
local user_input_ID="BACKUP_URL_ISO_PROCEED_$workflow_uppercase"
input_value=""
wilful_input=""
input_value="$( UserInput -I "$user_input_ID" -p "$prompt" -D 'No' )" && wilful_input="yes" || wilful_input="no"
if ! is_true "$input_value" ; then
if is_true "$wilful_input" ; then
LogPrint "User confirmed to not proceed '$WORKFLOW' with a '$backup_scheme' BACKUP_URL"
else
LogPrint "Aborting '$WORKFLOW' with a '$backup_scheme' BACKUP_URL by default"
fi
Error "The $WORKFLOW workflow does not work for the BACKUP_URL scheme '$backup_scheme'"
fi
LogPrint "User confirmed to proceed regardless that '$WORKFLOW' could be destructive with a '$backup_scheme' BACKUP_URL"
;;
esac
;;
esac
else
# A BACKUP_URL is not mandatory in general, see in 'man rear'
# "An example to use TSM for backup and ISO for output"
# cf. https://github.com/rear/rear/issues/1532#issuecomment-336810460
# but for BACKUP=NETFS a BACKUP_URL is required in practice
# cf. https://github.com/rear/rear/issues/1532#issuecomment-336810460
# so that we error out to be safe against possible "rear recover" failures:
test "NETFS" = $BACKUP && Error "BACKUP=NETFS requires a BACKUP_URL backup target location"
fi
if test "$OUTPUT_URL" ; then
local output_scheme="$( url_scheme "$OUTPUT_URL" )"
case "$output_scheme" in
(fish|ftp|ftps|hftp|http|https|sftp)
local required_prog='lftp'
has_binary $required_prog || Error "The OUTPUT_URL scheme '$output_scheme' requires the '$required_prog' command which is missing"
;;
(iso)
Error "The OUTPUT_URL scheme cannot be '$output_scheme'"
;;
(null)
# OUTPUT_URL=null conflicts with OUTPUT=USB
# because for OUTPUT=USB output/USB/Linux-i386/850_make_USB_bootable.sh
# wants to make the USB device bootable which cannot work with OUTPUT_URL=null
# see https://github.com/rear/rear/issues/1571#issuecomment-343467593
test "USB" = "$OUTPUT" && Error "'OUTPUT_URL=null' conflicts with 'OUTPUT=USB'"
;;
esac
fi