Updated updater

Added quiet operation
    - this will prevent STDOUT and STDERR from being displayed to the
      terminal, unless a decision is encountered - will not assume yes.
    - notifications are still sent since '--no-notify' can be used.

All echo statements responsible for outputting have been changed to
initial check if script is running in quiet mode.

'printf' statements which do not serve a specific purpose have been
changed to 'echo' commands.

'echo' statements that are responsible for displaying error messages are
now sent over STDERR instead of STDOUT.

Added '--full-clean' argument which will remove any possibly generated
files, by updater, from the system, including logs.
This commit is contained in:
Ethan Smith-Coss 2021-06-24 15:51:05 +01:00
parent 0f397879d7
commit 21889a7362

114
updater
View File

@ -22,7 +22,7 @@
# Author: Ethan Smith-Coss # # Author: Ethan Smith-Coss #
# Version: 0.2.0 # # Version: 0.2.0 #
# Created: 2021-05-20T16:47+0100 # # Created: 2021-05-20T16:47+0100 #
# Last Modified: 2021-06-23T23:50+0100 # # Last Modified: 2021-06-24T15:49+0100 #
# # # #
# #################################### # # #################################### #
# # # #
@ -57,9 +57,11 @@ Options:
-nn, --no-notify Prevent notifications from being set after a session. -nn, --no-notify Prevent notifications from being set after a session.
-c, --set-channel= Change the channel to be updated for Microsoft Edge. Will default to the value defined in souce.list if flag is not present. -c, --set-channel= Change the channel to be updated for Microsoft Edge. Will default to the value defined in souce.list if flag is not present.
* beta - update Beta channel release. * beta - update Beta channel release.
* dev - update Dev channel release. * dev - update Dev channel release.
-q, --quiet Operate strictly with no output on STDOUT or STDERR, prompts will NOT assume yes however. Logging still occurs in background.
--mode= Set the mode of the program to be ran in. Default mode occurs without this flag. --mode= Set the mode of the program to be ran in. Default mode occurs without this flag.
* debug - run program in debug mode. * debug - run program in debug mode.
--full-clean Remove all content generated by updater after a session, this includes all logs.
-y, --yes-all Assume yes to all yes/no decisions. -y, --yes-all Assume yes to all yes/no decisions.
-v, --version Print out the version of the script and exit. -v, --version Print out the version of the script and exit.
-h, --help Print this help message and exit -h, --help Print this help message and exit
@ -81,7 +83,7 @@ SECONDS=0
# function responsible for cleaning up after a session execution # function responsible for cleaning up after a session execution
function clean_up { function clean_up {
log "DEBUG" "EXIT signal was raised, cleaning up system after session before exiting..." "$log_file" log "DEBUG" "EXIT signal was raised, cleaning up system after session before exiting..." "$log_file"
printf "Cleaning up system after session..." [[ ! $quiet -eq 0 ]] && echo -n "Cleaning up system after session..."
cp "$log_file" "$logs_dir/updater.log" cp "$log_file" "$logs_dir/updater.log"
while read -r garbage_collection ; do while read -r garbage_collection ; do
@ -91,7 +93,7 @@ function clean_up {
log "CLEANER" "Finished cleaning up system after session. Nice and clean :D Goodbye." "$runtime_dir/logs/updater.log" log "CLEANER" "Finished cleaning up system after session. Nice and clean :D Goodbye." "$runtime_dir/logs/updater.log"
echo "done. Goodbye." [[ ! $quiet -eq 0 ]] && echo "done. Goodbye."
elapsed_time=$SECONDS elapsed_time=$SECONDS
script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s" script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s"
@ -105,12 +107,12 @@ function clean_up {
# ensure that the restoration was sucessful in reverting the system back # ensure that the restoration was sucessful in reverting the system back
function check_restoration { function check_restoration {
[[ ! $1 -eq 0 ]] && { echo -e "failed.\nThere was an error trying to restore system files." \ [[ ! $1 -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && echo "failed." && >&2 echo "There was an error trying to restore system files." \
"Either there no back was made or another issue occurred. Consult $log_file for more information." ; exit $1 ; } "Either there no back was made or another issue occurred. Consult $log_file for more information." ; exit $1 ; }
log "DEBUG" "System restoration was successful, safe to use; however, the update was still failed. Exiting...($2+$1)" \ log "DEBUG" "System restoration was successful, safe to use; however, the update was still failed. Exiting...($2+$1)" \
"$log_file" "$log_file"
:echo -e "completed. However, there was still an issue trying to update Microsoft Edge ($edge_channel) to the latest version." \ [[ ! $quiet -eq 0 ]] && echo "completed." && >&2 echo "However, there was still an issue trying to update Microsoft Edge" \
"Consult $log_file for more information. Exiting..." "($edge_channel) to the latest version. Consult $log_file for more information. Exiting..."
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There was an issue installing the update to your system." \ [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There was an issue installing the update to your system." \
"The previous version, v$current_version, has been restored." "The previous version, v$current_version, has been restored."
echo "$backup_file" >>"$garbage" echo "$backup_file" >>"$garbage"
@ -122,10 +124,6 @@ while test $# -gt 0 ; do
-nn | --no-notify) -nn | --no-notify)
nn_flag=0 ; shift nn_flag=0 ; shift
;; ;;
--mode=*)
[[ "$1" == "--mode=debug" ]] && debug_run=0
shift
;;
-c | --set-channel=*) -c | --set-channel=*)
## if long flag, check if value is equal to beta or dev, set flag respectfully if so ## if long flag, check if value is equal to beta or dev, set flag respectfully if so
[[ "$1" =~ "beta" || "$1" =~ "dev" ]] && edge_channel=$(echo "$1" | cut -d= -f2) [[ "$1" =~ "beta" || "$1" =~ "dev" ]] && edge_channel=$(echo "$1" | cut -d= -f2)
@ -133,6 +131,20 @@ while test $# -gt 0 ; do
[[ "$1" == "-c" && "$2" == "beta" || "$2" == "dev" ]] && edge_channel="$2" [[ "$1" == "-c" && "$2" == "beta" || "$2" == "dev" ]] && edge_channel="$2"
shift shift
;; ;;
-q | --quiet)
quiet=0 ; shift
;;
--full-clean)
echo -n "Fully cleaning system of generated content..."
[[ -d "$tmp_path" ]] && rm -rf "$tmp_path"
[[ -d "$runtime_dir/logs" ]] && rm -rf "$runtime_dir/logs"
echo "done."
exit 0
;;
--mode=*)
[[ "$1" == "--mode=debug" ]] && debug_run=0
shift
;;
-y | --yes-all) -y | --yes-all)
yes_flag=0 ; shift yes_flag=0 ; shift
;; ;;
@ -151,7 +163,7 @@ while test $# -gt 0 ; do
done done
## check if the script is being ran as root - exit otherwise ## check if the script is being ran as root - exit otherwise
[[ $(id -u) -ne 0 ]] && { echo "Please run script with root privilages." ; exit 1 ; } [[ $(id -u) -ne 0 ]] && { >&2 echo "Please run script with root privilages." ; exit 1 ; }
# set trap to trigger clean up function on any exit # set trap to trigger clean up function on any exit
trap clean_up EXIT trap clean_up EXIT
@ -160,6 +172,7 @@ source "$runtime_dir/utils/common"
log "PREINIT" "----[New instance of script has been started: $(date -Iseconds)]----" "$log_file" log "PREINIT" "----[New instance of script has been started: $(date -Iseconds)]----" "$log_file"
echo "$log_file" >> "$garbage" echo "$log_file" >> "$garbage"
# initialise all flags which require a value
## setup the yes flag to automatically accept all yes/no inputs ## setup the yes flag to automatically accept all yes/no inputs
yes_flag=${yes_flag:-1} yes_flag=${yes_flag:-1}
log "DEBUG" "The yes flag has been set to: $yes_flag." "$log_file" log "DEBUG" "The yes flag has been set to: $yes_flag." "$log_file"
@ -169,43 +182,46 @@ nn_flag=${nn_flag:-1}
## set the debugging flag if not already ## set the debugging flag if not already
debug_run=${debug_run:-1} debug_run=${debug_run:-1}
[[ $debug_run -eq 0 ]] && log "DEBUG" "The mode flag has been set so script will operate in debug mode." "$log_file" [[ $debug_run -eq 0 ]] && log "DEBUG" "The mode flag has been set so script will operate in debug mode." "$log_file"
## setup the quiet flag to determine if program should be slient
quiet=${quiet:-1}
log "DEBUG" "The quiet flag has been set to: $quiet." "$log_file"
## ensure source.list exists ## ensure source.list exists
source_list="$runtime_dir/source.list" source_list="$runtime_dir/source.list"
log "DEBUG" "Checking for a source.list in current runtime directory..." "$log_file" log "DEBUG" "Checking for a source.list in current runtime directory..." "$log_file"
printf "Checking for source.list..." [[ ! $quiet -eq 0 ]] && echo -n "Checking for source.list..."
[[ ! -f "$source_list" ]] && { echo -e "\nUpdater encountered an issue: source.list not found. Exiting..." ; [[ ! -f "$source_list" ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo -e "\nUpdater encountered an issue: source.list not found. Exiting..." ;
log "ERROR" "Cannot find source.list in runtime directory ($source_list). Exiting...(2)" "$log_file" ; exit 2 ; } log "ERROR" "Cannot find source.list in runtime directory ($source_list). Exiting...(2)" "$log_file" ; exit 2 ; }
log "DEBUG" "Found a souce.list in $runtime_dir." "$log_file" log "DEBUG" "Found a souce.list in $runtime_dir." "$log_file"
echo "found." [[ ! $quiet -eq 0 ]] && echo "found."
## set the channel flag ## set the channel flag
log "DEBUG" "Determining the channel of Edge and checking if it is installed to the system..." log "DEBUG" "Determining the channel of Edge and checking if it is installed to the system..."
edge_channel="${edge_channel:-$(grep -o "\[dists.*\]" "$source_list" | sed -E 's/\[dists=(.*)\]/\1/' | cut -d, -f2)}" edge_channel="${edge_channel:-$(grep -o "\[dists.*\]" "$source_list" | sed -E 's/\[dists=(.*)\]/\1/' | cut -d, -f2)}"
## if for some reason there is no value, exit 254 ## if for some reason there is no value, exit 254
[[ "$edge_channel" == "" ]] && { echo "There is no channel specified for Microsoft Edge. Please check the source.list file has a correct value, or use --set-channel to set the channel for that session." ; [[ "$edge_channel" == "" ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "There is no channel specified for Microsoft Edge. Please check the source.list file has a correct value, or use --set-channel to set the channel for that session." ;
log "ERROR" "Encountered an issue trying to determine the channel of Microsoft Edge to update on the system. source.list is potentially corrupt since no default value was found. Exiting...(254)" ; exit 254 ; } log "ERROR" "Encountered an issue trying to determine the channel of Microsoft Edge to update on the system. source.list is potentially corrupt since no default value was found. Exiting...(254)" ; exit 254 ; }
## check if Microsoft Edge is already installed - :@Ethan: this is some Tom Foolery, Bashism Fuckery ## check if Microsoft Edge is already installed - :@Ethan: this is some Tom Foolery, Bashism Fuckery
command -v microsoft-edge-$edge_channel &>/dev/null command -v microsoft-edge-$edge_channel &>/dev/null
exit_code=$? exit_code=$?
[[ ! $exit_code -eq 0 ]] && { echo "Microsoft Edge ($edge_channel) is not installed. Exiting updater..." ; [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "Microsoft Edge ($edge_channel) is not installed. Exiting updater..." ;
log "DEBUG" "Microsoft Edge ($edge_channel) not recognised as an installed program. Exiting...(1)" ; exit 1 ; } log "DEBUG" "Microsoft Edge ($edge_channel) not recognised as an installed program. Exiting...(1)" ; exit 1 ; }
log "DEBUG" "Microsoft Edge ($edge_channel) is installed to system. Proceeding with update..." "$log_file" log "DEBUG" "Microsoft Edge ($edge_channel) is installed to system. Proceeding with update..." "$log_file"
## ensure host is reachable ## ensure host is reachable
host=$(grep "\[host\]" "$source_list" | cut -d' ' -f 2) host=$(grep "\[host\]" "$source_list" | cut -d' ' -f 2)
log "DEBUG" "Checking if host is available according to defined value of [host]: $host..." "$log_file" log "DEBUG" "Checking if host is available according to defined value of [host]: $host..." "$log_file"
echo "Checking to see if the host is known and reachable..." [[ ! $quiet -eq 0 ]] && echo -n "Checking to see if the host is known and reachable..."
if ! wget --spider "$host" >/dev/null 2>&1 ; then if ! wget --spider "$host" >/dev/null 2>&1 ; then
echo "Cannot reach end-point for distribution information. Check your Internet connection and try again. Exiting..." >&2 echo "Cannot reach end-point for distribution information. Check your Internet connection and try again. Exiting..."
log "DEBUG" "Upstream end-point is cannot be contacted. Potential Internet connection issue or end-point address ($dist_upstream). Exiting...(3)" "$log_file" log "DEBUG" "Upstream end-point is cannot be contacted. Potential Internet connection issue or end-point address ($dist_upstream). Exiting...(3)" "$log_file"
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There seems to be an issue connecting to the end-point of Microsoft. Check your Internet connection and try again." [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There seems to be an issue connecting to the end-point of Microsoft. Check your Internet connection and try again."
exit 3 exit 3
fi fi
log "DEBUG" "Host is known and reachable. Continuing update to fetch data..." "$log_file" log "DEBUG" "Host is known and reachable. Continuing update to fetch data..." "$log_file"
echo "Host known and reachable: (host) $host" [[ ! $quiet -eq 0 ]] && echo "host known and reachable: (host) $host"
## identify the end-point URL for distribution information ## identify the end-point URL for distribution information
dist_upstream=$(grep "\[dists.*\]" "$source_list" | cut -d' ' -f 2-4 --output-delimiter '/') dist_upstream=$(grep "\[dists.*\]" "$source_list" | cut -d' ' -f 2-4 --output-delimiter '/')
@ -214,14 +230,14 @@ log "DEBUG" "Fetching Packages file from $dist_upstream for $archi architectures
## fetch the file - :@Ethan: there's no reason to inform the user of this operation unless it fails ## fetch the file - :@Ethan: there's no reason to inform the user of this operation unless it fails
wget -a "$log_file" -O "$tmp_path/Packages.gz" "$dist_upstream/binary-$archi/Packages.gz" wget -a "$log_file" -O "$tmp_path/Packages.gz" "$dist_upstream/binary-$archi/Packages.gz"
exit_code=$? exit_code=$?
[[ ! $exit_code -eq 0 ]] && { echo "There was an issue retrieving the package information for the update. Please check $logs_dir/updater.log, for more information. Exiting..." ; [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "There was an issue retrieving the package information for the update. Please check $logs_dir/updater.log, for more information. Exiting..." ;
log "DEBUG" "Encountered an issue with wget. Exiting...(4)" "$log_file" ; exit 4 ; } log "DEBUG" "Encountered an issue with wget. Exiting...(4)" "$log_file" ; exit 4 ; }
log "DEBUG" "Successfully downloaded release package information." "$log_file" log "DEBUG" "Successfully downloaded release package information." "$log_file"
log "DEBUG" "Fetching Contents-$archi.gz from ${dist_upstream::-4}" "$log_file" log "DEBUG" "Fetching Contents-$archi.gz from ${dist_upstream::-4}" "$log_file"
wget -a "$log_file" -O "$tmp_path/Contents-$archi.gz" "${dist_upstream::-4}/Contents-$archi.gz" wget -a "$log_file" -O "$tmp_path/Contents-$archi.gz" "${dist_upstream::-4}/Contents-$archi.gz"
exit_code=$? exit_code=$?
[[ ! $exit_code -eq 0 ]] && { echo "There was an issue retrieving the package contents for the update. Please check $log_file/updater.log, so more information. Exiting..." ; [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "There was an issue retrieving the package contents for the update. Please check $log_file/updater.log, so more information. Exiting..." ;
log "ERROR" "Encountered an issue with wget. Exiting...(4)" "$log_file" ; exit 4 ; } log "ERROR" "Encountered an issue with wget. Exiting...(4)" "$log_file" ; exit 4 ; }
log "DEBUG" "Successfully downloaded release contents information." "$log_file" log "DEBUG" "Successfully downloaded release contents information." "$log_file"
## decompress the packages file ## decompress the packages file
@ -276,14 +292,14 @@ upgradeable=${upgradeable:-1}
if [[ $upgradeable -eq 1 ]] ; then if [[ $upgradeable -eq 1 ]] ; then
elapsed_time=$SECONDS elapsed_time=$SECONDS
script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s" script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s"
echo "Most recent version of Microsoft Edge ($edge_channel) [v$current_version] is already installed on this system, no need to update. Finished in $script_time" [[ ! $quiet -eq 0 ]] && >&2 echo "Most recent version of Microsoft Edge ($edge_channel) [v$current_version] is already installed on this system, no need to update. Finished in $script_time"
log "DEBUG" "Most recent version of Microsoft Edge ($edge_channel) is already installed to the system (v$current_version). Completed in $script_time. Exiting...(1)" "$log_file" log "DEBUG" "Most recent version of Microsoft Edge ($edge_channel) is already installed to the system (v$current_version). Completed in $script_time. Exiting...(1)" "$log_file"
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There is no newer version of Microsoft Edge ($edge_channel) to install. Newest version is already installed: v$current_version" [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There is no newer version of Microsoft Edge ($edge_channel) to install. Newest version is already installed: v$current_version"
exit 1 exit 0
fi fi
log "DEBUG" "There is a more recent release of Microsoft Edge ($edge_channel) available for download (v$release_version). Continuing with update." "$log_file" log "DEBUG" "There is a more recent release of Microsoft Edge ($edge_channel) available for download (v$release_version). Continuing with update." "$log_file"
echo "Identified a new release of Microsoft Edge ($edge_channel) [Current: v$current_version. New: v$release_version]. Starting the download and installation process..." [[ ! $quiet -eq 0 ]] && >&2 echo "Identified a new release of Microsoft Edge ($edge_channel) [Current: v$current_version. New: v$release_version]. Starting the download and installation process..."
## check if msedge process is already running ## check if msedge process is already running
is_running=$(ps -aux | grep -oc 'msedge') is_running=$(ps -aux | grep -oc 'msedge')
@ -319,13 +335,13 @@ log "DEBUG" "Checking the following release version file end-point is accessible
### spider argument. ### spider argument.
if ! wget --spider "$url" >/dev/null 2>&1 ; then if ! wget --spider "$url" >/dev/null 2>&1 ; then
echo "Cannot reach end-point for latest release. Check your Internet connection and try again." [[ ! $quiet -eq 0 ]] && >&2 echo "Cannot reach end-point for latest release. Check your Internet connection and try again."
log "DEBUG" "Pool end-point is cannot be contacted. Potential Internet connection issue or end-point address ($url). Exiting...(5)" "$log_file" log "DEBUG" "Pool end-point is cannot be contacted. Potential Internet connection issue or end-point address ($url). Exiting...(5)" "$log_file"
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There seems to be an issue connecting to the end-point of Microsoft. Check your Internet connection and try again." [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There seems to be an issue connecting to the end-point of Microsoft. Check your Internet connection and try again."
exit 5 exit 5
fi fi
log "DEBUG" "Pool is known and reachable. Beginning download..." "$log_file" log "DEBUG" "Pool is known and reachable. Beginning download..." "$log_file"
echo "Host known and reachable: (download) $url" [[ ! $quiet -eq 0 ]] && echo "Host known and reachable: (download) $url"
## set filename to not be pool address but the name of file ## set filename to not be pool address but the name of file
filename=$(echo "$url" | rev | cut -d'/' -f1 | rev) filename=$(echo "$url" | rev | cut -d'/' -f1 | rev)
@ -333,10 +349,9 @@ filesize=$(grep '^Size:.*' "$tmp_path/Release" | cut -d' ' -f2)
log "DEBUG" "Checking if user wishes to proceed with the update installation..." "$log_file" log "DEBUG" "Checking if user wishes to proceed with the update installation..." "$log_file"
## inform the user of the new download size before downloading ## inform the user of the new download size before downloading
if [[ $yes_flag -eq 1 ]] ; then if [[ $yes_flag -eq 1 ]] ; then
echo -n "The following package will be installed, $filename [$filesize]. Are you sure you wish to continue? [(Y)es/No]: " && read -n 1 choice echo -n "The following package will be installed, $filename [$filesize]. Are you sure you wish to continue? [(Y)es/No]: " && read -n 1 choice && echo
[[ "$(echo $choice | awk '{print tolower($0)}')" == "n" ]] && { echo -e "\nThe following update to Microsoft Edge ($edge_channel) v$release_version will not be installed. Exiting updater..." ; [[ "$(echo $choice | awk '{print tolower($0)}')" == "n" ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "The following update to Microsoft Edge ($edge_channel) v$release_version will not be installed. Exiting updater..." ;
log "DEBUG" "User opted out for updating from $current_version to $release_version. Exiting...(1)" "$log_file" ; exit 1 ; } log "DEBUG" "User opted out for updating from $current_version to $release_version. Exiting...(1)" "$log_file" ; exit 1 ; }
echo
fi fi
log "DEBUG" "Confirmation has been given to proceed with the following update of Microsoft Edge ($edge_channel) [v$release_version]." "$log_file" log "DEBUG" "Confirmation has been given to proceed with the following update of Microsoft Edge ($edge_channel) [v$release_version]." "$log_file"
@ -344,19 +359,19 @@ log "DEBUG" "Confirmation has been given to proceed with the following update of
log "DEBUG" "Checking if the file is already downloaded to the system..." "$log_file" log "DEBUG" "Checking if the file is already downloaded to the system..." "$log_file"
if [[ ! -f "$tmp_path/$filename" ]] ; then if [[ ! -f "$tmp_path/$filename" ]] ; then
log "DEBUG" "Downloading the latest release version [v$release_version], file: $filename (URL: $url)" "$log_file" log "DEBUG" "Downloading the latest release version [v$release_version], file: $filename (URL: $url)" "$log_file"
echo "Downloading the following release file: $filename. This may take a moment..." [[ ! $quiet -eq 0 ]] && echo "Downloading the following release file: $filename. This may take a moment..."
# wget_timed=$(\time --format "%x:%e" wget -a "$tmp_path/wget_dump.log" -O "$tmp_path/$filename" "$url" 2>&1) # wget_timed=$(\time --format "%x:%e" wget -a "$tmp_path/wget_dump.log" -O "$tmp_path/$filename" "$url" 2>&1)
wget -a "$tmp_path/wget_dump.log" --progress=bar --show-progress -O "$tmp_path/$filename" "$url" wget -a "$tmp_path/wget_dump.log" --progress=bar --show-progress -O "$tmp_path/$filename" "$url"
exit_code=$? # $(echo $wget_timed | cut -d: -f1) exit_code=$? # $(echo $wget_timed | cut -d: -f1)
[[ ! $exit_code -eq 0 ]] && { echo "There was an issue downloading the Debian version of Microsoft Edge ($edge_channel)." \ [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && >&2 echo "There was an issue downloading the Debian version of Microsoft Edge ($edge_channel)." \
"Please check $logs_dir/updater.log, for more information. Exiting update..." ; "Please check $logs_dir/updater.log, for more information. Exiting update..." ;
log "DEBUG" "Encountered an issue with wget. Exiting...(6)" "$log_file" ; exit 6 ; } log "DEBUG" "Encountered an issue with wget. Exiting...(6)" "$log_file" ; exit 6 ; }
awk -v end=$(grep -n '^\s*$' "$tmp_path/wget_dump.log" | tr '\n' ' ' | cut -d: -f1) 'NR>1*0&&NR<1*end+1' "$tmp_path/wget_dump.log" >> "$log_file" awk -v end=$(grep -n '^\s*$' "$tmp_path/wget_dump.log" | tr '\n' ' ' | cut -d: -f1) 'NR>1*0&&NR<1*end+1' "$tmp_path/wget_dump.log" >> "$log_file"
log "DEBUG" "Download completed successfully, wget log shown above." "$log_file" log "DEBUG" "Download completed successfully, wget log shown above." "$log_file"
printf "Download complete. Validating checksums..." [[ ! $quiet -eq 0 ]] && echo -n "Download complete. Validating checksums..."
else else
log "DEBUG" "File already downloaded to system. Skipped download and verifying checksum..." "$log_file" log "DEBUG" "File already downloaded to system. Skipped download and verifying checksum..." "$log_file"
printf "Latest Debian release file is downloaded to the system, skipping download. Validating checksums..." [[ ! $quiet -eq 0 ]] && echo -n "Latest Debian release file is downloaded to the system, skipping download. Validating checksums..."
fi fi
## add the .deb file to garbage list ## add the .deb file to garbage list
echo "$tmp_path/$filename" >> "$garbage" echo "$tmp_path/$filename" >> "$garbage"
@ -366,42 +381,45 @@ if [[ "$(sha256sum "$tmp_path/$filename" | cut -d' ' -f1)" != "$(grep 'SHA256:.*
## automatically remove the file - :@Ethan: it's either corrupt or hazardous to the health of the system ## automatically remove the file - :@Ethan: it's either corrupt or hazardous to the health of the system
rm "$tmp_path/$filename" rm "$tmp_path/$filename"
log "DEBUG" "Checksum (SHA256) failed and integrity of file lost. File has been removed as either corrupt or hazardous/dangerous. Exiting...(7)" "$log_file" log "DEBUG" "Checksum (SHA256) failed and integrity of file lost. File has been removed as either corrupt or hazardous/dangerous. Exiting...(7)" "$log_file"
echo -e "failed.\nThe checksum (SHA256) failed for some reason and removed either because it was corrupt or dangerous. Exiting updater...\n" [[ ! $quiet -eq 0 ]] && echo "failed." && \
>&2 echo "The checksum (SHA256) failed for some reason and removed either because it was corrupt or dangerous. Exiting updater..."
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There was an issue with the checksum to verify the latest release. The Debian file has been automatically removed to prevent potential danger to the system." [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "There was an issue with the checksum to verify the latest release. The Debian file has been automatically removed to prevent potential danger to the system."
exit 7 exit 7
fi fi
echo "complete." [[ ! $quiet -eq 0 ]] && echo "complete."
# unarchive the .deb file and extract data.tar.gz # unarchive the .deb file and extract data.tar.gz
log "DEBUG" "Unarchiving the downloaded DEB file ($tmp_path/$filename)..." "$log_file" log "DEBUG" "Unarchiving the downloaded DEB file ($tmp_path/$filename)..." "$log_file"
printf "Unzipping download..." [[ ! $quiet -eq 0 ]] && echo -n "Unzipping download..."
## use ar to unarchive .deb file ## use ar to unarchive .deb file
ar vx "$tmp_path/$filename" --output "$tmp_path" >/dev/null 2>&1 ar vx "$tmp_path/$filename" --output "$tmp_path" >/dev/null 2>&1
exit_code=$? exit_code=$?
[[ ! $exit_code -eq 0 ]] && { echo -e "incomplete.\nThere was an issue unarchiving $filename. Exiting updater...\n" ; [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && echo "incomplete." && \
>&2 echo "There was an issue unarchiving $filename. Exiting updater...\n" ;
log "ERROR" "There was an issue when unarchiving $filename. Exiting...(8)" "$log_file" ; exit 8 ; } log "ERROR" "There was an issue when unarchiving $filename. Exiting...(8)" "$log_file" ; exit 8 ; }
log "DEBUG" "Successfully unarchived $filename, decompressing the data.tar.gz file..." "$log_file" log "DEBUG" "Successfully unarchived $filename, decompressing the data.tar.gz file..." "$log_file"
## extract data from data.tar.gz ## extract data from data.tar.gz
tar --overwrite -xf "$tmp_path/data.tar.xz" --directory "$tmp_path" 1>"$tmp_path/tar_dump.log" 2>>"$log_file" tar --overwrite -xf "$tmp_path/data.tar.xz" --directory "$tmp_path" 1>"$tmp_path/tar_dump.log" 2>>"$log_file"
exit_code=$? exit_code=$?
[[ ! $exit_code -eq 0 ]] && { echo -e "incomplete.\nThere was an extracting data.tar.gz. Exiting updater...\n" ; [[ ! $exit_code -eq 0 ]] && { [[ ! $quiet -eq 0 ]] && echo "incomplete." && \
>&2 echo "There was an extracting data.tar.gz. Exiting updater..." ;
log "ERROR" "There was an issue when decompressing data.tar.gz using tar -xvf. Exiting...(8)" "$tmp_path" ; exit 8 ; } log "ERROR" "There was an issue when decompressing data.tar.gz using tar -xvf. Exiting...(8)" "$tmp_path" ; exit 8 ; }
log "DEBUG" "Successfully extracted files from data.tar.gz." "$log_file" log "DEBUG" "Successfully extracted files from data.tar.gz." "$log_file"
echo "completed." [[ ! $quiet -eq 0 ]] && echo "completed."
## etc/ directory only contains a cron daily directory, remove it ## etc/ directory only contains a cron daily directory, remove it
rm -r "$tmp_path/etc/" r[[ ! $quiet -eq 0 ]] && m -r "$tmp_path/etc/"
## add data.tar.xz to the garbage list ## add data.tar.xz to the garbage list
echo "$tmp_path/data.tar.xz" >> "$garbage" echo "$tmp_path/data.tar.xz" >> "$garbage"
# compress archive the currently installed version of Edge ($edge_channel) for restoration on failure # compress archive the currently installed version of Edge ($edge_channel) for restoration on failure
log "DEBUG" "Creating an archive gzip tarball of system /opt/ and /usr/ directories..." "$log_file" log "DEBUG" "Creating an archive gzip tarball of system /opt/ and /usr/ directories..." "$log_file"
printf "Installing new version to system. This may take a few minutes..." [[ ! $quiet -eq 0 ]] && echo -n "Installing new version to system. This may take a few minutes..."
archive_system "microsoft/msedge-$edge_channel" archive_system "microsoft/msedge-$edge_channel"
exit_code=$? exit_code=$?
if [[ ! $exit_code -eq 0 ]] ; then if [[ ! $exit_code -eq 0 ]] ; then
### :@Ethan: there was an issue with creating an archive, should probably inform the user to make a decision (unless -y is set) ### :@Ethan: there was an issue with creating an archive, should probably inform the user to make a decision (unless -y is set)
echo -e "failed.\nThere was an issue creating a backup of the system. Exiting..." [[ ! $quiet -eq 0 ]] && echo "failed." && >&2 echo "There was an issue creating a backup of the system. Exiting..."
log "ERROR" "There was an issue creating a gzip tarball of the system. Exiting...($exit_code)" "$log_file" log "ERROR" "There was an issue creating a gzip tarball of the system. Exiting...($exit_code)" "$log_file"
exit $exit_code exit $exit_code
fi fi
@ -415,7 +433,8 @@ log "DEBUG" "Copying files to there appropriate location..." "$log_file"
cp -ar "$tmp_path/opt" "/" >>"$log_file" 2>&1 cp -ar "$tmp_path/opt" "/" >>"$log_file" 2>&1
exit_code=$? exit_code=$?
if [[ ! $exit_code -eq 0 ]] ; then if [[ ! $exit_code -eq 0 ]] ; then
echo -ne "failed.\nThere was an issue installing files to the system. Reverting to previous version..." [[ ! $quiet -eq 0 ]] && echo "failed." && \
>&2 echo -n "There was an issue installing files to the system. Reverting to previous version..."
log "DEBUG" "There was an issue copying $tmp_path/opt/ file to system /opt/. Reverting system files and exiting...(9)" \ log "DEBUG" "There was an issue copying $tmp_path/opt/ file to system /opt/. Reverting system files and exiting...(9)" \
"$log_file" "$log_file"
@ -431,7 +450,8 @@ fi
cp -ar "$tmp_path/usr" "/" >>"$log_file" 2>&1 cp -ar "$tmp_path/usr" "/" >>"$log_file" 2>&1
exit_code=$? exit_code=$?
if [[ ! $exit_code -eq 0 ]] ; then if [[ ! $exit_code -eq 0 ]] ; then
echo -ne "failed.\nThere was an issue installing files to the system. Reverting to previous version..." [[ ! $quiet -eq 0 ]] && echo "failed." && \
>&2 echo -n "There was an issue installing files to the system. Reverting to previous version..."
log "DEBUG" "There was an issue copying $tmp_path/usr/ file to system /usr/. Reverting system files and exiting...(9)" \ log "DEBUG" "There was an issue copying $tmp_path/usr/ file to system /usr/. Reverting system files and exiting...(9)" \
"$log_file" "$log_file"
@ -444,7 +464,7 @@ if [[ ! $exit_code -eq 0 ]] ; then
exit 9 exit 9
fi fi
log "DEBUG" "Successfully installed files to their appropriate location." "$log_file" log "DEBUG" "Successfully installed files to their appropriate location." "$log_file"
echo "installation complete." [[ ! $quiet -eq 0 ]] && echo "installation complete."
## add directories usr/ and opt/ to garbage ## add directories usr/ and opt/ to garbage
echo "$tmp_path/usr" >> "$garbage" echo "$tmp_path/usr" >> "$garbage"
echo "$tmp_path/opt" >> "$garbage" echo "$tmp_path/opt" >> "$garbage"
@ -467,7 +487,7 @@ fi
elapsed_time=$SECONDS elapsed_time=$SECONDS
script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s" script_time="$(($elapsed_time / 60))m $(($elapsed_time % 60))s"
log "DEBUG" "Installation and update was successful (completed in: $script_time) and system can be cleaned up to remove any waste." "$log_file" log "DEBUG" "Installation and update was successful (completed in: $script_time) and system can be cleaned up to remove any waste." "$log_file"
echo "Microsoft Edge ($edge_channel) has been successfully updated to the latest version: v$current_version -> v$release_version, in $script_time." [[ ! $quiet -eq 0 ]] && echo "Microsoft Edge ($edge_channel) has been successfully updated to the latest version: v$current_version -> v$release_version, in $script_time."
[[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "Successfully updated Microsoft Edge ($edge_channel) to the latest version: v$release_version" [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge ($edge_channel) Update" "Successfully updated Microsoft Edge ($edge_channel) to the latest version: v$release_version"
# exit from script, clean up function is called by default exit of script (EOF) # exit from script, clean up function is called by default exit of script (EOF)