Compare commits

..

11 Commits

Author SHA1 Message Date
Asif Bacchus
db4be32b54 style(HELPERSCRIPTS): reformat code 2021-01-15 06:11:24 -07:00
Asif Bacchus
9d5c7960c9 fix(HELPERSCRIPTS): do not display file results in container-only mode 2021-01-15 06:10:04 -07:00
Asif Bacchus
f53e673c3f feature(HELPERSCRIPTS): add inline help 2021-01-15 06:06:07 -07:00
Asif Bacchus
16df6570bc feature(HELPERSCRIPTS): tabular parameter help output 2021-01-15 06:05:01 -07:00
Asif Bacchus
38d6967f68 feature(HELPERSCRIPTS): add newline function, bold formatting preset 2021-01-15 05:50:01 -07:00
Asif Bacchus
0a99c75a91 feature(HELPERSCRIPTS): add text formatting functions 2021-01-15 05:47:00 -07:00
Asif Bacchus
cb794e755f refactor(HELPERSCRIPTS): remove restart option
- cannot account for all possible custom configurations
- restart should be manual
2021-01-15 05:40:42 -07:00
Asif Bacchus
d29bff3324 style(HELPERSCRIPTS): change results banner format to match others 2021-01-15 05:19:52 -07:00
Asif Bacchus
cbaadc40c4 feature(HELPERSCRIPTS): add conditionality to script update 2021-01-15 05:18:55 -07:00
Asif Bacchus
7e96583455 feature(HELPERSCRIPTS): conditionally update docker container
- move previous prerequisite checks related to docker
2021-01-15 05:15:38 -07:00
Asif Bacchus
19a8f3a082 feature(HELPERSCRIPTS): add parameter processing skeleton 2021-01-15 05:08:03 -07:00

View File

@ -1,7 +1,7 @@
#!/bin/sh
### update script for ab-nginx container and utility scripts
# version 1.0.0
# version 2.0.0
# script by Asif Bacchus
###
@ -23,40 +23,63 @@ okNotify() {
printf "%s[OK]%s\n" "$ok" "$norm"
}
scriptHelp() {
textNewline
textblock "Update ${containerName} container and helper script files"
textblock "${bold}Usage: ${localScriptName} [parameters]${norm}"
textNewline
textblock "If run with no parameters, the script will update both the container and the helper script files, including this update script."
textblockHeader " parameters "
textblockParam "-h|-?|--help" "Display this help screen."
textblockParam "-c|--container|--container-only" "Update the docker container only."
textblockParam "-s|--scripts|--scripts-only" "Update the helper scripts (including this update script) only."
textNewline
exit 0
}
textblock() {
printf "%s\n" "$1" | fold -w "$width" -s
}
textblockHeader() {
printf "\n%s***%s***%s\n" "$header" "$1" "$norm"
}
textblockParam() {
printf "%s%-35s%s%s\n" "$info" "$1" "$2" "$norm"
}
textNewline() {
printf "\n"
}
### text formatting presets
if command -v tput >/dev/null 2>&1; then
bold=$(tput bold)
err=$(tput bold)$(tput setaf 1)
info=$(tput bold)$(tput setaf 6)
header=$(tput bold)$(tput setaf 5)
norm=$(tput sgr0)
ok=$(tput sgr0)$(tput setaf 2)
warn=$(tput bold)$(tput setaf 3)
width=$(tput cols)
else
bold=''
err=''
info=''
header=''
norm=''
ok=''
warn=''
width=80
fi
### pre-requisites
# check if wget is installed
if ! command -v wget >/dev/null 2>&1; then
errMsg "Sorry, this script requires that 'wget' is installed in order to download updates. Exiting."
fi
# check if docker is installed
if ! command -v docker >/dev/null 2>&1; then
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
# zero counters
updatesAvailable=0
downloadFailed=0
@ -71,22 +94,63 @@ containerUpdatePath="docker.asifbacchus.app/$dockerNamespace/$containerName:late
server="https://asifbacchus.app/updates/docker/$dockerNamespace/$containerName/"
checksumFilename='checksums.sha256'
# operation triggers
doDockerUpdate=1
doScriptUpdate=1
# files to update
localScriptName="$(basename "$0")"
repoScriptName='update.sh'
### update container
printf "%s\n*** Updating %s container and service scripts ***\n\n%s" "$info" "$containerName" "$norm"
### process startup parameters
while [ $# -gt 0 ]; do
case "$1" in
-h | -\? | --help)
# display inline help
scriptHelp
;;
-s | --scripts | --scripts-only)
# update scripts only, skip docker container update
doDockerUpdate=0
;;
-c | --container | --container-only)
# update docker container only, skip script update
doScriptUpdate=0
;;
*)
printf "%s\nUnknown option: %s\n" "$err" "$1"
printf "%sUse '--help' for valid options%s\n\n" "$info" "$norm"
exit 1
;;
esac
shift
done
printf "Updating container:\n"
### update container
if [ "$doDockerUpdate" -eq 1 ]; then
# check if docker is installed
if ! command -v docker >/dev/null 2>&1; then
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
printf "%sUpdating %s service scripts%s\n" "$info" "$containerName" "$norm"
if [ "$doScriptUpdate" -eq 1 ]; then
printf "%s*** Updating %s service scripts ***%s\n" "$info" "$containerName" "$norm"
## download latest checksums
printf "Getting latest checksums... "
@ -173,12 +237,14 @@ while IFS=' ' read -r field1 field2; do
printf "[NONE]\n"
fi
done <"$checksumFilename"
fi
### display results
printf "\n%sResults:%s\n" "$info" "$norm"
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
exit 0