diff --git a/updater b/updater index d54b077..d8f6cfd 100755 --- a/updater +++ b/updater @@ -4,10 +4,14 @@ # updater - Automatically update Microsoft Edge on Solus # # # # Dependencies: # +# bash # # wget # +# git # # gunzip # # tar # -# sort (coreutils >= 8.32) # +# coreutils (>= 8.32) # +# binutils (>=2.35.1) # +# procps (only BusyBox-based systems) # # notify-send # # # # # @@ -50,10 +54,12 @@ $prog_name ($version) - An updater program which can install the latest availabl DISCLAIMER: Currently this program can only update the Beta release of Microsoft Edge for amd64 architectures. Options: - -nn, --no-notify Prevent notifications from being set after a session. - -y, --yes-all Assume yes to all yes/no decisions. - -v, --version Print out the version of the script and exit. - -h, --help Print this help message and exit + -nn, --no-notify Prevent notifications from being set after a session. + --mode=[debug] Set the mode of the program to be ran in. Default mode occurs without this flag. + * debug - run program in debug mode. + -y, --yes-all Assume yes to all yes/no decisions. + -v, --version Print out the version of the script and exit. + -h, --help Print this help message and exit " runtime_dir=$(realpath "${BASH_SOURCE[0]}" | xargs -r dirname) @@ -65,10 +71,11 @@ garbage="$tmp_path/garbage.tmp" ## program timer SECONDS=0 +## create the logs directory and tmp location if they don't already exist [[ ! -d "$logs_dir" ]] && mkdir "$logs_dir" [[ ! -d "$tmp_path" ]] && mkdir "$tmp_path" - +# function responsible for cleaning up after a session execution function clean_up { log "DEBUG" "EXIT signal was raised, cleaning up system after session before exiting..." "$log_file" printf "Cleaning up system after session..." @@ -93,6 +100,7 @@ function clean_up { [[ $debug_run -eq 0 ]] && cat "$logs_dir/updater.log" } +# ensure that the restoration was sucessful in reverting the system back function check_restoration { [[ ! $1 -eq 0 ]] && { echo -e "failed.\nThere 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 ; } @@ -102,6 +110,7 @@ function check_restoration { "Consult $log_file for more information. Exiting..." [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge (Beta) Update" "There was an issue installing the update to your system." \ "The previous version, v$current_version, has been restored." + echo "$backup_file" >>"$garbage" } ## iterate over all user inputs @@ -147,7 +156,7 @@ log "DEBUG" "The yes flag has been set to: $yes_flag." "$log_file" ## setup the no-notify (nn) flag if notify-send isn't installed command -v notify-send >/dev/null 2>&1 || nn_flag=0 nn_flag=${nn_flag:-1} -## set the testing flag if not already +## set the debugging flag if not already 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" @@ -199,8 +208,7 @@ 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..." ; log "ERROR" "Encountered an issue with wget. Exiting...(4)" "$log_file" ; exit 4 ; } log "DEBUG" "Successfully downloaded release contents information." "$log_file" - -### :@TODO: continue with TODO list. Finish off above code section to ensure wget is successful and logging appropriately. +## decompress the packages file log "DEBUG" "Uncompressing downloaded gz file using gunzip, $tmp_path/Packages.gz..." "$log_file" ## force gunzip to overwrite decompressed file if it already exists gunzip -f "$tmp_path/Packages.gz" "$tmp_path/Contents-$archi.gz" >/dev/null 2>&1 @@ -328,8 +336,8 @@ if [[ ! -f "$tmp_path/$filename" ]] ; then "Please check $logs_dir/updater.log, for more information. Exiting update..." ; 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" - log "DEBUG" "Download completed successfully in $(echo $wget_timed | cut -d' ' -f2)s, wget log below." "$log_file" - printf "Download complete in $(echo $wget_timed | cut -d' ' -f2)s. Validating checksums..." + log "DEBUG" "Download completed successfully, wget log shown above." "$log_file" + printf "Download complete. Validating checksums..." else 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..." @@ -371,7 +379,6 @@ rm -r "$tmp_path/etc/" echo "$tmp_path/data.tar.xz" >> "$garbage" # compress archive the currently installed version of Edge (Beta) for restoration on failure -## :@TODO: compress everything on the system for a backup. Remove it if installation of new version was successful 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..." archive_system "microsoft/msedge-beta" @@ -385,7 +392,7 @@ fi log "DEBUG" "Successfully created an archive gzip tarball of the system. Safe to continue with installation." "$log_file" ### :@NOTE: used to terminate the program at a certain point for incremental testing of functionality recently added up to the point of this exit. -#exit 0 +### exit 0 # install the new version to system log "DEBUG" "Copying files to there appropriate location..." "$log_file" @@ -440,8 +447,11 @@ if [[ "$(microsoft-edge-beta --version | cut -d' ' -f3)" != "$release_version" ] exit 11 fi +## end of update. Inform user of time taken to complete, notify and log. elapsed_time=$SECONDS 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" echo "Microsoft Edge (Beta) has been successfully updated to the latest version: v$current_version -> v$release_version, in $script_time." [[ ! $nn_flag -eq 0 ]] && notify "Microsoft Edge (Beta) Update" "Successfully updated Microsoft Edge (Beta) to the latest version: v$release_version" + +# exit of script, clean up function is called now by default exit of script (EOF)