feat(updater): remove loop

This commit is contained in:
agaucher 2021-04-13 13:19:35 +02:00
parent 9846ce0fec
commit 51a0510143

View file

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