mirror of
https://github.com/Unimatrix0/update_ombi.git
synced 2025-07-05 20:41:52 -07:00
Logging/log levels, fix build selection, sudo fix
Added logging to file. Added log levels. Added command line parameter (-v) to set cli log verbosity. Reworked update download section to account for if latest build is in progress or failed. Allowed for script to run as user with restricted sudo access to stop/start ombi service
This commit is contained in:
parent
3745d1f0ad
commit
0dbbd960e5
1 changed files with 127 additions and 50 deletions
177
update_ombi.sh
177
update_ombi.sh
|
@ -6,35 +6,43 @@ ombiservicename="ombi"
|
|||
|
||||
## Default variables ##
|
||||
## Change only if needed ##
|
||||
logfile="/var/log/ombiupdater.log"
|
||||
ombiservicefile="/etc/systemd/system/$ombiservicename.service"
|
||||
defaultinstalldir="/opt/Ombi"
|
||||
defaultuser="ombi"
|
||||
defaultgroup="nogroup"
|
||||
declare -i verbosity=-1
|
||||
|
||||
## Do not modify anything below this line ##
|
||||
## unless you know what you are doing ##
|
||||
|
||||
if [ -e $ombiservicefile ]; then
|
||||
echo "Ombi service file for systemd found...parsing..."
|
||||
ombiservice=$(<$ombiservicefile)
|
||||
installdir=$(grep -Po '(?<=WorkingDirectory=)(\S|(?<=\\)\s)+' <<< "$ombiservice")
|
||||
user=$(grep -Po '(?<=User=)(\w+)' <<< "$ombiservice")
|
||||
group=$(grep -Po '(?<=Group=)(\w+)' <<< "$ombiservice")
|
||||
echo "Parsing complete: InstallDir: $installdir, User: $user, Group: $group"
|
||||
fi
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--verbosity|-v=*)
|
||||
verbosity="${1#*=}"
|
||||
;;
|
||||
*)
|
||||
printf "***************************\n"
|
||||
printf "* Error: Invalid argument.*\n"
|
||||
printf "***************************\n"
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z ${installdir+x} ]; then
|
||||
echo "InstallDir not parsed...setting to default: $defaultinstalldir"
|
||||
installdir="$defaultinstalldir"
|
||||
fi
|
||||
if [ -z ${user+x} ]; then
|
||||
echo "User not parsed...setting to default: $defaultuser"
|
||||
user="$defaultuser"
|
||||
fi
|
||||
if [ -z ${group+x} ]; then
|
||||
echo "Group not parsed...setting to default: $defaultgroup"
|
||||
group="$defaultgroup"
|
||||
fi
|
||||
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 "[${LOG_LEVELS[$LEVEL]}]" "$@"
|
||||
fi
|
||||
fi
|
||||
if [ $verbosity -eq 8 ] || [ $LEVEL -ne 8 ]; then
|
||||
echo "[${LOG_LEVELS[$LEVEL]}]" "$@" >> $logfile
|
||||
fi
|
||||
}
|
||||
|
||||
unzip-strip() (
|
||||
local zip=$1
|
||||
|
@ -48,82 +56,151 @@ unzip-strip() (
|
|||
fi && rm -rf "$temp"/* "$temp"
|
||||
)
|
||||
|
||||
echo "Downloading Ombi update..."
|
||||
json=$(curl -sL https://ci.appveyor.com/api/projects/tidusjar/requestplex)
|
||||
jobId=$(grep -Po '(?<="jobId":")([^"]+)' <<< "$json")
|
||||
version=$(grep -Po '(?<="version":")([^"]+)' <<< "$json")
|
||||
file=ombi_$version.tar.gz
|
||||
size=$(curl -sL https://ci.appveyor.com/api/buildjobs/$jobId/artifacts | grep -Po '(?<="linux.tar.gz","type":"File","size":)(\d+)')
|
||||
wget --quiet -O $file https://ci.appveyor.com/api/buildjobs/$jobId/artifacts/linux.tar.gz
|
||||
echo "Version $version downloaded...checking file size..."
|
||||
if [ $(wc -c < $file) != $size ]; then
|
||||
echo "Downloaded file size does not match expected file size...bailing!"
|
||||
exit 1
|
||||
.log 6 "Verboity level: [${LOG_LEVELS[$verbosity]}]"
|
||||
scriptuser=$(whoami)
|
||||
.log 7 "Update script running as: $scriptuser"
|
||||
if [ -e $ombiservicefile ]; then
|
||||
.log 6 "Ombi service file for systemd found...parsing..."
|
||||
ombiservice=$(<$ombiservicefile)
|
||||
installdir=$(grep -Po '(?<=WorkingDirectory=)(\S|(?<=\\)\s)+' <<< "$ombiservice")
|
||||
user=$(grep -Po '(?<=User=)(\w+)' <<< "$ombiservice")
|
||||
group=$(grep -Po '(?<=Group=)(\w+)' <<< "$ombiservice")
|
||||
.log 6 "Parsing complete: InstallDir: $installdir, User: $user, Group: $group"
|
||||
fi
|
||||
echo "File size validated...checking Ombi service status..."
|
||||
|
||||
if [ -z ${installdir+x} ]; then
|
||||
.log 5 "InstallDir not parsed...setting to default: $defaultinstalldir"
|
||||
installdir="$defaultinstalldir"
|
||||
fi
|
||||
if [ -z ${user+x} ]; then
|
||||
.log 5 "User not parsed...setting to default: $defaultuser"
|
||||
user="$defaultuser"
|
||||
fi
|
||||
if [ -z ${group+x} ]; then
|
||||
.log 5 "Group not parsed...setting to default: $defaultgroup"
|
||||
group="$defaultgroup"
|
||||
fi
|
||||
|
||||
.log 6 "Downloading Ombi update..."
|
||||
declare -i i=1
|
||||
declare -i j=5
|
||||
while [ $i -le $j ]
|
||||
do
|
||||
.log 6 "Checking for latest version"
|
||||
json=$(curl -sL https://ombiservice.azurewebsites.net/api/update/DotNetCore)
|
||||
.log 8 "json: $json"
|
||||
latestversion=$(grep -Po '(?<="updateVersionString":")([^"]+)' <<< "$json")
|
||||
.log 7 "latestversion: $latestversion"
|
||||
json=$(curl -sL https://ci.appveyor.com/api/projects/tidusjar/requestplex/build/$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 '(?<="linux.tar.gz","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
|
||||
tempdir=$(mktemp -d)
|
||||
file="$tempdir/ombi_$version.tar.gz"
|
||||
wget --quiet -O $file "https://ci.appveyor.com/api/buildjobs/$jobId/artifacts/linux.tar.gz"
|
||||
.log 6 "Version $version downloaded...checking file size..."
|
||||
if [ $(wc -c < $file) != $size ]; then
|
||||
.log 3 "Downloaded file size does not match expected file size...bailing!"
|
||||
exit 2
|
||||
fi
|
||||
.log 6 "File size validated...checking Ombi service status..."
|
||||
|
||||
declare -i running=0
|
||||
if [ "`systemctl is-active $ombiservicename`" == "active" ]; then
|
||||
running=1
|
||||
echo "Ombi is active...attempting to stop..."
|
||||
.log 6 "Ombi is active...attempting to stop..."
|
||||
declare -i i=1
|
||||
j=5
|
||||
while [ $i -le $j ]
|
||||
do
|
||||
systemctl stop $ombiservicename.service > /dev/null 2>&1
|
||||
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
|
||||
echo "Failed to stop Ombi...[attempt $i of $j]"
|
||||
.log 3 "Failed to stop Ombi...[attempt $i of $j]"
|
||||
else
|
||||
echo "Failed to stop Ombi...[attempt $i of $j]...Bailing!"
|
||||
.log 2 "Failed to stop Ombi...[attempt $i of $j]...Bailing!"
|
||||
exit 2
|
||||
fi
|
||||
i+=1
|
||||
continue
|
||||
elif [ "`systemctl is-active $ombiservicename`" == "inactive" ]; then
|
||||
echo "Ombi stopped...installing update..."
|
||||
.log 6 "Ombi stopped...installing update..."
|
||||
break
|
||||
else
|
||||
echo "Unknown error...bailing!"
|
||||
.log 1 "Unknown error...bailing!"
|
||||
exit 99
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "Ombi is not active...installing update..."
|
||||
.log 6 "Ombi is not active...installing update..."
|
||||
fi
|
||||
|
||||
unzip-strip $file $installdir
|
||||
echo "Update installed...setting ownership..."
|
||||
.log 6 "Update installed...setting ownership..."
|
||||
chown -R $user:$group $installdir
|
||||
|
||||
if [ $running -eq 1 ]; then
|
||||
echo "Ownership set...starting Ombi..."
|
||||
.log 6 "Ownership set...starting Ombi..."
|
||||
declare -i i=1
|
||||
j=5
|
||||
while [ $i -le $j ]
|
||||
do
|
||||
systemctl start $ombiservicename.service > /dev/null 2>&1
|
||||
if [ $scriptuser = "root" ]; then
|
||||
systemctl 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
|
||||
echo "Failed to start Ombi...[attempt $i of $j]"
|
||||
.log 3 "Failed to start Ombi...[attempt $i of $j]"
|
||||
else
|
||||
echo "Failed to start Ombi...[attempt $i of $j]...Bailing!"
|
||||
.log 2 "Failed to start Ombi...[attempt $i of $j]...Bailing!"
|
||||
exit 3
|
||||
fi
|
||||
i+=1
|
||||
continue
|
||||
elif [ "`systemctl is-active $ombiservicename`" == "active" ]; then
|
||||
echo "Ombi started...cleaning up..."
|
||||
.log 6 "Ombi started...cleaning up..."
|
||||
break
|
||||
else
|
||||
echo "Unknown error...bailing!"
|
||||
.log 1 "Unknown error...bailing!"
|
||||
exit 99
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "Ownership set...not starting Ombi"
|
||||
.log 6 "Ownership set...not starting Ombi"
|
||||
fi
|
||||
|
||||
echo "Cleaning up..."
|
||||
rm -f $file
|
||||
echo "Update complete"
|
||||
.log 6 "Cleaning up..."
|
||||
rm -rf "$tempdir"/* "$tempdir"
|
||||
.log 6 "Update complete"
|
Loading…
Add table
Add a link
Reference in a new issue