diff --git a/update_ombi.sh b/update_ombi.sh index 1658a52..719965d 100644 --- a/update_ombi.sh +++ b/update_ombi.sh @@ -60,75 +60,76 @@ archshort=${arch:0:3} while [ $# -gt 0 ]; do case "$1" in - --verbosity|-v=*) - shift - if [[ ${1#*=} =~ ^-?[0-8]$ ]]; then - verbosity="${1#*=}" - else - printf "****************************\n" - printf "* Error: Invalid verbosity.*\n" - printf "****************************\n" - exit 1 - fi - ;; - --force|-f=*) - shift - if [[ ${1#*=} =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - force="${1#*=}" - else - printf "****************************\n" - printf "* Error: Invalid version. *\n" - printf "****************************\n" - exit 1 - fi - ;; - *) + --verbosity | -v=*) + shift + if [[ ${1#*=} =~ ^-?[0-8]$ ]]; then + verbosity="${1#*=}" + else printf "****************************\n" - printf "* Error: Invalid argument. *\n" + printf "* Error: Invalid verbosity.*\n" printf "****************************\n" exit 1 + fi + ;; + --force | -f=*) + shift + if [[ ${1#*=} =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + force="${1#*=}" + else + printf "****************************\n" + printf "* Error: Invalid version. *\n" + printf "****************************\n" + exit 1 + fi + ;; + *) + printf "****************************\n" + printf "* Error: Invalid argument. *\n" + printf "****************************\n" + exit 1 + ;; esac shift done declare -A LOG_LEVELS=([-1]="none" [0]="emerg" [1]="alert" [2]="crit" [3]="err" [4]="warning" [5]="notice" [6]="info" [7]="debug" [8]="trace") -function .log () { - local LEVEL=${1} - shift - if [[ $verbosity =~ ^-?[0-8]$ ]]; then - if [ $verbosity -ge $LEVEL ]; then - echo "[$(date '+%H:%M:%S')] [${LOG_LEVELS[$LEVEL]}]" "$@" - fi - fi - if [ $verbosity -eq 8 ] || [ $LEVEL -ne 8 ]; then - echo "[$(date '+%Y-%m-%d %H:%M:%S %Z' -u)] [${LOG_LEVELS[$LEVEL]}]" "$@" >> $logfile +function .log() { + local LEVEL=${1} + shift + if [[ $verbosity =~ ^-?[0-8]$ ]]; then + if [ $verbosity -ge $LEVEL ]; then + echo "[$(date '+%H:%M:%S')] [${LOG_LEVELS[$LEVEL]}]" "$@" fi + fi + if [ $verbosity -eq 8 ] || [ $LEVEL -ne 8 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S %Z' -u)] [${LOG_LEVELS[$LEVEL]}]" "$@" >>$logfile + fi } unzip-strip() ( - local zip=$1 - local dest=${2:-.} - local temp=$(mktemp -d) && tar -zxf "$zip" -C "$temp" && mkdir -p "$dest" && + local zip=$1 + local dest=${2:-.} + local temp=$(mktemp -d) && tar -zxf "$zip" -C "$temp" && mkdir -p "$dest" && shopt -s dotglob && local f=("$temp"/*) && - if (( ${#f[@]} == 1 )) && [[ -d "${f[0]}" ]] ; then - cp -r "$temp"/*/* "$dest" + if ((${#f[@]} == 1)) && [[ -d "${f[0]}" ]]; then + cp -r "$temp"/*/* "$dest" else - cp -r "$temp"/* "$dest" + cp -r "$temp"/* "$dest" fi && rm -rf "${temp:?}"/* "$temp" ) # Import any custom config to override the defaults, if necessary configfile="$(dirname $0)/update_ombi.conf" if [ -e $configfile ]; then - source $configfile > /dev/null 2>&1 - .log 6 "Script config file found...parsing..." - if [ $? -ne 0 ] ; then - .log 3 "Unable to use config file...using defaults..." - else - .log 6 "Parsed config file" - fi + source $configfile >/dev/null 2>&1 + .log 6 "Script config file found...parsing..." + if [ $? -ne 0 ]; then + .log 3 "Unable to use config file...using defaults..." + else + .log 6 "Parsed config file" + fi else - .log 6 "No config file found...using defaults..." + .log 6 "No config file found...using defaults..." fi .log 6 "$name v$version" @@ -136,109 +137,104 @@ fi scriptuser=$(whoami) .log 7 "Update script running as: $scriptuser" if [ -e $ombiservicefile ]; then - .log 6 "Ombi service file for systemd found...parsing..." - parseresults="Parsing complete: " - ombiservice=$(<$ombiservicefile) - installdir=$(grep -Po '(?<=WorkingDirectory=)(\S|(?<=\\)\s)+' <<< "$ombiservice") - if [ -n "${installdir}" ]; then - parseresults+="InstallDir: $installdir, " - fi - user=$(grep -Po '(?<=User=)(\w+)' <<< "$ombiservice") - if [ -n "${user}" ]; then - parseresults+="User: $user, " - fi - group=$(grep -Po '(?<=Group=)(\w+)' <<< "$ombiservice") - if [ -n "${group}" ]; then - parseresults+="Group: $group, " - fi - url=$(grep -Po '(?<=\-\-host )(http://.+)$' <<< "$ombiservice") - ip=$(grep -Po '(?<=http://)((\d{1,3}\.){3}\d{1,3})(?=:)' <<< "$url") - if [ -n "${ip}" ]; then - parseresults+="IP: $ip, " - fi - port=$(grep -Po '(?<=:)(\d+)$' <<< "$url") - if [ -n "${port}" ]; then - parseresults+="Port: $port " - fi - parseresults="${parseresults// / }" - parseresults="${parseresults/%, /}" - .log 6 "$parseresults" + .log 6 "Ombi service file for systemd found...parsing..." + parseresults="Parsing complete: " + ombiservice=$(<$ombiservicefile) + installdir=$(grep -Po '(?<=WorkingDirectory=)(\S|(?<=\\)\s)+' <<<"$ombiservice") + if [ -n "${installdir}" ]; then + parseresults+="InstallDir: $installdir, " + fi + user=$(grep -Po '(?<=User=)(\w+)' <<<"$ombiservice") + if [ -n "${user}" ]; then + parseresults+="User: $user, " + fi + group=$(grep -Po '(?<=Group=)(\w+)' <<<"$ombiservice") + if [ -n "${group}" ]; then + parseresults+="Group: $group, " + fi + url=$(grep -Po '(?<=\-\-host )(http://.+)$' <<<"$ombiservice") + ip=$(grep -Po '(?<=http://)((\d{1,3}\.){3}\d{1,3})(?=:)' <<<"$url") + if [ -n "${ip}" ]; then + parseresults+="IP: $ip, " + fi + port=$(grep -Po '(?<=:)(\d+)$' <<<"$url") + if [ -n "${port}" ]; then + parseresults+="Port: $port " + fi + parseresults="${parseresults// / }" + parseresults="${parseresults/%, /}" + .log 6 "$parseresults" fi if [ -z "${installdir}" ]; then - .log 5 "InstallDir not parsed...setting to default: $defaultinstalldir" - installdir="$defaultinstalldir" + .log 5 "InstallDir not parsed...setting to default: $defaultinstalldir" + installdir="$defaultinstalldir" fi if [ -z "${user}" ]; then - .log 5 "User not parsed...setting to default: $defaultuser" - user="$defaultuser" + .log 5 "User not parsed...setting to default: $defaultuser" + user="$defaultuser" fi if [ -z "${group}" ]; then - .log 5 "Group not parsed...setting to default: $defaultgroup" - group="$defaultgroup" + .log 5 "Group not parsed...setting to default: $defaultgroup" + group="$defaultgroup" fi if [ -z "${ip}" ]; then - .log 5 "IP not parsed or set as \"*\"...setting to default: $defaultip" - ip="$defaultip" + .log 5 "IP not parsed or set as \"*\"...setting to default: $defaultip" + ip="$defaultip" fi if [ -z "${port}" ]; then - .log 5 "Port not parsed...setting to default: $defaultport" - port="$defaultport" + .log 5 "Port not parsed...setting to default: $defaultport" + port="$defaultport" fi .log 6 "Downloading Ombi update..." if [ "$archshort" = 'arm' ]; then - filename='linux-arm64.tar.gz' - else - filename='linux-x64.tar.gz' + filename='linux-arm64.tar.gz' +else + filename='linux-x64.tar.gz' fi -declare -i i=1 -declare -i j=5 -while [ $i -le $j ] -do - .log 6 "Checking for latest version" - if [ -z "$baseurl" ]; then - json=$(curl -sL http://$ip:$port/$baseurl/api/v1/Update) - else - json=$(curl -sL http://$ip:$port/api/v1/Update) - fi - .log 8 "json: $json" - latestversion=$(grep -Po '(?<="updateVersionString":")([^"]+)' <<< "$json") - .log 7 "latestversion: $latestversion" - if [ -n "$force" ]; then - latestversion=$force - .log 7 "forcing version: $latestversion" - fi - #json=$(curl -sL https://github.com/Ombi-app/Ombi.Releases/releases/tag/$latestversion) - #.log 8 "json: $json" - #jobId=$(grep -Po '(?<="jobId":")([^"]+)' <<< "$json") - #.log 7 "jobId: $jobId" - #version=$(grep -Po '(?<="version":")([^"]+)' <<< "$json") - #.log 7 "version: $version" - #if [ $latestversion != $version ]; then - # .log 2 "Build version does not match expected version" - # exit 1 - #fi - #.log 6 "Latest version: $version...determining expected file size..." - #size=$(curl -sL https://ci.appveyor.com/api/buildjobs/$jobId/artifacts | grep -Po '(?<="'$filename'","type":"File","size":)(\d+)') - #.log 7 "size: $size" - #if [ -e $size ]; then - # if [ $i -lt $j ]; then - # .log 3 "Unable to determine update file size...[attempt $i of $j]" - # else - # .log 2 "Unable to determine update file size...[attempt $i of $j]...Bailing!" - # exit 2 - # fi - # i+=1 - # continue - #elif [[ $size =~ ^-?[0-9]+$ ]]; then - # .log 6 "Expected file size: $size...downloading..." - # break - #else - # .log 1 "Invalid file size value...bailing!" - # exit 99 - #fi -done +.log 6 "Checking for latest version" +if [ -z "$baseurl" ]; then + json=$(curl -sL http://$ip:$port/$baseurl/api/v1/Update) +else + json=$(curl -sL http://$ip:$port/api/v1/Update) +fi +.log 8 "json: $json" +latestversion=$(grep -Po '(?<="updateVersionString":")([^"]+)' <<<"$json") +.log 7 "latestversion: $latestversion" +if [ -n "$force" ]; then + latestversion=$force + .log 7 "forcing version: $latestversion" +fi +#json=$(curl -sL https://github.com/Ombi-app/Ombi.Releases/releases/tag/$latestversion) +#.log 8 "json: $json" +#jobId=$(grep -Po '(?<="jobId":")([^"]+)' <<< "$json") +#.log 7 "jobId: $jobId" +#version=$(grep -Po '(?<="version":")([^"]+)' <<< "$json") +#.log 7 "version: $version" +#if [ $latestversion != $version ]; then +# .log 2 "Build version does not match expected version" +# exit 1 +#fi +#.log 6 "Latest version: $version...determining expected file size..." +#size=$(curl -sL https://ci.appveyor.com/api/buildjobs/$jobId/artifacts | grep -Po '(?<="'$filename'","type":"File","size":)(\d+)') +#.log 7 "size: $size" +#if [ -e $size ]; then +# if [ $i -lt $j ]; then +# .log 3 "Unable to determine update file size...[attempt $i of $j]" +# else +# .log 2 "Unable to determine update file size...[attempt $i of $j]...Bailing!" +# exit 2 +# fi +# i+=1 +# continue +#elif [[ $size =~ ^-?[0-9]+$ ]]; then +# .log 6 "Expected file size: $size...downloading..." +# break +#else +# .log 1 "Invalid file size value...bailing!" +# exit 99 +#fi tempdir=$(mktemp -d) file="$tempdir/ombi_$version.tar.gz" wget --quiet --show-progress -O $file "https://github.com/Ombi-app/Ombi/releases/download/$latestversion/$filename" @@ -250,38 +246,37 @@ wget --quiet --show-progress -O $file "https://github.com/Ombi-app/Ombi/releases .log 6 "Checking Ombi service status..." declare -i running=0 -if [ "`systemctl is-active $ombiservicename`" == "active" ]; then - running=1 - .log 6 "Ombi is active...attempting to stop..." - declare -i i=1 - declare -i j=5 - while [ $i -le $j ] - do - if [ $scriptuser = "root" ]; then - systemctl stop $ombiservicename.service > /dev/null 2>&1 - else - sudo systemctl stop $ombiservicename.service > /dev/null 2>&1 - fi - if [ $? -ne 0 ] || [ "`systemctl is-active $ombiservicename`" == "active" ] ; then - if [ $i -lt $j ]; then - .log 3 "Failed to stop Ombi...[attempt $i of $j]" - sleep 1 - else - .log 2 "Failed to stop Ombi...[attempt $i of $j]...Bailing!" - exit 2 - fi - i+=1 - continue - elif [ "`systemctl is-active $ombiservicename`" == "inactive" ]; then - .log 6 "Ombi stopped...installing update..." - break - else - .log 1 "Unknown error...bailing!" - exit 99 - fi - done +if [ "$(systemctl is-active $ombiservicename)" == "active" ]; then + running=1 + .log 6 "Ombi is active...attempting to stop..." + declare -i i=1 + declare -i j=5 + while [ $i -le $j ]; do + if [ $scriptuser = "root" ]; then + systemctl stop $ombiservicename.service >/dev/null 2>&1 + else + sudo systemctl stop $ombiservicename.service >/dev/null 2>&1 + fi + if [ $? -ne 0 ] || [ "$(systemctl is-active $ombiservicename)" == "active" ]; then + if [ $i -lt $j ]; then + .log 3 "Failed to stop Ombi...[attempt $i of $j]" + sleep 1 + else + .log 2 "Failed to stop Ombi...[attempt $i of $j]...Bailing!" + exit 2 + fi + i+=1 + continue + elif [ "$(systemctl is-active $ombiservicename)" == "inactive" ]; then + .log 6 "Ombi stopped...installing update..." + break + else + .log 1 "Unknown error...bailing!" + exit 99 + fi + done else - .log 6 "Ombi is not active...installing update..." + .log 6 "Ombi is not active...installing update..." fi declare -i timestamp=$(date +%s) @@ -293,56 +288,54 @@ unzip-strip $file $installdir chown -R $user:$group $installdir if [ $running -eq 1 ]; then - .log 6 "Ownership set...starting Ombi..." - declare -i i=1 - declare -i j=5 - while [ $i -le $j ] - do - if [ $scriptuser = "root" ]; then - systemctl start $ombiservicename.service > /dev/null 2>&1 + .log 6 "Ownership set...starting Ombi..." + declare -i i=1 + declare -i j=5 + while [ $i -le $j ]; do + if [ $scriptuser = "root" ]; then + systemctl start $ombiservicename.service >/dev/null 2>&1 + else + sudo systemctl start $ombiservicename.service >/dev/null 2>&1 + fi + if [ $? -ne 0 ] || [ "$(systemctl is-active $ombiservicename)" != "active" ]; then + if [ $i -lt $j ]; then + .log 3 "Failed to start Ombi...[attempt $i of $j]" + sleep 1 + else + .log 2 "Failed to start Ombi...[attempt $i of $j]...Bailing!" + exit 3 + fi + i+=1 + continue + elif [ "$(systemctl is-active $ombiservicename)" == "active" ]; then + .log 6 "Ombi started...waiting for confirmation..." + declare -i k=1 + declare -i l=5 + while [ $k -le $l ]; do + sleep 5 + curl -sIL $ip:$port >/dev/null 2>&1 + if [ $? -ne 0 ]; then + if [ $k -lt $l ]; then + .log 4 "Ombi startup not confirmed...waiting 5 seconds...[attempt $k of $l]" + else + .log 2 "Ombi startup not confirmed...[attempt $k of $l]...bailing!" + exit 4 + fi + k+=1 + continue else - sudo systemctl start $ombiservicename.service > /dev/null 2>&1 + .log 6 "Ombi startup confirmed...cleaning up..." + break fi - if [ $? -ne 0 ] || [ "`systemctl is-active $ombiservicename`" != "active" ] ; then - if [ $i -lt $j ]; then - .log 3 "Failed to start Ombi...[attempt $i of $j]" - sleep 1 - else - .log 2 "Failed to start Ombi...[attempt $i of $j]...Bailing!" - exit 3 - fi - i+=1 - continue - elif [ "`systemctl is-active $ombiservicename`" == "active" ]; then - .log 6 "Ombi started...waiting for confirmation..." - declare -i k=1 - declare -i l=5 - while [ $k -le $l ] - do - sleep 5 - curl -sIL $ip:$port > /dev/null 2>&1 - if [ $? -ne 0 ]; then - if [ $k -lt $l ]; then - .log 4 "Ombi startup not confirmed...waiting 5 seconds...[attempt $k of $l]" - else - .log 2 "Ombi startup not confirmed...[attempt $k of $l]...bailing!" - exit 4 - fi - k+=1 - continue - else - .log 6 "Ombi startup confirmed...cleaning up..." - break - fi - done - break - else - .log 1 "Unknown error...bailing!" - exit 99 - fi - done + done + break + else + .log 1 "Unknown error...bailing!" + exit 99 + fi + done else - .log 6 "Ownership set...not starting Ombi" + .log 6 "Ownership set...not starting Ombi" fi .log 6 "Cleaning up..." @@ -350,19 +343,19 @@ rm -rf "${tempdir:?}"/* "$tempdir" declare -i elapsedtime=$SECONDS declare -i minutes=0 declare -i seconds=0 -if [ $elapsedtime -ge 60 ]; then - minutes=$(($elapsedtime / 60)) +if [ $elapsedtime -ge 60 ]; then + minutes=$(($elapsedtime / 60)) fi seconds=$(($elapsedtime % 60)) if [ $minutes -ge 2 ]; then - duration="$minutes minutes" + duration="$minutes minutes" elif [ $minutes -eq 1 ]; then - duration="$minutes minute" + duration="$minutes minute" fi if [ $seconds -ge 2 ]; then - duration+=" $seconds seconds" + duration+=" $seconds seconds" elif [ $seconds -eq 1 ]; then - duration+=" $seconds second" + duration+=" $seconds second" fi durationmsg="Update complete...elapsed time $duration..." durationmsg="${durationmsg// / }"