diff --git a/dom0-updates/qubes-dom0-update b/dom0-updates/qubes-dom0-update index 01c4d6d..479e1d8 100755 --- a/dom0-updates/qubes-dom0-update +++ b/dom0-updates/qubes-dom0-update @@ -234,6 +234,43 @@ if [ -n "$CLEAN" ]; then fi rm -f /var/lib/qubes/updates/errors +# Synopsis: check_mounted MOUNTPOINT +check_mounted() { + local CHOICE + # No reason to check further if mount point is already mounted + awk -v PART="${1}" '{if ($2 == PART ) { exit 0 }} ENDFILE{exit -1}' < /proc/mounts + [[ ${?} -ne 0 ]] || return + # No reason to check further if mount point is not in fstab + awk -v PART="${1}" '!/^[ \t]*#/{ if ( $2 == PART ) { exit 0}} ENDFILE {exit -1}' < /etc/fstab + [[ ${?} -ne 0 ]] && return + # Ask user to manually mount partition if user is using GUI Updater + if [ ! -t 1 ]; then + echo "Could not decide about unmounted ${1} partition in non-interactive/GUI mode!" + echo "Please mount ${1} manually before proceeding with updates or update via CLI." + exit 1 + fi + read -p "${1} partition is not mounted! mount it now? (y)es, (n)o, (a)bort operation " CHOICE + case ${CHOICE} in + y|Y) + mount "${1}" + if [[ ${?} -ne 0 ]]; then + echo "Mounting of ${1} was unsuccessful! aborting." + exit 1 + fi + ;; + n|N) echo "Warning! Proceeding forward without mounting ${1}";; + a|A) echo Operation aborted!; exit 1;; + *) echo Invalid choice. Aborting!; exit 1;; + esac +} + +if [ "$CHECK_ONLY" != "1" ]; then + # Check if /boot is mounted on split root systems + check_mounted "/boot" + # Check if efi partition is mounted on UEFI systems + [ -d /sys/firmware/efi ] && check_mounted "/boot/efi" +fi + echo "Using $UPDATEVM as UpdateVM to download updates for Dom0; this may take some time..." >&2 # qvm-run by default auto-starts the VM if not running