style(helpers): reformat update script and bump version
This commit is contained in:
parent
4d5f3fa809
commit
03e0631964
@ -1,83 +1,87 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
### update script for ab-nginx container and utility scripts
|
#
|
||||||
# version 2.0.0
|
# update script for ab-nginx container and utility scripts
|
||||||
# script by Asif Bacchus
|
# version 2.1.0
|
||||||
###
|
# script by Asif Bacchus
|
||||||
|
#
|
||||||
|
|
||||||
### functions
|
#
|
||||||
|
# functions
|
||||||
errMsg() {
|
errMsg() {
|
||||||
printf "\n%s%s%s\n\n" "$err" "$1" "$norm"
|
printf "\n%s%s%s\n\n" "$err" "$1" "$norm"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
errNotify() {
|
errNotify() {
|
||||||
printf "%s[ERROR]%s\n" "$err" "$norm"
|
printf "%s[ERROR]%s\n" "$err" "$norm"
|
||||||
}
|
}
|
||||||
|
|
||||||
okMsg() {
|
okMsg() {
|
||||||
printf "%s%s%s\n\n" "$ok" "$1" "$norm"
|
printf "%s%s%s\n\n" "$ok" "$1" "$norm"
|
||||||
}
|
}
|
||||||
|
|
||||||
okNotify() {
|
okNotify() {
|
||||||
printf "%s[OK]%s\n" "$ok" "$norm"
|
printf "%s[OK]%s\n" "$ok" "$norm"
|
||||||
}
|
}
|
||||||
|
|
||||||
scriptHelp() {
|
scriptHelp() {
|
||||||
textNewline
|
textNewline
|
||||||
textblock "Update ${containerName} container and helper script files"
|
textBlock "Update ${containerName} container and helper script files"
|
||||||
textblock "${bold}Usage: ${localScriptName} [parameters]${norm}"
|
textBlock "${bold}Usage: ${localScriptName} [parameters]${norm}"
|
||||||
textNewline
|
textNewline
|
||||||
textblock "If run with no parameters, the script will update both the container and the helper script files, including this update script."
|
textBlock "If run with no parameters, the script will update both the container and the helper script files, including this update script."
|
||||||
textblockHeader " parameters "
|
textBlockHeader " parameters "
|
||||||
textblockParam "-h|-?|--help" "Display this help screen."
|
textBlockParam "-h|-?|--help" "Display this help screen."
|
||||||
textblockParam "-c|--container|--container-only" "Update the docker container only."
|
textBlockParam "-c|--container|--container-only" "Update the docker container only."
|
||||||
textblockParam "-s|--scripts|--scripts-only" "Update the helper scripts (including this update script) only."
|
textBlockParam "-s|--scripts|--scripts-only" "Update the helper scripts (including this update script) only."
|
||||||
textNewline
|
textNewline
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
textblock() {
|
textBlock() {
|
||||||
printf "%s\n" "$1" | fold -w "$width" -s
|
printf "%s\n" "$1" | fold -w "$width" -s
|
||||||
}
|
}
|
||||||
|
|
||||||
textblockHeader() {
|
textBlockHeader() {
|
||||||
printf "\n%s***%s***%s\n" "$header" "$1" "$norm"
|
printf "\n%s***%s***%s\n" "$header" "$1" "$norm"
|
||||||
}
|
}
|
||||||
|
|
||||||
textblockParam() {
|
textBlockParam() {
|
||||||
printf "%s%-35s%s%s\n" "$info" "$1" "$2" "$norm"
|
printf "%s%-35s%s%s\n" "$info" "$1" "$2" "$norm"
|
||||||
}
|
}
|
||||||
|
|
||||||
textNewline() {
|
textNewline() {
|
||||||
printf "\n"
|
printf "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
### text formatting presets
|
#
|
||||||
|
# text formatting presets
|
||||||
if command -v tput >/dev/null 2>&1; then
|
if command -v tput >/dev/null 2>&1; then
|
||||||
bold=$(tput bold)
|
bold=$(tput bold)
|
||||||
err=$(tput bold)$(tput setaf 1)
|
err=$(tput bold)$(tput setaf 1)
|
||||||
info=$(tput bold)$(tput setaf 6)
|
info=$(tput bold)$(tput setaf 6)
|
||||||
header=$(tput bold)$(tput setaf 5)
|
header=$(tput bold)$(tput setaf 5)
|
||||||
norm=$(tput sgr0)
|
norm=$(tput sgr0)
|
||||||
ok=$(tput sgr0)$(tput setaf 2)
|
ok=$(tput sgr0)$(tput setaf 2)
|
||||||
warn=$(tput bold)$(tput setaf 3)
|
warn=$(tput bold)$(tput setaf 3)
|
||||||
width=$(tput cols)
|
width=$(tput cols)
|
||||||
else
|
else
|
||||||
bold=''
|
bold=''
|
||||||
err=''
|
err=''
|
||||||
info=''
|
info=''
|
||||||
header=''
|
header=''
|
||||||
norm=''
|
norm=''
|
||||||
ok=''
|
ok=''
|
||||||
warn=''
|
warn=''
|
||||||
width=80
|
width=80
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### pre-requisites
|
#
|
||||||
|
# pre-requisites
|
||||||
# check if wget is installed
|
# check if wget is installed
|
||||||
if ! command -v wget >/dev/null 2>&1; then
|
if ! command -v wget >/dev/null 2>&1; then
|
||||||
errMsg "Sorry, this script requires that 'wget' is installed in order to download updates. Exiting."
|
errMsg "Sorry, this script requires that 'wget' is installed in order to download updates. Exiting."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# zero counters
|
# zero counters
|
||||||
@ -102,149 +106,153 @@ doScriptUpdate=1
|
|||||||
localScriptName="$(basename "$0")"
|
localScriptName="$(basename "$0")"
|
||||||
repoScriptName='update.sh'
|
repoScriptName='update.sh'
|
||||||
|
|
||||||
### process startup parameters
|
#
|
||||||
|
# process startup parameters
|
||||||
while [ $# -gt 0 ]; do
|
while [ $# -gt 0 ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
-h | -\? | --help)
|
-h | -\? | --help)
|
||||||
# display inline help
|
# display inline help
|
||||||
scriptHelp
|
scriptHelp
|
||||||
;;
|
;;
|
||||||
-s | --scripts | --scripts-only)
|
-s | --scripts | --scripts-only)
|
||||||
# update scripts only, skip docker container update
|
# update scripts only, skip docker container update
|
||||||
doDockerUpdate=0
|
doDockerUpdate=0
|
||||||
;;
|
;;
|
||||||
-c | --container | --container-only)
|
-c | --container | --container-only)
|
||||||
# update docker container only, skip script update
|
# update docker container only, skip script update
|
||||||
doScriptUpdate=0
|
doScriptUpdate=0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
printf "%s\nUnknown option: %s\n" "$err" "$1"
|
printf "%s\nUnknown option: %s\n" "$err" "$1"
|
||||||
printf "%sUse '--help' for valid options%s\n\n" "$info" "$norm"
|
printf "%sUse '--help' for valid options%s\n\n" "$info" "$norm"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
### update container
|
#
|
||||||
|
# update container
|
||||||
if [ "$doDockerUpdate" -eq 1 ]; then
|
if [ "$doDockerUpdate" -eq 1 ]; then
|
||||||
# check if docker is installed
|
# check if docker is installed
|
||||||
if ! command -v docker >/dev/null 2>&1; then
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
errMsg "Sorry, it appears that docker is not installed on this machine! Exiting."
|
errMsg "Sorry, it appears that docker is not installed on this machine! Exiting."
|
||||||
fi
|
|
||||||
|
|
||||||
# is user root or in the docker group?
|
|
||||||
if [ ! "$(id -u)" -eq 0 ]; then
|
|
||||||
if ! id -Gn | grep docker >/dev/null; then
|
|
||||||
errMsg "You must either be root or in the 'docker' group to pull container updates."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "%s\n*** Updating %s container ***\n\n%s" "$info" "$containerName" "$norm"
|
|
||||||
if ! docker pull "$containerUpdatePath"; then
|
|
||||||
errMsg "There was an error updating the container. Try again later."
|
|
||||||
else
|
|
||||||
okMsg "Container updated!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
### update scripts
|
|
||||||
if [ "$doScriptUpdate" -eq 1 ]; then
|
|
||||||
printf "%s*** Updating %s service scripts ***%s\n" "$info" "$containerName" "$norm"
|
|
||||||
|
|
||||||
## download latest checksums
|
|
||||||
printf "Getting latest checksums... "
|
|
||||||
if ! wget --quiet --tries=3 --timeout=10 -N "${server}${checksumFilename}"; then
|
|
||||||
errNotify
|
|
||||||
errMsg "Unable to download checksums. Try again later."
|
|
||||||
else
|
|
||||||
okNotify
|
|
||||||
fi
|
|
||||||
|
|
||||||
## check for updates to this script
|
|
||||||
printf "Checking for updates to this script... "
|
|
||||||
repoScriptChecksum=$(grep "$repoScriptName" "$checksumFilename" | grep -o '^\S*')
|
|
||||||
localScriptChecksum=$(sha256sum "$localScriptName" | grep -o '^\S*')
|
|
||||||
if [ "$localScriptChecksum" = "$repoScriptChecksum" ]; then
|
|
||||||
printf "[NONE]\n"
|
|
||||||
else
|
|
||||||
printf "[AVAILABLE]\n"
|
|
||||||
printf "Getting updated script... "
|
|
||||||
# download updated script
|
|
||||||
if ! wget --quiet --tries=3 --timeout=10 -O "update.sh.tmp" "${server}${repoScriptName}"; then
|
|
||||||
errNotify
|
|
||||||
# delete failed download as necessary
|
|
||||||
rm -f ./update.sh.tmp 2>/dev/null
|
|
||||||
errMsg "Unable to download script update. Try again later."
|
|
||||||
else
|
|
||||||
# verify download
|
|
||||||
dlScriptChecksum=$(sha256sum "update.sh.tmp" | grep -o '^\S*')
|
|
||||||
if ! [ "$dlScriptChecksum" = "$repoScriptChecksum" ]; then
|
|
||||||
printf "[ERROR]\n"
|
|
||||||
# delete corrupt download as necessary
|
|
||||||
rm -f ./update.sh.tmp 2>/dev/null
|
|
||||||
errMsg "Checksum mismatch! Try again later."
|
|
||||||
else
|
|
||||||
okNotify
|
|
||||||
printf "\n%s*** This script has been updated. Please re-run it to load the updated version of this file. ***%s\n\n" "$warn" "$norm"
|
|
||||||
# overwrite this script with updated script
|
|
||||||
mv -f ./update.sh.tmp "$localScriptName"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
## update files
|
|
||||||
while IFS=' ' read -r field1 field2; do
|
|
||||||
printf "\nChecking '%s' for updates... " "$field2"
|
|
||||||
updateFilename="$field2"
|
|
||||||
repoFileChecksum="$field1"
|
|
||||||
if [ -f "$updateFilename" ]; then
|
|
||||||
localFileChecksum=$(sha256sum "$updateFilename" | grep -o '^\S*')
|
|
||||||
else
|
|
||||||
localFileChecksum=0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# update file if necessary
|
# is user root or in the docker group?
|
||||||
if ! [ "$localFileChecksum" = "$repoFileChecksum" ]; then
|
if [ ! "$(id -u)" -eq 0 ]; then
|
||||||
printf "[AVAILABLE]\n"
|
if ! id -Gn | grep docker >/dev/null; then
|
||||||
updatesAvailable=$((updatesAvailable + 1))
|
errMsg "You must either be root or in the 'docker' group to pull container updates."
|
||||||
# download update
|
|
||||||
printf "Downloading updated '%s'... " "$updateFilename"
|
|
||||||
if ! wget --quiet --tries=3 --timeout=10 -O "$updateFilename.tmp" "${server}${updateFilename}"; then
|
|
||||||
errNotify
|
|
||||||
downloadFailed=$((downloadFailed + 1))
|
|
||||||
# delete failed download file as necessary
|
|
||||||
rm -f "$updateFilename.tmp" 2>&1
|
|
||||||
else
|
|
||||||
okNotify
|
|
||||||
downloadSuccess=$((downloadSuccess + 1))
|
|
||||||
# verify download
|
|
||||||
printf "Verifying '%s'... " "$updateFilename"
|
|
||||||
localFileChecksum=$(sha256sum "$updateFilename.tmp" | grep -o '^\S*')
|
|
||||||
if ! [ "$localFileChecksum" = "$repoFileChecksum" ]; then
|
|
||||||
errNotify
|
|
||||||
updateFailed=$((updateFailed + 1))
|
|
||||||
# delete corrupted download file as necessary
|
|
||||||
rm -f "$updateFilename.tmp" 2>&1
|
|
||||||
else
|
|
||||||
okNotify
|
|
||||||
updateSuccess=$((updateSuccess + 1))
|
|
||||||
# overwrite old version of file
|
|
||||||
mv -f "$updateFilename.tmp" "$updateFilename"
|
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
else
|
|
||||||
printf "[NONE]\n"
|
|
||||||
fi
|
fi
|
||||||
done <"$checksumFilename"
|
|
||||||
|
printf "%s\n*** Updating %s container ***\n\n%s" "$info" "$containerName" "$norm"
|
||||||
|
if ! docker pull "$containerUpdatePath"; then
|
||||||
|
errMsg "There was an error updating the container. Try again later."
|
||||||
|
else
|
||||||
|
okMsg "Container updated!"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
### display results
|
#
|
||||||
|
# update scripts
|
||||||
if [ "$doScriptUpdate" -eq 1 ]; then
|
if [ "$doScriptUpdate" -eq 1 ]; then
|
||||||
printf "\n%s*** Results ***%s\n" "$info" "$norm"
|
printf "%s*** Updating %s service scripts ***%s\n" "$info" "$containerName" "$norm"
|
||||||
printf "\tUpdates: %s available\n" "$updatesAvailable"
|
|
||||||
printf "\tDownloads: %s%s successful%s, %s%s failed%s\n" "$ok" "$downloadSuccess" "$norm" "$err" "$downloadFailed" "$norm"
|
## download latest checksums
|
||||||
printf "\tUpdates: %s%s applied%s, %s%s failed%s\n" "$ok" "$updateSuccess" "$norm" "$err" "$updateFailed" "$norm"
|
printf "Getting latest checksums... "
|
||||||
|
if ! wget --quiet --tries=3 --timeout=10 -N "${server}${checksumFilename}"; then
|
||||||
|
errNotify
|
||||||
|
errMsg "Unable to download checksums. Try again later."
|
||||||
|
else
|
||||||
|
okNotify
|
||||||
|
fi
|
||||||
|
|
||||||
|
## check for updates to this script
|
||||||
|
printf "Checking for updates to this script... "
|
||||||
|
repoScriptChecksum=$(grep "$repoScriptName" "$checksumFilename" | grep -o '^\S*')
|
||||||
|
localScriptChecksum=$(sha256sum "$localScriptName" | grep -o '^\S*')
|
||||||
|
if [ "$localScriptChecksum" = "$repoScriptChecksum" ]; then
|
||||||
|
printf "[NONE]\n"
|
||||||
|
else
|
||||||
|
printf "[AVAILABLE]\n"
|
||||||
|
printf "Getting updated script... "
|
||||||
|
# download updated script
|
||||||
|
if ! wget --quiet --tries=3 --timeout=10 -O "update.sh.tmp" "${server}${repoScriptName}"; then
|
||||||
|
errNotify
|
||||||
|
# delete failed download as necessary
|
||||||
|
rm -f ./update.sh.tmp 2>/dev/null
|
||||||
|
errMsg "Unable to download script update. Try again later."
|
||||||
|
else
|
||||||
|
# verify download
|
||||||
|
dlScriptChecksum=$(sha256sum "update.sh.tmp" | grep -o '^\S*')
|
||||||
|
if ! [ "$dlScriptChecksum" = "$repoScriptChecksum" ]; then
|
||||||
|
printf "[ERROR]\n"
|
||||||
|
# delete corrupt download as necessary
|
||||||
|
rm -f ./update.sh.tmp 2>/dev/null
|
||||||
|
errMsg "Checksum mismatch! Try again later."
|
||||||
|
else
|
||||||
|
okNotify
|
||||||
|
printf "\n%s*** This script has been updated. Please re-run it to load the updated version of this file. ***%s\n\n" "$warn" "$norm"
|
||||||
|
# overwrite this script with updated script
|
||||||
|
mv -f ./update.sh.tmp "$localScriptName"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## update files
|
||||||
|
while IFS=' ' read -r field1 field2; do
|
||||||
|
printf "\nChecking '%s' for updates... " "$field2"
|
||||||
|
updateFilename="$field2"
|
||||||
|
repoFileChecksum="$field1"
|
||||||
|
if [ -f "$updateFilename" ]; then
|
||||||
|
localFileChecksum=$(sha256sum "$updateFilename" | grep -o '^\S*')
|
||||||
|
else
|
||||||
|
localFileChecksum=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# update file if necessary
|
||||||
|
if ! [ "$localFileChecksum" = "$repoFileChecksum" ]; then
|
||||||
|
printf "[AVAILABLE]\n"
|
||||||
|
updatesAvailable=$((updatesAvailable + 1))
|
||||||
|
# download update
|
||||||
|
printf "Downloading updated '%s'... " "$updateFilename"
|
||||||
|
if ! wget --quiet --tries=3 --timeout=10 -O "$updateFilename.tmp" "${server}${updateFilename}"; then
|
||||||
|
errNotify
|
||||||
|
downloadFailed=$((downloadFailed + 1))
|
||||||
|
# delete failed download file as necessary
|
||||||
|
rm -f "$updateFilename.tmp" 2>&1
|
||||||
|
else
|
||||||
|
okNotify
|
||||||
|
downloadSuccess=$((downloadSuccess + 1))
|
||||||
|
# verify download
|
||||||
|
printf "Verifying '%s'... " "$updateFilename"
|
||||||
|
localFileChecksum=$(sha256sum "$updateFilename.tmp" | grep -o '^\S*')
|
||||||
|
if ! [ "$localFileChecksum" = "$repoFileChecksum" ]; then
|
||||||
|
errNotify
|
||||||
|
updateFailed=$((updateFailed + 1))
|
||||||
|
# delete corrupted download file as necessary
|
||||||
|
rm -f "$updateFilename.tmp" 2>&1
|
||||||
|
else
|
||||||
|
okNotify
|
||||||
|
updateSuccess=$((updateSuccess + 1))
|
||||||
|
# overwrite old version of file
|
||||||
|
mv -f "$updateFilename.tmp" "$updateFilename"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "[NONE]\n"
|
||||||
|
fi
|
||||||
|
done <"$checksumFilename"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# display results
|
||||||
|
if [ "$doScriptUpdate" -eq 1 ]; then
|
||||||
|
printf "\n%s*** Results ***%s\n" "$info" "$norm"
|
||||||
|
printf "\tUpdates: %s available\n" "$updatesAvailable"
|
||||||
|
printf "\tDownloads: %s%s successful%s, %s%s failed%s\n" "$ok" "$downloadSuccess" "$norm" "$err" "$downloadFailed" "$norm"
|
||||||
|
printf "\tUpdates: %s%s applied%s, %s%s failed%s\n" "$ok" "$updateSuccess" "$norm" "$err" "$updateFailed" "$norm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
Reference in New Issue
Block a user